From 81885c7e72ed2d1b03fe6702cba7a0a45adf3104 Mon Sep 17 00:00:00 2001 From: svenbarth Date: Wed, 12 Aug 2020 19:05:57 +0000 Subject: [PATCH] fcl-res: replace preproc defines with much faster hashtable Reintegrate fpcres-rc branch by Martok git-svn-id: trunk@46384 - --- packages/fcl-res/src/rcreader.pp | 2 +- packages/fcl-res/src/yypreproc.pp | 13 ++++++------- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/packages/fcl-res/src/rcreader.pp b/packages/fcl-res/src/rcreader.pp index dad2c020b6..881fd6ff4c 100644 --- a/packages/fcl-res/src/rcreader.pp +++ b/packages/fcl-res/src/rcreader.pp @@ -91,7 +91,7 @@ begin rcparser.yinclude.init(); rcparser.yinclude.WorkDir:= aLocation; rcparser.ypreproc.init(); - rcparser.ypreproc.Defines.Add('RC_INVOKED'); + rcparser.ypreproc.Defines.Add('RC_INVOKED', ''); rcparser.aktresources:= aResources; if rcparser.yyparse <> 0 then raise EReadError.Create('Parse Error'); diff --git a/packages/fcl-res/src/yypreproc.pp b/packages/fcl-res/src/yypreproc.pp index 021398bbba..a860579fb0 100644 --- a/packages/fcl-res/src/yypreproc.pp +++ b/packages/fcl-res/src/yypreproc.pp @@ -7,7 +7,7 @@ type const yp_maxlevels = 16; var - Defines: TStringList; + Defines: TFPStringHashTable; skip : array[0..yp_maxlevels-1] of boolean; cheadermode: boolean; level : longint; @@ -27,8 +27,7 @@ var procedure typreproc.init(); begin - Defines:= TStringList.Create; - Defines.CaseSensitive:= False; + Defines:= TFPStringHashTable.Create; level:= 0; cheadermode:= false; fillchar(skip,sizeof(skip),0); @@ -64,12 +63,12 @@ end; function typreproc.isdefine(ident: string): boolean; begin - Result:= Defines.IndexOfName(ident) >= 0; + Result:= Defines.Find(ident) <> nil; end; function typreproc.getdefine(ident: string): string; begin - Result:= Defines.Values[ident]; + Result:= Defines.Items[ident]; end; function typreproc.useline(line: string): boolean; @@ -130,10 +129,10 @@ begin end; 'define': begin arg1:= Copy2SpaceDelTrim(w); - Defines.Values[arg1]:= w; + Defines[arg1]:= w; end; 'undef': begin - Defines.Delete(Defines.IndexOfName(arg1)); + Defines.Delete(w); end; 'include': begin arg1:= yinclude.expand(w);