Browse Source

fcl-passrc: fixed hashlist for pas2js

git-svn-id: trunk@40137 -
Mattias Gaertner 6 years ago
parent
commit
42c2859ce4

+ 20 - 8
packages/fcl-passrc/src/pasresolver.pp

@@ -2577,13 +2577,8 @@ begin
 end;
 end;
 
 
 procedure TPasResHashList.Clear;
 procedure TPasResHashList.Clear;
-var
-  Arr: TStringDynArray;
-  i: Integer;
 begin
 begin
-  Arr:=TJSObject.getOwnPropertyNames(FItems);
-  for i:=0 to length(Arr)-1 do
-    JSDelete(FItems,Arr[i]);
+  FItems:=TJSObject.new;
 end;
 end;
 
 
 procedure TPasResHashList.Remove(const aName: string);
 procedure TPasResHashList.Remove(const aName: string);
@@ -2591,7 +2586,6 @@ begin
   if FItems.hasOwnProperty('%'+aName) then
   if FItems.hasOwnProperty('%'+aName) then
     JSDelete(FItems,'%'+aName);
     JSDelete(FItems,'%'+aName);
 end;
 end;
-
 {$endif}
 {$endif}
 
 
 { TResElDataBuiltInProc }
 { TResElDataBuiltInProc }
@@ -3511,6 +3505,11 @@ begin
     end;
     end;
   FItems.Add(LoName,Item);
   FItems.Add(LoName,Item);
   {$IFDEF VerbosePasResolver}
   {$IFDEF VerbosePasResolver}
+  if Item.Owner<>nil then
+    raise Exception.Create('20160925184110');
+  Item.Owner:=Self;
+  {$ENDIF}
+  {$IFDEF VerbosePasResolver}
   if FindIdentifier(Item.Identifier)<>Item then
   if FindIdentifier(Item.Identifier)<>Item then
     raise Exception.Create('20181018173201');
     raise Exception.Create('20181018173201');
   {$ENDIF}
   {$ENDIF}
@@ -4023,7 +4022,7 @@ begin
 
 
     {$IFDEF VerbosePasResolver}
     {$IFDEF VerbosePasResolver}
     writeln('TPasResolver.OnFindCallElements Proc Distance=',Distance,
     writeln('TPasResolver.OnFindCallElements Proc Distance=',Distance,
-      ' Data^.Found=',Data^.Found<>nil,' Data^.Distance=',ord(Data^.Distance),
+      ' Data^.Found=',Data^.Found<>nil,' Data^.Distance=',Data^.Distance,
       ' Signature={',GetProcTypeDescription(Proc.ProcType,[prptdUseName,prptdAddPaths]),'}',
       ' Signature={',GetProcTypeDescription(Proc.ProcType,[prptdUseName,prptdAddPaths]),'}',
       ' Abort=',Abort);
       ' Abort=',Abort);
     {$ENDIF}
     {$ENDIF}
@@ -16778,6 +16777,10 @@ begin
         btWideString,btUnicodeString:
         btWideString,btUnicodeString:
           Result:=cCompatible;
           Result:=cCompatible;
         else
         else
+          {$IFDEF VerbosePasResolver}
+          writeln('TPasResolver.CheckAssignResCompatibility ',{$ifdef pas2js}str(LBT){$else}LBT{$ENDIF});
+          writeln('AAA1 TPasResolver.CheckAssignResCompatibility ',str(BaseTypeChar),' ',str(BaseTypeString));
+          {$ENDIF}
           RaiseNotYetImplemented(20170417195208,ErrorEl,BaseTypeNames[LBT]);
           RaiseNotYetImplemented(20170417195208,ErrorEl,BaseTypeNames[LBT]);
         end
         end
       else if RBT=btContext then
       else if RBT=btContext then
@@ -19813,6 +19816,15 @@ begin
                         FBaseTypes[btString],FBaseTypes[btString],[rrfReadable])
                         FBaseTypes[btString],FBaseTypes[btString],[rrfReadable])
   else
   else
     RaiseNotYetImplemented(20160922163705,El);
     RaiseNotYetImplemented(20160922163705,El);
+  {$IF defined(nodejs) and defined(VerbosePasResolver)}
+  if not isNumber(ResolvedEl.BaseType) then
+    begin
+    {AllowWriteln}
+    writeln('TPasResolver.ComputeElement ',GetObjName(El),' typeof ResolvedEl.BaseType=',jsTypeOf(ResolvedEl.BaseType),' ResolvedEl=',GetResolverResultDbg(ResolvedEl));
+    RaiseInternalError(20181101123527,jsTypeOf(ResolvedEl.LoTypeEl));
+    {AllowWriteln-}
+    end;
+  {$ENDIF}
 end;
 end;
 
 
 function TPasResolver.Eval(Expr: TPasExpr; Flags: TResEvalFlags;
 function TPasResolver.Eval(Expr: TPasExpr; Flags: TResEvalFlags;

+ 2 - 2
packages/fcl-passrc/src/pastree.pp

@@ -140,7 +140,7 @@ type
     class var FLastPasElementId: NativeInt;
     class var FLastPasElementId: NativeInt;
     {$endif}
     {$endif}
     {$ifdef EnablePasTreeGlobalRefCount}
     {$ifdef EnablePasTreeGlobalRefCount}
-    class var FGlobalRefCount: int64;
+    class var FGlobalRefCount: NativeInt;
     {$endif}
     {$endif}
   protected
   protected
     procedure ProcessHints(const ASemiColonPrefix: boolean; var AResult: string); virtual;
     procedure ProcessHints(const ASemiColonPrefix: boolean; var AResult: string); virtual;
@@ -186,7 +186,7 @@ type
     property PasElementId: NativeInt read FPasElementId; // global unique id
     property PasElementId: NativeInt read FPasElementId; // global unique id
     {$endif}
     {$endif}
     {$ifdef EnablePasTreeGlobalRefCount}
     {$ifdef EnablePasTreeGlobalRefCount}
-    class property GlobalRefCount: int64 read FGlobalRefCount write FGlobalRefCount;
+    class property GlobalRefCount: NativeInt read FGlobalRefCount write FGlobalRefCount;
     {$endif}
     {$endif}
   end;
   end;
 
 

+ 6 - 6
packages/fcl-passrc/src/pasuseanalyzer.pas

@@ -463,7 +463,7 @@ begin
     if ContainsItem(Item) then
     if ContainsItem(Item) then
       raise Exception.Create('TPasAnalyzerSet.Add duplicate');
       raise Exception.Create('TPasAnalyzerSet.Add duplicate');
   {$ifdef pas2js}
   {$ifdef pas2js}
-  FItems[FItemToName(Item)]:=Item;
+  FItems['%'+FItemToName(Item)]:=Item;
   inc(FCount);
   inc(FCount);
   {$else}
   {$else}
   FTree.Add(Item);
   FTree.Add(Item);
@@ -475,7 +475,7 @@ procedure TPasAnalyzerKeySet.Remove(Item: Pointer);
 var
 var
   aName: string;
   aName: string;
 begin
 begin
-  aName:=FItemToName(Item);
+  aName:='%'+FItemToName(Item);
   if not FItems.hasOwnProperty(aName) then exit;
   if not FItems.hasOwnProperty(aName) then exit;
   JSDelete(FItems,aName);
   JSDelete(FItems,aName);
   dec(FCount);
   dec(FCount);
@@ -489,7 +489,7 @@ end;
 function TPasAnalyzerKeySet.ContainsItem(Item: Pointer): boolean;
 function TPasAnalyzerKeySet.ContainsItem(Item: Pointer): boolean;
 begin
 begin
   {$ifdef pas2js}
   {$ifdef pas2js}
-  Result:=FItems.hasOwnProperty(FItemToName(Item));
+  Result:=FItems.hasOwnProperty('%'+FItemToName(Item));
   {$else}
   {$else}
   Result:=FTree.Find(Item)<>nil;
   Result:=FTree.Find(Item)<>nil;
   {$endif}
   {$endif}
@@ -498,7 +498,7 @@ end;
 function TPasAnalyzerKeySet.ContainsKey(Key: Pointer): boolean;
 function TPasAnalyzerKeySet.ContainsKey(Key: Pointer): boolean;
 begin
 begin
   {$ifdef pas2js}
   {$ifdef pas2js}
-  Result:=FItems.hasOwnProperty(FKeyToName(Key));
+  Result:=FItems.hasOwnProperty('%'+FKeyToName(Key));
   {$else}
   {$else}
   Result:=FTree.FindKey(Key,FCompareKeyWithData)<>nil;
   Result:=FTree.FindKey(Key,FCompareKeyWithData)<>nil;
   {$endif}
   {$endif}
@@ -509,7 +509,7 @@ function TPasAnalyzerKeySet.FindItem(Item: Pointer): Pointer;
 var
 var
   aName: string;
   aName: string;
 begin
 begin
-  aName:=FItemToName(Item);
+  aName:='%'+FItemToName(Item);
   if not FItems.hasOwnProperty(aName) then
   if not FItems.hasOwnProperty(aName) then
     exit(nil)
     exit(nil)
   else
   else
@@ -532,7 +532,7 @@ function TPasAnalyzerKeySet.FindKey(Key: Pointer): Pointer;
 var
 var
   aName: string;
   aName: string;
 begin
 begin
-  aName:=FKeyToName(Key);
+  aName:='%'+FKeyToName(Key);
   if not FItems.hasOwnProperty(aName) then
   if not FItems.hasOwnProperty(aName) then
     exit(nil)
     exit(nil)
   else
   else