Преглед на файлове

* MIPS asm reader: parse dollar sign followed by identifier/number as a single token (register), not as two separate tokens.

git-svn-id: trunk@32971 -
sergei преди 9 години
родител
ревизия
1aec09f8cd
променени са 1 файла, в които са добавени 15 реда и са изтрити 23 реда
  1. 15 23
      compiler/mips/racpugas.pas

+ 15 - 23
compiler/mips/racpugas.pas

@@ -96,32 +96,24 @@ Interface
 
 
     procedure TMipsReader.handledollar;
+      var
+        len: longint;
       begin
-        Inherited handledollar;
-        if (c in ['0'..'9','a'..'z']) then
+        len:=1;
+        actasmpattern[len]:='$';
+        c:=current_scanner.asmgetchar;
+        while c in ['A'..'Z','a'..'z','0'..'9'] do
           begin
-            Consume(AS_DOLLAR);
-            if (actasmtoken=AS_INTNUM) or (actasmtoken=AS_ID) then
-              begin
-                { Try to convert to std register }
-                if actasmtoken=AS_INTNUM then
-                  actasmregister:=gas_regnum_search('$'+actasmpattern)
-                else
-                  begin
-                    { AS_ID is uppercased by default but register names
-                      are lowercase }
-                    actasmpattern:=lower(actasmpattern);
-                    actasmregister:=gas_regnum_search(actasmpattern);
-                    if actasmregister=NR_NO then
-                      actasmregister:=std_regnum_search(actasmpattern);
-                  end;
-                if actasmregister<>NR_NO then
-                  begin
-                    // Consume(actasmtoken);
-                    actasmtoken:=AS_REGISTER;
-                  end;
-              end;
+            inc(len);
+            actasmpattern[len]:=c;
+            c:=current_scanner.asmgetchar;
           end;
+        actasmpattern[0]:=chr(len);
+        actasmpattern:=lower(actasmpattern);
+        actasmregister:=gas_regnum_search(actasmpattern);
+        if actasmregister=NR_NO then
+          actasmregister:=std_regnum_search(copy(actasmpattern,2,maxint));
+        actasmtoken:=AS_REGISTER;
       end;