Browse Source

pastojs: fixed aString[1+2]:=

git-svn-id: trunk@37194 -
Mattias Gaertner 8 years ago
parent
commit
1057f7968e

+ 1 - 0
packages/fcl-passrc/tests/tcresolver.pas

@@ -2461,6 +2461,7 @@ begin
   Add('  c:=s[6];');
   Add('  s[7]:=c;');
   Add('  s[8]:=''a'';');
+  Add('  s[9+1]:=''b'';');
   ParseProgram;
 end;
 

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

@@ -4089,7 +4089,12 @@ begin
   end;
 
   if AContext.Access<>caRead then
+    begin
+    {$IFDEF VerbosePas2JS}
+    writeln('TPasToJSConverter.ConvertBinaryExpression OpCode=',El.OpCode,' AContext.Access=',AContext.Access);
+    {$ENDIF}
     DoError(20170209152633,nVariableIdentifierExpected,sVariableIdentifierExpected,[],El);
+    end;
 
   Call:=nil;
   A:=ConvertElement(El.left,AContext);
@@ -5030,9 +5035,9 @@ var
         Call.Expr:=CreateMemberExpression([FBuiltInNames[pbivnRTL],FBuiltInNames[pbifnSetCharAt]]);
         // first param  s
         Elements.AddElement.Expr:=ConvertElement(El.Value,AContext);
-        AContext.Access:=OldAccess;
         // second param  index
         Elements.AddElement.Expr:=ConvertElement(Param,ArgContext);
+        AContext.Access:=OldAccess;
         // third param  value
         Elements.AddElement.Expr:=AssignContext.RightSide;
         AssignContext.RightSide:=nil;

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

@@ -4084,6 +4084,7 @@ begin
   Add('  b:= c < s[1];');
   Add('  b:= c <= s[1];');
   Add('  s[1] := c;');
+  Add('  s[2+3] := c;');
   ConvertProgram;
   CheckSource('TestString_CharAt',
     LinesToStr([ // statements
@@ -4100,6 +4101,7 @@ begin
     '$mod.b = $mod.c < $mod.s.charAt(1 - 1);',
     '$mod.b = $mod.c <= $mod.s.charAt(1 - 1);',
     '$mod.s = rtl.setCharAt($mod.s, 1, $mod.c);',
+    '$mod.s = rtl.setCharAt($mod.s, 2 + 3, $mod.c);',
     '']));
 end;