|
@@ -283,7 +283,7 @@ begin
|
|
begin
|
|
begin
|
|
OrigDecl:=TPasElement(Orig.Declarations[i]);
|
|
OrigDecl:=TPasElement(Orig.Declarations[i]);
|
|
if i>=Rest.Declarations.Count then
|
|
if i>=Rest.Declarations.Count then
|
|
- AssertEquals(Path+': Declarations.Count',Orig.Declarations.Count,Rest.Declarations.Count);
|
|
|
|
|
|
+ AssertEquals(Path+'.Declarations.Count',Orig.Declarations.Count,Rest.Declarations.Count);
|
|
RestDecl:=TPasElement(Rest.Declarations[i]);
|
|
RestDecl:=TPasElement(Rest.Declarations[i]);
|
|
SubPath:=Path+'['+IntToStr(i)+']';
|
|
SubPath:=Path+'['+IntToStr(i)+']';
|
|
if OrigDecl.Name<>'' then
|
|
if OrigDecl.Name<>'' then
|
|
@@ -292,7 +292,7 @@ begin
|
|
SubPath:=SubPath+'?noname?';
|
|
SubPath:=SubPath+'?noname?';
|
|
CheckRestoredElement(SubPath,OrigDecl,RestDecl);
|
|
CheckRestoredElement(SubPath,OrigDecl,RestDecl);
|
|
end;
|
|
end;
|
|
- AssertEquals(Path+': Declarations.Count',Orig.Declarations.Count,Rest.Declarations.Count);
|
|
|
|
|
|
+ AssertEquals(Path+'.Declarations.Count',Orig.Declarations.Count,Rest.Declarations.Count);
|
|
end;
|
|
end;
|
|
|
|
|
|
procedure TCustomTestPrecompile.CheckRestoredSection(const Path: string; Orig,
|
|
procedure TCustomTestPrecompile.CheckRestoredSection(const Path: string; Orig,
|
|
@@ -348,11 +348,11 @@ end;
|
|
procedure TCustomTestPrecompile.CheckRestoredModuleScope(const Path: string;
|
|
procedure TCustomTestPrecompile.CheckRestoredModuleScope(const Path: string;
|
|
Orig, Rest: TPasModuleScope);
|
|
Orig, Rest: TPasModuleScope);
|
|
begin
|
|
begin
|
|
- AssertEquals(Path+': FirstName',Orig.FirstName,Rest.FirstName);
|
|
|
|
|
|
+ AssertEquals(Path+'.FirstName',Orig.FirstName,Rest.FirstName);
|
|
if Orig.Flags<>Rest.Flags then
|
|
if Orig.Flags<>Rest.Flags then
|
|
- Fail(Path+': Flags');
|
|
|
|
|
|
+ Fail(Path+'.Flags');
|
|
if Orig.BoolSwitches<>Rest.BoolSwitches then
|
|
if Orig.BoolSwitches<>Rest.BoolSwitches then
|
|
- Fail(Path+': BoolSwitches');
|
|
|
|
|
|
+ Fail(Path+'.BoolSwitches');
|
|
CheckRestoredReference(Path+'.AssertClass',Orig.AssertClass,Rest.AssertClass);
|
|
CheckRestoredReference(Path+'.AssertClass',Orig.AssertClass,Rest.AssertClass);
|
|
CheckRestoredReference(Path+'.AssertDefConstructor',Orig.AssertDefConstructor,Rest.AssertDefConstructor);
|
|
CheckRestoredReference(Path+'.AssertDefConstructor',Orig.AssertDefConstructor,Rest.AssertDefConstructor);
|
|
CheckRestoredReference(Path+'.AssertMsgConstructor',Orig.AssertMsgConstructor,Rest.AssertMsgConstructor);
|
|
CheckRestoredReference(Path+'.AssertMsgConstructor',Orig.AssertMsgConstructor,Rest.AssertMsgConstructor);
|
|
@@ -415,13 +415,13 @@ begin
|
|
begin
|
|
begin
|
|
OrigUses:=TPasSectionScope(Orig.UsesScopes[i]);
|
|
OrigUses:=TPasSectionScope(Orig.UsesScopes[i]);
|
|
if not (TObject(Rest.UsesScopes[i]) is TPasSectionScope) then
|
|
if not (TObject(Rest.UsesScopes[i]) is TPasSectionScope) then
|
|
- Fail(Path+': Uses['+IntToStr(i)+'] Rest='+GetObjName(TObject(Rest.UsesScopes[i])));
|
|
|
|
|
|
+ Fail(Path+'.UsesScopes['+IntToStr(i)+'] Rest='+GetObjName(TObject(Rest.UsesScopes[i])));
|
|
RestUses:=TPasSectionScope(Rest.UsesScopes[i]);
|
|
RestUses:=TPasSectionScope(Rest.UsesScopes[i]);
|
|
if OrigUses.ClassType<>RestUses.ClassType then
|
|
if OrigUses.ClassType<>RestUses.ClassType then
|
|
- Fail(Path+': Uses['+IntToStr(i)+'] Orig='+GetObjName(OrigUses)+' Rest='+GetObjName(RestUses));
|
|
|
|
- CheckRestoredReference(Path+': Uses['+IntToStr(i)+']',OrigUses.Element,RestUses.Element);
|
|
|
|
|
|
+ Fail(Path+'.Uses['+IntToStr(i)+'] Orig='+GetObjName(OrigUses)+' Rest='+GetObjName(RestUses));
|
|
|
|
+ CheckRestoredReference(Path+'.Uses['+IntToStr(i)+']',OrigUses.Element,RestUses.Element);
|
|
end;
|
|
end;
|
|
- AssertEquals(Path+': Finished',Orig.Finished,Rest.Finished);
|
|
|
|
|
|
+ AssertEquals(Path+'.Finished',Orig.Finished,Rest.Finished);
|
|
CheckRestoredIdentifierScope(Path,Orig,Rest);
|
|
CheckRestoredIdentifierScope(Path,Orig,Rest);
|
|
end;
|
|
end;
|
|
|
|
|
|
@@ -460,21 +460,28 @@ end;
|
|
procedure TCustomTestPrecompile.CheckRestoredProcScope(const Path: string;
|
|
procedure TCustomTestPrecompile.CheckRestoredProcScope(const Path: string;
|
|
Orig, Rest: TPas2JSProcedureScope);
|
|
Orig, Rest: TPas2JSProcedureScope);
|
|
begin
|
|
begin
|
|
- AssertEquals(Path+': ResultVarName',Orig.ResultVarName,Rest.ResultVarName);
|
|
|
|
-
|
|
|
|
- // DeclarationProc: TPasProcedure; only the declaration is stored
|
|
|
|
- // ImplProc: TPasProcedure; only the declaration is stored
|
|
|
|
- CheckRestoredReference(Path+': OverriddenProc',Orig.OverriddenProc,Rest.OverriddenProc);
|
|
|
|
-
|
|
|
|
- CheckRestoredScopeReference(Path+': ClassScope',Orig.ClassScope,Rest.ClassScope);
|
|
|
|
- CheckRestoredElement(Path+'.SelfArg',Orig.SelfArg,Rest.SelfArg);
|
|
|
|
- AssertEquals(Path+'.Mode',PJUModeSwitchNames[Orig.Mode],PJUModeSwitchNames[Rest.Mode]);
|
|
|
|
- if Orig.Flags<>Rest.Flags then
|
|
|
|
- Fail(Path+'.Flags');
|
|
|
|
- if Orig.BoolSwitches<>Rest.BoolSwitches then
|
|
|
|
- Fail(Path+'.BoolSwitches');
|
|
|
|
|
|
+ CheckRestoredReference(Path+'.DeclarationProc',Orig.DeclarationProc,Rest.DeclarationProc);
|
|
|
|
+ CheckRestoredReference(Path+'.ImplProc',Orig.ImplProc,Rest.ImplProc);
|
|
|
|
+ if Rest.DeclarationProc=nil then
|
|
|
|
+ begin
|
|
|
|
+ AssertEquals(Path+'.ResultVarName',Orig.ResultVarName,Rest.ResultVarName);
|
|
|
|
+ CheckRestoredReference(Path+'.OverriddenProc',Orig.OverriddenProc,Rest.OverriddenProc);
|
|
|
|
+
|
|
|
|
+ CheckRestoredScopeReference(Path+'.ClassScope',Orig.ClassScope,Rest.ClassScope);
|
|
|
|
+ CheckRestoredElement(Path+'.SelfArg',Orig.SelfArg,Rest.SelfArg);
|
|
|
|
+ AssertEquals(Path+'.Mode',PJUModeSwitchNames[Orig.Mode],PJUModeSwitchNames[Rest.Mode]);
|
|
|
|
+ if Orig.Flags<>Rest.Flags then
|
|
|
|
+ Fail(Path+'.Flags');
|
|
|
|
+ if Orig.BoolSwitches<>Rest.BoolSwitches then
|
|
|
|
+ Fail(Path+'.BoolSwitches');
|
|
|
|
+
|
|
|
|
+ CheckRestoredIdentifierScope(Path,Orig,Rest);
|
|
|
|
+ end
|
|
|
|
+ else
|
|
|
|
+ begin
|
|
|
|
+ // ImplProc
|
|
|
|
|
|
- CheckRestoredIdentifierScope(Path,Orig,Rest);
|
|
|
|
|
|
+ end;
|
|
end;
|
|
end;
|
|
|
|
|
|
procedure TCustomTestPrecompile.CheckRestoredPropertyScope(const Path: string;
|
|
procedure TCustomTestPrecompile.CheckRestoredPropertyScope(const Path: string;
|
|
@@ -603,7 +610,7 @@ procedure TCustomTestPrecompile.CheckRestoredReference(const Path: string;
|
|
Orig, Rest: TPasElement);
|
|
Orig, Rest: TPasElement);
|
|
begin
|
|
begin
|
|
if not CheckRestoredObject(Path,Orig,Rest) then exit;
|
|
if not CheckRestoredObject(Path,Orig,Rest) then exit;
|
|
- AssertEquals(Path+': Name',Orig.Name,Rest.Name);
|
|
|
|
|
|
+ AssertEquals(Path+'.Name',Orig.Name,Rest.Name);
|
|
|
|
|
|
if Orig is TPasUnresolvedSymbolRef then
|
|
if Orig is TPasUnresolvedSymbolRef then
|
|
exit; // compiler types and procs are the same in every unit -> skip checking unit
|
|
exit; // compiler types and procs are the same in every unit -> skip checking unit
|
|
@@ -637,15 +644,15 @@ begin
|
|
if AModule<>Module then
|
|
if AModule<>Module then
|
|
Fail(Path+' wrong module: Orig='+GetObjName(AModule)+' '+GetObjName(Module));
|
|
Fail(Path+' wrong module: Orig='+GetObjName(AModule)+' '+GetObjName(Module));
|
|
|
|
|
|
- AssertEquals(Path+': Name',Orig.Name,Rest.Name);
|
|
|
|
- AssertEquals(Path+': SourceFilename',Orig.SourceFilename,Rest.SourceFilename);
|
|
|
|
- AssertEquals(Path+': SourceLinenumber',Orig.SourceLinenumber,Rest.SourceLinenumber);
|
|
|
|
- //AssertEquals(Path+': SourceEndLinenumber',Orig.SourceEndLinenumber,Rest.SourceEndLinenumber);
|
|
|
|
|
|
+ AssertEquals(Path+'.Name',Orig.Name,Rest.Name);
|
|
|
|
+ AssertEquals(Path+'.SourceFilename',Orig.SourceFilename,Rest.SourceFilename);
|
|
|
|
+ AssertEquals(Path+'.SourceLinenumber',Orig.SourceLinenumber,Rest.SourceLinenumber);
|
|
|
|
+ //AssertEquals(Path+'.SourceEndLinenumber',Orig.SourceEndLinenumber,Rest.SourceEndLinenumber);
|
|
if Orig.Visibility<>Rest.Visibility then
|
|
if Orig.Visibility<>Rest.Visibility then
|
|
- Fail(Path+': Visibility '+PJUMemberVisibilityNames[Orig.Visibility]+' '+PJUMemberVisibilityNames[Rest.Visibility]);
|
|
|
|
|
|
+ Fail(Path+'.Visibility '+PJUMemberVisibilityNames[Orig.Visibility]+' '+PJUMemberVisibilityNames[Rest.Visibility]);
|
|
if Orig.Hints<>Rest.Hints then
|
|
if Orig.Hints<>Rest.Hints then
|
|
- Fail(Path+': Hints');
|
|
|
|
- AssertEquals(Path+': HintMessage',Orig.HintMessage,Rest.HintMessage);
|
|
|
|
|
|
+ Fail(Path+'.Hints');
|
|
|
|
+ AssertEquals(Path+'.HintMessage',Orig.HintMessage,Rest.HintMessage);
|
|
|
|
|
|
CheckRestoredReference(Path+'.Parent',Orig.Parent,Rest.Parent);
|
|
CheckRestoredReference(Path+'.Parent',Orig.Parent,Rest.Parent);
|
|
|
|
|
|
@@ -1043,7 +1050,7 @@ end;
|
|
procedure TCustomTestPrecompile.CheckRestoredConst(const Path: string; Orig,
|
|
procedure TCustomTestPrecompile.CheckRestoredConst(const Path: string; Orig,
|
|
Rest: TPasConst);
|
|
Rest: TPasConst);
|
|
begin
|
|
begin
|
|
- AssertEquals(Path+': IsConst',Orig.IsConst,Rest.IsConst);
|
|
|
|
|
|
+ AssertEquals(Path+'.IsConst',Orig.IsConst,Rest.IsConst);
|
|
CheckRestoredVariable(Path,Orig,Rest);
|
|
CheckRestoredVariable(Path,Orig,Rest);
|
|
end;
|
|
end;
|
|
|
|
|
|
@@ -1067,18 +1074,32 @@ end;
|
|
|
|
|
|
procedure TCustomTestPrecompile.CheckRestoredProcedure(const Path: string;
|
|
procedure TCustomTestPrecompile.CheckRestoredProcedure(const Path: string;
|
|
Orig, Rest: TPasProcedure);
|
|
Orig, Rest: TPasProcedure);
|
|
|
|
+var
|
|
|
|
+ RestScope, OrigScope: TPas2JSProcedureScope;
|
|
begin
|
|
begin
|
|
- CheckRestoredElement(Path+'.ProcType',Orig.ProcType,Rest.ProcType);
|
|
|
|
- CheckRestoredElement(Path+'.PublicName',Orig.PublicName,Rest.PublicName);
|
|
|
|
- CheckRestoredElement(Path+'.LibrarySymbolName',Orig.LibrarySymbolName,Rest.LibrarySymbolName);
|
|
|
|
- CheckRestoredElement(Path+'.LibraryExpr',Orig.LibraryExpr,Rest.LibraryExpr);
|
|
|
|
- CheckRestoredElement(Path+'.DispIDExpr',Orig.DispIDExpr,Rest.DispIDExpr);
|
|
|
|
- AssertEquals(Path+'.AliasName',Orig.AliasName,Rest.AliasName);
|
|
|
|
- if Orig.Modifiers<>Rest.Modifiers then
|
|
|
|
- Fail(Path+'.Modifiers');
|
|
|
|
- AssertEquals(Path+'.MessageName',Orig.MessageName,Rest.MessageName);
|
|
|
|
- if Orig.MessageType<>Rest.MessageType then
|
|
|
|
- Fail(Path+'.MessageType Orig='+PJUProcedureMessageTypeNames[Orig.MessageType]+' Rest='+PJUProcedureMessageTypeNames[Rest.MessageType]);
|
|
|
|
|
|
+ CheckRestoredObject(Path+'.CustomData',Orig.CustomData,Rest.CustomData);
|
|
|
|
+ OrigScope:=Orig.CustomData as TPas2JSProcedureScope;
|
|
|
|
+ RestScope:=Rest.CustomData as TPas2JSProcedureScope;
|
|
|
|
+ CheckRestoredReference(Path+'.CustomData[TPas2JSProcedureScope].DeclarationProc',
|
|
|
|
+ OrigScope.DeclarationProc,RestScope.DeclarationProc);
|
|
|
|
+ if RestScope.DeclarationProc=nil then
|
|
|
|
+ begin
|
|
|
|
+ CheckRestoredElement(Path+'.ProcType',Orig.ProcType,Rest.ProcType);
|
|
|
|
+ CheckRestoredElement(Path+'.PublicName',Orig.PublicName,Rest.PublicName);
|
|
|
|
+ CheckRestoredElement(Path+'.LibrarySymbolName',Orig.LibrarySymbolName,Rest.LibrarySymbolName);
|
|
|
|
+ CheckRestoredElement(Path+'.LibraryExpr',Orig.LibraryExpr,Rest.LibraryExpr);
|
|
|
|
+ CheckRestoredElement(Path+'.DispIDExpr',Orig.DispIDExpr,Rest.DispIDExpr);
|
|
|
|
+ AssertEquals(Path+'.AliasName',Orig.AliasName,Rest.AliasName);
|
|
|
|
+ if Orig.Modifiers<>Rest.Modifiers then
|
|
|
|
+ Fail(Path+'.Modifiers');
|
|
|
|
+ AssertEquals(Path+'.MessageName',Orig.MessageName,Rest.MessageName);
|
|
|
|
+ if Orig.MessageType<>Rest.MessageType then
|
|
|
|
+ Fail(Path+'.MessageType Orig='+PJUProcedureMessageTypeNames[Orig.MessageType]+' Rest='+PJUProcedureMessageTypeNames[Rest.MessageType]);
|
|
|
|
+ end
|
|
|
|
+ else
|
|
|
|
+ begin
|
|
|
|
+ // ImplProc
|
|
|
|
+ end;
|
|
// ToDo: Body
|
|
// ToDo: Body
|
|
end;
|
|
end;
|
|
|
|
|
|
@@ -1247,12 +1268,19 @@ end;
|
|
|
|
|
|
procedure TTestPrecompile.TestPC_Proc;
|
|
procedure TTestPrecompile.TestPC_Proc;
|
|
begin
|
|
begin
|
|
- exit; // ToDo
|
|
|
|
StartUnit(false);
|
|
StartUnit(false);
|
|
Add([
|
|
Add([
|
|
'interface',
|
|
'interface',
|
|
- ' procedure Abs(d: double): double; external name ''Math.Abs'';',
|
|
|
|
- 'implementation']);
|
|
|
|
|
|
+ ' function Abs(d: double): double; external name ''Math.Abs'';',
|
|
|
|
+ ' function GetIt(d: double): double;',
|
|
|
|
+ 'implementation',
|
|
|
|
+ 'function GetIt(d: double): double;',
|
|
|
|
+ 'var j: double;',
|
|
|
|
+ 'begin',
|
|
|
|
+ ' j:=Abs(d);',
|
|
|
|
+ ' Result:=j;',
|
|
|
|
+ 'end;',
|
|
|
|
+ '']);
|
|
WriteReadUnit;
|
|
WriteReadUnit;
|
|
end;
|
|
end;
|
|
|
|
|
|
@@ -1263,18 +1291,25 @@ begin
|
|
'interface',
|
|
'interface',
|
|
'type',
|
|
'type',
|
|
' TObject = class',
|
|
' TObject = class',
|
|
- ' private',
|
|
|
|
|
|
+ ' protected',
|
|
' FInt: longint;',
|
|
' FInt: longint;',
|
|
|
|
+ ' procedure SetInt(Value: longint); virtual; abstract;',
|
|
' public',
|
|
' public',
|
|
- ' property Int: longint read FInt write FInt default 3;',
|
|
|
|
|
|
+ ' property Int: longint read FInt write SetInt default 3;',
|
|
' end;',
|
|
' end;',
|
|
' TBird = class',
|
|
' TBird = class',
|
|
|
|
+ ' protected',
|
|
|
|
+ ' procedure SetInt(Value: longint); override;',
|
|
' published',
|
|
' published',
|
|
' property Int;',
|
|
' property Int;',
|
|
' end;',
|
|
' end;',
|
|
'var',
|
|
'var',
|
|
' o: tobject;',
|
|
' o: tobject;',
|
|
- 'implementation']);
|
|
|
|
|
|
+ 'implementation',
|
|
|
|
+ 'procedure TBird.SetInt(Value: longint);',
|
|
|
|
+ 'begin',
|
|
|
|
+ 'end;'
|
|
|
|
+ ]);
|
|
WriteReadUnit;
|
|
WriteReadUnit;
|
|
end;
|
|
end;
|
|
|
|
|