codetools: c parser: reduced verbosity

git-svn-id: trunk@14518 -
This commit is contained in:
mattias 2008-03-14 12:24:02 +00:00
parent d8737e8a09
commit 0ab8d02996
2 changed files with 54 additions and 6 deletions

View File

@ -31,6 +31,8 @@ interface
{$I codetools.inc}
{off $DEFINE VerboseCCodeParser}
uses
{$IFDEF MEM_CHECK}
MemCheck,
@ -445,10 +447,8 @@ begin
RaiseException('missing declaration')
else
ReadVariable;
DebugLn(['TCCodeParserTool.TypedefToken AAA1 ',GetAtom]);
// read semicolon
ReadNextAtom;
DebugLn(['TCCodeParserTool.TypedefToken AAA2 ',GetAtom]);
if not AtomIsChar(';') then
RaiseExpectedButAtomFound(';');
EndChildNode;
@ -502,12 +502,16 @@ begin
NewNode.Desc:=Desc;
CurNode:=NewNode;
CurNode.StartPos:=AtomStart;
{$IFDEF VerboseCCodeParser}
DebugLn([GetIndentStr(CurNode.GetLevel*2),'TCCodeParserTool.CreateChildNode ',CCNodeDescAsString(Desc)]);
{$ENDIF}
end;
procedure TCCodeParserTool.EndChildNode;
begin
{$IFDEF VerboseCCodeParser}
DebugLn([GetIndentStr(CurNode.GetLevel*2),'TCCodeParserTool.EndChildNode ',CCNodeDescAsString(CurNode.Desc)]);
{$ENDIF}
if CurNode.EndPos<=0 then
CurNode.EndPos:=SrcPos;
CurNode:=CurNode.Parent;
@ -570,7 +574,9 @@ var
NeedEnd: Boolean;
LastIsName: Boolean;
begin
{$IFDEF VerboseCCodeParser}
DebugLn(['TCCodeParserTool.ReadVariable START ',GetAtom]);
{$ENDIF}
CreateChildNode(ccnVariable);
IsFunction:=false;
if AtomIs('struct') then begin
@ -634,7 +640,9 @@ begin
// pointer or const
ReadNextAtom;
end;
{$IFDEF VerboseCCodeParser}
DebugLn(['TCCodeParserTool.ReadVariable name=',GetAtom]);
{$ENDIF}
if not AtomIsIdentifier then
RaiseExpectedButAtomFound('identifier');
ReadNextAtom;
@ -646,7 +654,9 @@ begin
ReadNextAtom;
end;
{$IFDEF VerboseCCodeParser}
DebugLn(['TCCodeParserTool.ReadVariable name=',GetAtom]);
{$ENDIF}
if not AtomIsIdentifier then
RaiseExpectedButAtomFound('identifier');
end;
@ -907,7 +917,9 @@ begin
repeat
ReadRawNextCAtom(Src,SrcPos,AtomStart);
until (SrcPos>SrcLen) or (not (Src[AtomStart] in [#10,#13]));
{$IFDEF VerboseCCodeParser}
DebugLn(['TCCodeParserTool.ReadNextAtom END ',AtomStart,'-',SrcPos,' "',copy(Src,AtomStart,SrcPos-AtomStart),'"']);
{$ENDIF}
end;
procedure TCCodeParserTool.UndoReadNextAtom;
@ -1050,7 +1062,9 @@ var
Node: TCodeTreeNode;
DiffPos: Integer;
begin
{$IFDEF VerboseCCodeParser}
DebugLn(['TCCodeParserTool.Replace ',FromPos,'-',ToPos,' Old="',copy(Src,FromPos,ToPos-FromPos),'" New="',NewSrc,'"']);
{$ENDIF}
IncreaseChangeStep;
Code.Replace(FromPos,ToPos-FromPos,NewSrc);
Src:=Code.Source;

View File

@ -40,8 +40,8 @@ unit H2PasTool;
interface
uses
Classes, SysUtils, FileProcs,CCodeParserTool, NonPascalCodeTools,
CodeCache, CodeTree, CodeAtom;
Classes, SysUtils, FileProcs, BasicCodeTools, CCodeParserTool,
NonPascalCodeTools, CodeCache, CodeTree, CodeAtom;
type
@ -92,6 +92,8 @@ type
Tree: TH2PTree;
CTool: TCCodeParserTool;
function Convert(CCode, PascalCode: TCodeBuffer): boolean;
procedure BuildH2PTree;
function ExtractCVariableName(CVarNode: TCodeTreeNode): string;
procedure WriteDebugReport;
constructor Create;
destructor Destroy; override;
@ -110,8 +112,9 @@ begin
try
// pare C header file
CTool.Parse(CCode);
CTool.WriteDebugReport;
//CTool.WriteDebugReport;
BuildH2PTree;
finally
CTool.Free;
end;
@ -119,6 +122,37 @@ begin
Result:=true;
end;
procedure TH2PasTool.BuildH2PTree;
var
CNode: TCodeTreeNode;
VarName: String;
begin
Tree.Clear;
CNode:=CTool.Tree.Root;
while CNode<>nil do begin
case CNode.Desc of
ccnVariable:
begin
VarName:=ExtractCVariableName(CNode);
DebugLn(['TH2PasTool.BuildH2PTree Variable Name="',VarName,'"']);
end;
end;
CNode:=CNode.Next;
end;
end;
function TH2PasTool.ExtractCVariableName(CVarNode: TCodeTreeNode): string;
var
Node: TCodeTreeNode;
begin
Node:=CVarNode.FirstChild;
if (Node=nil) or (Node.Desc<>ccnVariableName) then
Result:=''
else
Result:=copy(CTool.Src,Node.StartPos,Node.EndPos-node.StartPos);
end;
procedure TH2PasTool.WriteDebugReport;
begin
DebugLn(['TH2PasTool.WriteDebugReport ']);