fcl-passrc: fixed hashlist for pas2js

git-svn-id: trunk@40137 -
This commit is contained in:
Mattias Gaertner 2018-11-01 12:41:04 +00:00
parent 46b1838d60
commit 42c2859ce4
3 changed files with 28 additions and 16 deletions

View File

@ -2577,13 +2577,8 @@ begin
end; end;
procedure TPasResHashList.Clear; procedure TPasResHashList.Clear;
var
Arr: TStringDynArray;
i: Integer;
begin begin
Arr:=TJSObject.getOwnPropertyNames(FItems); FItems:=TJSObject.new;
for i:=0 to length(Arr)-1 do
JSDelete(FItems,Arr[i]);
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;

View File

@ -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;

View File

@ -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