mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-06 09:27:31 +02:00
codetools: h2p: keeping ctool, creating var nodes
git-svn-id: trunk@14552 -
This commit is contained in:
parent
db1b64812b
commit
535542bc52
@ -220,7 +220,7 @@ begin
|
|||||||
ccnName : Result:='name';
|
ccnName : Result:='name';
|
||||||
ccnFuncParamList : Result:='function param list';
|
ccnFuncParamList : Result:='function param list';
|
||||||
ccnStatementBlock: Result:='statement block';
|
ccnStatementBlock: Result:='statement block';
|
||||||
else Result:='?';
|
else Result:='?('+IntToStr(Desc)+')';
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
@ -63,7 +63,8 @@ begin
|
|||||||
|
|
||||||
Tool:=TH2PasTool.Create;
|
Tool:=TH2PasTool.Create;
|
||||||
Tool.Convert(CCode,PasCode);
|
Tool.Convert(CCode,PasCode);
|
||||||
Tool.WriteDebugReport;
|
//Tool.WriteDebugReport;
|
||||||
|
Tool.WriteH2PNodeReport;
|
||||||
Tool.Free;
|
Tool.Free;
|
||||||
except
|
except
|
||||||
on E: ECCodeParserException do begin
|
on E: ECCodeParserException do begin
|
||||||
|
@ -105,11 +105,12 @@ type
|
|||||||
function GetSimplePascalResultTypeOfCFunction(CFuncNode: TCodeTreeNode): string;
|
function GetSimplePascalResultTypeOfCFunction(CFuncNode: TCodeTreeNode): string;
|
||||||
function ConvertSimpleCTypeToPascalType(CType: string): string;
|
function ConvertSimpleCTypeToPascalType(CType: string): string;
|
||||||
|
|
||||||
function CreateH2PNode(const PascalName: string; CNode: TCodeTreeNode;
|
function CreateH2PNode(const PascalName, CName: string; CNode: TCodeTreeNode;
|
||||||
PascalDesc: TCodeTreeNodeDesc; ParentNode: TH2PNode = nil;
|
PascalDesc: TCodeTreeNodeDesc; ParentNode: TH2PNode = nil;
|
||||||
IsGlobal: boolean = true): TH2PNode;
|
IsGlobal: boolean = true): TH2PNode;
|
||||||
|
|
||||||
procedure WriteDebugReport;
|
procedure WriteDebugReport;
|
||||||
|
procedure WriteH2PNodeReport;
|
||||||
constructor Create;
|
constructor Create;
|
||||||
destructor Destroy; override;
|
destructor Destroy; override;
|
||||||
procedure Clear;
|
procedure Clear;
|
||||||
@ -238,18 +239,15 @@ end;
|
|||||||
function TH2PasTool.Convert(CCode, PascalCode: TCodeBuffer): boolean;
|
function TH2PasTool.Convert(CCode, PascalCode: TCodeBuffer): boolean;
|
||||||
begin
|
begin
|
||||||
Result:=false;
|
Result:=false;
|
||||||
|
|
||||||
CTool:=TCCodeParserTool.Create;
|
|
||||||
try
|
|
||||||
// pare C header file
|
|
||||||
CTool.Parse(CCode);
|
|
||||||
//CTool.WriteDebugReport;
|
|
||||||
|
|
||||||
BuildH2PTree;
|
if CTool=nil then
|
||||||
finally
|
CTool:=TCCodeParserTool.Create;
|
||||||
CTool.Free;
|
// pare C header file
|
||||||
end;
|
CTool.Parse(CCode);
|
||||||
|
//CTool.WriteDebugReport;
|
||||||
|
|
||||||
|
BuildH2PTree;
|
||||||
|
|
||||||
Result:=true;
|
Result:=true;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -259,6 +257,7 @@ var
|
|||||||
CurName: String;
|
CurName: String;
|
||||||
CurType: String;
|
CurType: String;
|
||||||
SimpleType: String;
|
SimpleType: String;
|
||||||
|
H2PNode: TH2PNode;
|
||||||
begin
|
begin
|
||||||
Tree.Clear;
|
Tree.Clear;
|
||||||
CNode:=CTool.Tree.Root;
|
CNode:=CTool.Tree.Root;
|
||||||
@ -275,7 +274,9 @@ begin
|
|||||||
//SimpleType:=CreateTypeForVarType(CNode);
|
//SimpleType:=CreateTypeForVarType(CNode);
|
||||||
end;
|
end;
|
||||||
if SimpleType<>'' then begin
|
if SimpleType<>'' then begin
|
||||||
|
H2PNode:=CreateH2PNode(CurName,CurName,CNode,ctnVarDefinition);
|
||||||
|
H2PNode.PascalCode:=SimpleType;
|
||||||
|
//DebugLn(['TH2PasTool.BuildH2PTree CNode.Desc=',CCNodeDescAsString(CNode.Desc),' ',H2PNode.DescAsString]);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
ccnEnumBlock:
|
ccnEnumBlock:
|
||||||
@ -376,12 +377,13 @@ begin
|
|||||||
Result:=PredefinedCTypes[CType];
|
Result:=PredefinedCTypes[CType];
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TH2PasTool.CreateH2PNode(const PascalName: string;
|
function TH2PasTool.CreateH2PNode(const PascalName, CName: string;
|
||||||
CNode: TCodeTreeNode; PascalDesc: TCodeTreeNodeDesc; ParentNode: TH2PNode;
|
CNode: TCodeTreeNode; PascalDesc: TCodeTreeNodeDesc; ParentNode: TH2PNode;
|
||||||
IsGlobal: boolean): TH2PNode;
|
IsGlobal: boolean): TH2PNode;
|
||||||
begin
|
begin
|
||||||
Result:=TH2PNode.Create;
|
Result:=TH2PNode.Create;
|
||||||
Result.PascalName:=PascalName;
|
Result.PascalName:=PascalName;
|
||||||
|
Result.CName:=CName;
|
||||||
Result.CNode:=CNode;
|
Result.CNode:=CNode;
|
||||||
Result.PascalDesc:=PascalDesc;
|
Result.PascalDesc:=PascalDesc;
|
||||||
Tree.AddNodeAsLastChild(ParentNode,Result);
|
Tree.AddNodeAsLastChild(ParentNode,Result);
|
||||||
@ -396,6 +398,24 @@ begin
|
|||||||
DebugLn(['TH2PasTool.WriteDebugReport ']);
|
DebugLn(['TH2PasTool.WriteDebugReport ']);
|
||||||
if CTool<>nil then
|
if CTool<>nil then
|
||||||
CTool.WriteDebugReport;
|
CTool.WriteDebugReport;
|
||||||
|
WriteH2PNodeReport;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TH2PasTool.WriteH2PNodeReport;
|
||||||
|
var
|
||||||
|
Node: TH2PNode;
|
||||||
|
begin
|
||||||
|
if (Tree=nil) then begin
|
||||||
|
DebugLn(['TH2PasTool.WriteH2PNodeReport Tree=nil']);
|
||||||
|
end else if (Tree.Root=nil) then begin
|
||||||
|
DebugLn(['TH2PasTool.WriteH2PNodeReport Tree.Root=nil']);
|
||||||
|
end else begin
|
||||||
|
Node:=Tree.Root;
|
||||||
|
while Node<>nil do begin
|
||||||
|
DebugLn([GetIndentStr(Node.GetLevel*2),Node.DescAsString]);
|
||||||
|
Node:=Node.Next;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
constructor TH2PasTool.Create;
|
constructor TH2PasTool.Create;
|
||||||
@ -413,6 +433,7 @@ begin
|
|||||||
FreeAndNil(Tree);
|
FreeAndNil(Tree);
|
||||||
FreeAndNil(FPascalNames);
|
FreeAndNil(FPascalNames);
|
||||||
FreeAndNil(FCNames);
|
FreeAndNil(FCNames);
|
||||||
|
FreeAndNil(CTool);
|
||||||
inherited Destroy;
|
inherited Destroy;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -491,12 +512,15 @@ end;
|
|||||||
function TH2PNode.DescAsString: string;
|
function TH2PNode.DescAsString: string;
|
||||||
begin
|
begin
|
||||||
Result:='PascalName="'+PascalName+'"';
|
Result:='PascalName="'+PascalName+'"';
|
||||||
|
if PascalName<>CName then
|
||||||
|
Result:=Result+' CName="'+CName+'"';
|
||||||
Result:=Result+' PascalDesc='+NodeDescriptionAsString(PascalDesc);
|
Result:=Result+' PascalDesc='+NodeDescriptionAsString(PascalDesc);
|
||||||
if CNode<>nil then begin
|
if CNode<>nil then begin
|
||||||
Result:=Result+' CNode='+CNode.DescAsString;
|
Result:=Result+' CNode='+CCNodeDescAsString(CNode.Desc);
|
||||||
end else begin
|
end else begin
|
||||||
Result:=Result+' CNode=nil';
|
Result:=Result+' CNode=nil';
|
||||||
end;
|
end;
|
||||||
|
Result:=Result+' PascalCode="'+dbgstr(PascalCode)+'"';
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TH2PNode.ConsistencyCheck;
|
procedure TH2PNode.ConsistencyCheck;
|
||||||
|
Loading…
Reference in New Issue
Block a user