Browse Source

pastojs: test generic empty class

git-svn-id: trunk@42577 -
Mattias Gaertner 6 years ago
parent
commit
5e81d57f39

+ 3 - 3
packages/pastojs/src/fppas2js.pp

@@ -1340,7 +1340,7 @@ type
   protected
     procedure AddType(El: TPasType); override;
     procedure AddRecordType(El: TPasRecordType); override;
-    procedure AddClassType(El: TPasClassType); override;
+    procedure AddClassType(El: TPasClassType; TypeParams: TFPList); override;
     procedure AddEnumType(El: TPasEnumType); override;
     procedure ResolveImplAsm(El: TPasImplAsmStatement); override;
     procedure ResolveNameExpr(El: TPasExpr; const aName: string;
@@ -3244,9 +3244,9 @@ begin
     AddElevatedLocal(El);
 end;
 
-procedure TPas2JSResolver.AddClassType(El: TPasClassType);
+procedure TPas2JSResolver.AddClassType(El: TPasClassType; TypeParams: TFPList);
 begin
-  inherited AddClassType(El);
+  inherited AddClassType(El,TypeParams);
 end;
 
 procedure TPas2JSResolver.AddEnumType(El: TPasEnumType);

+ 3 - 3
packages/pastojs/src/pas2jspparser.pp

@@ -63,7 +63,7 @@ type
   public
     function CreateElement(AClass: TPTreeElement; const AName: String;
       AParent: TPasElement; AVisibility: TPasMemberVisibility;
-      const ASrcPos: TPasSourcePos): TPasElement;
+      const ASrcPos: TPasSourcePos; TypeParams: TFPList = nil): TPasElement;
       overload; override;
     function FindModule(const aUnitname: String): TPasModule; override;
     function FindUnit(const AName, InFilename: String; NameExpr,
@@ -145,11 +145,11 @@ end;
 
 function TPas2jsCompilerResolver.CreateElement(AClass: TPTreeElement;
   const AName: String; AParent: TPasElement; AVisibility: TPasMemberVisibility;
-  const ASrcPos: TPasSourcePos): TPasElement;
+  const ASrcPos: TPasSourcePos; TypeParams: TFPList): TPasElement;
 begin
   if AClass=TFinalizationSection then
     (CurrentParser as TPas2jsPasParser).RaiseParserError(nFinalizationNotSupported,[]);
-  Result:=inherited CreateElement(AClass,AName,AParent,AVisibility,ASrcPos);
+  Result:=inherited CreateElement(AClass,AName,AParent,AVisibility,ASrcPos,TypeParams);
   if (Result is TPasModule) then
     OnCheckSrcName(Result);
 end;

+ 31 - 0
packages/pastojs/tests/tcgenerics.pas

@@ -15,6 +15,7 @@ type
   TTestGenerics = class(TCustomTestModule)
   Published
     Procedure TestGeneric_RecordEmpty;
+    Procedure TestGeneric_ClassEmpty;
   end;
 
 implementation
@@ -50,6 +51,36 @@ begin
     ]));
 end;
 
+procedure TTestGenerics.TestGeneric_ClassEmpty;
+begin
+  StartProgram(false);
+  Add([
+  'type',
+  '  TObject = class end;',
+  '  generic TBird<T> = class',
+  '  end;',
+  'var a,b: specialize TBird<word>;',
+  'begin',
+  '  if a=b then ;']);
+  ConvertProgram;
+  CheckSource('TestGeneric_ClassEmpty',
+    LinesToStr([ // statements
+    'rtl.createClass($mod, "TObject", null, function () {',
+    '  this.$init = function () {',
+    '  };',
+    '  this.$final = function () {',
+    '  };',
+    '});',
+    'rtl.createClass($mod, "TBird$G1", $mod.TObject, function () {',
+    '});',
+    'this.a = null;',
+    'this.b = null;',
+    '']),
+    LinesToStr([ // $mod.$main
+    'if ($mod.a === $mod.b) ;'
+    ]));
+end;
+
 Initialization
   RegisterTests([TTestGenerics]);
 end.