From e528f7a2b7d6a9952bc8aa3a8056c405652d7674 Mon Sep 17 00:00:00 2001 From: mattias Date: Sun, 21 Mar 2021 17:58:13 +0000 Subject: [PATCH] pastojs: precompiled proc: store shortref to enumtype of enumvalue --- compiler/packages/pastojs/src/fppas2js.pp | 8 ++++ .../packages/pastojs/tests/tcprecompile.pas | 42 +++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/compiler/packages/pastojs/src/fppas2js.pp b/compiler/packages/pastojs/src/fppas2js.pp index a089987..88d4e7d 100644 --- a/compiler/packages/pastojs/src/fppas2js.pp +++ b/compiler/packages/pastojs/src/fppas2js.pp @@ -24991,7 +24991,9 @@ var Parent: TPasElement; CurModule: TPasModule; ElClass: TClass; + aResolver: TPas2JSResolver; begin + aResolver:=AContext.Resolver; Result:=AContext.GetLocalName(El,[cvkGlobal]); if Result<>'' then begin @@ -25028,6 +25030,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/compiler/packages/pastojs/tests/tcprecompile.pas b/compiler/packages/pastojs/tests/tcprecompile.pas index aa88a2e..e84c4bf 100644 --- a/compiler/packages/pastojs/tests/tcprecompile.pas +++ b/compiler/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',[