Added exports and entry points to Java and Ruby code generation.
authorthurston <thurston@052ea7fc-9027-0410-9066-f65837a77df0>
Mon, 12 Mar 2007 15:42:01 +0000 (15:42 +0000)
committerthurston <thurston@052ea7fc-9027-0410-9066-f65837a77df0>
Mon, 12 Mar 2007 15:42:01 +0000 (15:42 +0000)
git-svn-id: http://svn.complang.org/ragel/trunk@138 052ea7fc-9027-0410-9066-f65837a77df0

rlgen-java/javacodegen.cpp
rlgen-java/javacodegen.h
rlgen-java/main.cpp
rlgen-ruby/rubycodegen.cpp
rlgen-ruby/rubycodegen.h

index c6f1ba9..fd88eeb 100644 (file)
@@ -768,6 +768,16 @@ std::ostream &JavaTabCodeGen::TRANS_ACTIONS_WI()
        return out;
 }
 
+void JavaTabCodeGen::writeExports()
+{
+       if ( exportList.length() > 0 ) {
+               for ( ExportList::Iter ex = exportList; ex.lte(); ex++ ) {
+                       STATIC_VAR( ALPH_TYPE(), DATA_PREFIX() + ex->name ) 
+                                       << " = " << KEY(ex->key) << "\n";
+               }
+               out << "\n";
+       }
+}
 
 void JavaTabCodeGen::writeData()
 {
@@ -880,19 +890,23 @@ void JavaTabCodeGen::writeData()
                "\n";
        }
 
-       STATIC_VAR( "int", START() ) << " = " << START_STATE_ID() << ";\n"
-       "\n";
+       STATIC_VAR( "int", START() ) << " = " << START_STATE_ID() << ";\n";
 
-       if ( writeFirstFinal ) {
-               STATIC_VAR( "int" , FIRST_FINAL() ) << " = " << FIRST_FINAL_STATE() << ";\n"
-               "\n";
-       }
+       if ( writeFirstFinal )
+               STATIC_VAR( "int" , FIRST_FINAL() ) << " = " << FIRST_FINAL_STATE() << ";\n";
 
-       if ( writeErr ) {
-               STATIC_VAR( "int", ERROR() ) << " = " << ERROR_STATE() << ";\n"
-               "\n";
-       }
+       if ( writeErr )
+               STATIC_VAR( "int", ERROR() ) << " = " << ERROR_STATE() << ";\n";
        
+       out << "\n";
+
+       if ( entryPointNames.length() > 0 ) {
+               for ( EntryNameVect::Iter en = entryPointNames; en.lte(); en++ ) {
+                       STATIC_VAR( "int", DATA_PREFIX() + "en_" + *en ) << 
+                                       " = " << entryPointIds[en.pos()] << ";\n";
+               }
+               out << "\n";
+       }
 }
 
 void JavaTabCodeGen::writeExec()
index 07be8cc..86f67a4 100644 (file)
@@ -77,6 +77,7 @@ struct JavaTabCodeGen : public CodeGenData
        virtual void writeEOF();
        virtual void writeData();
        virtual void writeInit();
+       virtual void writeExports();
        virtual void finishRagelDef();
 
        void NEXT( ostream &ret, int nextDest, bool inFinish );
index 4aee365..5b4de33 100644 (file)
@@ -1,5 +1,5 @@
 /*
- *  Copyright 2001-2005 Adrian Thurston <thurston@cs.queensu.ca>
+ *  Copyright 2001-2007 Adrian Thurston <thurston@cs.queensu.ca>
  */
 
 /*  This file is part of Ragel.
index 8df51bf..0c0f7fc 100644 (file)
@@ -1021,6 +1021,17 @@ std::ostream &RubyCodeGen::TRANS_ACTIONS_WI()
        return out;
 }
 
+void RubyCodeGen::writeExports()
+{
+       if ( exportList.length() > 0 ) {
+               for ( ExportList::Iter ex = exportList; ex.lte(); ex++ ) {
+                       STATIC_VAR( ALPH_TYPE(), DATA_PREFIX() + ex->name ) 
+                                       << " = " << KEY(ex->key) << "\n";
+               }
+               out << "\n";
+       }
+}
+
 
 void RubyCodeGen::writeData()
 {
@@ -1133,19 +1144,23 @@ void RubyCodeGen::writeData()
                "\n";
        }
 
-       STATIC_VAR( "int", START() ) << " = " << START_STATE_ID() << ";\n"
-       "\n";
+       STATIC_VAR( "int", START() ) << " = " << START_STATE_ID() << ";\n";
 
-       if ( writeFirstFinal ) {
-               STATIC_VAR( "int" , FIRST_FINAL() ) << " = " << FIRST_FINAL_STATE() << ";\n"
-               "\n";
-       }
+       if ( writeFirstFinal )
+               STATIC_VAR( "int" , FIRST_FINAL() ) << " = " << FIRST_FINAL_STATE() << ";\n";
 
-       if ( writeErr ) {
-               STATIC_VAR( "int", ERROR() ) << " = " << ERROR_STATE() << ";\n"
-               "\n";
-       }
+       if ( writeErr )
+               STATIC_VAR( "int", ERROR() ) << " = " << ERROR_STATE() << ";\n";
        
+       out << "\n";
+
+       if ( entryPointNames.length() > 0 ) {
+               for ( EntryNameVect::Iter en = entryPointNames; en.lte(); en++ ) {
+                       STATIC_VAR( "int", DATA_PREFIX() + "en_" + *en ) << 
+                                       " = " << entryPointIds[en.pos()] << ";\n";
+               }
+               out << "\n";
+       }
 }
 
 std::ostream &RubyCodeGen::START_ARRAY_LINE()
index 2599094..a00b24e 100644 (file)
@@ -56,6 +56,7 @@ public:
        virtual void writeEOF();
        virtual void writeInit();
        virtual void writeData();
+       virtual void writeExports();
        virtual void finishRagelDef();
 
  protected: