Browse Source

fcl-js: switched to TypedParams

mattias 3 years ago
parent
commit
ced452e2ef

+ 1 - 1
packages/fcl-js/src/jstree.pp

@@ -147,7 +147,7 @@ Type
     Procedure UpdateParams;
     Procedure UpdateParams;
     Property TypedParams : TJSTypedParams Read FTypedParams;
     Property TypedParams : TJSTypedParams Read FTypedParams;
     Property ResultType : TJSTypeDef Read FResultType Write FResultType;
     Property ResultType : TJSTypeDef Read FResultType Write FResultType;
-    Property Params : TStrings Read FParams; deprecated;
+    Property Params : TStrings Read FParams; deprecated 'use TypedParams instead';
     Property Body : TJSFunctionBody Read FBody Write FBody; // can be nil
     Property Body : TJSFunctionBody Read FBody Write FBody; // can be nil
     Property Name : TJSString Read FName Write FName;
     Property Name : TJSString Read FName Write FName;
     Property IsEmpty : Boolean Read FIsEmpty Write FIsEmpty;
     Property IsEmpty : Boolean Read FIsEmpty Write FIsEmpty;

+ 21 - 6
packages/fcl-js/src/jswriter.pp

@@ -24,7 +24,7 @@ uses
   {$ifdef pas2js}
   {$ifdef pas2js}
   JS,
   JS,
   {$endif}
   {$endif}
-  SysUtils, jsbase, jstree;
+  SysUtils, Classes, jsbase, jstree;
 
 
 Type
 Type
   {$ifdef pas2js}
   {$ifdef pas2js}
@@ -935,6 +935,8 @@ Var
   C : Boolean;
   C : Boolean;
   I : Integer;
   I : Integer;
   A, LastEl: TJSElement;
   A, LastEl: TJSElement;
+  OldParams: TStrings;
+  TypedParams: TJSTypedParams;
 
 
 begin
 begin
   LastEl:=Writer.CurElement;
   LastEl:=Writer.CurElement;
@@ -945,13 +947,26 @@ begin
   If (FD.Name<>'') then
   If (FD.Name<>'') then
     Write(FD.Name);
     Write(FD.Name);
   Write('(');
   Write('(');
-  if Assigned(FD.Params) then
-    For I:=0 to FD.Params.Count-1 do
+  TypedParams:=FD.TypedParams;
+  if TypedParams.Count>0 then
+    begin
+    For I:=0 to TypedParams.Count-1 do
       begin
       begin
-      write(FD.Params[i]);
-      if I<FD.Params.Count-1 then
+      write(TypedParams[i].Name);
+      if I<TypedParams.Count-1 then
         if C then Write(',') else Write (', ');
         if C then Write(',') else Write (', ');
-      end;
+      end
+    end
+  else
+    begin
+    OldParams:=FD.Params;
+    For I:=0 to OldParams.Count-1 do
+      begin
+      write(OldParams[i]);
+      if I<OldParams.Count-1 then
+        if C then Write(',') else Write (', ');
+      end
+    end;
   Write(') {');
   Write(') {');
   if Not (C or FD.IsEmpty) then
   if Not (C or FD.IsEmpty) then
     begin
     begin

+ 10 - 10
packages/fcl-js/tests/tcparser.pp

@@ -2099,7 +2099,7 @@ begin
   AssertFalse('Async function ',FD.AFunction.IsAsync);
   AssertFalse('Async function ',FD.AFunction.IsAsync);
   AssertEquals('Function name OK','a',FD.AFunction.Name);
   AssertEquals('Function name OK','a',FD.AFunction.Name);
   AssertNotNull('Function body assigned', FD.AFunction.Body);
   AssertNotNull('Function body assigned', FD.AFunction.Body);
-  AssertEquals('No parameters',0,FD.AFunction.Params.Count);
+  AssertEquals('No parameters',0,FD.AFunction.TypedParams.Count);
   N:=FD.AFunction.Body;
   N:=FD.AFunction.Body;
   CheckClass(N,TJSFunctionBody);
   CheckClass(N,TJSFunctionBody);
   AssertNotNull('Function body has element',TJSFunctionBody(N).A);
   AssertNotNull('Function body has element',TJSFunctionBody(N).A);
@@ -2127,7 +2127,7 @@ begin
   AssertTrue('Async function ',FD.AFunction.IsAsync);
   AssertTrue('Async function ',FD.AFunction.IsAsync);
   AssertEquals('Function name OK','a',FD.AFunction.Name);
   AssertEquals('Function name OK','a',FD.AFunction.Name);
   AssertNotNull('Function body assigned', FD.AFunction.Body);
   AssertNotNull('Function body assigned', FD.AFunction.Body);
-  AssertEquals('No parameters',0,FD.AFunction.Params.Count);
+  AssertEquals('No parameters',0,FD.AFunction.TypedParams.Count);
   N:=FD.AFunction.Body;
   N:=FD.AFunction.Body;
   CheckClass(N,TJSFunctionBody);
   CheckClass(N,TJSFunctionBody);
   AssertNotNull('Function body has element',TJSFunctionBody(N).A);
   AssertNotNull('Function body has element',TJSFunctionBody(N).A);
@@ -2154,9 +2154,9 @@ begin
   AssertNotNull('Function definition assigned',FD.AFunction);
   AssertNotNull('Function definition assigned',FD.AFunction);
   AssertEquals('Function name OK','a',FD.AFunction.Name);
   AssertEquals('Function name OK','a',FD.AFunction.Name);
   AssertNotNull('Function body assigned', FD.AFunction.Body);
   AssertNotNull('Function body assigned', FD.AFunction.Body);
-  AssertEquals('2 parameters',2,FD.AFunction.Params.Count);
-  AssertEquals('1st parameter','b',FD.AFunction.Params[0]);
-  AssertEquals('2nd parameter','c',FD.AFunction.Params[1]);
+  AssertEquals('2 parameters',2,FD.AFunction.TypedParams.Count);
+  AssertEquals('1st parameter','b',FD.AFunction.TypedParams[0].Name);
+  AssertEquals('2nd parameter','c',FD.AFunction.TypedParams[1].Name);
   N:=FD.AFunction.Body;
   N:=FD.AFunction.Body;
   CheckClass(N,TJSFunctionBody);
   CheckClass(N,TJSFunctionBody);
   AssertNotNull('Function body has element',TJSFunctionBody(N).A);
   AssertNotNull('Function body has element',TJSFunctionBody(N).A);
@@ -2183,11 +2183,11 @@ begin
   AssertNotNull('Function definition assigned',FD.AFunction);
   AssertNotNull('Function definition assigned',FD.AFunction);
   AssertEquals('Function name OK','a',FD.AFunction.Name);
   AssertEquals('Function name OK','a',FD.AFunction.Name);
   AssertNotNull('Function body assigned', FD.AFunction.Body);
   AssertNotNull('Function body assigned', FD.AFunction.Body);
-  AssertEquals('2 parameters',2,FD.AFunction.Params.Count);
-  AssertEquals('1st parameter','b',FD.AFunction.Params[0]);
+  AssertEquals('2 parameters',2,FD.AFunction.TypedParams.Count);
+  AssertEquals('1st parameter','b',FD.AFunction.TypedParams[0].Name);
   AssertEquals('1st parameter','b',FD.AFunction.TypedParams.Names[0]);
   AssertEquals('1st parameter','b',FD.AFunction.TypedParams.Names[0]);
   AssertTrue('1st parameter spread',FD.AFunction.TypedParams.Params[0].IsSpread);
   AssertTrue('1st parameter spread',FD.AFunction.TypedParams.Params[0].IsSpread);
-  AssertEquals('2nd parameter','c',FD.AFunction.Params[1]);
+  AssertEquals('2nd parameter','c',FD.AFunction.TypedParams[1].Name);
   N:=FD.AFunction.Body;
   N:=FD.AFunction.Body;
   CheckClass(N,TJSFunctionBody);
   CheckClass(N,TJSFunctionBody);
   AssertNotNull('Function body has element',TJSFunctionBody(N).A);
   AssertNotNull('Function body has element',TJSFunctionBody(N).A);
@@ -2215,7 +2215,7 @@ begin
   AssertNotNull('Function definition assigned',FD.AFunction);
   AssertNotNull('Function definition assigned',FD.AFunction);
   AssertEquals('Function name OK','a',FD.AFunction.Name);
   AssertEquals('Function name OK','a',FD.AFunction.Name);
   AssertNotNull('Function body assigned', FD.AFunction.Body);
   AssertNotNull('Function body assigned', FD.AFunction.Body);
-  AssertEquals('2 parameters',0,FD.AFunction.Params.Count);
+  AssertEquals('2 parameters',0,FD.AFunction.TypedParams.Count);
   N:=FD.AFunction.Body;
   N:=FD.AFunction.Body;
   CheckClass(N,TJSFunctionBody);
   CheckClass(N,TJSFunctionBody);
   AssertNotNull('Function body has element',TJSFunctionBody(N).A);
   AssertNotNull('Function body has element',TJSFunctionBody(N).A);
@@ -2550,7 +2550,7 @@ begin
   AssertNotNull('Function definition assigned',FD.AFunction);
   AssertNotNull('Function definition assigned',FD.AFunction);
   AssertEquals('Function name OK','a',FD.AFunction.Name);
   AssertEquals('Function name OK','a',FD.AFunction.Name);
   AssertNotNull('Function body assigned', FD.AFunction.Body);
   AssertNotNull('Function body assigned', FD.AFunction.Body);
-  AssertEquals('No parameters',0,FD.AFunction.Params.Count);
+  AssertEquals('No parameters',0,FD.AFunction.TypedParams.Count);
   N:=FD.AFunction.Body;
   N:=FD.AFunction.Body;
   CheckClass(N,TJSFunctionBody);
   CheckClass(N,TJSFunctionBody);
   AssertNotNull('Function body has element',TJSFunctionBody(N).A);
   AssertNotNull('Function body has element',TJSFunctionBody(N).A);

+ 8 - 8
packages/fcl-js/tests/tcwriter.pp

@@ -1843,9 +1843,9 @@ begin
   FD:=TJSFunctionDeclarationStatement.Create(0,0);
   FD:=TJSFunctionDeclarationStatement.Create(0,0);
   FD.AFunction:=TJSFuncDef.Create;
   FD.AFunction:=TJSFuncDef.Create;
   FD.AFunction.Name:='a';
   FD.AFunction.Name:='a';
-  FD.AFunction.Params.Add('b');
-  FD.AFunction.Params.Add('c');
-  FD.AFunction.Params.Add('d');
+  FD.AFunction.TypedParams.AddParam('b');
+  FD.AFunction.TypedParams.AddParam('c');
+  FD.AFunction.TypedParams.AddParam('d');
 
 
   AssertWrite('Empty function, 3 params',
   AssertWrite('Empty function, 3 params',
      'function a(b, c, d) {'+sLineBreak
      'function a(b, c, d) {'+sLineBreak
@@ -1862,9 +1862,9 @@ begin
   FD:=TJSFunctionDeclarationStatement.Create(0,0);
   FD:=TJSFunctionDeclarationStatement.Create(0,0);
   FD.AFunction:=TJSFuncDef.Create;
   FD.AFunction:=TJSFuncDef.Create;
   FD.AFunction.Name:='a';
   FD.AFunction.Name:='a';
-  FD.AFunction.Params.Add('b');
-  FD.AFunction.Params.Add('c');
-  FD.AFunction.Params.Add('d');
+  FD.AFunction.TypedParams.AddParam('b');
+  FD.AFunction.TypedParams.AddParam('c');
+  FD.AFunction.TypedParams.AddParam('d');
   AssertWrite('Empty function, 3 params, compact','function a(b,c,d) {}',FD);
   AssertWrite('Empty function, 3 params, compact','function a(b,c,d) {}',FD);
 end;
 end;
 
 
@@ -1923,7 +1923,7 @@ begin
   FD.AFunction:=TJSFuncDef.Create;
   FD.AFunction:=TJSFuncDef.Create;
   FD.AFunction.Name:='a';
   FD.AFunction.Name:='a';
   FD.AFunction.Body:=TJSFunctionBody.Create(0,0);
   FD.AFunction.Body:=TJSFunctionBody.Create(0,0);
-  FD.AFunction.Params.Add('b');
+  FD.AFunction.TypedParams.AddParam('b');
   R:=TJSReturnStatement.Create(0,0);
   R:=TJSReturnStatement.Create(0,0);
   R.Expr:=CreateIdent('b');
   R.Expr:=CreateIdent('b');
   L:=TJSStatementList.Create(0,0);
   L:=TJSStatementList.Create(0,0);
@@ -1958,7 +1958,7 @@ begin
   FD.AFunction:=TJSFuncDef.Create;
   FD.AFunction:=TJSFuncDef.Create;
   FD.AFunction.Name:='a';
   FD.AFunction.Name:='a';
   FD.AFunction.Body:=TJSFunctionBody.Create(0,0);
   FD.AFunction.Body:=TJSFunctionBody.Create(0,0);
-  FD.AFunction.Params.Add('b');
+  FD.AFunction.TypedParams.AddParam('b');
   R:=TJSReturnStatement.Create(0,0);
   R:=TJSReturnStatement.Create(0,0);
   R.Expr:=CreateIdent('b');
   R.Expr:=CreateIdent('b');
   L:=TJSStatementList.Create(0,0);
   L:=TJSStatementList.Create(0,0);