pastojs: use UsesClause instead of UsesList

git-svn-id: trunk@36085 -
This commit is contained in:
Mattias Gaertner 2017-05-04 15:54:42 +00:00
parent 91ed2c4d9d
commit a358fec12b

View File

@ -1146,6 +1146,7 @@ type
Function IsPreservedWord(const aName: string): boolean; virtual; Function IsPreservedWord(const aName: string): boolean; virtual;
// Never create an element manually, always use the below functions // Never create an element manually, always use the below functions
Function IsElementUsed(El: TPasElement): boolean; virtual; Function IsElementUsed(El: TPasElement): boolean; virtual;
Function IsSystemUnit(aModule: TPasModule): boolean; virtual;
Function HasTypeInfo(El: TPasType; AContext: TConvertContext): boolean; virtual; Function HasTypeInfo(El: TPasType; AContext: TConvertContext): boolean; virtual;
Function IsClassRTTICreatedBefore(aClass: TPasClassType; Before: TPasElement): boolean; Function IsClassRTTICreatedBefore(aClass: TPasClassType; Before: TPasElement): boolean;
Function CreateElement(C: TJSElementClass; Src: TPasElement): TJSElement; virtual; Function CreateElement(C: TJSElementClass; Src: TPasElement): TJSElement; virtual;
@ -3411,8 +3412,8 @@ Var
ModuleName, ModVarName: String; ModuleName, ModVarName: String;
IntfContext: TSectionContext; IntfContext: TSectionContext;
ImplVarSt: TJSVariableStatement; ImplVarSt: TJSVariableStatement;
HasImplUsesList: Boolean; HasImplUsesClause: Boolean;
UsesList: TFPList; UsesClause: TPasUsesClause;
begin begin
Result:=Nil; Result:=Nil;
OuterSrc:=TJSSourceElements(CreateElement(TJSSourceElements, El)); OuterSrc:=TJSSourceElements(CreateElement(TJSSourceElements, El));
@ -3448,7 +3449,7 @@ begin
AddToSourceElements(Src,CreateLiteralString(El,'use strict')); AddToSourceElements(Src,CreateLiteralString(El,'use strict'));
ImplVarSt:=nil; ImplVarSt:=nil;
HasImplUsesList:=false; HasImplUsesClause:=false;
IntfContext:=TSectionContext.Create(El,Src,AContext); IntfContext:=TSectionContext.Create(El,Src,AContext);
try try
@ -3489,11 +3490,11 @@ begin
// add optional implementation uses list: [<implementation uses1>,<uses2>, ...] // add optional implementation uses list: [<implementation uses1>,<uses2>, ...]
if Assigned(El.ImplementationSection) then if Assigned(El.ImplementationSection) then
begin begin
UsesList:=El.ImplementationSection.UsesList; UsesClause:=El.ImplementationSection.UsesClause;
if (UsesList<>nil) and (UsesList.Count>0) then if length(UsesClause)>0 then
begin begin
ArgArray.Elements.AddElement.Expr:=CreateUsesList(El.ImplementationSection,AContext); ArgArray.Elements.AddElement.Expr:=CreateUsesList(El.ImplementationSection,AContext);
HasImplUsesList:=true; HasImplUsesClause:=true;
end; end;
end; end;
@ -3514,7 +3515,7 @@ begin
else else
begin begin
// add param // add param
if not HasImplUsesList then if not HasImplUsesClause then
ArgArray.Elements.AddElement.Expr:=CreateLiteralNull(El); ArgArray.Elements.AddElement.Expr:=CreateLiteralNull(El);
ArgArray.Elements.AddElement.Expr:=ImplFunc; ArgArray.Elements.AddElement.Expr:=ImplFunc;
end; end;
@ -9932,6 +9933,11 @@ begin
Result:=true; Result:=true;
end; end;
function TPasToJSConverter.IsSystemUnit(aModule: TPasModule): boolean;
begin
Result:=CompareText(aModule.Name,'system')=0;
end;
function TPasToJSConverter.HasTypeInfo(El: TPasType; AContext: TConvertContext function TPasToJSConverter.HasTypeInfo(El: TPasType; AContext: TConvertContext
): boolean; ): boolean;
begin begin
@ -10031,25 +10037,23 @@ function TPasToJSConverter.CreateUsesList(UsesSection: TPasSection;
AContext: TConvertContext): TJSArrayLiteral; AContext: TConvertContext): TJSArrayLiteral;
var var
ArgArray: TJSArrayLiteral; ArgArray: TJSArrayLiteral;
k: Integer; i: Integer;
El: TPasElement;
anUnitName: String; anUnitName: String;
ArgEx: TJSLiteral; ArgEx: TJSLiteral;
UsesList: TFPList; UsesClause: TPasUsesClause;
aModule: TPasModule;
begin begin
UsesList:=UsesSection.UsesList; UsesClause:=UsesSection.UsesClause;
ArgArray:=TJSArrayLiteral.Create(0,0); ArgArray:=TJSArrayLiteral.Create(0,0);
if UsesList<>nil then for i:=0 to length(UsesClause)-1 do
for k:=0 to UsesList.Count-1 do begin
begin aModule:=UsesClause[i].Module as TPasModule;
El:=TPasElement(UsesList[k]); if (not IsElementUsed(aModule)) and not IsSystemUnit(aModule) then
if not (El is TPasModule) then continue; continue;
if (not IsElementUsed(El)) and (CompareText('system',El.Name)<>0) then anUnitName := TransformVariableName(aModule,AContext);
continue; ArgEx := CreateLiteralString(UsesSection,anUnitName);
anUnitName := TransformVariableName(TPasModule(El),AContext); ArgArray.Elements.AddElement.Expr := ArgEx;
ArgEx := CreateLiteralString(UsesSection,anUnitName); end;
ArgArray.Elements.AddElement.Expr := ArgEx;
end;
Result:=ArgArray; Result:=ArgArray;
end; end;