Cleanup and code movement related to makeCodeGen.
authorthurston <thurston@052ea7fc-9027-0410-9066-f65837a77df0>
Sun, 15 Mar 2009 14:34:17 +0000 (14:34 +0000)
committerthurston <thurston@052ea7fc-9027-0410-9066-f65837a77df0>
Sun, 15 Mar 2009 14:34:17 +0000 (14:34 +0000)
git-svn-id: http://svn.complang.org/ragel/trunk@739 052ea7fc-9027-0410-9066-f65837a77df0

13 files changed:
ragel/cdcodegen.cpp
ragel/cdcodegen.h
ragel/common.h
ragel/cscodegen.cpp
ragel/cscodegen.h
ragel/dotcodegen.cpp
ragel/gendata.cpp
ragel/gendata.h
ragel/javacodegen.cpp
ragel/main.cpp
ragel/ragel.h
ragel/rubycodegen.cpp
ragel/rubycodegen.h

index 6965c09..ceb0030 100644 (file)
 #include <string>
 #include <assert.h>
 
-/* Code generators. */
-#include "cdtable.h"
-#include "cdftable.h"
-#include "cdflat.h"
-#include "cdfflat.h"
-#include "cdgoto.h"
-#include "cdfgoto.h"
-#include "cdipgoto.h"
-#include "cdsplit.h"
 
 using std::ostream;
 using std::ostringstream;
@@ -54,7 +45,6 @@ using std::cerr;
 using std::endl;
 
 /* Target language and output style. */
-extern CodeStyleEnum codeStyle;
 
 /* Io globals. */
 extern istream *inStream;
@@ -68,81 +58,6 @@ extern bool graphvizDone;
 extern int numSplitPartitions;
 extern bool noLineDirectives;
 
-/* Invoked by the parser when a ragel definition is opened. */
-CodeGenData *cdMakeCodeGen( const char *sourceFileName, const char *fsmName, 
-               ostream &out, bool wantComplete )
-{
-       CodeGenData *codeGen = 0;
-       switch ( hostLang->lang ) {
-       case HostLang::C:
-               switch ( codeStyle ) {
-               case GenTables:
-                       codeGen = new CTabCodeGen(out);
-                       break;
-               case GenFTables:
-                       codeGen = new CFTabCodeGen(out);
-                       break;
-               case GenFlat:
-                       codeGen = new CFlatCodeGen(out);
-                       break;
-               case GenFFlat:
-                       codeGen = new CFFlatCodeGen(out);
-                       break;
-               case GenGoto:
-                       codeGen = new CGotoCodeGen(out);
-                       break;
-               case GenFGoto:
-                       codeGen = new CFGotoCodeGen(out);
-                       break;
-               case GenIpGoto:
-                       codeGen = new CIpGotoCodeGen(out);
-                       break;
-               case GenSplit:
-                       codeGen = new CSplitCodeGen(out);
-                       break;
-               }
-               break;
-
-       case HostLang::D:
-               switch ( codeStyle ) {
-               case GenTables:
-                       codeGen = new DTabCodeGen(out);
-                       break;
-               case GenFTables:
-                       codeGen = new DFTabCodeGen(out);
-                       break;
-               case GenFlat:
-                       codeGen = new DFlatCodeGen(out);
-                       break;
-               case GenFFlat:
-                       codeGen = new DFFlatCodeGen(out);
-                       break;
-               case GenGoto:
-                       codeGen = new DGotoCodeGen(out);
-                       break;
-               case GenFGoto:
-                       codeGen = new DFGotoCodeGen(out);
-                       break;
-               case GenIpGoto:
-                       codeGen = new DIpGotoCodeGen(out);
-                       break;
-               case GenSplit:
-                       codeGen = new DSplitCodeGen(out);
-                       break;
-               }
-               break;
-
-       default: break;
-       }
-
-       codeGen->sourceFileName = sourceFileName;
-       codeGen->fsmName = fsmName;
-       codeGen->wantComplete = wantComplete;
-
-       return codeGen;
-}
-
-
 void cdLineDirective( ostream &out, const char *fileName, int line )
 {
        if ( noLineDirectives )
index 6c4a92a..fe69cb2 100644 (file)
@@ -48,12 +48,7 @@ struct RedAction;
 struct LongestMatch;
 struct LongestMatchPart;
 
-inline string itoa( int i )
-{
-       char buf[16];
-       sprintf( buf, "%i", i );
-       return buf;
-}
+string itoa( int i );
 
 /*
  * class FsmCodeGen
index 00f30a2..a9ec27a 100644 (file)
@@ -375,24 +375,4 @@ struct exit_object { };
 extern exit_object endp;
 void operator<<( std::ostream &out, exit_object & );
 
-/* Target output style. */
-enum CodeStyleEnum
-{
-       GenTables,
-       GenFTables,
-       GenFlat,
-       GenFFlat,
-       GenGoto,
-       GenFGoto,
-       GenIpGoto,
-       GenSplit
-};
-
-/* Target implementation */
-enum RubyImplEnum
-{
-       MRI,
-       Rubinius
-};
-
 #endif
index e0c032b..5527236 100644 (file)
 #include <string>
 #include <assert.h>
 
-/* Code generators. */
-#include "cstable.h"
-#include "csftable.h"
-#include "csflat.h"
-#include "csfflat.h"
-#include "csgoto.h"
-#include "csfgoto.h"
-#include "csipgoto.h"
-#include "cssplit.h"
-
 using std::ostream;
 using std::ostringstream;
 using std::string;
@@ -55,46 +45,6 @@ using std::cout;
 using std::cerr;
 using std::endl;
 
-/* Invoked by the parser when a ragel definition is opened. */
-CodeGenData *csharpMakeCodeGen( const char *sourceFileName, const char *fsmName, 
-               ostream &out, bool wantComplete )
-{
-       CodeGenData *codeGen = 0;
-
-       switch ( codeStyle ) {
-       case GenTables:
-               codeGen = new CSharpTabCodeGen(out);
-               break;
-       case GenFTables:
-               codeGen = new CSharpFTabCodeGen(out);
-               break;
-       case GenFlat:
-               codeGen = new CSharpFlatCodeGen(out);
-               break;
-       case GenFFlat:
-               codeGen = new CSharpFFlatCodeGen(out);
-               break;
-       case GenGoto:
-               codeGen = new CSharpGotoCodeGen(out);
-               break;
-       case GenFGoto:
-               codeGen = new CSharpFGotoCodeGen(out);
-               break;
-       case GenIpGoto:
-               codeGen = new CSharpIpGotoCodeGen(out);
-               break;
-       case GenSplit:
-               codeGen = new CSharpSplitCodeGen(out);
-               break;
-       }
-
-       codeGen->sourceFileName = sourceFileName;
-       codeGen->fsmName = fsmName;
-       codeGen->wantComplete = wantComplete;
-
-       return codeGen;
-}
-
 void csharpLineDirective( ostream &out, const char *fileName, int line )
 {
        if ( noLineDirectives )
index fae7f4d..bcc2653 100644 (file)
@@ -48,12 +48,7 @@ struct RedAction;
 struct LongestMatch;
 struct LongestMatchPart;
 
-inline string itoa( int i )
-{
-       char buf[16];
-       sprintf( buf, "%i", i );
-       return buf;
-}
+string itoa( int i );
 
 /*
  * class CSharpFsmCodeGen
index 1332667..4efcbab 100644 (file)
@@ -32,19 +32,6 @@ using std::cout;
 using std::cerr;
 using std::endl;
 
-/* Invoked by the parser when a ragel definition is opened. */
-CodeGenData *dotMakeCodeGen( const char *sourceFileName, const char *fsmName, 
-               ostream &out, bool wantComplete )
-{
-       CodeGenData *codeGen = new GraphvizDotGen(out);
-
-       codeGen->sourceFileName = sourceFileName;
-       codeGen->fsmName = fsmName;
-       codeGen->wantComplete = wantComplete;
-
-       return codeGen;
-}
-
 /* Override this so that write statement processing is ignored */
 void GraphvizDotGen::writeStatement( InputLoc &, int, char ** )
 {
index 86e3d0d..8801ef0 100644 (file)
  */
 
 #include "gendata.h"
+#include "ragel.h"
 #include <iostream>
 
+/*
+ * Code generators.
+ */
+
+#include "cstable.h"
+#include "csftable.h"
+#include "csflat.h"
+#include "csfflat.h"
+#include "csgoto.h"
+#include "csfgoto.h"
+#include "csipgoto.h"
+#include "cssplit.h"
+
+#include "cdtable.h"
+#include "cdftable.h"
+#include "cdflat.h"
+#include "cdfflat.h"
+#include "cdgoto.h"
+#include "cdfgoto.h"
+#include "cdipgoto.h"
+#include "cdsplit.h"
+
+#include "dotcodegen.h"
+
+#include "javacodegen.h"
+
+#include "rubytable.h"
+#include "rubyftable.h"
+#include "rubyflat.h"
+#include "rubyfflat.h"
+#include "rbxgoto.h"
+
+string itoa( int i )
+{
+       char buf[16];
+       sprintf( buf, "%i", i );
+       return buf;
+}
+
+using std::cout;
 using std::cerr;
 using std::endl;
 
+/* Invoked by the parser when a ragel definition is opened. */
+CodeGenData *dotMakeCodeGen( const char *sourceFileName, const char *fsmName, 
+               ostream &out, bool wantComplete )
+{
+       CodeGenData *codeGen = new GraphvizDotGen(out);
+
+       codeGen->sourceFileName = sourceFileName;
+       codeGen->fsmName = fsmName;
+       codeGen->wantComplete = wantComplete;
+
+       return codeGen;
+}
+
+/* Invoked by the parser when a ragel definition is opened. */
+CodeGenData *cdMakeCodeGen( const char *sourceFileName, const char *fsmName, 
+               ostream &out, bool wantComplete )
+{
+       CodeGenData *codeGen = 0;
+       switch ( hostLang->lang ) {
+       case HostLang::C:
+               switch ( codeStyle ) {
+               case GenTables:
+                       codeGen = new CTabCodeGen(out);
+                       break;
+               case GenFTables:
+                       codeGen = new CFTabCodeGen(out);
+                       break;
+               case GenFlat:
+                       codeGen = new CFlatCodeGen(out);
+                       break;
+               case GenFFlat:
+                       codeGen = new CFFlatCodeGen(out);
+                       break;
+               case GenGoto:
+                       codeGen = new CGotoCodeGen(out);
+                       break;
+               case GenFGoto:
+                       codeGen = new CFGotoCodeGen(out);
+                       break;
+               case GenIpGoto:
+                       codeGen = new CIpGotoCodeGen(out);
+                       break;
+               case GenSplit:
+                       codeGen = new CSplitCodeGen(out);
+                       break;
+               }
+               break;
+
+       case HostLang::D:
+               switch ( codeStyle ) {
+               case GenTables:
+                       codeGen = new DTabCodeGen(out);
+                       break;
+               case GenFTables:
+                       codeGen = new DFTabCodeGen(out);
+                       break;
+               case GenFlat:
+                       codeGen = new DFlatCodeGen(out);
+                       break;
+               case GenFFlat:
+                       codeGen = new DFFlatCodeGen(out);
+                       break;
+               case GenGoto:
+                       codeGen = new DGotoCodeGen(out);
+                       break;
+               case GenFGoto:
+                       codeGen = new DFGotoCodeGen(out);
+                       break;
+               case GenIpGoto:
+                       codeGen = new DIpGotoCodeGen(out);
+                       break;
+               case GenSplit:
+                       codeGen = new DSplitCodeGen(out);
+                       break;
+               }
+               break;
+
+       default: break;
+       }
+
+       codeGen->sourceFileName = sourceFileName;
+       codeGen->fsmName = fsmName;
+       codeGen->wantComplete = wantComplete;
+
+       return codeGen;
+}
+
+/* Invoked by the parser when a ragel definition is opened. */
+CodeGenData *javaMakeCodeGen( const char *sourceFileName, const char *fsmName, 
+               ostream &out, bool wantComplete )
+{
+       CodeGenData *codeGen = new JavaTabCodeGen(out);
+
+       codeGen->sourceFileName = sourceFileName;
+       codeGen->fsmName = fsmName;
+       codeGen->wantComplete = wantComplete;
+
+       return codeGen;
+}
+
+/* Invoked by the parser when a ragel definition is opened. */
+CodeGenData *rubyMakeCodeGen( const char *sourceFileName, const char *fsmName, 
+               ostream &out, bool wantComplete )
+{
+       CodeGenData *codeGen = 0;
+       switch ( codeStyle ) {
+               case GenTables: 
+                       codeGen = new RubyTabCodeGen(out);
+                       break;
+               case GenFTables:
+                       codeGen = new RubyFTabCodeGen(out);
+                       break;
+               case GenFlat:
+                       codeGen = new RubyFlatCodeGen(out);
+                       break;
+               case GenFFlat:
+                       codeGen = new RubyFFlatCodeGen(out);
+                       break;
+               case GenGoto:
+                       if ( rubyImpl == Rubinius ) {
+                               codeGen = new RbxGotoCodeGen(out);
+                       } else {
+                               cerr << "Goto style is still _very_ experimental " 
+                                       "and only supported using Rubinius.\n"
+                                       "You may want to enable the --rbx flag "
+                                       " to give it a try.\n";
+                               exit(1);
+                       }
+                       break;
+               default:
+                       cout << "Invalid code style\n";
+                       exit(1);
+                       break;
+       }
+       codeGen->sourceFileName = sourceFileName;
+       codeGen->fsmName = fsmName;
+       codeGen->wantComplete = wantComplete;
+
+       return codeGen;
+}
+
+/* Invoked by the parser when a ragel definition is opened. */
+CodeGenData *csharpMakeCodeGen( const char *sourceFileName, const char *fsmName, 
+               ostream &out, bool wantComplete )
+{
+       CodeGenData *codeGen = 0;
+
+       switch ( codeStyle ) {
+       case GenTables:
+               codeGen = new CSharpTabCodeGen(out);
+               break;
+       case GenFTables:
+               codeGen = new CSharpFTabCodeGen(out);
+               break;
+       case GenFlat:
+               codeGen = new CSharpFlatCodeGen(out);
+               break;
+       case GenFFlat:
+               codeGen = new CSharpFFlatCodeGen(out);
+               break;
+       case GenGoto:
+               codeGen = new CSharpGotoCodeGen(out);
+               break;
+       case GenFGoto:
+               codeGen = new CSharpFGotoCodeGen(out);
+               break;
+       case GenIpGoto:
+               codeGen = new CSharpIpGotoCodeGen(out);
+               break;
+       case GenSplit:
+               codeGen = new CSharpSplitCodeGen(out);
+               break;
+       }
+
+       codeGen->sourceFileName = sourceFileName;
+       codeGen->fsmName = fsmName;
+       codeGen->wantComplete = wantComplete;
+
+       return codeGen;
+}
+
+
 CodeGenData *makeCodeGen( const char *sourceFileName, const char *fsmName, 
                ostream &out, bool wantComplete )
 {
index e454b53..a0ec5b6 100644 (file)
@@ -43,30 +43,6 @@ struct CodeGenData;
 typedef AvlMap<char *, CodeGenData*, CmpStr> CodeGenMap;
 typedef AvlMapEl<char *, CodeGenData*> CodeGenMapEl;
 
-/*
- * The interface to the parser
- */
-
-/* These functions must be implemented by the code generation executable.
- * The openOutput function is invoked when the root element is opened.  The
- * makeCodeGen function is invoked when a ragel_def element is opened. */
-std::ostream *cdOpenOutput( const char *inputFile );
-std::ostream *javaOpenOutput( const char *inputFile );
-std::ostream *rubyOpenOutput( const char *inputFile );
-std::ostream *csharpOpenOutput( const char *inputFile );
-std::ostream *dotOpenOutput( const char *inputFile );
-
-CodeGenData *cdMakeCodeGen( const char *sourceFileName, 
-               const char *fsmName, ostream &out, bool wantComplete );
-CodeGenData *javaMakeCodeGen( const char *sourceFileName, 
-               const char *fsmName, ostream &out, bool wantComplete );
-CodeGenData *rubyMakeCodeGen( const char *sourceFileName, 
-               const char *fsmName, ostream &out, bool wantComplete );
-CodeGenData *csharpMakeCodeGen( const char *sourceFileName, 
-               const char *fsmName, ostream &out, bool wantComplete );
-CodeGenData *dotMakeCodeGen( const char *sourceFileName, 
-               const char *fsmName, ostream &out, bool wantComplete );
-
 void cdLineDirective( ostream &out, const char *fileName, int line );
 void javaLineDirective( ostream &out, const char *fileName, int line );
 void rubyLineDirective( ostream &out, const char *fileName, int line );
@@ -74,6 +50,8 @@ void csharpLineDirective( ostream &out, const char *fileName, int line );
 void genLineDirective( ostream &out );
 void lineDirective( ostream &out, const char *fileName, int line );
 
+string itoa( int i );
+
 /*********************************/
 
 struct CodeGenData
index 60b1042..1ae48a4 100644 (file)
@@ -55,19 +55,6 @@ using std::cout;
 using std::cerr;
 using std::endl;
 
-/* Invoked by the parser when a ragel definition is opened. */
-CodeGenData *javaMakeCodeGen( const char *sourceFileName, const char *fsmName, 
-               ostream &out, bool wantComplete )
-{
-       CodeGenData *codeGen = new JavaTabCodeGen(out);
-
-       codeGen->sourceFileName = sourceFileName;
-       codeGen->fsmName = fsmName;
-       codeGen->wantComplete = wantComplete;
-
-       return codeGen;
-}
-
 void javaLineDirective( ostream &out, const char *fileName, int line )
 {
        /* Write the preprocessor line info for to the input file. */
index 120fae7..24075d4 100644 (file)
@@ -82,7 +82,7 @@ bool frontendOnly = false;
 bool generateDot = false;
 
 /* Target language and output style. */
-CodeStyleEnum codeStyle = GenTables;
+CodeStyle codeStyle = GenTables;
 
 int numSplitPartitions = 0;
 bool noLineDirectives = false;
index 434b9f9..7a5dcd0 100644 (file)
 
 #define PROGNAME "ragel"
 
+/* Target output style. */
+enum CodeStyle
+{
+       GenTables,
+       GenFTables,
+       GenFlat,
+       GenFFlat,
+       GenGoto,
+       GenFGoto,
+       GenIpGoto,
+       GenSplit
+};
+
 /* To what degree are machine minimized. */
 enum MinimizeLevel {
        MinimizeApprox,
@@ -47,6 +60,13 @@ enum MinimizeOpt {
        MinimizeEveryOp
 };
 
+/* Target implementation */
+enum RubyImplEnum
+{
+       MRI,
+       Rubinius
+};
+
 /* Options. */
 extern MinimizeLevel minimizeLevel;
 extern MinimizeOpt minimizeOpt;
@@ -54,6 +74,7 @@ extern const char *machineSpec, *machineName;
 extern bool printStatistics;
 extern bool wantDupsRemoved;
 extern bool generateDot;
+extern RubyImplEnum rubyImpl;
 
 /* Error reporting format. */
 enum ErrorFormat {
@@ -81,7 +102,7 @@ void xmlEscapeHost( std::ostream &out, char *data, long len );
 typedef Vector<const char *> ArgsVector;
 extern ArgsVector includePaths;
 
-extern CodeStyleEnum codeStyle;
+extern CodeStyle codeStyle;
 
 /* IO filenames and stream. */
 extern bool displayPrintables;
@@ -96,7 +117,7 @@ extern bool noLineDirectives;
 std::ostream &error();
 
 /* Target language and output style. */
-extern CodeStyleEnum codeStyle;
+extern CodeStyle codeStyle;
 
 /* Io globals. */
 extern std::istream *inStream;
index 06902fd..5b50346 100644 (file)
@@ -54,10 +54,9 @@ using std::cerr;
 using std::endl;
 
 /* Target ruby impl */
-extern RubyImplEnum rubyImpl;
 
 /* Target language and output style. */
-extern CodeStyleEnum codeStyle;
+extern CodeStyle codeStyle;
 
 /* Io globals. */
 extern istream *inStream;
@@ -74,47 +73,6 @@ extern int numSplitPartitions;
  * Callbacks invoked by the XML data parser.
  */
 
-/* Invoked by the parser when a ragel definition is opened. */
-CodeGenData *rubyMakeCodeGen( const char *sourceFileName, const char *fsmName, 
-               ostream &out, bool wantComplete )
-{
-       CodeGenData *codeGen = 0;
-       switch ( codeStyle ) {
-               case GenTables: 
-                       codeGen = new RubyTabCodeGen(out);
-                       break;
-               case GenFTables:
-                       codeGen = new RubyFTabCodeGen(out);
-                       break;
-               case GenFlat:
-                       codeGen = new RubyFlatCodeGen(out);
-                       break;
-               case GenFFlat:
-                       codeGen = new RubyFFlatCodeGen(out);
-                       break;
-               case GenGoto:
-                       if ( rubyImpl == Rubinius ) {
-                               codeGen = new RbxGotoCodeGen(out);
-                       } else {
-                               cout << "Goto style is still _very_ experimental " 
-                                       "and only supported using Rubinius.\n"
-                                       "You may want to enable the --rbx flag "
-                                       " to give it a try.\n";
-                               exit(1);
-                       }
-                       break;
-               default:
-                       cout << "Invalid code style\n";
-                       exit(1);
-                       break;
-       }
-       codeGen->sourceFileName = sourceFileName;
-       codeGen->fsmName = fsmName;
-       codeGen->wantComplete = wantComplete;
-
-       return codeGen;
-}
-
 
 void rubyLineDirective( ostream &out, const char *fileName, int line )
 {
index d671faa..d7e34e5 100644 (file)
 /* Integer array line length. */
 #define IALL 8
 
-inline string itoa( int i )
-{
-       char buf[16];
-       sprintf( buf, "%i", i );
-       return buf;
-}
-
 
 class RubyCodeGen : public CodeGenData
 {