You've already forked lazarus-ccr
Generator :
* unit without types should not have a "type" section * alias definitions should occurs according to their dependency on each other git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@2841 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@ -171,7 +171,7 @@ type
|
|||||||
private
|
private
|
||||||
function GenerateIntfName(AIntf : TPasElement):string;
|
function GenerateIntfName(AIntf : TPasElement):string;
|
||||||
|
|
||||||
procedure GenerateUnitHeader();
|
procedure GenerateUnitHeader(const AIncludeTypeSection : Boolean);
|
||||||
procedure GenerateUnitImplementationHeader();
|
procedure GenerateUnitImplementationHeader();
|
||||||
procedure GenerateUnitImplementationFooter();
|
procedure GenerateUnitImplementationFooter();
|
||||||
|
|
||||||
@ -2193,7 +2193,7 @@ begin
|
|||||||
Result := AIntf.Name;//ExtractserviceName(AIntf);
|
Result := AIntf.Name;//ExtractserviceName(AIntf);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TInftGenerator.GenerateUnitHeader();
|
procedure TInftGenerator.GenerateUnitHeader(const AIncludeTypeSection : Boolean);
|
||||||
var
|
var
|
||||||
s : string;
|
s : string;
|
||||||
begin
|
begin
|
||||||
@ -2227,10 +2227,12 @@ begin
|
|||||||
Indent();WriteLn('sNAME_SPACE = %s;',[QuotedStr(SymbolTable.GetExternalName(FSymbolTable.CurrentModule))]);
|
Indent();WriteLn('sNAME_SPACE = %s;',[QuotedStr(SymbolTable.GetExternalName(FSymbolTable.CurrentModule))]);
|
||||||
Indent();WriteLn('sUNIT_NAME = %s;',[QuotedStr(FSymbolTable.CurrentModule.Name)]);
|
Indent();WriteLn('sUNIT_NAME = %s;',[QuotedStr(FSymbolTable.CurrentModule.Name)]);
|
||||||
DecIndent();
|
DecIndent();
|
||||||
|
|
||||||
WriteLn('');
|
if AIncludeTypeSection then begin
|
||||||
WriteLn('type');
|
WriteLn('');
|
||||||
WriteLn('');
|
WriteLn('type');
|
||||||
|
WriteLn('');
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TInftGenerator.GenerateUnitImplementationHeader();
|
procedure TInftGenerator.GenerateUnitImplementationHeader();
|
||||||
@ -2434,7 +2436,7 @@ var
|
|||||||
procedure WritePropertyField(AProp : TPasProperty);
|
procedure WritePropertyField(AProp : TPasProperty);
|
||||||
begin
|
begin
|
||||||
Indent();
|
Indent();
|
||||||
WriteLn('F%s : %s;',[AProp.Name,AProp.VarType.Name]);
|
WriteLn('F%s : %s;',[AProp.Name,FindActualType(AProp.VarType,SymbolTable).Name]);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
procedure WriteProperty(AProp : TPasProperty);
|
procedure WriteProperty(AProp : TPasProperty);
|
||||||
@ -2608,7 +2610,7 @@ var
|
|||||||
if pte.InheritsFrom(TPasUnresolvedTypeRef) then
|
if pte.InheritsFrom(TPasUnresolvedTypeRef) then
|
||||||
pte := SymbolTable.FindElement(SymbolTable.GetExternalName(pte));
|
pte := SymbolTable.FindElement(SymbolTable.GetExternalName(pte));
|
||||||
pt := pte as TPasType;
|
pt := pte as TPasType;
|
||||||
pt := GetUltimeType(pt);
|
pt := GetUltimeType(pt,SymbolTable);
|
||||||
if pt.InheritsFrom(TPasEnumType) then begin
|
if pt.InheritsFrom(TPasEnumType) then begin
|
||||||
WriteLn('Result := True;');
|
WriteLn('Result := True;');
|
||||||
end else if pt.InheritsFrom(TPasNativeSimpleType) and
|
end else if pt.InheritsFrom(TPasNativeSimpleType) and
|
||||||
@ -3073,7 +3075,37 @@ procedure TInftGenerator.InternalExecute();
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure SortAlias(AList : TList2);
|
||||||
|
var
|
||||||
|
k, ki : Integer;
|
||||||
|
locElt : TPasElement;
|
||||||
|
locItem : TPasAliasType;
|
||||||
|
locTarget : TPasType;
|
||||||
|
begin
|
||||||
|
for k := 0 to Pred(AList.Count) do begin
|
||||||
|
locItem := TPasAliasType(AList[k]);
|
||||||
|
locTarget := locItem.DestType;
|
||||||
|
if (locTarget = nil) then
|
||||||
|
Continue;
|
||||||
|
if locTarget.InheritsFrom(TPasUnresolvedTypeRef) then begin
|
||||||
|
locElt := SymbolTable.FindElement(SymbolTable.GetExternalName(locTarget));
|
||||||
|
if (locElt = nil) or not(locElt.InheritsFrom(TPasType)) then
|
||||||
|
Continue;
|
||||||
|
locTarget := locElt as TPasType;
|
||||||
|
end;
|
||||||
|
if not locTarget.InheritsFrom(TPasAliasType) then
|
||||||
|
Continue;
|
||||||
|
for ki := (k+1) to Pred(AList.Count) do begin
|
||||||
|
if (TPasType(AList[ki]) = locTarget) then begin
|
||||||
|
AList.Delete(ki);
|
||||||
|
AList.Insert(k,locTarget);
|
||||||
|
Break;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
var
|
var
|
||||||
i,c, j, k : PtrInt;
|
i,c, j, k : PtrInt;
|
||||||
clssTyp : TPasClassType;
|
clssTyp : TPasClassType;
|
||||||
@ -3091,10 +3123,10 @@ begin
|
|||||||
tmpList := nil;
|
tmpList := nil;
|
||||||
gnrClssLst := TObjectList.Create(False);
|
gnrClssLst := TObjectList.Create(False);
|
||||||
try
|
try
|
||||||
GenerateUnitHeader();
|
|
||||||
GenerateUnitImplementationHeader();
|
|
||||||
typeList := SymbolTable.CurrentModule.InterfaceSection.Declarations;
|
typeList := SymbolTable.CurrentModule.InterfaceSection.Declarations;
|
||||||
c := Pred(typeList.Count);
|
c := Pred(typeList.Count);
|
||||||
|
GenerateUnitHeader(typeList.Count>0);
|
||||||
|
GenerateUnitImplementationHeader();
|
||||||
|
|
||||||
SetCurrentStream(FDecStream);
|
SetCurrentStream(FDecStream);
|
||||||
IncIndent();
|
IncIndent();
|
||||||
@ -3140,13 +3172,20 @@ begin
|
|||||||
for i := 0 to Pred(tmpList.Count) do begin
|
for i := 0 to Pred(tmpList.Count) do begin
|
||||||
GenerateRecord(TPasRecordType(tmpList[i]));
|
GenerateRecord(TPasRecordType(tmpList[i]));
|
||||||
end;
|
end;
|
||||||
|
tmpList.Clear();
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
tmpList.Clear();
|
||||||
for i := 0 to c do begin
|
for i := 0 to c do begin
|
||||||
elt := TPasElement(typeList[i]);
|
elt := TPasElement(typeList[i]);
|
||||||
if elt.InheritsFrom(TPasAliasType) then begin
|
if elt.InheritsFrom(TPasAliasType) then
|
||||||
GenerateTypeAlias(TPasAliasType(elt));
|
tmpList.Add(elt);
|
||||||
end;
|
end;
|
||||||
|
if (tmpList.Count > 0) then begin
|
||||||
|
SortAlias(tmpList);
|
||||||
|
for i := 0 to Pred(tmpList.Count) do
|
||||||
|
GenerateTypeAlias(TPasAliasType(tmpList[i]));
|
||||||
|
tmpList.Clear();
|
||||||
end;
|
end;
|
||||||
|
|
||||||
objLst := TObjectList.Create();
|
objLst := TObjectList.Create();
|
||||||
|
Reference in New Issue
Block a user