From 1346c39a970156456d348642d4f54bc84e637443 Mon Sep 17 00:00:00 2001 From: mattias Date: Tue, 21 Jun 2011 18:41:26 +0000 Subject: [PATCH] codetools: h2pas: simple struct git-svn-id: trunk@31320 - --- components/codetools/ccodeparsertool.pas | 2 +- components/codetools/h2pastool.pas | 20 ++++++++++++-------- lcl/extctrls.pp | 4 ++-- test/codetoolstests/testcth2pas.pas | 9 +++++++++ 4 files changed, 24 insertions(+), 11 deletions(-) diff --git a/components/codetools/ccodeparsertool.pas b/components/codetools/ccodeparsertool.pas index 8d23b91443..c345aae7fc 100644 --- a/components/codetools/ccodeparsertool.pas +++ b/components/codetools/ccodeparsertool.pas @@ -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:=''; diff --git a/components/codetools/h2pastool.pas b/components/codetools/h2pastool.pas index 3ac18a64f8..07297186b1 100644 --- a/components/codetools/h2pastool.pas +++ b/components/codetools/h2pastool.pas @@ -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; diff --git a/lcl/extctrls.pp b/lcl/extctrls.pp index 02ebaee80c..4f2fccafbc 100644 --- a/lcl/extctrls.pp +++ b/lcl/extctrls.pp @@ -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. diff --git a/test/codetoolstests/testcth2pas.pas b/test/codetoolstests/testcth2pas.pas index 367ede7014..d54017fbd3 100644 --- a/test/codetoolstests/testcth2pas.pas +++ b/test/codetoolstests/testcth2pas.pas @@ -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);