Charj: modify mainchare detection to avoid runtime crash
authorAaron Becker <akbecker@gmail.com>
Mon, 12 Jul 2010 21:21:01 +0000 (16:21 -0500)
committerAaron Becker <akbecker@gmail.com>
Mon, 12 Jul 2010 21:21:01 +0000 (16:21 -0500)
src/langs/charj/src/charj/translator/InitPUPCollector.g

index aaf646e5a99bbb14e4101f65af0aa14f029b6f0f..cf25cafb9293e63059cc9f3d56e10941ddb65024 100644 (file)
@@ -14,7 +14,6 @@ options {
 @members {
     Scope currentScope;
     ClassSymbol currentClass = null;
-    boolean inMainchare = false;
     boolean inMethod = false;
 }
 
@@ -28,19 +27,26 @@ topdown
 
 bottomup
     :   exitMethod
-    |   exitMainchare
+    ;
+
+classType
+    :   CLASS
+    |   CHARE
+    |   GROUP
+    |   NODEGROUP
+    |   MAINCHARE
+    |   ^(CHARE_ARRAY ARRAY_DIMENSION)
     ;
 
 enterClass
-    :   ^(TYPE .* m=MAINCHARE .* IDENT
-            (^('extends' .*))?
-            (^('implements' .*))?
-            (^((FUNCTION_METHOD_DECL | ENTRY_FUNCTION_DECL | PRIMITIVE_VAR_DECLARATION |
-                OBJECT_VAR_DECLARATION | CONSTRUCTOR_DECL | ENTRY_CONSTRUCTOR_DECL) .*))*)
+    :   ^(TYPE classType IDENT
+        (^('extends' .*))?
+        (^('implements' .*))?
+        (^((FUNCTION_METHOD_DECL | ENTRY_FUNCTION_DECL | PRIMITIVE_VAR_DECLARATION |
+            OBJECT_VAR_DECLARATION | CONSTRUCTOR_DECL | ENTRY_CONSTRUCTOR_DECL) .*))*)
         {
             currentClass = (ClassSymbol)$IDENT.def.type;
-            if($m!=null)
-                currentClass.isMainChare = true;
+            currentClass.isMainChare = $classType.text.equals("mainchare");
         }
     ;
 
@@ -85,17 +91,6 @@ exitMethod
         }
     ;
 
-exitMainchare
-    :   ^(TYPE .* IDENT
-            (^('extends' .*))?
-            (^('implements' .*))?
-            (^((FUNCTION_METHOD_DECL | ENTRY_FUNCTION_DECL | PRIMITIVE_VAR_DECLARATION |
-                OBJECT_VAR_DECLARATION | CONSTRUCTOR_DECL | ENTRY_CONSTRUCTOR_DECL) .*))*)
-        {
-            inMainchare = false;
-        }
-    ;
-
 varDeclaration
     :   ^(VAR_DECLARATOR ^(IDENT .*) (expr=.)? )
         {