You've already forked lazarus-ccr
Interface File Generator => use qualified type name (unit.type) to disambiguate name collision.
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@3888 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@@ -2382,13 +2382,23 @@ var
|
|||||||
WriteLn('%s = class%s',[ASymbol.Name,decBuffer]);
|
WriteLn('%s = class%s',[ASymbol.Name,decBuffer]);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure WritePropertyField(AProp : TPasProperty);
|
function GetTypeText(AProp : TPasProperty; AActualPropType : TPasType) : string;
|
||||||
|
var
|
||||||
|
m : TPasModule;
|
||||||
begin
|
begin
|
||||||
Indent();
|
if AnsiSameText(AProp.Name,AActualPropType.Name) or
|
||||||
WriteLn('F%s : %s;',[AProp.Name,FindActualType(AProp.VarType,SymbolTable).Name]);
|
( SymbolTable.IsOfType(AActualPropType,TPasClassType) and Assigned(FindMember(TPasClassType(ASymbol),AActualPropType.Name)) )
|
||||||
End;
|
then begin
|
||||||
|
m := FindModule(AActualPropType);
|
||||||
|
if (m = nil) then
|
||||||
|
m := SymbolTable.CurrentModule;
|
||||||
|
Result := Format('%s.%s',[m.Name,AActualPropType.Name]);
|
||||||
|
end else begin
|
||||||
|
Result := AActualPropType.Name;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure WriteProperty(AProp : TPasProperty);
|
procedure WriteProperty(AProp : TPasProperty; AActualPropType : TPasType);
|
||||||
var
|
var
|
||||||
propName, locStore : string;
|
propName, locStore : string;
|
||||||
begin
|
begin
|
||||||
@@ -2399,7 +2409,7 @@ var
|
|||||||
locStore := Format(' stored %s',[AProp.StoredAccessorName]);
|
locStore := Format(' stored %s',[AProp.StoredAccessorName]);
|
||||||
end;
|
end;
|
||||||
Indent();
|
Indent();
|
||||||
WriteLn('property %s : %s read F%s write F%s%s;',[propName,AProp.VarType.Name,propName,propName,locStore]);
|
WriteLn('property %s : %s read F%s write F%s%s;',[propName,GetTypeText(AProp,AActualPropType),propName,propName,locStore]);
|
||||||
if not AnsiSameText(AProp.Name,SymbolTable.GetExternalName(AProp)) then begin
|
if not AnsiSameText(AProp.Name,SymbolTable.GetExternalName(AProp)) then begin
|
||||||
FImpLastStream.Indent();
|
FImpLastStream.Indent();
|
||||||
FImpLastStream.WriteLn(
|
FImpLastStream.WriteLn(
|
||||||
@@ -2417,7 +2427,8 @@ var
|
|||||||
var
|
var
|
||||||
k : Integer;
|
k : Integer;
|
||||||
p : TPasProperty;
|
p : TPasProperty;
|
||||||
//pt : TPasElement;
|
//e : TPasElement;
|
||||||
|
pt : TPasType;
|
||||||
begin
|
begin
|
||||||
if ( locPropCount > 0 ) then begin
|
if ( locPropCount > 0 ) then begin
|
||||||
Indent();
|
Indent();
|
||||||
@@ -2425,15 +2436,19 @@ var
|
|||||||
IncIndent();
|
IncIndent();
|
||||||
for k := 0 to Pred(locPropCount) do begin
|
for k := 0 to Pred(locPropCount) do begin
|
||||||
p := TPasProperty(locPropList[k]);
|
p := TPasProperty(locPropList[k]);
|
||||||
{if p.VarType.InheritsFrom(TPasUnresolvedTypeRef) then begin
|
pt := FindActualType(p.VarType,SymbolTable);
|
||||||
pt := SymbolTable.FindElement(SymbolTable.GetExternalName(p.VarType));
|
{if pt.InheritsFrom(TPasUnresolvedTypeRef) then begin
|
||||||
if ( pt <> nil ) and pt.InheritsFrom(TPasType) and ( pt <> p.VarType ) then begin
|
e := SymbolTable.FindElement(SymbolTable.GetExternalName(pt));
|
||||||
|
if (e <> nil) and e.InheritsFrom(TPasType) then
|
||||||
|
pt := e as TPasType;
|
||||||
|
if (pt <> nil) and pt.InheritsFrom(TPasType) and (pt <> p.VarType) then begin
|
||||||
p.VarType.Release();
|
p.VarType.Release();
|
||||||
p.VarType := pt as TPasType;
|
p.VarType := pt as TPasType;
|
||||||
p.VarType.AddRef();
|
p.VarType.AddRef();
|
||||||
end;
|
end;
|
||||||
end;}
|
end;}
|
||||||
WritePropertyField(p);
|
Indent();
|
||||||
|
WriteLn('F%s : %s;',[p.Name,GetTypeText(p,pt)]);
|
||||||
end;
|
end;
|
||||||
if locParentIsEnum then begin
|
if locParentIsEnum then begin
|
||||||
Indent();
|
Indent();
|
||||||
@@ -2485,8 +2500,10 @@ var
|
|||||||
Indent();
|
Indent();
|
||||||
WriteLn('published');
|
WriteLn('published');
|
||||||
IncIndent();
|
IncIndent();
|
||||||
For k := 0 To Pred(locPropCount) Do
|
For k := 0 To Pred(locPropCount) Do begin
|
||||||
WriteProperty(TPasProperty(locPropList[k]));
|
p := TPasProperty(locPropList[k]);
|
||||||
|
WriteProperty(p,FindActualType(p.VarType,SymbolTable));
|
||||||
|
end;
|
||||||
DecIndent();
|
DecIndent();
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
@@ -2495,7 +2512,6 @@ var
|
|||||||
var
|
var
|
||||||
k : Integer;
|
k : Integer;
|
||||||
p : TPasProperty;
|
p : TPasProperty;
|
||||||
ss : string;
|
|
||||||
pte : TPasElement;
|
pte : TPasElement;
|
||||||
pt : TPasType;
|
pt : TPasType;
|
||||||
begin
|
begin
|
||||||
@@ -2511,16 +2527,11 @@ var
|
|||||||
Indent(); WriteLn('inherited Create();');
|
Indent(); WriteLn('inherited Create();');
|
||||||
for k := 0 to Pred(locPropCount) do begin
|
for k := 0 to Pred(locPropCount) do begin
|
||||||
p := TPasProperty(locPropList[k]);
|
p := TPasProperty(locPropList[k]);
|
||||||
if SymbolTable.IsOfType(p.VarType,TPasClassType) or
|
pt := FindActualType(p.VarType,SymbolTable);
|
||||||
SymbolTable.IsOfType(p.VarType,TPasArrayType)
|
if SymbolTable.IsOfType(pt,TPasClassType) or
|
||||||
|
SymbolTable.IsOfType(pt,TPasArrayType)
|
||||||
then begin
|
then begin
|
||||||
if AnsiSameText(p.Name,p.VarType.Name) or
|
Indent(); WriteLn('F%s := %s.Create();',[p.Name,GetTypeText(p,pt)]);
|
||||||
( SymbolTable.IsOfType(p.VarType,TPasClassType) and Assigned(FindMember(TPasClassType(ASymbol),p.VarType.Name)) )
|
|
||||||
then
|
|
||||||
ss := Format('%s.%s',[SymbolTable.CurrentModule.Name,p.VarType.Name])
|
|
||||||
else
|
|
||||||
ss := p.VarType.Name;
|
|
||||||
Indent(); WriteLn('F%s := %s.Create();',[p.Name,ss{p.VarType.Name}]);
|
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
DecIndent();
|
DecIndent();
|
||||||
@@ -2532,8 +2543,9 @@ var
|
|||||||
IncIndent();
|
IncIndent();
|
||||||
for k := 0 to Pred(locPropCount) do begin
|
for k := 0 to Pred(locPropCount) do begin
|
||||||
p := TPasProperty(locPropList[k]);
|
p := TPasProperty(locPropList[k]);
|
||||||
if SymbolTable.IsOfType(p.VarType,TPasClassType) or
|
pt := FindActualType(p.VarType,SymbolTable);
|
||||||
SymbolTable.IsOfType(p.VarType,TPasArrayType)
|
if SymbolTable.IsOfType(pt,TPasClassType) or
|
||||||
|
SymbolTable.IsOfType(pt,TPasArrayType)
|
||||||
then begin
|
then begin
|
||||||
Indent(); WriteLn('if Assigned(F%s) then',[p.Name]);
|
Indent(); WriteLn('if Assigned(F%s) then',[p.Name]);
|
||||||
IncIndent();
|
IncIndent();
|
||||||
@@ -2554,10 +2566,8 @@ var
|
|||||||
WriteLn('begin');
|
WriteLn('begin');
|
||||||
IncIndent();
|
IncIndent();
|
||||||
Indent();
|
Indent();
|
||||||
pte := FSymbolTable.FindElement(p.VarType.Name);
|
pte := FindActualType(p.VarType,FSymbolTable);
|
||||||
if ( pte <> nil ) and pte.InheritsFrom(TPasType) then begin
|
if ( pte <> nil ) and pte.InheritsFrom(TPasType) then begin
|
||||||
if pte.InheritsFrom(TPasUnresolvedTypeRef) then
|
|
||||||
pte := SymbolTable.FindElement(SymbolTable.GetExternalName(pte));
|
|
||||||
pt := pte as TPasType;
|
pt := pte as TPasType;
|
||||||
pt := GetUltimeType(pt,SymbolTable);
|
pt := GetUltimeType(pt,SymbolTable);
|
||||||
if pt.InheritsFrom(TPasEnumType) then begin
|
if pt.InheritsFrom(TPasEnumType) then begin
|
||||||
|
Reference in New Issue
Block a user