You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by ms...@apache.org on 2012/12/18 13:36:12 UTC

svn commit: r1423423 - in /incubator/flex/whiteboard/mschmalle/falconjx: compiler.jx.tests/src/org/apache/flex/js/internal/driver/ compiler.jx/src/org/apache/flex/as/ compiler.jx/src/org/apache/flex/compiler/internal/as/codegen/ compiler.jx/src/org/apa...

Author: mschmalle
Date: Tue Dec 18 12:36:11 2012
New Revision: 1423423

URL: http://svn.apache.org/viewvc?rev=1423423&view=rev
Log:
Flex:FalconJx:
- Added var/const declarations
- Added chained variable, constant lists to fields and block declarations

Modified:
    incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx.tests/src/org/apache/flex/js/internal/driver/TestAccessorMembers.java
    incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx.tests/src/org/apache/flex/js/internal/driver/TestFieldMembers.java
    incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx.tests/src/org/apache/flex/js/internal/driver/TestStatements.java
    incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/as/IASEmitter.java
    incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/as/codegen/ASEmitter.java
    incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/js/codgen/ASBlockWalker.java
    incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/js/codgen/JSEmitter.java

Modified: incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx.tests/src/org/apache/flex/js/internal/driver/TestAccessorMembers.java
URL: http://svn.apache.org/viewvc/incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx.tests/src/org/apache/flex/js/internal/driver/TestAccessorMembers.java?rev=1423423&r1=1423422&r2=1423423&view=diff
==============================================================================
--- incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx.tests/src/org/apache/flex/js/internal/driver/TestAccessorMembers.java (original)
+++ incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx.tests/src/org/apache/flex/js/internal/driver/TestAccessorMembers.java Tue Dec 18 12:36:11 2012
@@ -94,7 +94,7 @@ public class TestAccessorMembers extends
     @Test
     public void testSetAccessor_withStatic()
     {
-        IAccessorNode node = getAccessor("public override function set foo(value:int):void{}");
+        IAccessorNode node = getAccessor("public static function set foo(value:int):void{}");
         visitor.visitFunction(node);
         assertOut("public static function set foo(value:int):void {\n}");
     }

Modified: incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx.tests/src/org/apache/flex/js/internal/driver/TestFieldMembers.java
URL: http://svn.apache.org/viewvc/incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx.tests/src/org/apache/flex/js/internal/driver/TestFieldMembers.java?rev=1423423&r1=1423422&r2=1423423&view=diff
==============================================================================
--- incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx.tests/src/org/apache/flex/js/internal/driver/TestFieldMembers.java (original)
+++ incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx.tests/src/org/apache/flex/js/internal/driver/TestFieldMembers.java Tue Dec 18 12:36:11 2012
@@ -102,7 +102,7 @@ public class TestFieldMembers extends Te
         visitor.visitVariable(node);
         assertOut("protected var foo:Vector.<Vector.<Vector.<Foo>>>");
     }
-    
+
     @Test
     public void testField_withNamespaceTypeValueComplex()
     {
@@ -110,7 +110,15 @@ public class TestFieldMembers extends Te
         visitor.visitVariable(node);
         assertOut("protected var foo:Foo = new Foo('bar', 42)");
     }
-    
+
+    @Test
+    public void testField_withList()
+    {
+        IVariableNode node = getField("protected var a:int = 4, b:int = 11, c:int = 42;");
+        visitor.visitVariable(node);
+        assertOut("protected var a:int = 4, b:int = 11, c:int = 42");
+    }
+
     //--------------------------------------------------------------------------
     // Constant
     //--------------------------------------------------------------------------

Modified: incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx.tests/src/org/apache/flex/js/internal/driver/TestStatements.java
URL: http://svn.apache.org/viewvc/incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx.tests/src/org/apache/flex/js/internal/driver/TestStatements.java?rev=1423423&r1=1423422&r2=1423423&view=diff
==============================================================================
--- incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx.tests/src/org/apache/flex/js/internal/driver/TestStatements.java (original)
+++ incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx.tests/src/org/apache/flex/js/internal/driver/TestStatements.java Tue Dec 18 12:36:11 2012
@@ -26,6 +26,7 @@ import org.apache.flex.compiler.tree.as.
 import org.apache.flex.compiler.tree.as.ISwitchNode;
 import org.apache.flex.compiler.tree.as.IThrowNode;
 import org.apache.flex.compiler.tree.as.ITryNode;
+import org.apache.flex.compiler.tree.as.IVariableNode;
 import org.apache.flex.compiler.tree.as.IWhileLoopNode;
 import org.apache.flex.compiler.tree.as.IWithNode;
 import org.junit.Test;
@@ -40,6 +41,86 @@ public class TestStatements extends Test
     //--------------------------------------------------------------------------
 
     //----------------------------------
+    // var declaration
+    //----------------------------------
+
+    @Test
+    public void testVarDeclaration()
+    {
+        IVariableNode node = (IVariableNode) getNode("var a;",
+                IVariableNode.class);
+        visitor.visitVariable(node);
+        assertOut("var a:*");
+    }
+
+    @Test
+    public void testVarDeclaration_withType()
+    {
+        IVariableNode node = (IVariableNode) getNode("var a:int;",
+                IVariableNode.class);
+        visitor.visitVariable(node);
+        assertOut("var a:int");
+    }
+
+    @Test
+    public void testVarDeclaration_withTypeAssignedValue()
+    {
+        IVariableNode node = (IVariableNode) getNode("var a:int = 42;",
+                IVariableNode.class);
+        visitor.visitVariable(node);
+        assertOut("var a:int = 42");
+    }
+
+    @Test
+    public void testVarDeclaration_withTypeAssignedValueComplex()
+    {
+        IVariableNode node = (IVariableNode) getNode(
+                "var a:Foo = new Foo(42, 'goo');", IVariableNode.class);
+        visitor.visitVariable(node);
+        assertOut("var a:Foo = new Foo(42, 'goo')");
+    }
+
+    @Test
+    public void testVarDeclaration_withList()
+    {
+        IVariableNode node = (IVariableNode) getNode(
+                "var a:int = 4, b:int = 11, c:int = 42;", IVariableNode.class);
+        visitor.visitVariable(node);
+        assertOut("var a:int = 4, b:int = 11, c:int = 42");
+    }
+
+    //----------------------------------
+    // const declaration
+    //----------------------------------
+
+    @Test
+    public void testConstDeclaration()
+    {
+        IVariableNode node = (IVariableNode) getNode("const a = 42;",
+                IVariableNode.class);
+        visitor.visitVariable(node);
+        assertOut("const a:* = 42");
+    }
+
+    @Test
+    public void testConstDeclaration_withType()
+    {
+        IVariableNode node = (IVariableNode) getNode("const a:int = 42;",
+                IVariableNode.class);
+        visitor.visitVariable(node);
+        assertOut("const a:int = 42");
+    }
+
+    @Test
+    public void testConstDeclaration_withList()
+    {
+        IVariableNode node = (IVariableNode) getNode(
+                "const a:int = 4, b:int = 11, c:int = 42;", IVariableNode.class);
+        visitor.visitVariable(node);
+        assertOut("const a:int = 4, b:int = 11, c:int = 42");
+    }
+
+    //----------------------------------
     // if ()
     //----------------------------------
 

Modified: incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/as/IASEmitter.java
URL: http://svn.apache.org/viewvc/incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/as/IASEmitter.java?rev=1423423&r1=1423422&r2=1423423&view=diff
==============================================================================
--- incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/as/IASEmitter.java (original)
+++ incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/as/IASEmitter.java Tue Dec 18 12:36:11 2012
@@ -25,6 +25,7 @@ import org.apache.flex.compiler.tree.as.
 import org.apache.flex.compiler.tree.as.IGetterNode;
 import org.apache.flex.compiler.tree.as.ISetterNode;
 import org.apache.flex.compiler.tree.as.IVariableNode;
+import org.apache.flex.compiler.visitor.IASBlockWalker;
 import org.apache.flex.compiler.visitor.IASNodeStrategy;
 
 /**
@@ -35,6 +36,10 @@ import org.apache.flex.compiler.visitor.
  */
 public interface IASEmitter
 {
+    IASBlockWalker getWalker();
+
+    void setWalker(IASBlockWalker asBlockWalker);
+
     /**
      * Writes a string to the writer.
      * 
@@ -54,6 +59,8 @@ public interface IASEmitter
      */
     void indentPop();
 
+    void emitVarDeclaration(IVariableNode node);
+
     /**
      * Emit a documentation comment for a Class field or constant
      * {@link IVariableNode}.
@@ -110,4 +117,5 @@ public interface IASEmitter
      * @param node The {@link ISetterNode} class setter member.
      */
     void emitSetAccessor(ISetterNode node);
+
 }

Modified: incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/as/codegen/ASEmitter.java
URL: http://svn.apache.org/viewvc/incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/as/codegen/ASEmitter.java?rev=1423423&r1=1423422&r2=1423423&view=diff
==============================================================================
--- incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/as/codegen/ASEmitter.java (original)
+++ incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/as/codegen/ASEmitter.java Tue Dec 18 12:36:11 2012
@@ -30,8 +30,10 @@ import org.apache.flex.compiler.definiti
 import org.apache.flex.compiler.definitions.IFunctionDefinition;
 import org.apache.flex.compiler.definitions.IVariableDefinition;
 import org.apache.flex.compiler.definitions.references.INamespaceReference;
+import org.apache.flex.compiler.internal.tree.as.ChainedVariableNode;
 import org.apache.flex.compiler.internal.tree.as.FunctionNode;
 import org.apache.flex.compiler.problems.ICompilerProblem;
+import org.apache.flex.compiler.tree.as.IASNode;
 import org.apache.flex.compiler.tree.as.IAccessorNode;
 import org.apache.flex.compiler.tree.as.IDefinitionNode;
 import org.apache.flex.compiler.tree.as.IExpressionNode;
@@ -59,16 +61,16 @@ public class ASEmitter implements IASEmi
 
     private int currentIndent = 0;
 
-    private IASBlockWalker visitor;
+    private IASBlockWalker walker;
 
-    public IASBlockWalker getVisitor()
+    public IASBlockWalker getWalker()
     {
-        return visitor;
+        return walker;
     }
 
-    public void setVisitor(IASBlockWalker value)
+    public void setWalker(IASBlockWalker value)
     {
-        visitor = value;
+        walker = value;
     }
 
     public ASEmitter(FilterWriter out)
@@ -139,6 +141,42 @@ public class ASEmitter implements IASEmi
     //--------------------------------------------------------------------------
 
     @Override
+    public void emitVarDeclaration(IVariableNode node)
+    {
+        if (!(node instanceof ChainedVariableNode))
+        {
+            emitMemberKeyword(node);
+        }
+
+        emitDeclarationName(node);
+        emitType(node.getVariableTypeNode());
+        emitAssignedValue(node.getAssignedValueNode());
+
+        if (!(node instanceof ChainedVariableNode))
+        {
+            // check for chained variables
+            int len = node.getChildCount();
+            for (int i = 0; i < len; i++)
+            {
+                IASNode child = node.getChild(i);
+                if (child instanceof ChainedVariableNode)
+                {
+                    write(",");
+                    write(" ");
+                    emitVarDeclaration((IVariableNode) child);
+                }
+            }
+        }
+
+        // the client such as IASBlockWalker is responsible for the 
+        // semi-colon and newline handling
+    }
+
+    //--------------------------------------------------------------------------
+    // 
+    //--------------------------------------------------------------------------
+
+    @Override
     public void emitFieldDocumentation(IVariableNode node)
     {
     }
@@ -151,12 +189,33 @@ public class ASEmitter implements IASEmi
         IVariableDefinition definition = (IVariableDefinition) node
                 .getDefinition();
 
-        emitNamespace(definition);
-        emitModifiers(definition);
-        emitMemberKeyword(node);
+        if (!(node instanceof ChainedVariableNode))
+        {
+            emitNamespace(definition);
+            emitModifiers(definition);
+            emitMemberKeyword(node);
+        }
+
         emitMemberName(node);
         emitType(node.getVariableTypeNode());
         emitAssignedValue(node.getAssignedValueNode());
+
+        if (!(node instanceof ChainedVariableNode))
+        {
+            // check for chained variables
+            int len = node.getChildCount();
+            for (int i = 0; i < len; i++)
+            {
+                IASNode child = node.getChild(i);
+                if (child instanceof ChainedVariableNode)
+                {
+                    write(",");
+                    write(" ");
+                    emitField((IVariableNode) child);
+                }
+            }
+        }
+
         // the client such as IASBlockWalker is responsible for the 
         // semi-colon and newline handling
     }
@@ -282,7 +341,12 @@ public class ASEmitter implements IASEmi
 
     protected void emitMemberName(IDefinitionNode node)
     {
-        getVisitor().walk(node.getNameExpressionNode());
+        getWalker().walk(node.getNameExpressionNode());
+    }
+
+    protected void emitDeclarationName(IDefinitionNode node)
+    {
+        getWalker().walk(node.getNameExpressionNode());
     }
 
     protected void emitParamters(IParameterNode[] nodes)
@@ -292,7 +356,7 @@ public class ASEmitter implements IASEmi
         for (int i = 0; i < len; i++)
         {
             IParameterNode node = nodes[i];
-            getVisitor().walk(node);
+            getWalker().walk(node);
             if (i < len - 1)
                 write(", ");
         }
@@ -306,7 +370,7 @@ public class ASEmitter implements IASEmi
         if (node != null)
         {
             write(":");
-            getVisitor().walk(node);
+            getWalker().walk(node);
         }
     }
 
@@ -317,19 +381,19 @@ public class ASEmitter implements IASEmi
             write(" ");
             write("=");
             write(" ");
-            getVisitor().walk(node);
+            getWalker().walk(node);
         }
     }
 
     protected void emitMethodScope(IScopedNode node)
     {
         write(" ");
-        getVisitor().walk(node);
+        getWalker().walk(node);
     }
 
     protected void emitAccessorKeyword(IKeywordNode node)
     {
-        getVisitor().walk(node);
+        getWalker().walk(node);
         write(" ");
     }
 }

Modified: incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/js/codgen/ASBlockWalker.java
URL: http://svn.apache.org/viewvc/incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/js/codgen/ASBlockWalker.java?rev=1423423&r1=1423422&r2=1423423&view=diff
==============================================================================
--- incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/js/codgen/ASBlockWalker.java (original)
+++ incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/js/codgen/ASBlockWalker.java Tue Dec 18 12:36:11 2012
@@ -24,6 +24,7 @@ import java.util.Collection;
 import java.util.List;
 import java.util.Stack;
 
+import org.apache.flex.as.IASEmitter;
 import org.apache.flex.compiler.definitions.IClassDefinition;
 import org.apache.flex.compiler.definitions.IDefinition;
 import org.apache.flex.compiler.definitions.IInterfaceDefinition;
@@ -68,6 +69,7 @@ import org.apache.flex.compiler.tree.as.
 import org.apache.flex.compiler.tree.as.ILanguageIdentifierNode;
 import org.apache.flex.compiler.tree.as.ILiteralNode;
 import org.apache.flex.compiler.tree.as.ILiteralNode.LiteralType;
+import org.apache.flex.compiler.tree.as.IAccessorNode;
 import org.apache.flex.compiler.tree.as.IMemberAccessExpressionNode;
 import org.apache.flex.compiler.tree.as.INamespaceNode;
 import org.apache.flex.compiler.tree.as.INumericLiteralNode;
@@ -126,7 +128,7 @@ public class ASBlockWalker implements IA
         SUPER_ARGUMENTS
     }
 
-    private JSEmitter emitter;
+    private IASEmitter emitter;
 
     private final List<ICompilerProblem> errors;
 
@@ -220,12 +222,12 @@ public class ASBlockWalker implements IA
     }
 
     public ASBlockWalker(List<ICompilerProblem> errors, IASProject project,
-            JSEmitter emitter)
+            IASEmitter emitter)
     {
         this.errors = errors;
         this.project = project;
         this.emitter = emitter;
-        emitter.setVisitor(this);
+        emitter.setWalker(this);
         pushContext(TraverseContext.ROOT);
     }
 
@@ -261,7 +263,7 @@ public class ASBlockWalker implements IA
     {
         debug("visitPackage()");
         pushContext(TraverseContext.PACKAGE);
-        emitter.emitJSDocPackgeHeader(node);
+        //        emitter.emitJSDocPackgeHeader(node);
         walk(findTypeNode(node)); // IClassNode | IInterfaceNode
         popContext(TraverseContext.PACKAGE);
     }
@@ -274,8 +276,8 @@ public class ASBlockWalker implements IA
 
         debug("visitClass()");
         pushContext(TraverseContext.TYPE);
-        emitter.emitProvide(typeDefinition);
-        emitter.emitRequire(typeDefinition);
+        //        emitter.emitProvide(typeDefinition);
+        //        emitter.emitRequire(typeDefinition);
 
         // fields, methods, namespaces
         final IDefinitionNode[] members = node.getAllMemberNodes();
@@ -285,11 +287,11 @@ public class ASBlockWalker implements IA
             // TODO (mschmalle) handle null constructor
         }
 
-//        emitter.emitConstructor(currentConstructor);
-//        emitter.emitInherits(typeDefinition, project);
+        //        emitter.emitConstructor(currentConstructor);
+        //        emitter.emitInherits(typeDefinition, project);
 
-        emitter.emitFields(members);
-        emitter.emitMethods(members);
+        emitFields(members);
+        emitMethods(members);
 
         popContext(TraverseContext.TYPE);
         typeDefinition = null;
@@ -334,19 +336,19 @@ public class ASBlockWalker implements IA
     {
         // XXX (mschmalle) visitFunction() refactor, this is a mess
         debug("visitFunction()");
-        
+
         if (SemanticUtils.isMemberDefinition(node.getDefinition()))
         {
             emitter.emitMethod(node);
             return; // TEMP
         }
-        
+
         FunctionNode fn = (FunctionNode) node;
         fn.parseFunctionBody(new ArrayList<ICompilerProblem>());
         if (!inContext(TraverseContext.FUNCTION))
         {
-            emitter.emitJSDoc(node, project, node == currentConstructor,
-                    typeDefinition);
+            //            emitter.emitJSDoc(node, project, node == currentConstructor,
+            //                    typeDefinition);
             String key = "";
             if (node instanceof IGetterNode)
                 key = "get_";
@@ -567,7 +569,7 @@ public class ASBlockWalker implements IA
                 emitter.write(";");
             }
             if (i < len - 1)
-                emitter.writeNewline();
+                emitter.write("\n");
         }
     }
 
@@ -775,7 +777,7 @@ public class ASBlockWalker implements IA
         emitter.write(")");
         emitter.write(" {");
         emitter.indentPush();
-        emitter.writeNewline();
+        emitter.write("\n");
 
         IConditionalNode[] cnodes = getCaseNodes(node);
         ITerminalNode dnode = getDefaultNode(node);
@@ -1225,6 +1227,34 @@ public class ASBlockWalker implements IA
     // 
     //--------------------------------------------------------------------------
 
+    protected void emitFields(IDefinitionNode[] members)
+    {
+        //getWalker().pushContext(TraverseContext.FIELD);
+        for (IDefinitionNode node : members)
+        {
+            if (node instanceof IVariableNode
+                    && !(node instanceof IAccessorNode))
+            {
+                walk(node);
+            }
+        }
+        //getWalker().popContext(TraverseContext.FIELD);
+    }
+
+    protected void emitMethods(IDefinitionNode[] members)
+    {
+        //getWalker().pushContext(TraverseContext.METHOD);
+        for (IDefinitionNode node : members)
+        {
+            if (node instanceof IFunctionNode)
+            {
+                if (node != getCurrentClass().getConstructor())
+                    walk(node);
+            }
+        }
+        //getWalker().popContext(TraverseContext.METHOD);
+    }
+
     private IFunctionNode getConstructor(IDefinitionNode[] members)
     {
         for (IDefinitionNode node : members)

Modified: incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/js/codgen/JSEmitter.java
URL: http://svn.apache.org/viewvc/incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/js/codgen/JSEmitter.java?rev=1423423&r1=1423422&r2=1423423&view=diff
==============================================================================
--- incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/js/codgen/JSEmitter.java (original)
+++ incubator/flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/js/codgen/JSEmitter.java Tue Dec 18 12:36:11 2012
@@ -26,15 +26,10 @@ import org.apache.flex.compiler.definiti
 import org.apache.flex.compiler.definitions.IPackageDefinition;
 import org.apache.flex.compiler.definitions.ITypeDefinition;
 import org.apache.flex.compiler.internal.as.codegen.ASEmitter;
-import org.apache.flex.compiler.internal.tree.as.FunctionObjectNode;
 import org.apache.flex.compiler.js.IJSEmitter;
 import org.apache.flex.compiler.projects.IASProject;
 import org.apache.flex.compiler.projects.ICompilerProject;
-import org.apache.flex.compiler.tree.as.IAccessorNode;
-import org.apache.flex.compiler.tree.as.IDefinitionNode;
-import org.apache.flex.compiler.tree.as.IExpressionNode;
 import org.apache.flex.compiler.tree.as.IFunctionNode;
-import org.apache.flex.compiler.tree.as.ILanguageIdentifierNode;
 import org.apache.flex.compiler.tree.as.IPackageNode;
 import org.apache.flex.compiler.tree.as.IParameterNode;
 import org.apache.flex.compiler.tree.as.IVariableNode;
@@ -48,11 +43,6 @@ public class JSEmitter extends ASEmitter
 
     private JSDocEmitter jsdoc;
 
-    public ICompilerProject getProject()
-    {
-        return getVisitor().getProject();
-    }
-
     public JSEmitter(FilterWriter out)
     {
         super(out);
@@ -149,35 +139,7 @@ public class JSEmitter extends ASEmitter
     {
         // for now, we just call back, this is to allow custom handling
         // straight from the emitter
-        getVisitor().visitConstructor(node);
-    }
-
-    public void emitFields(IDefinitionNode[] members)
-    {
-        //getVisitor().pushContext(TraverseContext.FIELD);
-        for (IDefinitionNode node : members)
-        {
-            if (node instanceof IVariableNode
-                    && !(node instanceof IAccessorNode))
-            {
-                getVisitor().walk(node);
-            }
-        }
-        //getVisitor().popContext(TraverseContext.FIELD);
-    }
-
-    public void emitMethods(IDefinitionNode[] members)
-    {
-        //getVisitor().pushContext(TraverseContext.METHOD);
-        for (IDefinitionNode node : members)
-        {
-            if (node instanceof IFunctionNode)
-            {
-                if (node != getVisitor().getCurrentClass().getConstructor())
-                    getVisitor().walk(node);
-            }
-        }
-        //getVisitor().popContext(TraverseContext.METHOD);
+        getWalker().visitConstructor(node);
     }
 
     public void emitField(IVariableNode node)
@@ -197,40 +159,40 @@ public class JSEmitter extends ASEmitter
 
     public void emitVarDeclaration(IVariableNode node)
     {
-        getVisitor().walk(node.getChild(0)); // VariableExpressionNode
-        write(" ");
-        getVisitor().walk(node.getNameExpressionNode());
-        // add :Type
-        if (!javascriptMode)
-        {
-            IExpressionNode tnode = node.getVariableTypeNode();
-            if (tnode instanceof ILanguageIdentifierNode)
-            {
-                ILanguageIdentifierNode lnode = (ILanguageIdentifierNode) tnode;
-                if (lnode.getKind() != ILanguageIdentifierNode.LanguageIdentifierKind.ANY_TYPE)
-                    write(":");
-            }
-            else
-            {
-                write(":");
-            }
-
-            getVisitor().walk(node.getVariableTypeNode());
-        }
-        IExpressionNode vnode = node.getAssignedValueNode();
-        if (vnode != null)
-        {
-            write(" = ");
-            if (vnode instanceof FunctionObjectNode)
-            {
-                //getVisitor().pushContext(TraverseContext.FUNCTION);
-                getVisitor().walk(vnode.getChild(0)); // IFunctionNode
-                //getVisitor().popContext(TraverseContext.FUNCTION);
-            }
-            else
-            {
-                getVisitor().walk(vnode);
-            }
-        }
+        super.emitVarDeclaration(node);
+        //        getWalker().walk(node.getChild(0)); // VariableExpressionNode
+        //        write(" ");
+        //        getWalker().walk(node.getNameExpressionNode());
+        //        // add :Type
+        //        {
+        //            IExpressionNode tnode = node.getVariableTypeNode();
+        //            if (tnode instanceof ILanguageIdentifierNode)
+        //            {
+        //                ILanguageIdentifierNode lnode = (ILanguageIdentifierNode) tnode;
+        //                if (lnode.getKind() != ILanguageIdentifierNode.LanguageIdentifierKind.ANY_TYPE)
+        //                    write(":");
+        //            }
+        //            else
+        //            {
+        //                write(":");
+        //            }
+        //
+        //            getWalker().walk(node.getVariableTypeNode());
+        //        }
+        //        IExpressionNode vnode = node.getAssignedValueNode();
+        //        if (vnode != null)
+        //        {
+        //            write(" = ");
+        //            if (vnode instanceof FunctionObjectNode)
+        //            {
+        //                //getWalker().pushContext(TraverseContext.FUNCTION);
+        //                getWalker().walk(vnode.getChild(0)); // IFunctionNode
+        //                //getWalker().popContext(TraverseContext.FUNCTION);
+        //            }
+        //            else
+        //            {
+        //                getWalker().walk(vnode);
+        //            }
+        //        }
     }
 }