mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-09-06 05:02:25 +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}
|
{$I codetools.inc}
|
||||||
|
|
||||||
|
{off $DEFINE VerboseCCodeParser}
|
||||||
|
|
||||||
uses
|
uses
|
||||||
{$IFDEF MEM_CHECK}
|
{$IFDEF MEM_CHECK}
|
||||||
MemCheck,
|
MemCheck,
|
||||||
@ -445,10 +447,8 @@ begin
|
|||||||
RaiseException('missing declaration')
|
RaiseException('missing declaration')
|
||||||
else
|
else
|
||||||
ReadVariable;
|
ReadVariable;
|
||||||
DebugLn(['TCCodeParserTool.TypedefToken AAA1 ',GetAtom]);
|
|
||||||
// read semicolon
|
// read semicolon
|
||||||
ReadNextAtom;
|
ReadNextAtom;
|
||||||
DebugLn(['TCCodeParserTool.TypedefToken AAA2 ',GetAtom]);
|
|
||||||
if not AtomIsChar(';') then
|
if not AtomIsChar(';') then
|
||||||
RaiseExpectedButAtomFound(';');
|
RaiseExpectedButAtomFound(';');
|
||||||
EndChildNode;
|
EndChildNode;
|
||||||
@ -502,12 +502,16 @@ begin
|
|||||||
NewNode.Desc:=Desc;
|
NewNode.Desc:=Desc;
|
||||||
CurNode:=NewNode;
|
CurNode:=NewNode;
|
||||||
CurNode.StartPos:=AtomStart;
|
CurNode.StartPos:=AtomStart;
|
||||||
|
{$IFDEF VerboseCCodeParser}
|
||||||
DebugLn([GetIndentStr(CurNode.GetLevel*2),'TCCodeParserTool.CreateChildNode ',CCNodeDescAsString(Desc)]);
|
DebugLn([GetIndentStr(CurNode.GetLevel*2),'TCCodeParserTool.CreateChildNode ',CCNodeDescAsString(Desc)]);
|
||||||
|
{$ENDIF}
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCCodeParserTool.EndChildNode;
|
procedure TCCodeParserTool.EndChildNode;
|
||||||
begin
|
begin
|
||||||
|
{$IFDEF VerboseCCodeParser}
|
||||||
DebugLn([GetIndentStr(CurNode.GetLevel*2),'TCCodeParserTool.EndChildNode ',CCNodeDescAsString(CurNode.Desc)]);
|
DebugLn([GetIndentStr(CurNode.GetLevel*2),'TCCodeParserTool.EndChildNode ',CCNodeDescAsString(CurNode.Desc)]);
|
||||||
|
{$ENDIF}
|
||||||
if CurNode.EndPos<=0 then
|
if CurNode.EndPos<=0 then
|
||||||
CurNode.EndPos:=SrcPos;
|
CurNode.EndPos:=SrcPos;
|
||||||
CurNode:=CurNode.Parent;
|
CurNode:=CurNode.Parent;
|
||||||
@ -570,7 +574,9 @@ var
|
|||||||
NeedEnd: Boolean;
|
NeedEnd: Boolean;
|
||||||
LastIsName: Boolean;
|
LastIsName: Boolean;
|
||||||
begin
|
begin
|
||||||
|
{$IFDEF VerboseCCodeParser}
|
||||||
DebugLn(['TCCodeParserTool.ReadVariable START ',GetAtom]);
|
DebugLn(['TCCodeParserTool.ReadVariable START ',GetAtom]);
|
||||||
|
{$ENDIF}
|
||||||
CreateChildNode(ccnVariable);
|
CreateChildNode(ccnVariable);
|
||||||
IsFunction:=false;
|
IsFunction:=false;
|
||||||
if AtomIs('struct') then begin
|
if AtomIs('struct') then begin
|
||||||
@ -634,7 +640,9 @@ begin
|
|||||||
// pointer or const
|
// pointer or const
|
||||||
ReadNextAtom;
|
ReadNextAtom;
|
||||||
end;
|
end;
|
||||||
|
{$IFDEF VerboseCCodeParser}
|
||||||
DebugLn(['TCCodeParserTool.ReadVariable name=',GetAtom]);
|
DebugLn(['TCCodeParserTool.ReadVariable name=',GetAtom]);
|
||||||
|
{$ENDIF}
|
||||||
if not AtomIsIdentifier then
|
if not AtomIsIdentifier then
|
||||||
RaiseExpectedButAtomFound('identifier');
|
RaiseExpectedButAtomFound('identifier');
|
||||||
ReadNextAtom;
|
ReadNextAtom;
|
||||||
@ -646,7 +654,9 @@ begin
|
|||||||
ReadNextAtom;
|
ReadNextAtom;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
{$IFDEF VerboseCCodeParser}
|
||||||
DebugLn(['TCCodeParserTool.ReadVariable name=',GetAtom]);
|
DebugLn(['TCCodeParserTool.ReadVariable name=',GetAtom]);
|
||||||
|
{$ENDIF}
|
||||||
if not AtomIsIdentifier then
|
if not AtomIsIdentifier then
|
||||||
RaiseExpectedButAtomFound('identifier');
|
RaiseExpectedButAtomFound('identifier');
|
||||||
end;
|
end;
|
||||||
@ -907,7 +917,9 @@ begin
|
|||||||
repeat
|
repeat
|
||||||
ReadRawNextCAtom(Src,SrcPos,AtomStart);
|
ReadRawNextCAtom(Src,SrcPos,AtomStart);
|
||||||
until (SrcPos>SrcLen) or (not (Src[AtomStart] in [#10,#13]));
|
until (SrcPos>SrcLen) or (not (Src[AtomStart] in [#10,#13]));
|
||||||
|
{$IFDEF VerboseCCodeParser}
|
||||||
DebugLn(['TCCodeParserTool.ReadNextAtom END ',AtomStart,'-',SrcPos,' "',copy(Src,AtomStart,SrcPos-AtomStart),'"']);
|
DebugLn(['TCCodeParserTool.ReadNextAtom END ',AtomStart,'-',SrcPos,' "',copy(Src,AtomStart,SrcPos-AtomStart),'"']);
|
||||||
|
{$ENDIF}
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCCodeParserTool.UndoReadNextAtom;
|
procedure TCCodeParserTool.UndoReadNextAtom;
|
||||||
@ -1050,7 +1062,9 @@ var
|
|||||||
Node: TCodeTreeNode;
|
Node: TCodeTreeNode;
|
||||||
DiffPos: Integer;
|
DiffPos: Integer;
|
||||||
begin
|
begin
|
||||||
|
{$IFDEF VerboseCCodeParser}
|
||||||
DebugLn(['TCCodeParserTool.Replace ',FromPos,'-',ToPos,' Old="',copy(Src,FromPos,ToPos-FromPos),'" New="',NewSrc,'"']);
|
DebugLn(['TCCodeParserTool.Replace ',FromPos,'-',ToPos,' Old="',copy(Src,FromPos,ToPos-FromPos),'" New="',NewSrc,'"']);
|
||||||
|
{$ENDIF}
|
||||||
IncreaseChangeStep;
|
IncreaseChangeStep;
|
||||||
Code.Replace(FromPos,ToPos-FromPos,NewSrc);
|
Code.Replace(FromPos,ToPos-FromPos,NewSrc);
|
||||||
Src:=Code.Source;
|
Src:=Code.Source;
|
||||||
|
@ -40,8 +40,8 @@ unit H2PasTool;
|
|||||||
interface
|
interface
|
||||||
|
|
||||||
uses
|
uses
|
||||||
Classes, SysUtils, FileProcs,CCodeParserTool, NonPascalCodeTools,
|
Classes, SysUtils, FileProcs, BasicCodeTools, CCodeParserTool,
|
||||||
CodeCache, CodeTree, CodeAtom;
|
NonPascalCodeTools, CodeCache, CodeTree, CodeAtom;
|
||||||
|
|
||||||
type
|
type
|
||||||
|
|
||||||
@ -92,6 +92,8 @@ type
|
|||||||
Tree: TH2PTree;
|
Tree: TH2PTree;
|
||||||
CTool: TCCodeParserTool;
|
CTool: TCCodeParserTool;
|
||||||
function Convert(CCode, PascalCode: TCodeBuffer): boolean;
|
function Convert(CCode, PascalCode: TCodeBuffer): boolean;
|
||||||
|
procedure BuildH2PTree;
|
||||||
|
function ExtractCVariableName(CVarNode: TCodeTreeNode): string;
|
||||||
procedure WriteDebugReport;
|
procedure WriteDebugReport;
|
||||||
constructor Create;
|
constructor Create;
|
||||||
destructor Destroy; override;
|
destructor Destroy; override;
|
||||||
@ -110,8 +112,9 @@ begin
|
|||||||
try
|
try
|
||||||
// pare C header file
|
// pare C header file
|
||||||
CTool.Parse(CCode);
|
CTool.Parse(CCode);
|
||||||
CTool.WriteDebugReport;
|
//CTool.WriteDebugReport;
|
||||||
|
|
||||||
|
BuildH2PTree;
|
||||||
finally
|
finally
|
||||||
CTool.Free;
|
CTool.Free;
|
||||||
end;
|
end;
|
||||||
@ -119,6 +122,37 @@ begin
|
|||||||
Result:=true;
|
Result:=true;
|
||||||
end;
|
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;
|
procedure TH2PasTool.WriteDebugReport;
|
||||||
begin
|
begin
|
||||||
DebugLn(['TH2PasTool.WriteDebugReport ']);
|
DebugLn(['TH2PasTool.WriteDebugReport ']);
|
||||||
|
Loading…
Reference in New Issue
Block a user