Charj: added some provisions for handling mainchares
authorAaron Becker <akbecker@gmail.com>
Tue, 25 May 2010 19:14:36 +0000 (14:14 -0500)
committerAaron Becker <akbecker@gmail.com>
Tue, 25 May 2010 19:14:36 +0000 (14:14 -0500)
src/langs/charj/src/charj/translator/Charj.g
src/langs/charj/src/charj/translator/CharjEmitter.g
src/langs/charj/src/charj/translator/CharjSemantics.g
src/langs/charj/src/charj/translator/ClassSymbol.java

index 3547067638df15180879f44fa3b2d8cc196731c4..7324fa3aa77d51b8283654f69738b70fd2bfaabf 100644 (file)
@@ -155,6 +155,7 @@ chareType
     :   'chare'
     |   'group'
     |   'nodegroup'
+    |   'mainchare'
     |   'chare_array' '[' ARRAY_DIMENSION ']' -> ^('chare_array' ARRAY_DIMENSION)
     ;
 
index 55407b8e35a31b588b38febbad35a03ce5638371..25914bcc1856f6d25ca1ee2a2226f57064bf9b6c 100644 (file)
@@ -168,6 +168,7 @@ $st = %{$start.getText()};
     :   'chare'
     |   'group'
     |   'nodegroup'
+    |   'mainchare'
     |   ^('chare_array' ARRAY_DIMENSION)
         -> template(t={$ARRAY_DIMENSION.text}) "array [<t>]"
     ;
index a036085725c3d8f3b473861f2c727f67a72d8ec9..b826afd98c6165ec650fe12870689e7d45f2f11c 100644 (file)
@@ -136,6 +136,12 @@ scope ScopeStack; // top-level type scope
                 importPackages($sym, $imports);
             }
             classScopeDeclaration*)
+            {
+                //System.out.println("Members for type " + $sym.name + ":");
+                //for (Map.Entry<String, Symbol> entry : $sym.members.entrySet()) {
+                //    System.out.println(entry.getKey());
+                //}
+            }
     |   ^('interface' IDENT (^('extends' type+))?  interfaceScopeDeclaration*)
     |   ^('enum' IDENT (^('implements' type+))? enumConstant+ classScopeDeclaration*)
     ;
@@ -144,6 +150,7 @@ chareType
     :   'chare'
     |   'group'
     |   'nodegroup'
+    |   'mainchare'
     |   ^('chare_array' ARRAY_DIMENSION)
     ;
 
@@ -162,7 +169,7 @@ scope ScopeStack;
             currentMethod = sym;
             sym.definition = $classScopeDeclaration.start;
             sym.definitionTokenStream = input.getTokenStream();
-            currentClass.members.put($IDENT.text, sym);
+            currentClass.define($IDENT.text, sym);
             $FUNCTION_METHOD_DECL.symbol = sym;
         }
     |   ^(PRIMITIVE_VAR_DECLARATION modifierList? simpleType variableDeclaratorList)
index 2930ee8c5906640fff87ee695f4c0becbe706280..b7e0eb02912040845b57be69891219b489298579 100644 (file)
@@ -12,20 +12,10 @@ public class ClassSymbol extends SymbolWithScope implements Scope {
         new LinkedHashMap<String, PackageScope>();
     List<String> includes = new ArrayList<String>();
 
-    /** List of all fields and methods */
+    /** Record of all fields and methods */
     public Map<String, Symbol> members = new LinkedHashMap<String, Symbol>();
-    public Map<String, String> aliases = new LinkedHashMap<String, String>();
-
-    /** The set of method names (without signatures) for this class.  Maps
-     *  to a list of methods with same name but different args
-     protected Map<String, List<MethodSymbol>> methods =
-     new HashMap<String, List<MethodSymbol>>();
-     */
-
-    /** List of unmangled methods for this class. Used to distinguish
-     *  var from method name in expressions.  x = f; // what is f?
-     */
-    protected Set<String> methodNames = new HashSet<String>();
+    public Map<String, VariableSymbol> fields = new LinkedHashMap<String, VariableSymbol>();
+    public Map<String, MethodSymbol> methods = new LinkedHashMap<String, MethodSymbol>();
 
     public boolean hasCopyCtor = false;
 
@@ -96,31 +86,6 @@ public class ClassSymbol extends SymbolWithScope implements Scope {
         return p;
     }
 
-    public void alias(
-            CharjAST aliasAST, 
-            CharjAST methodNameAST) {
-        String op = aliasAST.getToken().getText();
-        op = op.substring(1,op.length()-1);
-        String method = methodNameAST.getToken().getText();
-        method = method.substring(1,method.length()-1);
-        alias(op, method);
-    }
-
-    public void alias(
-            String alias, 
-            String methodName) {
-        aliases.put(alias, methodName);
-    }
-
-    public String getMethodNameForOperator(String op) {
-        String name = aliases.get(op);
-        if ( name==null ) {
-            symtab.translator.error(
-                    "no such operator for " + this.name + ": " + op);
-        }
-        return name;
-    }
-
     /** Using the list of imports, resolve a package name like charj.lang.
      *  There may be many packages defined and visible to the symbol table
      *  but this class can only see those packages in the implicit or explicit
@@ -194,20 +159,15 @@ public class ClassSymbol extends SymbolWithScope implements Scope {
     public MethodSymbol resolveMethodLocally(
             String name, 
             int numargs) {
-        if ( numargs>0 ) {
+        if (numargs > 0) {
             name += numargs;
         }
      
-        Symbol s = members.get(name);
-        if ( s!=null && s.getClass() == MethodSymbol.class ) {
-            return (MethodSymbol)s;
-        }
-
-        return null;
+        return methods.get(name);
     }
 
     public boolean isMethod(String name) {
-        if ( methodNames.contains(name) ) {
+        if ( methods.containsKey(name) ) {
             return true;
         }
         if ( getEnclosingScope()!=null ) {
@@ -219,8 +179,11 @@ public class ClassSymbol extends SymbolWithScope implements Scope {
     public Symbol define(
             String name, 
             Symbol sym) {
-        if ( sym instanceof MethodSymbol ) {
-            methodNames.add(sym.name);
+        members.put(name, sym);
+        if (sym instanceof MethodSymbol) {
+            methods.put(name, (MethodSymbol)sym);
+        } else if (sym instanceof VariableSymbol) {
+            fields.put(name, (VariableSymbol)sym);
         }
         return super.define(name, sym);
     }
@@ -240,13 +203,6 @@ public class ClassSymbol extends SymbolWithScope implements Scope {
         return name;
     }
 
-    public String getMangledName() {
-        if ( SymbolTable.TYPE_NAMES_TO_MANGLE.contains(name) ) {
-            return "m"+name;
-        }
-        return name;
-    }
-
     public void addInclude(String includeName) {
         includes.add(includeName);
     }