Browse Source

pastojs: fixed var a: somearray = nil

git-svn-id: trunk@42218 -
Mattias Gaertner 6 years ago
parent
commit
d1830fc589
2 changed files with 36 additions and 1 deletions
  1. 5 1
      packages/pastojs/src/fppas2js.pp
  2. 31 0
      packages/pastojs/tests/tcmodules.pas

+ 5 - 1
packages/pastojs/src/fppas2js.pp

@@ -15848,11 +15848,15 @@ begin
     else if ExprResolved.BaseType in btAllStringAndChars then
       begin
       US:=StrToJSString(aResolver.ComputeConstString(Expr,false,true));
-      ArrLit:=TJSArrayLiteral(CreateElement(TJSArrayLiteral,El));
+      ArrLit:=TJSArrayLiteral(CreateElement(TJSArrayLiteral,Expr));
       Result:=ArrLit;
       for i:=1 to length(US) do
         ArrLit.Elements.AddElement.Expr:=CreateLiteralJSString(Expr,US[i]);
       end
+    else if ExprResolved.BaseType=btNil then
+      begin
+      Result:=TJSArrayLiteral(CreateElement(TJSArrayLiteral,Expr));
+      end
     else
       RaiseNotSupported(Expr,AContext,20170223133034);
     end

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

@@ -335,6 +335,7 @@ type
     Procedure TestProc_ConstOrder;
     Procedure TestProc_DuplicateConst;
     Procedure TestProc_LocalVarAbsolute;
+    Procedure TestProc_LocalVarInit;
     Procedure TestProc_ReservedWords;
 
     // anonymous functions
@@ -4338,6 +4339,36 @@ begin
     ]));
 end;
 
+procedure TTestModule.TestProc_LocalVarInit;
+begin
+  StartProgram(false);
+  Add([
+  'type TBytes = array of byte;',
+  'procedure DoIt;',
+  'const c = 4;',
+  'var',
+  '  b: byte = 1;',
+  '  w: word = 2+c;',
+  '  p: pointer = nil;',
+  '  Buffer: TBytes = nil;',
+  'begin',
+  'end;',
+  'begin']);
+  ConvertProgram;
+  CheckSource('TestProc_LocalVarInit',
+    LinesToStr([ // statements
+    'var c = 4;',
+    'this.DoIt = function () {',
+    '  var b = 1;',
+    '  var w = 2 + 4;',
+    '  var p = null;',
+    '  var Buffer = [];',
+    '};',
+    '']),
+    LinesToStr([
+    ]));
+end;
+
 procedure TTestModule.TestProc_ReservedWords;
 begin
   StartProgram(false);