From 2ff2e9469d54a19be980ae89e98387adcc1a60e1 Mon Sep 17 00:00:00 2001 From: thurston Date: Wed, 8 Oct 2008 18:42:32 +0000 Subject: [PATCH] Implemented more of the direct access to the backend. git-svn-id: http://svn.complang.org/ragel/trunk@490 052ea7fc-9027-0410-9066-f65837a77df0 --- ragel/xmlcodegen.cpp | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/ragel/xmlcodegen.cpp b/ragel/xmlcodegen.cpp index ee0ee5e..550dddf 100644 --- a/ragel/xmlcodegen.cpp +++ b/ragel/xmlcodegen.cpp @@ -484,22 +484,69 @@ void XMLCodeGen::makeGotoExpr( GenInlineList *outList, InlineItem *item ) void XMLCodeGen::makeCall( GenInlineList *outList, InlineItem *item ) { + long targetState; + if ( pd->generatingSectionSubset ) + targetState = -1; + else { + EntryMapEl *targ = fsm->entryPoints.find( item->nameTarg->id ); + targetState = targ->value->alg.stateNum; + } + + GenInlineItem *inlineItem = new GenInlineItem( GenInputLoc(), GenInlineItem::Call ); + inlineItem->targId = targetState; + outList->append( inlineItem ); } void XMLCodeGen::makeCallExpr( GenInlineList *outList, InlineItem *item ) { + /* Fill the sub list. */ + GenInlineList *subList = new GenInlineList; + makeGenInlineList( subList, item->children ); + + /* Make the item. */ + GenInlineItem *inlineItem = new GenInlineItem( GenInputLoc(), GenInlineItem::CallExpr ); + inlineItem->children = subList; + outList->append( inlineItem ); } void XMLCodeGen::makeNext( GenInlineList *outList, InlineItem *item ) { + long targetState; + if ( pd->generatingSectionSubset ) + targetState = -1; + else { + EntryMapEl *targ = fsm->entryPoints.find( item->nameTarg->id ); + targetState = targ->value->alg.stateNum; + } + + GenInlineItem *inlineItem = new GenInlineItem( GenInputLoc(), GenInlineItem::Next ); + inlineItem->targId = targetState; } void XMLCodeGen::makeNextExpr( GenInlineList *outList, InlineItem *item ) { + /* Fill the sub list. */ + GenInlineList *subList = new GenInlineList; + makeGenInlineList( subList, item->children ); + + /* Make the item. */ + GenInlineItem *inlineItem = new GenInlineItem( GenInputLoc(), GenInlineItem::NextExpr ); + inlineItem->children = subList; + outList->append( inlineItem ); } void XMLCodeGen::makeEntry( GenInlineList *outList, InlineItem *item ) { + long entryState; + if ( pd->generatingSectionSubset ) + entryState = -1; + else { + EntryMapEl *targ = fsm->entryPoints.find( item->nameTarg->id ); + entryState = targ->value->alg.stateNum; + } + + GenInlineItem *inlineItem = new GenInlineItem( GenInputLoc(), GenInlineItem::Entry ); + inlineItem->targId = entryState; } void XMLCodeGen::makeLmSetActId( GenInlineList *outList, InlineItem *item ) -- 2.7.4