summaryrefslogtreecommitdiff
path: root/packages/pastojs
diff options
context:
space:
mode:
authormattias <mattias@3ad0048d-3df7-0310-abae-a5850022a9f2>2021-03-21 17:57:44 +0000
committermattias <mattias@3ad0048d-3df7-0310-abae-a5850022a9f2>2021-03-21 17:57:44 +0000
commitfd39dc09c2dc276bf0f64387aa92bb24a9161093 (patch)
tree6a59d4a74dfb80018b5a53fa3ad78f3c721dcaeb /packages/pastojs
parent42a34a5fa7c6dae2daa903a033f5fd30d85da617 (diff)
downloadfpc-fd39dc09c2dc276bf0f64387aa92bb24a9161093.tar.gz
pastojs: precompiled proc: store shortref to enumtype of enumvalue
git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@49025 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'packages/pastojs')
-rw-r--r--packages/pastojs/src/fppas2js.pp8
-rw-r--r--packages/pastojs/tests/tcprecompile.pas42
2 files changed, 50 insertions, 0 deletions
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',[