Charj : added pup generation for primitive type class members
authorMinas Charalambides <charala1@illinois.edu>
Tue, 25 May 2010 23:50:20 +0000 (18:50 -0500)
committerMinas Charalambides <charala1@illinois.edu>
Tue, 25 May 2010 23:50:20 +0000 (18:50 -0500)
src/langs/charj/src/charj/translator/Charj.g
src/langs/charj/src/charj/translator/Charj.stg
src/langs/charj/src/charj/translator/CharjAST.java
src/langs/charj/src/charj/translator/CharjASTModifier.g
src/langs/charj/src/charj/translator/CharjSemantics.g
src/langs/charj/src/charj/translator/PupRoutineCreator.java

index 3fb6d9478bf99640542d0daedb41692ff3b2c709..86e3e3ecdb1988ad35c4f80bcc434e101d51d319 100644 (file)
@@ -52,9 +52,6 @@ tokens {
     NODEGROUP               = 'nodegroup'       ;
     ENUM                    = 'enum'            ;
 
-    BITWISE_OR              = '|'               ;
-    BITWISE_AND             = '&'               ;
-
     FOR                     = 'for'             ;
     WHILE                   = 'while'           ;
     IF                      = 'if'              ;
@@ -69,6 +66,34 @@ tokens {
     THROW                   = 'throw'           ;
     BREAK                   = 'break'           ;
 
+    BITWISE_OR              = '|'               ;
+    BITWISE_AND             = '&'               ;
+    ASSIGNMENT              = '='               ;
+    PLUS_EQUALS             = '+='              ;
+    MINUS_EQUALS            = '-='              ;
+    TIMES_EQUALS            = '*='              ;
+    DIVIDE_EQUALS           = '/='              ;
+    AND_EQUALS              = '&='              ;
+    OR_EQUALS               = '|='              ;
+    POWER_EQUALS            = '^='              ;
+    MOD_EQUALS              = '%='              ;
+    OR                      = '||'              ;
+    AND                     = '&&'              ;
+    POWER                   = '^'               ;
+    GT                      = '>'               ;
+    LT                      = '<'               ;
+    PLUS                    = '+'               ;
+    MINUS                   = '-'               ;
+    TIMES                   = '*'               ;
+    DIVIDE                  = '/'               ;
+    MOD                     = '%'               ;
+    UNARY_PLUS              = '++'              ;
+    UNARY_MINUS             = '--'              ;
+    NOT                     = '!'               ;
+    TILDA                   = '~'               ;
+    INSTANCEOF              = 'instanceof'      ;
+
+
     // C++ keywords that aren't used in charj. 
     // We don't use these ourselves, but they're still reserved
     ASM                     = 'asm'             ;
@@ -145,8 +170,6 @@ tokens {
     SUPER_CONSTRUCTOR_CALL;
     THIS_CONSTRUCTOR_CALL;
     TYPE;
-    UNARY_MINUS;
-    UNARY_PLUS;
     PRIMITIVE_VAR_DECLARATION;
     OBJECT_VAR_DECLARATION;
     VAR_DECLARATOR;
index 61fc076aa710679f70ee59f3fd8e229c9a7df2af..e8338fca9c95399194ce3d3493e8903ebc9112eb 100644 (file)
@@ -224,7 +224,7 @@ ctorDecl_cc(modl, gtpl, id, fpl, block) ::=
 block_cc(bsl) ::=
 <<
 {
-<bsl; separator="\n">
+    <bsl; separator="\n">
 }
 >>
 
index facc27909868fff9c78d07f78f4f7a3d8f1d86b2..c4ae2443ffee398094efa6a34398210324bdf8b4 100644 (file)
@@ -56,4 +56,9 @@ public class CharjAST extends CommonTree
         return s;
     }
 
+    public CharjAST dupNode()
+    {
+        return new CharjAST(getType(), getText());
+    }
+
 }
index a023538ef110f6cecf3b71427c5e9f2a35d025ec..07039f59f97b6b611d554e358a1d05830fa91abb 100644 (file)
@@ -288,47 +288,47 @@ expression
     ;
 
 expr
-    :   ^('=' expr expr)
-    |   ^('+=' expr expr)
-    |   ^('-=' expr expr)
-    |   ^('*=' expr expr)
-    |   ^('/=' expr expr)
-    |   ^('&=' expr expr)
-    |   ^('|=' expr expr)
-    |   ^('^=' expr expr)
-    |   ^('%=' expr expr)
+    :   ^(ASSIGNMENT expr expr)
+    |   ^(PLUS_EQUALS expr expr)
+    |   ^(MINUS_EQUALS expr expr)
+    |   ^(TIMES_EQUALS expr expr)
+    |   ^(DIVIDE_EQUALS expr expr)
+    |   ^(AND_EQUALS expr expr)
+    |   ^(OR_EQUALS expr expr)
+    |   ^(POWER_EQUALS expr expr)
+    |   ^(MOD_EQUALS expr expr)
     |   ^('>>>=' expr expr)
     |   ^('>>=' expr expr)
     |   ^('<<=' expr expr)
     |   ^('?' expr expr expr)
-    |   ^('||' expr expr)
-    |   ^('&&' expr expr)
+    |   ^(OR expr expr)
+    |   ^(AND expr expr)
     |   ^(BITWISE_OR expr expr)
-    |   ^('^' expr expr)
+    |   ^(POWER expr expr)
     |   ^(BITWISE_AND expr expr)
-    |   ^('==' expr expr)
-    |   ^('!=' expr expr)
-    |   ^('instanceof' expr type)
-    |   ^('<=' expr expr)
-    |   ^('>=' expr expr)
+    |   ^(EQUALS expr expr)
+    |   ^(NOT_EQUALS expr expr)
+    |   ^(INSTANCEOF expr type)
+    |   ^(LTE expr expr)
+    |   ^(GTE expr expr)
     |   ^('>>>' expr expr)
     |   ^('>>' expr expr)
-    |   ^('>' expr expr)
+    |   ^(GT expr expr)
     |   ^('<<' expr expr)
-    |   ^('<' expr expr)
-    |   ^('+' expr expr)
-    |   ^('-' expr expr)
-    |   ^('*' expr expr)
-    |   ^('/' expr expr)
-    |   ^('%' expr expr)
+    |   ^(LT expr expr)
+    |   ^(PLUS expr expr)
+    |   ^(MINUS expr expr)
+    |   ^(TIMES expr expr)
+    |   ^(DIVIDE expr expr)
+    |   ^(MOD expr expr)
     |   ^(UNARY_PLUS expr)
     |   ^(UNARY_MINUS expr)
     |   ^(PRE_INC expr)
     |   ^(PRE_DEC expr)
     |   ^(POST_INC expr)
     |   ^(POST_DEC expr)
-    |   ^('~' expr)
-    |   ^('!' expr)
+    |   ^(TILDA expr)
+    |   ^(NOT expr)
     |   ^(CAST_EXPR type expr)
     |   primaryExpression
     ;
index 2130bc5df5d238ceeaa302472bb67e1bd7711266..68f0d4beb64fa723801b8222c0b21b46d0b90b59 100644 (file)
@@ -366,47 +366,47 @@ expression
     ;
 
 expr
-    :   ^('=' expr expr)
-    |   ^('+=' expr expr)
-    |   ^('-=' expr expr)
-    |   ^('*=' expr expr)
-    |   ^('/=' expr expr)
-    |   ^('&=' expr expr)
-    |   ^('|=' expr expr)
-    |   ^('^=' expr expr)
-    |   ^('%=' expr expr)
+    :   ^(ASSIGNMENT expr expr)
+    |   ^(PLUS_EQUALS expr expr)
+    |   ^(MINUS_EQUALS expr expr)
+    |   ^(TIMES_EQUALS expr expr)
+    |   ^(DIVIDE_EQUALS expr expr)
+    |   ^(AND_EQUALS expr expr)
+    |   ^(OR_EQUALS expr expr)
+    |   ^(POWER_EQUALS expr expr)
+    |   ^(MOD_EQUALS expr expr)
     |   ^('>>>=' expr expr)
     |   ^('>>=' expr expr)
     |   ^('<<=' expr expr)
     |   ^('?' expr expr expr)
-    |   ^('||' expr expr)
-    |   ^('&&' expr expr)
-    |   ^('|' expr expr)
-    |   ^('^' expr expr)
-    |   ^('&' expr expr)
-    |   ^('==' expr expr)
-    |   ^('!=' expr expr)
-    |   ^('instanceof' expr type)
-    |   ^('<=' expr expr)
-    |   ^('>=' expr expr)
+    |   ^(OR expr expr)
+    |   ^(AND expr expr)
+    |   ^(BITWISE_OR expr expr)
+    |   ^(POWER expr expr)
+    |   ^(BITWISE_AND expr expr)
+    |   ^(EQUALS expr expr)
+    |   ^(NOT_EQUALS expr expr)
+    |   ^(INSTANCEOF expr type)
+    |   ^(LTE expr expr)
+    |   ^(GTE expr expr)
     |   ^('>>>' expr expr)
     |   ^('>>' expr expr)
-    |   ^('>' expr expr)
+    |   ^(GT expr expr)
     |   ^('<<' expr expr)
-    |   ^('<' expr expr)
-    |   ^('+' expr expr)
-    |   ^('-' expr expr)
-    |   ^('*' expr expr)
-    |   ^('/' expr expr)
-    |   ^('%' expr expr)
+    |   ^(LT expr expr)
+    |   ^(PLUS expr expr)
+    |   ^(MINUS expr expr)
+    |   ^(TIMES expr expr)
+    |   ^(DIVIDE expr expr)
+    |   ^(MOD expr expr)
     |   ^(UNARY_PLUS expr)
     |   ^(UNARY_MINUS expr)
     |   ^(PRE_INC expr)
     |   ^(PRE_DEC expr)
     |   ^(POST_INC expr)
     |   ^(POST_DEC expr)
-    |   ^('~' expr)
-    |   ^('!' expr)
+    |   ^(TILDA expr)
+    |   ^(NOT expr)
     |   ^(CAST_EXPR type expr)
     |   primaryExpression
     ;
index 601cb2175d1a28383876e28d47eb2dfeb2856402..5a8f03bb63aff485dbb9325c83a1c759572a3948 100644 (file)
@@ -60,13 +60,15 @@ class PupRoutineCreator
         for(CharjAST p = idNode.getParent(); p != null; p = p.getParent())
             if(p.getType() == CharjParser.PRIMITIVE_VAR_DECLARATION)
                 primitive = true;
+            else if(p.getType() == CharjParser.FUNCTION_METHOD_DECL)
+                break;
             else if(p.getType() == CharjParser.TYPE)
             {
                 if(primitive)
                     primitiveVarPup(idNode);
                 else
                     objectVarPup(idNode);
-                return;
+                break;
             }
     }