mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-05-31 04:52:35 +02:00
codetools: h2pas: simple struct
git-svn-id: trunk@31320 -
This commit is contained in:
parent
e748b7b37e
commit
1346c39a97
@ -2287,7 +2287,7 @@ var
|
||||
NameNode: TCodeTreeNode;
|
||||
begin
|
||||
NameNode:=StructNode.FirstChild;
|
||||
if (NameNode<>nil) and (NameNode.Desc=ccnName) then
|
||||
if (NameNode<>nil) and (NameNode.Desc=ccnTypeName) then
|
||||
Result:=GetIdentifier(@Src[NameNode.StartPos])
|
||||
else
|
||||
Result:='';
|
||||
|
@ -192,7 +192,7 @@ type
|
||||
FUndefines: TStringToStringTree;
|
||||
FUseExternal: boolean;
|
||||
// converting C nodes to H2P nodes
|
||||
procedure ConvertStruct(CNode: TCodeTreeNode; ParentNode: TH2PNode);
|
||||
function ConvertStruct(CNode: TCodeTreeNode; ParentNode: TH2PNode): TH2PNode;
|
||||
procedure ConvertVariable(CNode: TCodeTreeNode; ParentNode: TH2PNode);
|
||||
function ConvertEnumBlock(CNode: TCodeTreeNode; ParentNode: TH2PNode): TH2PNode;
|
||||
procedure ConvertFunction(CNode: TCodeTreeNode; ParentNode: TH2PNode);
|
||||
@ -514,12 +514,13 @@ end;
|
||||
|
||||
{ TH2PasTool }
|
||||
|
||||
procedure TH2PasTool.ConvertStruct(CNode: TCodeTreeNode; ParentNode: TH2PNode);
|
||||
function TH2PasTool.ConvertStruct(CNode: TCodeTreeNode; ParentNode: TH2PNode
|
||||
): TH2PNode;
|
||||
var
|
||||
CurName: String;
|
||||
TypeH2PNode: TH2PNode;
|
||||
CurCName: String;
|
||||
begin
|
||||
Result:=nil;
|
||||
CurName:=CTool.ExtractStructName(CNode);
|
||||
if CurName='' then begin
|
||||
// this is an anonymous struct -> ignore
|
||||
@ -528,11 +529,11 @@ begin
|
||||
// this struct has a name
|
||||
// create a type
|
||||
CurCName:=CurName;
|
||||
TypeH2PNode:=CreateH2PNode(CurName,CurCName,CNode,ctnRecordType,'',
|
||||
Result:=CreateH2PNode(CurName,CurCName,CNode,ctnRecordType,'',
|
||||
nil,ParentNode=nil);
|
||||
DebugLn(['TH2PasTool.ConvertStruct ADDED ',TypeH2PNode.DescAsString(CTool)]);
|
||||
DebugLn(['TH2PasTool.ConvertStruct ADDED ',Result.DescAsString(CTool)]);
|
||||
// build recursively
|
||||
BuildH2PTree(TypeH2PNode);
|
||||
BuildH2PTree(Result);
|
||||
end;
|
||||
end;
|
||||
|
||||
@ -2327,8 +2328,7 @@ begin
|
||||
ReadRawNextCAtom(CType,p,CurAtomStart);
|
||||
if CurAtomStart>length(CType) then break;
|
||||
//DebugLn(['TH2PasTool.ConvertSimpleCTypeToPascalType Atom=',copy(CType,CurAtomStart,p-CurAtomStart)]);
|
||||
if (not TestIsAtomAndRemove('const'))
|
||||
and (not TestIsAtomAndRemove('struct')) then ;
|
||||
TestIsAtomAndRemove('const');
|
||||
until false;
|
||||
// seach in predefined ctypes
|
||||
Result:=PredefinedCTypes[CType];
|
||||
@ -2435,6 +2435,10 @@ begin
|
||||
Result:=ConvertEnumBlock(SubCNode,nil);
|
||||
exit;
|
||||
end;
|
||||
if (SubCNode.Desc=ccnStruct) then begin
|
||||
Result:=ConvertStruct(SubCNode,nil);
|
||||
exit;
|
||||
end;
|
||||
if SubCNode.Desc<>ccnConstant then begin
|
||||
debugln(['TH2PasTool.GetH2PNodeForComplexType TODO: ',CCNodeDescAsString(CNode.Desc),' of ',CCNodeDescAsString(SubCNode.Desc)]);
|
||||
exit;
|
||||
|
@ -383,8 +383,8 @@ type
|
||||
For example:
|
||||
Do something after 2 seconds after user input and idle.
|
||||
AutoEnabled:=true;
|
||||
AutoStartEvent:=[itaOnIdle]; // start the timer on first idle
|
||||
AutoEndEvent:=[itaOnUserInput]; // end on any user input
|
||||
AutoStartEvent:=itaOnIdle; // start the timer on first idle
|
||||
AutoEndEvent:=itaOnUserInput; // end on any user input
|
||||
|
||||
If the OnTimer event works in several chunks, set FireOnIdle:=true.
|
||||
The OnTimer event will then be called on idle until FireOnIdle is false.
|
||||
|
@ -7,6 +7,7 @@
|
||||
./runtests --format=plain --suite=TestCTH2PConvertEnumsTypes
|
||||
./runtests --format=plain --suite=TestCTH2PConvertConst
|
||||
./runtests --format=plain --suite=TestCTH2PConvertSimpleTypedefs
|
||||
./runtests --format=plain --suite=TestCTH2PConvertSimpleStructs
|
||||
}
|
||||
unit TestCTH2Pas;
|
||||
|
||||
@ -35,6 +36,7 @@ type
|
||||
procedure TestCTH2PConvertEnumsTypes;
|
||||
procedure TestCTH2PConvertConst;
|
||||
procedure TestCTH2PConvertSimpleTypedefs;
|
||||
procedure TestCTH2PConvertSimpleStructs;
|
||||
end;
|
||||
|
||||
implementation
|
||||
@ -233,6 +235,13 @@ begin
|
||||
'type sa_family_t = cushort;');
|
||||
end;
|
||||
|
||||
procedure TTestCodetoolsH2Pas.TestCTH2PConvertSimpleStructs;
|
||||
begin
|
||||
TestIntf('convert struct SwsContext;',
|
||||
'struct SwsContext;',
|
||||
'type SwsContext = record end;');
|
||||
end;
|
||||
|
||||
initialization
|
||||
AddToCodetoolsTestSuite(TTestCodetoolsH2Pas);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user