Răsfoiți Sursa

pastojs: bark on enum const

git-svn-id: trunk@38050 -
Mattias Gaertner 7 ani în urmă
părinte
comite
2f3fd73c0d

+ 15 - 0
packages/pastojs/src/fppas2js.pp

@@ -953,6 +953,7 @@ type
     procedure ResolveNameExpr(El: TPasExpr; const aName: string;
       Access: TResolvedRefAccess); override;
     procedure FinishModule(CurModule: TPasModule); override;
+    procedure FinishEnumType(El: TPasEnumType); override;
     procedure FinishSetType(El: TPasSetType); override;
     procedure FinishRecordType(El: TPasRecordType); override;
     procedure FinishClassType(El: TPasClassType); override;
@@ -2111,6 +2112,20 @@ begin
   end;
 end;
 
+procedure TPas2JSResolver.FinishEnumType(El: TPasEnumType);
+var
+  i: Integer;
+  EnumValue: TPasEnumValue;
+begin
+  inherited FinishEnumType(El);
+  for i:=0 to El.Values.Count-1 do
+    begin
+    EnumValue:=TPasEnumValue(El.Values[i]);
+    if EnumValue.Value<>nil then
+      RaiseNotYetImplemented(20180126202434,EnumValue,'enum const');
+    end;
+end;
+
 procedure TPas2JSResolver.FinishSetType(El: TPasSetType);
 var
   TypeEl: TPasType;

+ 20 - 0
packages/pastojs/src/pas2jsfiler.pp

@@ -37,6 +37,9 @@ uses
   Classes, SysUtils, FPPas2Js, PasResolver, PasTree;
 
 type
+
+  { TPasToJsFiler }
+
   TPasToJsFiler = class
   public
     constructor Create; virtual;
@@ -46,5 +49,22 @@ type
 
 implementation
 
+{ TPasToJsFiler }
+
+constructor TPasToJsFiler.Create;
+begin
+
+end;
+
+destructor TPasToJsFiler.Destroy;
+begin
+  inherited Destroy;
+end;
+
+procedure TPasToJsFiler.WriteModule(aResolver: TPasResolver);
+begin
+  if aResolver=nil then ;
+end;
+
 end.
 

+ 18 - 3
packages/pastojs/tests/tcmodules.pas

@@ -273,6 +273,7 @@ type
     // enums, sets
     Procedure TestEnum_Name;
     Procedure TestEnum_Number;
+    Procedure TestEnum_ConstFail;
     Procedure TestEnum_Functions;
     Procedure TestEnum_AsParams;
     Procedure TestEnumRange_Array;
@@ -3230,7 +3231,7 @@ begin
   Add('  i: longint;');
   Add('begin');
   Add('  e:=green;');
-  //Add('  i:=longint(e);');
+  Add('  i:=longint(e);');
   ConvertProgram;
   CheckSource('TestEnumNumber',
     LinesToStr([ // statements
@@ -3245,11 +3246,25 @@ begin
     'this.i = 0;'
     ]),
     LinesToStr([
-    '$mod.e=1;'
-    //'$mod.i=$mod.e;'
+    '$mod.e=1;',
+    '$mod.i=$mod.e;'
     ]));
 end;
 
+procedure TTestModule.TestEnum_ConstFail;
+begin
+  StartProgram(false);
+  Add([
+  'type TMyEnum = (Red = 100, Green = 101);',
+  'var',
+  '  e: TMyEnum;',
+  '  f: TMyEnum = Green;',
+  'begin',
+  '  e:=green;']);
+  SetExpectedPasResolverError('not yet implemented: Red:TPasEnumValue [20180126202434] enum const',3002);
+  ConvertProgram;
+end;
+
 procedure TTestModule.TestEnum_Functions;
 begin
   StartProgram(false);

+ 2 - 1
packages/pastojs/tests/testpas2js.lpi

@@ -68,8 +68,9 @@
         <IsPartOfProject Value="True"/>
       </Unit7>
       <Unit8>
-        <Filename Value="../src/pas2jsfiler.pas"/>
+        <Filename Value="../src/pas2jsfiler.pp"/>
         <IsPartOfProject Value="True"/>
+        <UnitName Value="Pas2JsFiler"/>
       </Unit8>
     </Units>
   </ProjectOptions>

+ 1 - 1
packages/pastojs/tests/testpas2js.pp

@@ -18,7 +18,7 @@ program testpas2js;
 
 uses
   Classes, consoletestrunner, tcconverter, tcmodules, tcoptimizations, tcsrcmap,
-  tcfiler, pas2jsfiler;
+  tcfiler, Pas2JsFiler;
 
 type