mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-16 02:29:12 +02:00
pastojs: specialized procedure type RTTI now uses pascal name
git-svn-id: trunk@46792 -
This commit is contained in:
parent
7159e63614
commit
a577fa3e58
@ -1890,8 +1890,8 @@ type
|
|||||||
// Name mangling
|
// Name mangling
|
||||||
Function GetOverloadName(El: TPasElement; AContext: TConvertContext): string;
|
Function GetOverloadName(El: TPasElement; AContext: TConvertContext): string;
|
||||||
Function CanClashWithGlobal(El: TPasElement): boolean;
|
Function CanClashWithGlobal(El: TPasElement): boolean;
|
||||||
Function TransformVariableName(ErrorEl: TPasElement; Const AName: String; CheckGlobal: boolean; AContext : TConvertContext): String; virtual;
|
Function TransformToJSName(ErrorEl: TPasElement; Const AName: String; CheckGlobal: boolean; AContext : TConvertContext): String; virtual;
|
||||||
Function TransformVariableName(El: TPasElement; AContext : TConvertContext) : String; virtual;
|
Function TransformElToJSName(El: TPasElement; AContext : TConvertContext) : String; virtual;
|
||||||
Function TransformModuleName(El: TPasModule; AddModulesPrefix: boolean; AContext : TConvertContext) : String; virtual;
|
Function TransformModuleName(El: TPasModule; AddModulesPrefix: boolean; AContext : TConvertContext) : String; virtual;
|
||||||
Function IsReservedWord(const aName: string; CheckGlobal: boolean): boolean; virtual;
|
Function IsReservedWord(const aName: string; CheckGlobal: boolean): boolean; virtual;
|
||||||
Function GetTypeInfoName(El: TPasType; AContext: TConvertContext;
|
Function GetTypeInfoName(El: TPasType; AContext: TConvertContext;
|
||||||
@ -5017,8 +5017,14 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
function TPas2JSResolver.CreateSpecializedTypeName(Item: TPRSpecializedItem): string;
|
function TPas2JSResolver.CreateSpecializedTypeName(Item: TPRSpecializedItem): string;
|
||||||
|
var
|
||||||
|
C: TClass;
|
||||||
begin
|
begin
|
||||||
Result:=Item.GenericEl.Name+'$G'+IntToStr(Item.Index+1);
|
C:=Item.GenericEl.ClassType;
|
||||||
|
if (C=TPasProcedureType) or (C=TPasFunctionType) then
|
||||||
|
Result:=inherited CreateSpecializedTypeName(Item)
|
||||||
|
else
|
||||||
|
Result:=Item.GenericEl.Name+'$G'+IntToStr(Item.Index+1);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TPas2JSResolver.SpecializeGenericImpl(
|
procedure TPas2JSResolver.SpecializeGenericImpl(
|
||||||
@ -6739,26 +6745,34 @@ var
|
|||||||
GenEl: TPasElement;
|
GenEl: TPasElement;
|
||||||
begin
|
begin
|
||||||
Data:=El.CustomData;
|
Data:=El.CustomData;
|
||||||
if Data is TPas2JSProcedureScope then
|
if Data is TPasGenericScope then
|
||||||
begin
|
begin
|
||||||
ProcScope:=TPas2JSProcedureScope(Data);
|
if Data is TPas2JSProcedureScope then
|
||||||
if ProcScope.SpecializedFromItem<>nil then
|
|
||||||
begin
|
begin
|
||||||
// specialized proc -> generic name + 's' + index
|
ProcScope:=TPas2JSProcedureScope(Data);
|
||||||
GenEl:=ProcScope.SpecializedFromItem.GenericEl;
|
if ProcScope.SpecializedFromItem<>nil then
|
||||||
GenScope:=TPas2JSProcedureScope(GenEl.CustomData);
|
begin
|
||||||
Result:=GenScope.OverloadName;
|
// specialized proc -> generic name + 's' + index
|
||||||
if Result='' then
|
GenEl:=ProcScope.SpecializedFromItem.GenericEl;
|
||||||
Result:=GenEl.Name+'$';
|
GenScope:=TPas2JSProcedureScope(GenEl.CustomData);
|
||||||
Result:=Result+'s'+IntToStr(ProcScope.SpecializedFromItem.Index);
|
Result:=GenScope.OverloadName;
|
||||||
|
if Result='' then
|
||||||
|
Result:=GenEl.Name+'$';
|
||||||
|
Result:=Result+'s'+IntToStr(ProcScope.SpecializedFromItem.Index);
|
||||||
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
Result:=ProcScope.OverloadName;
|
||||||
|
if Result='' then
|
||||||
|
Result:=El.Name;
|
||||||
|
end;
|
||||||
|
exit;
|
||||||
end
|
end
|
||||||
else
|
else if Data is TPas2JSProcTypeScope then
|
||||||
begin
|
begin
|
||||||
Result:=ProcScope.OverloadName;
|
Result:=TPas2JSProcTypeScope(Data).JSName;
|
||||||
if Result='' then
|
if Result<>'' then exit;
|
||||||
Result:=El.Name;
|
|
||||||
end;
|
end;
|
||||||
exit;
|
|
||||||
end;
|
end;
|
||||||
Result:=El.Name;
|
Result:=El.Name;
|
||||||
end;
|
end;
|
||||||
@ -7792,7 +7806,7 @@ begin
|
|||||||
RaiseInconsistency(20170125191923,ClassOrRec);
|
RaiseInconsistency(20170125191923,ClassOrRec);
|
||||||
C:=CreateCallExpression(Ref.Element);
|
C:=CreateCallExpression(Ref.Element);
|
||||||
try
|
try
|
||||||
ProcName:=TransformVariableName(Proc,AContext);
|
ProcName:=TransformElToJSName(Proc,AContext);
|
||||||
if ClassOrRec.ClassType=TPasRecordType then
|
if ClassOrRec.ClassType=TPasRecordType then
|
||||||
begin
|
begin
|
||||||
// create "path.$new()"
|
// create "path.$new()"
|
||||||
@ -9193,7 +9207,7 @@ begin
|
|||||||
begin
|
begin
|
||||||
// e.g. "Something.aClassVar:=" -> "aClass.aClassVar:="
|
// e.g. "Something.aClassVar:=" -> "aClass.aClassVar:="
|
||||||
LeftJS:=CreateReferencePathExpr(RightRefDecl.Parent,AContext);
|
LeftJS:=CreateReferencePathExpr(RightRefDecl.Parent,AContext);
|
||||||
Result:=CreateDotNameExpr(El,LeftJS,TJSString(TransformVariableName(RightRefDecl,AContext)));
|
Result:=CreateDotNameExpr(El,LeftJS,TJSString(TransformElToJSName(RightRefDecl,AContext)));
|
||||||
exit;
|
exit;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -9292,7 +9306,7 @@ end;
|
|||||||
function TPasToJSConverter.CreateIdentifierExpr(El: TPasElement;
|
function TPasToJSConverter.CreateIdentifierExpr(El: TPasElement;
|
||||||
AContext: TConvertContext): TJSElement;
|
AContext: TConvertContext): TJSElement;
|
||||||
begin
|
begin
|
||||||
Result:=CreatePrimitiveDotExpr(TransformVariableName(El,AContext),El);
|
Result:=CreatePrimitiveDotExpr(TransformElToJSName(El,AContext),El);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TPasToJSConverter.CreateIdentifierExpr(AName: string;
|
function TPasToJSConverter.CreateIdentifierExpr(AName: string;
|
||||||
@ -9300,7 +9314,7 @@ function TPasToJSConverter.CreateIdentifierExpr(AName: string;
|
|||||||
): TJSElement;
|
): TJSElement;
|
||||||
// CheckGlobal: check name clashes with global identifiers too
|
// CheckGlobal: check name clashes with global identifiers too
|
||||||
begin
|
begin
|
||||||
Result:=CreatePrimitiveDotExpr(TransformVariableName(PosEl,AName,CheckGlobal,AContext),PosEl);
|
Result:=CreatePrimitiveDotExpr(TransformToJSName(PosEl,AName,CheckGlobal,AContext),PosEl);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TPasToJSConverter.CreateSubDeclJSNameExpr(El: TPasElement;
|
function TPasToJSConverter.CreateSubDeclJSNameExpr(El: TPasElement;
|
||||||
@ -9327,7 +9341,7 @@ function TPasToJSConverter.CreateSubDeclNameExpr(El: TPasElement;
|
|||||||
var
|
var
|
||||||
JSName: String;
|
JSName: String;
|
||||||
begin
|
begin
|
||||||
JSName:=TransformVariableName(El,PasName,false,AContext);
|
JSName:=TransformToJSName(El,PasName,false,AContext);
|
||||||
Result:=CreateSubDeclJSNameExpr(El,JSName,AContext,PosEl);
|
Result:=CreateSubDeclJSNameExpr(El,JSName,AContext,PosEl);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -9336,7 +9350,7 @@ function TPasToJSConverter.CreateSubDeclNameExpr(El: TPasElement;
|
|||||||
var
|
var
|
||||||
JSName: String;
|
JSName: String;
|
||||||
begin
|
begin
|
||||||
JSName:=TransformVariableName(El,AContext);
|
JSName:=TransformElToJSName(El,AContext);
|
||||||
Result:=CreateSubDeclJSNameExpr(El,JSName,AContext,PosEl);
|
Result:=CreateSubDeclJSNameExpr(El,JSName,AContext,PosEl);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -9637,7 +9651,7 @@ begin
|
|||||||
begin
|
begin
|
||||||
// writing a class var -> aClass.VarName
|
// writing a class var -> aClass.VarName
|
||||||
PathExpr:=CreateReferencePathExpr(Decl.Parent,AContext);
|
PathExpr:=CreateReferencePathExpr(Decl.Parent,AContext);
|
||||||
Result:=CreateDotNameExpr(El,PathExpr,TJSString(TransformVariableName(Decl,AContext)));
|
Result:=CreateDotNameExpr(El,PathExpr,TJSString(TransformElToJSName(Decl,AContext)));
|
||||||
CallTypeSetter;
|
CallTypeSetter;
|
||||||
exit;
|
exit;
|
||||||
end
|
end
|
||||||
@ -9673,7 +9687,7 @@ begin
|
|||||||
Result:=Call;
|
Result:=Call;
|
||||||
Call.Expr:=CreateMemberExpression([GetBIName(pbivnRTL),GetBIName(pbifnGetResourcestring)]);
|
Call.Expr:=CreateMemberExpression([GetBIName(pbivnRTL),GetBIName(pbifnGetResourcestring)]);
|
||||||
Call.AddArg(CreatePrimitiveDotExpr(TransformModuleName(Decl.GetModule,true,AContext),El));
|
Call.AddArg(CreatePrimitiveDotExpr(TransformModuleName(Decl.GetModule,true,AContext),El));
|
||||||
Call.AddArg(CreateLiteralString(El,TransformVariableName(Decl,AContext)));
|
Call.AddArg(CreateLiteralString(El,TransformElToJSName(Decl,AContext)));
|
||||||
exit;
|
exit;
|
||||||
end
|
end
|
||||||
else if aResolver.IsHelperMethod(Decl)
|
else if aResolver.IsHelperMethod(Decl)
|
||||||
@ -9976,7 +9990,7 @@ function TPasToJSConverter.ConvertInheritedExpr(El: TInheritedExpr;
|
|||||||
end
|
end
|
||||||
else
|
else
|
||||||
FunName:=CreateReferencePath(AncestorClass,AContext,rpkPathAndName,true)
|
FunName:=CreateReferencePath(AncestorClass,AContext,rpkPathAndName,true)
|
||||||
+'.'+TransformVariableName(AncestorProc,AContext);
|
+'.'+TransformElToJSName(AncestorProc,AContext);
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
FunName:=CreateReferencePath(AncestorProc,AContext,rpkPathAndName,true);
|
FunName:=CreateReferencePath(AncestorProc,AContext,rpkPathAndName,true);
|
||||||
@ -13709,7 +13723,7 @@ begin
|
|||||||
Call:=CreateCallExpression(PosEl);
|
Call:=CreateCallExpression(PosEl);
|
||||||
Call.Expr:=CreatePrimitiveDotExpr(FunName,PosEl);
|
Call.Expr:=CreatePrimitiveDotExpr(FunName,PosEl);
|
||||||
// parameter: "Create"
|
// parameter: "Create"
|
||||||
Call.AddArg(CreateLiteralString(PosEl,TransformVariableName(aConstructor,AContext)));
|
Call.AddArg(CreateLiteralString(PosEl,TransformElToJSName(aConstructor,AContext)));
|
||||||
ThrowSt.A:=Call;
|
ThrowSt.A:=Call;
|
||||||
if length(El.Params)>1 then
|
if length(El.Params)>1 then
|
||||||
begin
|
begin
|
||||||
@ -14064,7 +14078,7 @@ begin
|
|||||||
PasVar:=Ref.Declaration as TPasVariable;
|
PasVar:=Ref.Declaration as TPasVariable;
|
||||||
Vars.Add(PasVar);
|
Vars.Add(PasVar);
|
||||||
ObjLitEl:=ObjLit.Elements.AddElement;
|
ObjLitEl:=ObjLit.Elements.AddElement;
|
||||||
CurName:=TransformVariableName(PasVar,AContext);
|
CurName:=TransformElToJSName(PasVar,AContext);
|
||||||
if CurName[1]='[' then
|
if CurName[1]='[' then
|
||||||
begin
|
begin
|
||||||
if CurName[length(CurName)]=']' then
|
if CurName[length(CurName)]=']' then
|
||||||
@ -14087,7 +14101,7 @@ begin
|
|||||||
if not IsElementUsed(PasVar) then continue;
|
if not IsElementUsed(PasVar) then continue;
|
||||||
// missing instance field in constant -> add default value
|
// missing instance field in constant -> add default value
|
||||||
ObjLitEl:=ObjLit.Elements.AddElement;
|
ObjLitEl:=ObjLit.Elements.AddElement;
|
||||||
ObjLitEl.Name:=TJSString(TransformVariableName(PasVar,AContext));
|
ObjLitEl.Name:=TJSString(TransformElToJSName(PasVar,AContext));
|
||||||
ObjLitEl.Expr:=CreateValInit(PasVar.VarType,PasVar.Expr,PasVar,AContext);
|
ObjLitEl.Expr:=CreateValInit(PasVar.VarType,PasVar.Expr,PasVar,AContext);
|
||||||
end;
|
end;
|
||||||
ok:=true;
|
ok:=true;
|
||||||
@ -14245,7 +14259,7 @@ begin
|
|||||||
// create 'A: initvalue'
|
// create 'A: initvalue'
|
||||||
Obj:=TObjectContext(AContext).JSElement as TJSObjectLiteral;
|
Obj:=TObjectContext(AContext).JSElement as TJSObjectLiteral;
|
||||||
ObjLit:=Obj.Elements.AddElement;
|
ObjLit:=Obj.Elements.AddElement;
|
||||||
ObjLit.Name:=TJSString(TransformVariableName(El,AContext));
|
ObjLit.Name:=TJSString(TransformElToJSName(El,AContext));
|
||||||
ObjLit.Expr:=CreateVarInit(El,AContext);
|
ObjLit.Expr:=CreateVarInit(El,AContext);
|
||||||
end
|
end
|
||||||
else if AContext.IsGlobal then
|
else if AContext.IsGlobal then
|
||||||
@ -14474,7 +14488,7 @@ Var
|
|||||||
end;
|
end;
|
||||||
// add element: name : { ... }
|
// add element: name : { ... }
|
||||||
Lit:=TJSObjectLiteral(ResStrVarEl.Init).Elements.AddElement;
|
Lit:=TJSObjectLiteral(ResStrVarEl.Init).Elements.AddElement;
|
||||||
Lit.Name:=TJSString(TransformVariableName(ResStr,AContext));
|
Lit.Name:=TJSString(TransformElToJSName(ResStr,AContext));
|
||||||
ObjLit:=TJSObjectLiteral(CreateElement(TJSObjectLiteral,ResStr));
|
ObjLit:=TJSObjectLiteral(CreateElement(TJSObjectLiteral,ResStr));
|
||||||
Lit.Expr:=ObjLit;
|
Lit.Expr:=ObjLit;
|
||||||
// add sub element: org: value
|
// add sub element: org: value
|
||||||
@ -14694,7 +14708,7 @@ var
|
|||||||
if (Member.ClassType=TPasClassConstructor)
|
if (Member.ClassType=TPasClassConstructor)
|
||||||
or (Member.ClassType=TPasClassDestructor) then
|
or (Member.ClassType=TPasClassDestructor) then
|
||||||
continue;
|
continue;
|
||||||
Arr.AddElement(CreateLiteralString(Member,TransformVariableName(Member,AContext)));
|
Arr.AddElement(CreateLiteralString(Member,TransformElToJSName(Member,AContext)));
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -14792,7 +14806,7 @@ begin
|
|||||||
Call.AddArg(CreatePrimitiveDotExpr(OwnerName,El));
|
Call.AddArg(CreatePrimitiveDotExpr(OwnerName,El));
|
||||||
|
|
||||||
// add parameter: string constant '"classname"'
|
// add parameter: string constant '"classname"'
|
||||||
ArgEx := CreateLiteralString(El,TransformVariableName(El,AContext));
|
ArgEx := CreateLiteralString(El,TransformElToJSName(El,AContext));
|
||||||
Call.AddArg(ArgEx);
|
Call.AddArg(ArgEx);
|
||||||
|
|
||||||
if El.ObjKind=okInterface then
|
if El.ObjKind=okInterface then
|
||||||
@ -14930,7 +14944,7 @@ begin
|
|||||||
Proc:=TPasProcedure(P);
|
Proc:=TPasProcedure(P);
|
||||||
if IsTObject and (C=TPasDestructor) then
|
if IsTObject and (C=TPasDestructor) then
|
||||||
begin
|
begin
|
||||||
DestructorName:=TransformVariableName(P,AContext);
|
DestructorName:=TransformElToJSName(P,AContext);
|
||||||
if DestructorName<>'Destroy' then
|
if DestructorName<>'Destroy' then
|
||||||
begin
|
begin
|
||||||
// add 'rtl.tObjectDestroy="destroy";'
|
// add 'rtl.tObjectDestroy="destroy";'
|
||||||
@ -15176,14 +15190,14 @@ begin
|
|||||||
// add 'TypeName: {}'
|
// add 'TypeName: {}'
|
||||||
ParentObj:=TObjectContext(AContext).JSElement as TJSObjectLiteral;
|
ParentObj:=TObjectContext(AContext).JSElement as TJSObjectLiteral;
|
||||||
ObjLit:=ParentObj.Elements.AddElement;
|
ObjLit:=ParentObj.Elements.AddElement;
|
||||||
ObjLit.Name:=TJSString(TransformVariableName(El,AContext));
|
ObjLit.Name:=TJSString(TransformElToJSName(El,AContext));
|
||||||
ObjLit.Expr:=Obj;
|
ObjLit.Expr:=Obj;
|
||||||
Result:=Obj;
|
Result:=Obj;
|
||||||
end
|
end
|
||||||
else if El.Parent is TProcedureBody then
|
else if El.Parent is TProcedureBody then
|
||||||
begin
|
begin
|
||||||
// add 'var TypeName = {}'
|
// add 'var TypeName = {}'
|
||||||
VarSt:=CreateVarStatement(TransformVariableName(El,AContext),Obj,El);
|
VarSt:=CreateVarStatement(TransformElToJSName(El,AContext),Obj,El);
|
||||||
if AContext.JSElement is TJSSourceElements then
|
if AContext.JSElement is TJSSourceElements then
|
||||||
begin
|
begin
|
||||||
Src:=TJSSourceElements(AContext.JSElement);
|
Src:=TJSSourceElements(AContext.JSElement);
|
||||||
@ -15205,7 +15219,7 @@ begin
|
|||||||
for i:=0 to El.Values.Count-1 do
|
for i:=0 to El.Values.Count-1 do
|
||||||
begin
|
begin
|
||||||
EnumValue:=TPasEnumValue(El.Values[i]);
|
EnumValue:=TPasEnumValue(El.Values[i]);
|
||||||
JSName:=TJSString(TransformVariableName(EnumValue,AContext));
|
JSName:=TJSString(TransformElToJSName(EnumValue,AContext));
|
||||||
// add "0":"value"
|
// add "0":"value"
|
||||||
ObjLit:=Obj.Elements.AddElement;
|
ObjLit:=Obj.Elements.AddElement;
|
||||||
ObjLit.Name:=TJSString(IntToStr(i));
|
ObjLit.Name:=TJSString(IntToStr(i));
|
||||||
@ -16030,13 +16044,13 @@ begin
|
|||||||
// local/nested or anonymous function
|
// local/nested or anonymous function
|
||||||
Result:=FS;
|
Result:=FS;
|
||||||
if (El.Name<>'') and not IsClassConDestructor then
|
if (El.Name<>'') and not IsClassConDestructor then
|
||||||
FD.Name:=TJSString(TransformVariableName(El,AContext));
|
FD.Name:=TJSString(TransformElToJSName(El,AContext));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
for n := 0 to El.ProcType.Args.Count - 1 do
|
for n := 0 to El.ProcType.Args.Count - 1 do
|
||||||
begin
|
begin
|
||||||
Arg:=TPasArgument(El.ProcType.Args[n]);
|
Arg:=TPasArgument(El.ProcType.Args[n]);
|
||||||
FD.Params.Add(TransformVariableName(Arg,AContext));
|
FD.Params.Add(TransformElToJSName(Arg,AContext));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
BodyPas:=ImplProc.Body;
|
BodyPas:=ImplProc.Body;
|
||||||
@ -17015,7 +17029,7 @@ begin
|
|||||||
begin
|
begin
|
||||||
PasVar:=TPasVariable(Fields[i]);
|
PasVar:=TPasVariable(Fields[i]);
|
||||||
CurAssignSt:=TJSSimpleAssignStatement(CreateElement(TJSSimpleAssignStatement,El));
|
CurAssignSt:=TJSSimpleAssignStatement(CreateElement(TJSSimpleAssignStatement,El));
|
||||||
VarName:=TransformVariableName(PasVar,AContext);
|
VarName:=TransformElToJSName(PasVar,AContext);
|
||||||
CurAssignSt.LHS:=CreateMemberExpression([LocalVarName,VarName]);
|
CurAssignSt.LHS:=CreateMemberExpression([LocalVarName,VarName]);
|
||||||
CurAssignSt.Expr:=CreateVarInit(PasVar,AContext);
|
CurAssignSt.Expr:=CreateVarInit(PasVar,AContext);
|
||||||
AddToSourceElements(Src,CurAssignSt);
|
AddToSourceElements(Src,CurAssignSt);
|
||||||
@ -17103,7 +17117,7 @@ begin
|
|||||||
VarType:=PasVar.VarType;
|
VarType:=PasVar.VarType;
|
||||||
if aResolver<>nil then
|
if aResolver<>nil then
|
||||||
VarType:=aResolver.ResolveAliasType(VarType);
|
VarType:=aResolver.ResolveAliasType(VarType);
|
||||||
VarName:=TransformVariableName(PasVar,aContext);
|
VarName:=TransformElToJSName(PasVar,aContext);
|
||||||
if VarType.ClassType=TPasRecordType then
|
if VarType.ClassType=TPasRecordType then
|
||||||
begin
|
begin
|
||||||
// record
|
// record
|
||||||
@ -17202,7 +17216,7 @@ begin
|
|||||||
for i:=0 to Fields.Count-1 do
|
for i:=0 to Fields.Count-1 do
|
||||||
begin
|
begin
|
||||||
PasVar:=TPasVariable(Fields[i]);
|
PasVar:=TPasVariable(Fields[i]);
|
||||||
VarName:=TransformVariableName(PasVar,AContext);
|
VarName:=TransformElToJSName(PasVar,AContext);
|
||||||
SrcExpr:=CreateMemberExpression([SrcParamName,VarName]);
|
SrcExpr:=CreateMemberExpression([SrcParamName,VarName]);
|
||||||
if aResolver<>nil then
|
if aResolver<>nil then
|
||||||
begin
|
begin
|
||||||
@ -18024,7 +18038,7 @@ begin
|
|||||||
LitEl:=ObjLit.Elements.AddElement;
|
LitEl:=ObjLit.Elements.AddElement;
|
||||||
LitEl.Name:=TJSString(List[i]);
|
LitEl.Name:=TJSString(List[i]);
|
||||||
Proc:=TPasProcedure(List.Objects[i]);
|
Proc:=TPasProcedure(List.Objects[i]);
|
||||||
LitEl.Expr:=CreateLiteralJSString(Proc,TJSString(TransformVariableName(Proc,FuncContext)));
|
LitEl.Expr:=CreateLiteralJSString(Proc,TJSString(TransformElToJSName(Proc,FuncContext)));
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -18165,7 +18179,7 @@ begin
|
|||||||
else
|
else
|
||||||
begin
|
begin
|
||||||
// create rtl.createCallback(target, "FunName")
|
// create rtl.createCallback(target, "FunName")
|
||||||
FunName:=TransformVariableName(Proc,AContext);
|
FunName:=TransformElToJSName(Proc,AContext);
|
||||||
Call.AddArg(CreateLiteralString(Expr,FunName));
|
Call.AddArg(CreateLiteralString(Expr,FunName));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -18741,7 +18755,7 @@ begin
|
|||||||
Param:=TJSArrayLiteral(CreateElement(TJSArrayLiteral,Arg));
|
Param:=TJSArrayLiteral(CreateElement(TJSArrayLiteral,Arg));
|
||||||
TargetParams.Elements.AddElement.Expr:=Param;
|
TargetParams.Elements.AddElement.Expr:=Param;
|
||||||
// add "argname"
|
// add "argname"
|
||||||
ArgName:=TransformVariableName(Arg,Arg.Name,true,AContext);
|
ArgName:=TransformToJSName(Arg,Arg.Name,true,AContext);
|
||||||
Param.Elements.AddElement.Expr:=CreateLiteralString(Arg,ArgName);
|
Param.Elements.AddElement.Expr:=CreateLiteralString(Arg,ArgName);
|
||||||
Flags:=0;
|
Flags:=0;
|
||||||
// add "argtype"
|
// add "argtype"
|
||||||
@ -18893,7 +18907,7 @@ begin
|
|||||||
if ConstrParent.HelperForType<>nil then
|
if ConstrParent.HelperForType<>nil then
|
||||||
aResolver.RaiseMsg(20190223220134,nXExpectedButYFound,sXExpectedButYFound,
|
aResolver.RaiseMsg(20190223220134,nXExpectedButYFound,sXExpectedButYFound,
|
||||||
['class method','helper method'],Expr);
|
['class method','helper method'],Expr);
|
||||||
aName:=TransformVariableName(aConstructor,aContext);
|
aName:=TransformElToJSName(aConstructor,aContext);
|
||||||
|
|
||||||
if AttrArrayLit=nil then
|
if AttrArrayLit=nil then
|
||||||
AttrArrayLit:=TJSArrayLiteral(CreateElement(TJSArrayLiteral,PosEl));
|
AttrArrayLit:=TJSArrayLiteral(CreateElement(TJSArrayLiteral,PosEl));
|
||||||
@ -19002,7 +19016,7 @@ begin
|
|||||||
// $r.addField
|
// $r.addField
|
||||||
Call.Expr:=CreateMemberExpression([GetBIName(pbivnRTTILocal),GetBIName(pbifnRTTIAddField)]);
|
Call.Expr:=CreateMemberExpression([GetBIName(pbivnRTTILocal),GetBIName(pbifnRTTIAddField)]);
|
||||||
// param "varname"
|
// param "varname"
|
||||||
aName:=TransformVariableName(V,AContext);
|
aName:=TransformElToJSName(V,AContext);
|
||||||
Call.AddArg(CreateLiteralString(V,aName));
|
Call.AddArg(CreateLiteralString(V,aName));
|
||||||
// param typeinfo
|
// param typeinfo
|
||||||
Call.AddArg(JSTypeInfo);
|
Call.AddArg(JSTypeInfo);
|
||||||
@ -19084,7 +19098,7 @@ begin
|
|||||||
Call.Expr:=CreateMemberExpression([GetBIName(pbivnRTTILocal),GetBIName(pbifnRTTIAddMethod)]);
|
Call.Expr:=CreateMemberExpression([GetBIName(pbivnRTTILocal),GetBIName(pbifnRTTIAddMethod)]);
|
||||||
|
|
||||||
// param "funname"
|
// param "funname"
|
||||||
FunName:=TransformVariableName(Proc,AContext);
|
FunName:=TransformElToJSName(Proc,AContext);
|
||||||
Call.AddArg(CreateLiteralString(Proc,FunName));
|
Call.AddArg(CreateLiteralString(Proc,FunName));
|
||||||
|
|
||||||
// param methodkind as number
|
// param methodkind as number
|
||||||
@ -19149,7 +19163,7 @@ var
|
|||||||
|
|
||||||
function GetAccessorName(Decl: TPasElement): String;
|
function GetAccessorName(Decl: TPasElement): String;
|
||||||
begin
|
begin
|
||||||
Result:=TransformVariableName(Decl,AContext);
|
Result:=TransformElToJSName(Decl,AContext);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure AddOption(const aName: String; JS: TJSElement);
|
procedure AddOption(const aName: String; JS: TJSElement);
|
||||||
@ -19189,7 +19203,7 @@ begin
|
|||||||
Call.Expr:=CreateMemberExpression([GetBIName(pbivnRTTILocal),GetBIName(pbifnRTTIAddProperty)]);
|
Call.Expr:=CreateMemberExpression([GetBIName(pbivnRTTILocal),GetBIName(pbifnRTTIAddProperty)]);
|
||||||
|
|
||||||
// param "propname"
|
// param "propname"
|
||||||
PropName:=TransformVariableName(Prop,Prop.Name,false,AContext);
|
PropName:=TransformToJSName(Prop,Prop.Name,false,AContext);
|
||||||
Call.AddArg(CreateLiteralString(Prop,PropName));
|
Call.AddArg(CreateLiteralString(Prop,PropName));
|
||||||
|
|
||||||
// add flags
|
// add flags
|
||||||
@ -19562,22 +19576,22 @@ begin
|
|||||||
MemberEl:=TPasElement(Members[0]);
|
MemberEl:=TPasElement(Members[0]);
|
||||||
if not SameText(MemberEl.Name,'D1') then
|
if not SameText(MemberEl.Name,'D1') then
|
||||||
RaiseInconsistency(20180415094721,PosEl);
|
RaiseInconsistency(20180415094721,PosEl);
|
||||||
PropEl.Name:=TJSString(TransformVariableName(MemberEl,AContext));
|
PropEl.Name:=TJSString(TransformElToJSName(MemberEl,AContext));
|
||||||
PropEl.Expr:=CreateLiteralHexNumber(PosEl,GUID.D1,8);
|
PropEl.Expr:=CreateLiteralHexNumber(PosEl,GUID.D1,8);
|
||||||
// D2: 0x1234
|
// D2: 0x1234
|
||||||
PropEl:=Result.Elements.AddElement;
|
PropEl:=Result.Elements.AddElement;
|
||||||
MemberEl:=TPasElement(Members[1]);
|
MemberEl:=TPasElement(Members[1]);
|
||||||
PropEl.Name:=TJSString(TransformVariableName(MemberEl,AContext));
|
PropEl.Name:=TJSString(TransformElToJSName(MemberEl,AContext));
|
||||||
PropEl.Expr:=CreateLiteralHexNumber(PosEl,GUID.D2,4);
|
PropEl.Expr:=CreateLiteralHexNumber(PosEl,GUID.D2,4);
|
||||||
// D3: 0x1234
|
// D3: 0x1234
|
||||||
PropEl:=Result.Elements.AddElement;
|
PropEl:=Result.Elements.AddElement;
|
||||||
MemberEl:=TPasElement(Members[2]);
|
MemberEl:=TPasElement(Members[2]);
|
||||||
PropEl.Name:=TJSString(TransformVariableName(MemberEl,AContext));
|
PropEl.Name:=TJSString(TransformElToJSName(MemberEl,AContext));
|
||||||
PropEl.Expr:=CreateLiteralHexNumber(PosEl,GUID.D3,4);
|
PropEl.Expr:=CreateLiteralHexNumber(PosEl,GUID.D3,4);
|
||||||
// D4: [0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12]
|
// D4: [0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12]
|
||||||
PropEl:=Result.Elements.AddElement;
|
PropEl:=Result.Elements.AddElement;
|
||||||
MemberEl:=TPasElement(Members[3]);
|
MemberEl:=TPasElement(Members[3]);
|
||||||
PropEl.Name:=TJSString(TransformVariableName(MemberEl,AContext));
|
PropEl.Name:=TJSString(TransformElToJSName(MemberEl,AContext));
|
||||||
ArrLit:=TJSArrayLiteral(CreateElement(TJSArrayLiteral,PosEl));
|
ArrLit:=TJSArrayLiteral(CreateElement(TJSArrayLiteral,PosEl));
|
||||||
PropEl.Expr:=ArrLit;
|
PropEl.Expr:=ArrLit;
|
||||||
for i:=0 to 7 do
|
for i:=0 to 7 do
|
||||||
@ -19904,9 +19918,9 @@ procedure TPasToJSConverter.AddClassSupportedInterfaces(El: TPasClassType;
|
|||||||
MapItem:=TObject(Map.Procs[i]);
|
MapItem:=TObject(Map.Procs[i]);
|
||||||
if not (MapItem is TPasProcedure) then continue;
|
if not (MapItem is TPasProcedure) then continue;
|
||||||
Proc:=TPasProcedure(MapItem);
|
Proc:=TPasProcedure(MapItem);
|
||||||
ProcName:=TransformVariableName(Proc,FuncContext);
|
ProcName:=TransformElToJSName(Proc,FuncContext);
|
||||||
IntfProc:=TObject(Intf.Members[i]) as TPasProcedure;
|
IntfProc:=TObject(Intf.Members[i]) as TPasProcedure;
|
||||||
IntfProcName:=TransformVariableName(IntfProc,FuncContext);
|
IntfProcName:=TransformElToJSName(IntfProc,FuncContext);
|
||||||
if IntfProcName=ProcName then continue;
|
if IntfProcName=ProcName then continue;
|
||||||
if ObjLit=nil then
|
if ObjLit=nil then
|
||||||
begin
|
begin
|
||||||
@ -20533,7 +20547,7 @@ begin
|
|||||||
Call:=CreateCallExpression(PosEl);
|
Call:=CreateCallExpression(PosEl);
|
||||||
ProcPath:=CreateReferencePath(Proc.Parent,AContext,rpkPathAndName)+'.'+GetBIName(pbifnHelperNew);
|
ProcPath:=CreateReferencePath(Proc.Parent,AContext,rpkPathAndName)+'.'+GetBIName(pbifnHelperNew);
|
||||||
Call.Expr:=CreatePrimitiveDotExpr(ProcPath,PosEl);
|
Call.Expr:=CreatePrimitiveDotExpr(ProcPath,PosEl);
|
||||||
ProcPath:=TransformVariableName(Proc,AContext);
|
ProcPath:=TransformElToJSName(Proc,AContext);
|
||||||
Call.AddArg(CreateLiteralString(PosEl,ProcPath));
|
Call.AddArg(CreateLiteralString(PosEl,ProcPath));
|
||||||
end;
|
end;
|
||||||
ArrLit:=TJSArrayLiteral(CreateElement(TJSArrayLiteral,PosEl));
|
ArrLit:=TJSArrayLiteral(CreateElement(TJSArrayLiteral,PosEl));
|
||||||
@ -20791,7 +20805,7 @@ begin
|
|||||||
RaiseNotSupported(El,AContext,20170208141926,'absolute');
|
RaiseNotSupported(El,AContext,20170208141926,'absolute');
|
||||||
|
|
||||||
V:=TJSVarDeclaration(CreateElement(TJSVarDeclaration,El));
|
V:=TJSVarDeclaration(CreateElement(TJSVarDeclaration,El));
|
||||||
V.Name:=TransformVariableName(El,AContext);
|
V.Name:=TransformElToJSName(El,AContext);
|
||||||
V.Init:=CreateVarInit(El,AContext);
|
V.Init:=CreateVarInit(El,AContext);
|
||||||
Result:=V;
|
Result:=V;
|
||||||
end;
|
end;
|
||||||
@ -23879,7 +23893,7 @@ begin
|
|||||||
if Result<>'' then Result:=Result+'.';
|
if Result<>'' then Result:=Result+'.';
|
||||||
rpkPathAndName:
|
rpkPathAndName:
|
||||||
begin
|
begin
|
||||||
ShortName:=TransformVariableName(El,AContext);
|
ShortName:=TransformElToJSName(El,AContext);
|
||||||
if Result='' then
|
if Result='' then
|
||||||
Result:=ShortName
|
Result:=ShortName
|
||||||
else if (ShortName<>'') and (ShortName[1] in ['[','(']) then
|
else if (ShortName<>'') and (ShortName[1] in ['[','(']) then
|
||||||
@ -23944,7 +23958,7 @@ begin
|
|||||||
Result:=TransformModuleName(TPasModule(Parent),true,AContext)
|
Result:=TransformModuleName(TPasModule(Parent),true,AContext)
|
||||||
else
|
else
|
||||||
RaiseNotSupported(El,AContext,20200609230526,GetObjName(aType));
|
RaiseNotSupported(El,AContext,20200609230526,GetObjName(aType));
|
||||||
Result:=Result+'.'+TransformVariableName(aType,AContext);
|
Result:=Result+'.'+TransformElToJSName(aType,AContext);
|
||||||
if AliasGlobals then
|
if AliasGlobals then
|
||||||
Result:=CreateGlobalAlias(El,Result,AContext);
|
Result:=CreateGlobalAlias(El,Result,AContext);
|
||||||
end;
|
end;
|
||||||
@ -24878,7 +24892,7 @@ begin
|
|||||||
ListFirst:=TJSStatementList(CreateElement(TJSStatementList,El.Body));
|
ListFirst:=TJSStatementList(CreateElement(TJSStatementList,El.Body));
|
||||||
ListLast:=ListFirst;
|
ListLast:=ListFirst;
|
||||||
IfSt.BTrue:=ListFirst;
|
IfSt.BTrue:=ListFirst;
|
||||||
V:=CreateVarStatement(TransformVariableName(El,El.VariableName,true,AContext),
|
V:=CreateVarStatement(TransformToJSName(El,El.VariableName,true,AContext),
|
||||||
CreatePrimitiveDotExpr(GetBIName(pbivnExceptObject),El),El);
|
CreatePrimitiveDotExpr(GetBIName(pbivnExceptObject),El),El);
|
||||||
ListFirst.A:=V;
|
ListFirst.A:=V;
|
||||||
// add statements
|
// add statements
|
||||||
@ -24977,7 +24991,7 @@ begin
|
|||||||
// create 'A: initvalue'
|
// create 'A: initvalue'
|
||||||
Obj:=TObjectContext(AContext).JSElement as TJSObjectLiteral;
|
Obj:=TObjectContext(AContext).JSElement as TJSObjectLiteral;
|
||||||
ObjLit:=Obj.Elements.AddElement;
|
ObjLit:=Obj.Elements.AddElement;
|
||||||
ObjLit.Name:=TJSString(TransformVariableName(El,AContext));
|
ObjLit.Name:=TJSString(TransformElToJSName(El,AContext));
|
||||||
ObjLit.Expr:=CreateVarInit(El,AContext);
|
ObjLit.Expr:=CreateVarInit(El,AContext);
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
@ -25102,7 +25116,7 @@ begin
|
|||||||
RaiseNotSupported(El,AContext,20190105104054);
|
RaiseNotSupported(El,AContext,20190105104054);
|
||||||
// local record type elevated to global scope
|
// local record type elevated to global scope
|
||||||
Src:=TJSSourceElements(AContext.JSElement);
|
Src:=TJSSourceElements(AContext.JSElement);
|
||||||
VarSt:=CreateVarStatement(TransformVariableName(El,AContext),Call,El);
|
VarSt:=CreateVarStatement(TransformElToJSName(El,AContext),Call,El);
|
||||||
AddToSourceElements(Src,VarSt); // keep Result=nil
|
AddToSourceElements(Src,VarSt); // keep Result=nil
|
||||||
// add parameter: parent = null
|
// add parameter: parent = null
|
||||||
Call.AddArg(CreateLiteralNull(El));
|
Call.AddArg(CreateLiteralNull(El));
|
||||||
@ -25125,7 +25139,7 @@ begin
|
|||||||
Call.AddArg(CreatePrimitiveDotExpr(JSParentName,El));
|
Call.AddArg(CreatePrimitiveDotExpr(JSParentName,El));
|
||||||
|
|
||||||
// add parameter: typename: string
|
// add parameter: typename: string
|
||||||
Call.AddArg(CreateLiteralString(El,TransformVariableName(El,AContext)));
|
Call.AddArg(CreateLiteralString(El,TransformElToJSName(El,AContext)));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
// add parameter: initialize function 'function(){...}'
|
// add parameter: initialize function 'function(){...}'
|
||||||
@ -25356,7 +25370,7 @@ begin
|
|||||||
raise Exception.Create(s);
|
raise Exception.Create(s);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TPasToJSConverter.TransformVariableName(ErrorEl: TPasElement;
|
function TPasToJSConverter.TransformToJSName(ErrorEl: TPasElement;
|
||||||
const AName: String; CheckGlobal: boolean; AContext: TConvertContext): String;
|
const AName: String; CheckGlobal: boolean; AContext: TConvertContext): String;
|
||||||
// CheckGlobal: check name clashes with global identifiers too
|
// CheckGlobal: check name clashes with global identifiers too
|
||||||
var
|
var
|
||||||
@ -25387,7 +25401,7 @@ begin
|
|||||||
RaiseNotSupported(ErrorEl,AContext,20170203131832);
|
RaiseNotSupported(ErrorEl,AContext,20170203131832);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TPasToJSConverter.TransformVariableName(El: TPasElement;
|
function TPasToJSConverter.TransformElToJSName(El: TPasElement;
|
||||||
AContext: TConvertContext): String;
|
AContext: TConvertContext): String;
|
||||||
var
|
var
|
||||||
aType: TPasType;
|
aType: TPasType;
|
||||||
@ -25402,10 +25416,11 @@ begin
|
|||||||
aType:=AContext.Resolver.ResolveAliasType(TPasType(El))
|
aType:=AContext.Resolver.ResolveAliasType(TPasType(El))
|
||||||
else
|
else
|
||||||
aType:=TPasType(El);
|
aType:=TPasType(El);
|
||||||
Result:=TransformVariableName(El,aType.Name,CanClashWithGlobal(aType),AContext);
|
Result:=TransformToJSName(El,GetOverloadName(aType,AContext),
|
||||||
|
CanClashWithGlobal(aType),AContext);
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
Result:=TransformVariableName(El,GetOverloadName(El,AContext),
|
Result:=TransformToJSName(El,GetOverloadName(El,AContext),
|
||||||
CanClashWithGlobal(El),AContext);
|
CanClashWithGlobal(El),AContext);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -25432,7 +25447,7 @@ begin
|
|||||||
StartP:=p;
|
StartP:=p;
|
||||||
while (p<=length(aName)) and (aName[p]<>'.') do inc(p);
|
while (p<=length(aName)) and (aName[p]<>'.') do inc(p);
|
||||||
Part:=copy(aName,StartP,p-StartP);
|
Part:=copy(aName,StartP,p-StartP);
|
||||||
Part:=TransformVariableName(El,Part,false,AContext);
|
Part:=TransformToJSName(El,Part,false,AContext);
|
||||||
if Result<>'' then Result:=Result+'.';
|
if Result<>'' then Result:=Result+'.';
|
||||||
Result:=Result+Part;
|
Result:=Result+Part;
|
||||||
inc(p);
|
inc(p);
|
||||||
@ -25684,7 +25699,7 @@ begin
|
|||||||
RaiseNotSupported(Arg,AContext,20190205190114,GetObjName(Arg.Parent));
|
RaiseNotSupported(Arg,AContext,20190205190114,GetObjName(Arg.Parent));
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
Result:=TransformVariableName(Arg,Result,true,AContext);
|
Result:=TransformToJSName(Arg,Result,true,AContext);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TPasToJSConverter.CreateGlobalAlias(El: TPasElement; JSPath: string;
|
function TPasToJSConverter.CreateGlobalAlias(El: TPasElement; JSPath: string;
|
||||||
|
@ -81,7 +81,7 @@ type
|
|||||||
|
|
||||||
// generic procedure type
|
// generic procedure type
|
||||||
procedure TestGen_ProcType_ProcLocal;
|
procedure TestGen_ProcType_ProcLocal;
|
||||||
procedure TestGen_ProcType_ProcLocal_RTTI;
|
procedure TestGen_ProcType_Local_RTTI_Fail;
|
||||||
procedure TestGen_ProcType_ParamUnitImpl;
|
procedure TestGen_ProcType_ParamUnitImpl;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -2142,7 +2142,7 @@ begin
|
|||||||
'']));
|
'']));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TTestGenerics.TestGen_ProcType_ProcLocal_RTTI;
|
procedure TTestGenerics.TestGen_ProcType_Local_RTTI_Fail;
|
||||||
begin
|
begin
|
||||||
WithTypeInfo:=true;
|
WithTypeInfo:=true;
|
||||||
StartProgram(false);
|
StartProgram(false);
|
||||||
@ -2183,8 +2183,10 @@ begin
|
|||||||
'var',
|
'var',
|
||||||
' f: specialize TAnt<TBird>;',
|
' f: specialize TAnt<TBird>;',
|
||||||
' b: TBird;',
|
' b: TBird;',
|
||||||
|
' p: pointer;',
|
||||||
'begin',
|
'begin',
|
||||||
' b:=f(b);',
|
' b:=f(b);',
|
||||||
|
' p:=typeinfo(f);',
|
||||||
'']));
|
'']));
|
||||||
Add([
|
Add([
|
||||||
'uses UnitA;',
|
'uses UnitA;',
|
||||||
@ -2196,13 +2198,14 @@ begin
|
|||||||
'rtl.module("UnitA", ["system"], function () {',
|
'rtl.module("UnitA", ["system"], function () {',
|
||||||
' var $mod = this;',
|
' var $mod = this;',
|
||||||
' var $impl = $mod.$impl;',
|
' var $impl = $mod.$impl;',
|
||||||
' $mod.$rtti.$ProcVar("TAnt$G1", {',
|
' $mod.$rtti.$ProcVar("TAnt<UnitA.TBird>", {',
|
||||||
' init: function () {',
|
' init: function () {',
|
||||||
' this.procsig = rtl.newTIProcSig([["a", $mod.$rtti["TBird"], 2]], $mod.$rtti["TBird"]);',
|
' this.procsig = rtl.newTIProcSig([["a", $mod.$rtti["TBird"], 2]], $mod.$rtti["TBird"]);',
|
||||||
' }',
|
' }',
|
||||||
' });',
|
' });',
|
||||||
' $mod.$init = function () {',
|
' $mod.$init = function () {',
|
||||||
' $impl.b.$assign($impl.f($impl.b));',
|
' $impl.b.$assign($impl.f($impl.b));',
|
||||||
|
' $impl.p = $mod.$rtti["TAnt<UnitA.TBird>"];',
|
||||||
' };',
|
' };',
|
||||||
'}, null, function () {',
|
'}, null, function () {',
|
||||||
' var $mod = this;',
|
' var $mod = this;',
|
||||||
@ -2221,10 +2224,11 @@ begin
|
|||||||
' });',
|
' });',
|
||||||
' $impl.f = null;',
|
' $impl.f = null;',
|
||||||
' $impl.b = $impl.TBird.$new();',
|
' $impl.b = $impl.TBird.$new();',
|
||||||
|
' $impl.p = null;',
|
||||||
'});']));
|
'});']));
|
||||||
CheckSource('TestGen_Class_ClassVarRecord_UnitImpl',
|
CheckSource('TestGen_Class_ClassVarRecord_UnitImpl',
|
||||||
LinesToStr([ // statements
|
LinesToStr([ // statements
|
||||||
'pas.UnitA.$rtti["TAnt$G1"].init();',
|
'pas.UnitA.$rtti["TAnt<UnitA.TBird>"].init();',
|
||||||
'']),
|
'']),
|
||||||
LinesToStr([ // $mod.$main
|
LinesToStr([ // $mod.$main
|
||||||
'']));
|
'']));
|
||||||
|
Loading…
Reference in New Issue
Block a user