From 63534c35a8b57a5a11ddc1ad4240dca34782c007 Mon Sep 17 00:00:00 2001 From: Mattias Gaertner Date: Sun, 21 Mar 2021 17:57:44 +0000 Subject: [PATCH] pastojs: precompiled proc: store shortref to enumtype of enumvalue git-svn-id: trunk@49025 - (cherry picked from commit 8b09375ec2f414e9767ad60935398242fce62634) --- packages/pastojs/src/fppas2js.pp | 8 +++++ packages/pastojs/tests/tcprecompile.pas | 42 +++++++++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/packages/pastojs/src/fppas2js.pp b/packages/pastojs/src/fppas2js.pp index 23e3f9c08a..659c32d3c9 100644 --- a/packages/pastojs/src/fppas2js.pp +++ b/packages/pastojs/src/fppas2js.pp @@ -25054,7 +25054,9 @@ var Parent: TPasElement; CurModule: TPasModule; ElClass: TClass; + aResolver: TPas2JSResolver; begin + aResolver:=AContext.Resolver; Result:=AContext.GetLocalName(El,[cvkGlobal]); if Result<>'' then begin @@ -25091,6 +25093,12 @@ begin Result:=TransformModuleName(TPasModule(Parent),true,AContext) else RaiseNotSupported(El,AContext,20200609230526,GetObjPath(El)); + end + else + begin + // parent has local var + if (coStoreImplJS in Options) and (aResolver.GetParentProcBody(Parent)=nil) then + StoreImplJSLocal(Parent,AContext); end; Result:=Result+'.'+TransformElToJSName(El,AContext); end diff --git a/packages/pastojs/tests/tcprecompile.pas b/packages/pastojs/tests/tcprecompile.pas index aa88a2ed86..e84c4bfa60 100644 --- a/packages/pastojs/tests/tcprecompile.pas +++ b/packages/pastojs/tests/tcprecompile.pas @@ -64,6 +64,7 @@ type procedure TestPCU_Class_Constructor; procedure TestPCU_Class_ClassConstructor; procedure TestPCU_ClassInterface; + procedure TestPCU_EnumNames; procedure TestPCU_Namespace; procedure TestPCU_CheckVersionMain; procedure TestPCU_CheckVersionMain2; @@ -135,6 +136,7 @@ begin if ExpExitCode=0 then begin NewSrc:=JSFile.Source; + //writeln('TCustomTestCLI_Precompile.CheckPrecompile ',NewSrc); if not CheckSrcDiff(OrigSrc,NewSrc,s) then begin WriteSources; @@ -510,6 +512,46 @@ begin CheckPrecompile('test1.pas','src'); end; +procedure TTestCLI_Precompile.TestPCU_EnumNames; +var + SharedParams: TStringList; +begin + AddUnit('src/system.pp',[ + 'type integer = longint;', + ' TObject = class end;', + 'procedure Writeln; varargs;'], + ['procedure Writeln; begin end;']); + AddUnit('src/unit1.pp', + ['type', + ' TEnum = (red,green,blue);', + ' TBird = class ', + ' private', + ' Color: TEnum;', + ' public', + ' procedure Fly;', + ' procedure Run;', + ' end;', + ''], + ['procedure TBird.Fly;', + 'begin', + ' Color:=blue;', + 'end;', + 'procedure TBird.Run;', + 'begin', + ' Color:=green;', + 'end;']); + AddFile('test1.pas',[ + 'uses unit1;', + 'var b: TBird;', + 'begin', + ' b.Fly();', + ' b.Run();', + 'end.']); + SharedParams:=TStringList.Create; + SharedParams.Add('-OoEnumNumbers-'); + CheckPrecompile('test1.pas','src',SharedParams); +end; + procedure TTestCLI_Precompile.TestPCU_Namespace; begin AddUnit('src/system.pp',[