Started working on the direct construction of the backend inline item lists.
authorthurston <thurston@052ea7fc-9027-0410-9066-f65837a77df0>
Wed, 8 Oct 2008 18:27:39 +0000 (18:27 +0000)
committerthurston <thurston@052ea7fc-9027-0410-9066-f65837a77df0>
Wed, 8 Oct 2008 18:27:39 +0000 (18:27 +0000)
git-svn-id: http://svn.complang.org/ragel/trunk@489 052ea7fc-9027-0410-9066-f65837a77df0

ragel/main.cpp
ragel/xmlcodegen.cpp

index b5c026c..705c12a 100644 (file)
@@ -499,8 +499,8 @@ void process( const char *inputFileName, const char *intermed )
        xmlParser.init();
 
        /* Write the machines, then the surrounding code. */
-       writeMachines( *xmlOutFile, hostData.str(), inputFileName, xmlParser );
-       //generate( *xmlOutFile, hostData.str(), inputFileName, xmlParser );
+       //writeMachines( *xmlOutFile, hostData.str(), inputFileName, xmlParser );
+       generate( *xmlOutFile, hostData.str(), inputFileName, xmlParser );
 
        /* Close the input and the intermediate file. */
        delete xmlOutFile;
index e197e07..ee0ee5e 100644 (file)
@@ -448,14 +448,38 @@ void XMLCodeGen::makeKey( GenInlineList *outList, Key key )
 
 void XMLCodeGen::makeText( GenInlineList *outList, InlineItem *item )
 {
+       GenInlineItem *inlineItem = new GenInlineItem( GenInputLoc(), GenInlineItem::Text );
+       inlineItem->data = item->data;
+
+       outList->append( inlineItem );
 }
 
 void XMLCodeGen::makeGoto( 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;
+       }
+
+       /* Make the item. */
+       GenInlineItem *inlineItem = new GenInlineItem( GenInputLoc(), GenInlineItem::Goto );
+       inlineItem->targId = targetState;
+       outList->append( inlineItem );
 }
 
 void XMLCodeGen::makeGotoExpr( 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::GotoExpr );
+       inlineItem->children = subList;
+       outList->append( inlineItem );
 }
 
 void XMLCodeGen::makeCall( GenInlineList *outList, InlineItem *item )