mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-09-01 23:20:26 +02:00
codetools: c parser: reduced verbosity
git-svn-id: trunk@14518 -
This commit is contained in:
parent
d8737e8a09
commit
0ab8d02996
@ -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;
|
||||
|
@ -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 ']);
|
||||
|
Loading…
Reference in New Issue
Block a user