Просмотр исходного кода

* some improvements to replace_scanner():
o also save/restore orgpattern (and restore pattern) when saving/restoring
the scanner state, since it's used by e.g. the _INTCONST token
o also bail out on _CWCHAR and _CWSTRING tokens, since that requires saving
the scanner widestring state

git-svn-id: branches/jvmbackend@18705 -

Jonas Maebe 14 лет назад
Родитель
Сommit
3eb588cca7
1 измененных файлов с 7 добавлено и 1 удалено
  1. 7 1
      compiler/symcreat.pas

+ 7 - 1
compiler/symcreat.pas

@@ -37,6 +37,7 @@ interface
       old_scanner: tscannerfile;
       old_token: ttoken;
       old_c: char;
+      old_orgpattern: string;
       old_modeswitches: tmodeswitches;
       valid: boolean;
     end;
@@ -124,11 +125,14 @@ implementation
       old_block_type: tblock_type;
     begin
       { would require saving of idtoken, pattern etc }
-      if (token=_ID) then
+      if (token=_ID) or
+         (token=_CWCHAR) or
+         (token=_CWSTRING) then
         internalerror(2011032201);
       sstate.old_scanner:=current_scanner;
       sstate.old_token:=token;
       sstate.old_c:=c;
+      sstate.old_orgpattern:=orgpattern;
       sstate.old_modeswitches:=current_settings.modeswitches;
       sstate.valid:=true;
       { creating a new scanner resets the block type, while we want to continue
@@ -151,6 +155,8 @@ implementation
           token:=sstate.old_token;
           current_settings.modeswitches:=sstate.old_modeswitches;
           c:=sstate.old_c;
+          orgpattern:=sstate.old_orgpattern;
+          pattern:=upper(sstate.old_orgpattern);
         end;
     end;