Browse Source

* fixed parsing of register names with lowercase

peter 23 years ago
parent
commit
8a75d59544
1 changed files with 32 additions and 27 deletions
  1. 32 27
      compiler/pstatmnt.pas

+ 32 - 27
compiler/pstatmnt.pas

@@ -709,9 +709,10 @@ implementation
     function _asm_statement : tnode;
       var
         asmstat : tasmnode;
-        Marker : tai;
-        r,r2 : tregister;
-        found : boolean;
+        Marker  : tai;
+        r,r2    : tregister;
+        found   : boolean;
+        hs      : string;
       begin
          Inside_asm_statement:=true;
          case aktasmmode of
@@ -753,30 +754,31 @@ implementation
          { END is read }
          if try_to_consume(_LECKKLAMMER) then
            begin
-              if token<>_RECKKLAMMER then
-              repeat
-              { it's possible to specify the modified registers }
-              include(asmstat.flags,nf_object_preserved);
-              found:=false;
-              for r:=low(tregister) to high(tregister) do
-                if pattern=upper(std_reg2str[r]) then
-                  begin
-                    if r = SELF_POINTER_REG then
-                       begin
-                         exclude(asmstat.flags,nf_object_preserved);
-                       end;
-                     include(rg.usedinproc,r);
-                     include(rg.usedbyproc,r);
-                     found:=true;
-                     break;
-                  end;
-                 if not(found) then
-                    consume(_RECKKLAMMER);
-                 consume(_CSTRING);
-                 if not try_to_consume(_COMMA) then
+             if token<>_RECKKLAMMER then
+              begin
+                repeat
+                  { it's possible to specify the modified registers }
+                  include(asmstat.flags,nf_object_preserved);
+                  hs:=upper(pattern);
+                  found:=false;
+                  for r:=low(tregister) to high(tregister) do
+                   if hs=upper(std_reg2str[r]) then
+                    begin
+                      if r = SELF_POINTER_REG then
+                        exclude(asmstat.flags,nf_object_preserved);
+                      include(rg.usedinproc,r);
+                      include(rg.usedbyproc,r);
+                      found:=true;
+                      break;
+                    end;
+                  if not(found) then
+                    Message(asmr_e_invalid_register);
+                  consume(_CSTRING);
+                  if not try_to_consume(_COMMA) then
                     break;
-              until false;
-              consume(_RECKKLAMMER);
+                until false;
+              end;
+             consume(_RECKKLAMMER);
            end
          else
            begin
@@ -1144,7 +1146,10 @@ implementation
 end.
 {
   $Log$
-  Revision 1.74  2002-09-01 14:43:12  peter
+  Revision 1.75  2002-09-02 18:40:52  peter
+    * fixed parsing of register names with lowercase
+
+  Revision 1.74  2002/09/01 14:43:12  peter
     * fixed direct assembler for i386
 
   Revision 1.73  2002/08/25 19:25:20  peter