Fix of cl_cmdline::syntax_match
[fw/sdcc] / sim / ucsim / cmd.src / command.cc
index 601ecdfc5ea2d014b940f3cf4db2cce4f0fff5e8..e58a225118a3a6ed9476154613b3ff84cd53b54e 100644 (file)
@@ -363,6 +363,7 @@ cl_cmdline::syntax_match(class cl_uc *uc, char *syntax)
   char *p= syntax;
   int iparam= 0;
   class cl_cmd_arg *parm= (class cl_cmd_arg *)(params->at(iparam));
+  bool match;
   while (*p &&
         parm)
     {
@@ -371,12 +372,14 @@ cl_cmdline::syntax_match(class cl_uc *uc, char *syntax)
        switch (*p)
          {
          case SY_ADDR:
-           if (!parm->as_address(uc))
-             return(DD_FALSE);
+           match= parm->as_address(uc);
+           if (!match)
+             return(match);
            //printf("ADDRESS match %lx\n",parm->value.address);
            break;
          case SY_MEMORY:
-           if (!parm->as_memory(uc))
+           match= parm->as_memory(uc);
+           if (!match)
              return(DD_FALSE);
            //printf("MEMORY match %s\n",parm->value.memory->class_name);
            break;
@@ -387,6 +390,7 @@ cl_cmdline::syntax_match(class cl_uc *uc, char *syntax)
          }
       switch (*p)
        {
+       case SY_ADDR: case SY_MEMORY: case SY_BIT: break;
        case SY_NUMBER:
          if (!parm->as_number())
            return(DD_FALSE);