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