فهرست منبع

pastojs: fixed error on Arr+=

git-svn-id: trunk@47244 -
Mattias Gaertner 4 سال پیش
والد
کامیت
2ab0b76f3c
2فایلهای تغییر یافته به همراه12 افزوده شده و 5 حذف شده
  1. 11 5
      packages/pastojs/src/fppas2js.pp
  2. 1 0
      packages/pastojs/tests/tcmodules.pas

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

@@ -21516,6 +21516,8 @@ begin
           else
           else
             RaiseNotSupported(El,AContext,20180415101516);
             RaiseNotSupported(El,AContext,20180415101516);
           end;
           end;
+        if (LeftTypeEl.ClassType=TPasArrayType) and (El.Kind<>akDefault) then
+          aResolver.RaiseMsg(20201028212754,nIllegalQualifier,sIllegalQualifier,[AssignKindNames[El.Kind]],El);
         end;
         end;
       end;
       end;
     if AssignContext.RightSide=nil then
     if AssignContext.RightSide=nil then
@@ -21589,12 +21591,16 @@ begin
           begin
           begin
           // right side is dynamic array
           // right side is dynamic array
           if (AssignContext.LeftResolved.BaseType=btContext)
           if (AssignContext.LeftResolved.BaseType=btContext)
-              and (AssignContext.LeftResolved.LoTypeEl is TPasArrayType)
-              and (not RightIsTemporaryVar)
-              and (not LeftIsConstSetter) then
+              and (AssignContext.LeftResolved.LoTypeEl is TPasArrayType) then
             begin
             begin
-            // DynArrayA := DynArrayB  ->  DynArrayA = rtl.arrayRef(DynArrayB)
-            AssignContext.RightSide:=CreateArrayRef(El.right,AssignContext.RightSide);
+            if El.Kind<>akDefault then
+              aResolver.RaiseMsg(20201028213335,nIllegalQualifier,sIllegalQualifier,[AssignKindNames[El.Kind]],El);
+            if (not RightIsTemporaryVar)
+                and (not LeftIsConstSetter) then
+              begin
+              // DynArrayA := DynArrayB  ->  DynArrayA = rtl.arrayRef(DynArrayB)
+              AssignContext.RightSide:=CreateArrayRef(El.right,AssignContext.RightSide);
+              end;
             end;
             end;
           end;
           end;
         end
         end

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

@@ -10176,6 +10176,7 @@ end;
 
 
 procedure TTestModule.TestArray_DynArrayConstObjFPC;
 procedure TTestModule.TestArray_DynArrayConstObjFPC;
 begin
 begin
+  Parser.Options:=Parser.Options+[po_cassignments];
   StartProgram(false);
   StartProgram(false);
   Add([
   Add([
   '{$modeswitch arrayoperators}',
   '{$modeswitch arrayoperators}',