util/qlalr/cppgenerator.cpp
changeset 3 41300fa6a67c
parent 0 1918ee327afb
child 4 3b1da2848fc7
--- a/util/qlalr/cppgenerator.cpp	Tue Jan 26 12:42:25 2010 +0200
+++ b/util/qlalr/cppgenerator.cpp	Tue Feb 02 00:43:10 2010 +0200
@@ -341,8 +341,8 @@
         }
 
       QTextStream out (&f);
-      out << "// This file was generated by qlalr - DO NOT EDIT!\n";
 
+      // copyright headers must come first, otherwise the headers tests will fail
       if (copyright)
         {
           out << copyrightHeader()
@@ -350,8 +350,16 @@
               << endl;
         }
 
+      out << "// This file was generated by qlalr - DO NOT EDIT!\n";
+
       out << startIncludeGuard(grammar.merged_output) << endl;
 
+      if (copyright) {
+          out << "#if defined(Q_OS_VXWORKS) && defined(ERROR)" << endl
+              << "#  undef ERROR" << endl
+              << "#endif" << endl << endl;
+      }
+
       generateDecl (out);
       generateImpl (out);
       out << p.decls();
@@ -371,10 +379,10 @@
     QFile f (declFileName);
     f.open (QFile::WriteOnly);
     QTextStream out (&f);
-    out << "// This file was generated by qlalr - DO NOT EDIT!\n";
 
     QString prot = declFileName.toUpper ().replace (QLatin1Char ('.'), QLatin1Char ('_'));
 
+    // copyright headers must come first, otherwise the headers tests will fail
     if (copyright)
       {
         out << copyrightHeader()
@@ -382,11 +390,19 @@
             << endl;
       }
 
+    out << "// This file was generated by qlalr - DO NOT EDIT!\n";
+
     out << "#ifndef " << prot << endl
         << "#define " << prot << endl
         << endl;
 
+    if (copyright) {
+        out << "#include <QtCore/qglobal.h>" << endl << endl;
+        out << "QT_BEGIN_NAMESPACE" << endl << endl;
+    }
     generateDecl (out);
+    if (copyright)
+        out << "QT_END_NAMESPACE" << endl;
 
     out << "#endif // " << prot << endl << endl;
   } // end decls
@@ -395,13 +411,19 @@
     QFile f (bitsFileName);
     f.open (QFile::WriteOnly);
     QTextStream out (&f);
-    out << "// This file was generated by qlalr - DO NOT EDIT!\n";
 
+    // copyright headers must come first, otherwise the headers tests will fail
     if (copyright)
       out << copyrightHeader();
 
+    out << "// This file was generated by qlalr - DO NOT EDIT!\n";
+
     out << "#include \"" << declFileName << "\"" << endl << endl;
+    if (copyright)
+        out << "QT_BEGIN_NAMESPACE" << endl << endl;
     generateImpl(out);
+    if (copyright)
+        out << "QT_END_NAMESPACE" << endl;
 
   } // end bits
 
@@ -410,7 +432,6 @@
       QFile f (grammar.decl_file_name);
       f.open (QFile::WriteOnly);
       QTextStream out (&f);
-      out << "// This file was generated by qlalr - DO NOT EDIT!\n";
       out << p.decls();
     }
 
@@ -419,7 +440,6 @@
       QFile f (grammar.impl_file_name);
       f.open (QFile::WriteOnly);
       QTextStream out (&f);
-      out << "// This file was generated by qlalr - DO NOT EDIT!\n";
       out << p.impls();
     }
 }
@@ -468,9 +488,9 @@
       << "    GOTO_CHECK_OFFSET = " << compressed_action.check.size () << endl
       << "  };" << endl
       << endl
-      << "  static const char  *const spell [];" << endl
-      << "  static const int            lhs [];" << endl
-      << "  static const int            rhs [];" << endl;
+      << "  static const char  *const    spell [];" << endl
+      << "  static const short             lhs [];" << endl
+      << "  static const short             rhs [];" << endl;
 
   if (debug_info)
     {
@@ -482,24 +502,19 @@
           << "#endif // " << prot << endl << endl;
     }
 
-  out << "  static const int   goto_default [];" << endl
-      << "  static const int action_default [];" << endl
-      << "  static const int   action_index [];" << endl
-      << "  static const int    action_info [];" << endl
-      << "  static const int   action_check [];" << endl
+  out << "  static const short    goto_default [];" << endl
+      << "  static const short  action_default [];" << endl
+      << "  static const short    action_index [];" << endl
+      << "  static const short     action_info [];" << endl
+      << "  static const short    action_check [];" << endl
       << endl
       << "  static inline int nt_action (int state, int nt)" << endl
       << "  {" << endl
-      << "    const int *const goto_index = &action_index [GOTO_INDEX_OFFSET];" << endl
-      << "    const int *const goto_check = &action_check [GOTO_CHECK_OFFSET];" << endl
-      << endl
-      << "    const int yyn = goto_index [state] + nt;" << endl
-      << endl
-      << "    if (yyn < 0 || goto_check [yyn] != nt)" << endl
+      << "    const int yyn = action_index [GOTO_INDEX_OFFSET + state] + nt;" << endl
+      << "    if (yyn < 0 || action_check [GOTO_CHECK_OFFSET + yyn] != nt)" << endl
       << "      return goto_default [nt];" << endl
       << endl
-      << "    const int *const goto_info = &action_info [GOTO_INFO_OFFSET];" << endl
-      << "    return goto_info [yyn];" << endl
+      << "    return action_info [GOTO_INFO_OFFSET + yyn];" << endl
       << "  }" << endl
       << endl
       << "  static inline int t_action (int state, int token)" << endl
@@ -567,7 +582,7 @@
 
   out << "};" << endl << endl;
 
-  out << "const int " << grammar.table_name << "::lhs [] = {";
+  out << "const short " << grammar.table_name << "::lhs [] = {";
   idx = 0;
   for (RulePointer rule = grammar.rules.begin (); rule != grammar.rules.end (); ++rule, ++idx)
     {
@@ -581,7 +596,7 @@
     }
   out << "};" << endl << endl;
 
-  out << "const int " << grammar.table_name << ":: rhs[] = {";
+  out << "const short " << grammar.table_name << "::rhs [] = {";
   idx = 0;
   for (RulePointer rule = grammar.rules.begin (); rule != grammar.rules.end (); ++rule, ++idx)
     {
@@ -636,7 +651,7 @@
           << "#endif // " << prot << endl << endl;
     }
 
-  out << "const int " << grammar.table_name << "::action_default [] = {";
+  out << "const short " << grammar.table_name << "::action_default [] = {";
   idx = 0;
   for (StatePointer state = aut.states.begin (); state != aut.states.end (); ++state, ++idx)
     {
@@ -653,7 +668,7 @@
     }
   out << "};" << endl << endl;
 
-  out << "const int " << grammar.table_name << "::goto_default [] = {";
+  out << "const short " << grammar.table_name << "::goto_default [] = {";
   for (int i = 0; i < defgoto.size (); ++i)
     {
       if (i)
@@ -666,7 +681,7 @@
     }
   out << "};" << endl << endl;
 
-  out << "const int " << grammar.table_name << "::action_index [] = {";
+  out << "const short " << grammar.table_name << "::action_index [] = {";
   for (int i = 0; i < compressed_action.index.size (); ++i)
     {
       if (! (i % 10))
@@ -687,7 +702,7 @@
     }
   out << "};" << endl << endl;
 
-  out << "const int " << grammar.table_name << "::action_info [] = {";
+  out << "const short " << grammar.table_name << "::action_info [] = {";
   for (int i = 0; i < compressed_action.info.size (); ++i)
     {
       if (! (i % 10))
@@ -708,7 +723,7 @@
     }
   out << "};" << endl << endl;
 
-  out << "const int " << grammar.table_name << "::action_check [] = {";
+  out << "const short " << grammar.table_name << "::action_check [] = {";
   for (int i = 0; i < compressed_action.check.size (); ++i)
     {
       if (! (i % 10))