Browse Source

pastojs: allow assign any constant to jsvalue

git-svn-id: trunk@37115 -
Mattias Gaertner 8 years ago
parent
commit
78e1047ce2
2 changed files with 30 additions and 1 deletions
  1. 29 0
      packages/pastojs/src/fppas2js.pp
  2. 1 1
      packages/pastojs/tests/tcmodules.pas

+ 29 - 0
packages/pastojs/src/fppas2js.pp

@@ -925,6 +925,9 @@ type
     function ExtractPasStringLiteral(El: TPasElement; const S: String): TJSString; virtual;
     function ExtractPasStringLiteral(El: TPasElement; const S: String): TJSString; virtual;
     function ComputeConst(Expr: TPasExpr; StoreCustomData: boolean): TJSValue; virtual;
     function ComputeConst(Expr: TPasExpr; StoreCustomData: boolean): TJSValue; virtual;
     function ComputeConstString(Expr: TPasExpr; StoreCustomData, NotEmpty: boolean): String; virtual;
     function ComputeConstString(Expr: TPasExpr; StoreCustomData, NotEmpty: boolean): String; virtual;
+    procedure CheckAssignExprRangeToCustom(
+      const LeftResolved: TPasResolverResult; RValue: TResEvalValue;
+      RHS: TPasExpr); override;
     // CustomData
     // CustomData
     function GetElementData(El: TPasElementBase;
     function GetElementData(El: TPasElementBase;
       DataClass: TPas2JsElementDataClass): TPas2JsElementData; virtual;
       DataClass: TPas2JsElementDataClass): TPas2JsElementData; virtual;
@@ -3022,6 +3025,32 @@ begin
   Result:=String(V.AsString);
   Result:=String(V.AsString);
 end;
 end;
 
 
+procedure TPas2JSResolver.CheckAssignExprRangeToCustom(
+  const LeftResolved: TPasResolverResult; RValue: TResEvalValue; RHS: TPasExpr);
+var
+  LeftBaseType: TPas2jsBaseType;
+begin
+  if (LeftResolved.BaseType<>btCustom) then
+    exit;
+  if not (LeftResolved.TypeEl is TPasUnresolvedSymbolRef) then
+    begin
+    {$IFDEF VerbosePas2JS}
+    writeln('TPas2JSResolver.CheckAssignExprRangeToCustom LeftResolved=',GetResolverResultDbg(LeftResolved));
+    {$ENDIF}
+    RaiseInternalError(20170902165913);
+    end;
+  if not (LeftResolved.TypeEl.CustomData is TResElDataPas2JSBaseType) then
+    exit;
+  LeftBaseType:=TResElDataPas2JSBaseType(LeftResolved.TypeEl.CustomData).JSBaseType;
+  if LeftBaseType=pbtJSValue then
+    // jsvalue:=someconst   ->  ok
+  else
+    RaiseNotYetImplemented(20170902170153,RHS);
+
+  if RHS=nil then ;
+  if RValue=nil then ;
+end;
+
 function TPas2JSResolver.GetElementData(El: TPasElementBase;
 function TPas2JSResolver.GetElementData(El: TPasElementBase;
   DataClass: TPas2JsElementDataClass): TPas2JsElementData;
   DataClass: TPas2JsElementDataClass): TPas2JsElementData;
 begin
 begin

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

@@ -2858,7 +2858,7 @@ begin
   Add('  e:=tmyenum(1);');
   Add('  e:=tmyenum(1);');
   Add('  e:=tmyenum(i);');
   Add('  e:=tmyenum(i);');
   Add('  s:=str(e);');
   Add('  s:=str(e);');
-  Add('  str(e,s)');
+  Add('  str(e,s);');
   Add('  s:=str(e:3);');
   Add('  s:=str(e:3);');
   ConvertProgram;
   ConvertProgram;
   CheckSource('TestEnumNumber',
   CheckSource('TestEnumNumber',