Browse Source

* Allow to parse internal symbol names generated for generics.

Michaël Van Canneyt 8 months ago
parent
commit
e15f731a9b
2 changed files with 6 additions and 1 deletions
  1. 5 1
      compiler/scanner.pas
  2. 1 0
      compiler/symcreat.pas

+ 5 - 1
compiler/scanner.pas

@@ -174,6 +174,8 @@ interface
           in_preproc_comp_expr : boolean;
           in_preproc_comp_expr : boolean;
           { true if tokens must be converted to opposite endianess}
           { true if tokens must be converted to opposite endianess}
           change_endian_for_replay : boolean;
           change_endian_for_replay : boolean;
+          { hack to allow reading generic generated identifiers IDs}
+          allowgenericid : boolean;
 
 
           constructor Create(const fn:string; is_macro: boolean = false);
           constructor Create(const fn:string; is_macro: boolean = false);
           destructor Destroy;override;
           destructor Destroy;override;
@@ -4523,11 +4525,13 @@ type
         i:=0;
         i:=0;
         repeat
         repeat
           case c of
           case c of
-            '_',
+            '_','$',
             '0'..'9',
             '0'..'9',
             'A'..'Z',
             'A'..'Z',
             'a'..'z' :
             'a'..'z' :
               begin
               begin
+                if (c='$') and not allowgenericid then
+                  break;
                 if i<255 then
                 if i<255 then
                  begin
                  begin
                    inc(i);
                    inc(i);

+ 1 - 0
compiler/symcreat.pas

@@ -1813,6 +1813,7 @@ implementation
     if ErrorCount<>0 then
     if ErrorCount<>0 then
       exit;
       exit;
     replace_scanner('hiddenclass_impl',sstate);
     replace_scanner('hiddenclass_impl',sstate);
+    sstate.new_scanner.allowgenericid:=true;
     for i:=0 to st.deflist.count-1 do
     for i:=0 to st.deflist.count-1 do
       begin
       begin
       def:=tdef(st.deflist[i]);
       def:=tdef(st.deflist[i]);