Browse Source

pastojs: fixed TPasArgument name transform

git-svn-id: trunk@38022 -
Mattias Gaertner 7 years ago
parent
commit
150598155e
2 changed files with 75 additions and 39 deletions
  1. 8 2
      packages/pastojs/src/fppas2js.pp
  2. 67 37
      packages/pastojs/tests/tcmodules.pas

+ 8 - 2
packages/pastojs/src/fppas2js.pp

@@ -277,8 +277,14 @@ Works:
   - procedure argument int
 
 ToDos:
+- btArrayLit
+  a: array of jsvalue;
+  a:=[];
+- bug:
+  v:=a[0]  gives Local variable "a" is assigned but never used
 - range checks:
-  - proc args
+  - compile time: warnings to errors
+  - proc args enum, custom enum, custom int
   - assign enum:=, enum+=
   - prop:=
   - string[index]
@@ -13160,7 +13166,7 @@ begin
         RaiseNotSupported(Arg,AContext,20170214120739);
     end;
     end;
-  Name:=Arg.Name;
+  Name:=TransformVariableName(Arg,Arg.Name,AContext);
   if (CompareText(Name,'Self')=0) and (AContext.GetSelfContext<>nil) then
     Name:=AContext.GetLocalName(Arg);
   Result:=CreatePrimitiveDotExpr(Name,PosEl);

+ 67 - 37
packages/pastojs/tests/tcmodules.pas

@@ -253,6 +253,7 @@ type
     Procedure TestFunctionResultInCondition;
     Procedure TestExit;
     Procedure TestBreak;
+    Procedure TestBreakAsVar;
     Procedure TestContinue;
     Procedure TestProc_External;
     Procedure TestProc_ExternalOtherUnit;
@@ -2544,15 +2545,17 @@ end;
 procedure TTestModule.TestBreak;
 begin
   StartProgram(false);
-  Add('var i: longint;');
-  Add('begin');
-  Add('  repeat');
-  Add('    break;');
-  Add('  until true;');
-  Add('  while true do');
-  Add('    break;');
-  Add('  for i:=1 to 2 do');
-  Add('    break;');
+  Add([
+  'var',
+  '  i: longint;',
+  'begin',
+  '  repeat',
+  '    break;',
+  '  until true;',
+  '  while true do',
+  '    break;',
+  '  for i:=1 to 2 do',
+  '    break;']);
   ConvertProgram;
   CheckSource('TestBreak',
     LinesToStr([ // statements
@@ -2567,6 +2570,31 @@ begin
     '']));
 end;
 
+procedure TTestModule.TestBreakAsVar;
+begin
+  StartProgram(false);
+  Add([
+  'procedure DoIt(break: boolean);',
+  'begin',
+  '  if break then ;',
+  'end;',
+  'var',
+  '  break: boolean;',
+  'begin',
+  '  if break then ;']);
+  ConvertProgram;
+  CheckSource('TestBreakAsVar',
+    LinesToStr([ // statements
+    'this.DoIt = function (Break) {',
+    '  if (Break) ;',
+    '};',
+    'this.Break = false;',
+    '']),
+    LinesToStr([
+    'if($mod.Break) ;',
+    '']));
+end;
+
 procedure TTestModule.TestContinue;
 begin
   StartProgram(false);
@@ -13280,38 +13308,40 @@ end;
 procedure TTestModule.TestJSValue_ArrayOfJSValue;
 begin
   StartProgram(false);
-  Add('type');
-  Add('  integer = longint;');
-  Add('  TArray = array of JSValue;');
-  Add('  TArrgh = tarray;');
-  Add('  TArrInt = array of integer;');
-  Add('var');
-  Add('  v: jsvalue;');
-  Add('  TheArray: tarray;');
-  Add('  Arr: tarrgh;');
-  Add('  i: integer;');
-  Add('  ArrInt: tarrint;');
-  Add('begin');
-  Add('  arr:=thearray;');
-  Add('  thearray:=arr;');
-  Add('  setlength(arr,2);');
-  Add('  setlength(thearray,3);');
-  Add('  arr[4]:=v;');
-  Add('  arr[5]:=length(thearray);');
-  Add('  arr[6]:=nil;');
-  Add('  arr[7]:=thearray[8];');
-  Add('  arr[low(arr)]:=high(thearray);');
-  Add('  arr:=arrint;');
-  Add('  arrInt:=tarrint(arr);');
-  Add('  if TheArray = nil then ;');
-  Add('  if nil = TheArray then ;');
-  Add('  if TheArray <> nil then ;');
-  Add('  if nil <> TheArray then ;');
+  Add([
+  'type',
+  '  integer = longint;',
+  '  TArray = array of JSValue;',
+  '  TArrgh = tarray;',
+  '  TArrInt = array of integer;',
+  'var',
+  '  v: jsvalue;',
+  '  TheArray: tarray = (1,''2'');',
+  '  Arr: tarrgh;',
+  '  i: integer;',
+  '  ArrInt: tarrint;',
+  'begin',
+  '  arr:=thearray;',
+  '  thearray:=arr;',
+  '  setlength(arr,2);',
+  '  setlength(thearray,3);',
+  '  arr[4]:=v;',
+  '  arr[5]:=length(thearray);',
+  '  arr[6]:=nil;',
+  '  arr[7]:=thearray[8];',
+  '  arr[low(arr)]:=high(thearray);',
+  '  arr:=arrint;',
+  '  arrInt:=tarrint(arr);',
+  '  if TheArray = nil then ;',
+  '  if nil = TheArray then ;',
+  '  if TheArray <> nil then ;',
+  '  if nil <> TheArray then ;',
+  '']);
   ConvertProgram;
   CheckSource('TestJSValue_ArrayOfJSValue',
     LinesToStr([ // statements
     'this.v = undefined;',
-    'this.TheArray = [];',
+    'this.TheArray = [1, "2"];',
     'this.Arr = [];',
     'this.i = 0;',
     'this.ArrInt = [];',