split field modifiers into their own unit test
authorAaron Becker <abecker3@illinois.edu>
Tue, 16 Jun 2009 02:04:16 +0000 (02:04 +0000)
committerAaron Becker <abecker3@illinois.edu>
Tue, 16 Jun 2009 02:04:16 +0000 (02:04 +0000)
src/langs/charj/src/charj/translator/Charj.g
src/langs/charj/src/charj/translator/Charj.stg
src/langs/charj/src/charj/translator/CharjEmitter.g
src/langs/charj/src/charj/translator/CharjSemantics.g
src/langs/charj/tests/unit/FieldModifiers.cj [new file with mode: 0644]

index c93df227d7873525547740f99798d78623336653..7365376cdc8da30ace11d755fc7a219dc717778d 100644 (file)
@@ -448,7 +448,7 @@ throwsClause
     ;
 
 modifierList
-    :   modifier*   
+    :   modifier*
         ->  ^(MODIFIER_LIST modifier*)
     ;
 
@@ -457,12 +457,10 @@ modifier
     |   PROTECTED
     |   ENTRY
     |   PRIVATE
-    |   STATIC
     |   ABSTRACT
     |   NATIVE
     |   SYNCHRONIZED
     |   TRANSIENT
-    |   VOLATILE
     |   localModifier
     ;
 
@@ -473,6 +471,8 @@ localModifierList
     
 localModifier
     :   FINAL
+    |   STATIC
+    |   VOLATILE
     ;
 
 type
index 5d9b06b58ab1b61346d0ac40c38d0de6e3c48f68..6eef527cc32972b6335cd9547f815c006e1b872f 100644 (file)
@@ -235,6 +235,18 @@ var_id_decl(id, adl) ::=
 >>
 
 
+mod_list(mods) ::=
+<<
+<if(mods)><mods; separator=" "><endif>
+>>
+
+
+local_mod_list(mods) ::=
+<<
+<if(mods)><mods; separator=" "><endif>
+>>
+
 primitive_var_decl(modList, type, declList) ::=
 <<
 <if(modList)>
@@ -285,7 +297,7 @@ formal_param_list(sdecl, vdecl) ::=
 
 formal_param_decl(modList, type, declID) ::=
 <<
-    <modList> <type> <declID>
+<if(modList)><modList> <endif><type> <declID>
 >>
 
 
@@ -364,3 +376,17 @@ for_update(exprs) ::=
 <exprs; separator=", ">
 >>
 
+method_call(primary, generic_types, args) ::=
+<<
+<if(generic_types)>
+<primary>\<<generic_types>\>(<args>)
+<else>
+<primary>(<args>)
+<endif>
+>>
+
+arguments(exprs) ::=
+<<
+<exprs; separator=", ">
+>>
+
index 234e2ce87ce59777a2d1d6867c97f9c500a44602..b90762b869a9769f2827df0b1d5e005c75bdfcbd 100644 (file)
@@ -395,7 +395,7 @@ throwsClause
 
 modifierList
     :   ^(MODIFIER_LIST (m+=modifier)*)
-        -> template(mod={$m}) "<mod; separator=\" \">"
+        -> mod_list(mods={$m})
     ;
 
 modifier
@@ -406,24 +406,26 @@ $st = %{$start.getText()};
     |   PROTECTED
     |   PRIVATE
     |   ENTRY
-    |   STATIC
     |   ABSTRACT
     |   NATIVE
     |   SYNCHRONIZED
     |   TRANSIENT
-    |   VOLATILE
     |   localModifier
         -> {$localModifier.st}
     ;
 
 localModifierList
     :   ^(LOCAL_MODIFIER_LIST (m+=localModifier)*)
-        -> template(mod={$m}) "<mod; separator=\" \">"
+        -> local_mod_list(mods={$m})
     ;
 
 localModifier
+@init {
+$st = %{$start.getText()};
+}
     :   FINAL
-        -> {%{$start.getText()}}
+    |   STATIC
+    |   VOLATILE
     ;
 
     
@@ -570,11 +572,11 @@ statement
     |   ^(BREAK IDENT?)
         -> template() "break;" // TODO: support labeling
     |   ^(CONTINUE IDENT?)
-        -> template() "continue" // TODO: support labeling
+        -> template() "continue;" // TODO: support labeling
     |   ^(LABELED_STATEMENT i=IDENT s=statement)
         -> label(text={$i.text}, stmt={$s.st})
     |   expression
-        -> {$expression.st}
+        -> template(expr={$expression.st}) "<expr>;"
     |   ^(EMBED STRING_LITERAL EMBED_BLOCK)
         ->  embed_cc(str={$STRING_LITERAL.text}, blk={$EMBED_BLOCK.text})
     |   SEMI // Empty statement.
@@ -736,17 +738,17 @@ primaryExpression
             |   VOID CLASS
             )
         )
-        -> template(t={$text}) "<t>"
+        -> template(t={$text}) "/* AKB: not sure what's up with this primaryExpression yet */ <t>"
     |   parenthesizedExpression
         -> {$parenthesizedExpression.st}
     |   IDENT
         -> {%{$start.getText()}}
-    |   ^(METHOD_CALL primaryExpression genericTypeArgumentList? arguments)
-        -> template(t={$text}) "<t>"
+    |   ^(METHOD_CALL pe=primaryExpression gtal=genericTypeArgumentList? args=arguments)
+        -> method_call(primary={$pe.st}, generic_types={$gtal.st}, args={$args.st})
     |   explicitConstructorCall
         -> {$explicitConstructorCall.st}
-    |   ^(ARRAY_ELEMENT_ACCESS primaryExpression expression)
-        -> template(t={$text}) "<t>"
+    |   ^(ARRAY_ELEMENT_ACCESS pe=primaryExpression ex=expression)
+        -> template(pe={$pe.st}, ex={$ex.st}) "<pe>[<ex>]"
     |   literal
         -> {$literal.st}
     |   newExpression
@@ -795,8 +797,8 @@ newArrayConstruction
     ;
 
 arguments
-    :   ^(ARGUMENT_LIST expression*)
-        -> template(t={$text}) "<t>"
+    :   ^(ARGUMENT_LIST (ex+=expression)*)
+        -> arguments(exprs={$ex})
     ;
 
 literal
index 5a9da328168ed51d696dfc5e53ebba2cc7834515..e3ef7c8805abaf432cdee5d1aa248cb45d680fe6 100644 (file)
@@ -249,12 +249,10 @@ modifier
     |   PROTECTED
     |   PRIVATE
     |   ENTRY
-    |   STATIC
     |   ABSTRACT
     |   NATIVE
     |   SYNCHRONIZED
     |   TRANSIENT
-    |   VOLATILE
     |   localModifier
     ;
 
@@ -264,6 +262,8 @@ localModifierList
 
 localModifier
     :   FINAL
+    |   STATIC
+    |   VOLATILE
     ;
 
 type
diff --git a/src/langs/charj/tests/unit/FieldModifiers.cj b/src/langs/charj/tests/unit/FieldModifiers.cj
new file mode 100644 (file)
index 0000000..5197621
--- /dev/null
@@ -0,0 +1,15 @@
+package tests.unit;
+
+public class FieldModifiers {
+    public int i;
+    private int j;
+    static int k;
+    public static int l;
+    volatile int m;
+    protected int n;
+    final int r;
+// should fail
+    entry int o; 
+    abstract int p; 
+    transient int q;
+}