You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by er...@apache.org on 2013/01/09 17:17:28 UTC

svn commit: r1430932 - in /flex/whiteboard/mschmalle/falconjx: compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/ compiler.jx/src/org/apache/flex/compiler/internal/as/codegen/ compiler.jx/src/org/apache/flex/compiler/internal/js/c...

Author: erikdebruin
Date: Wed Jan  9 16:17:27 2013
New Revision: 1430932

URL: http://svn.apache.org/viewvc?rev=1430932&view=rev
Log:
- the constructor is 'just' a special case method, so I've refactored to reflect that, improving readability and simplifying the emitter

Modified:
    flex/whiteboard/mschmalle/falconjx/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogMethodMembers.java
    flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/as/codegen/ASBlockWalker.java
    flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/js/codegen/JSEmitter.java
    flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/js/codegen/amd/JSAMDEmitter.java
    flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/js/codegen/goog/JSGoogEmitter.java
    flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/js/codegen/goog/IJSGoogDocEmitter.java
    flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/visitor/IASBlockVisitor.java

Modified: flex/whiteboard/mschmalle/falconjx/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogMethodMembers.java
URL: http://svn.apache.org/viewvc/flex/whiteboard/mschmalle/falconjx/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogMethodMembers.java?rev=1430932&r1=1430931&r2=1430932&view=diff
==============================================================================
--- flex/whiteboard/mschmalle/falconjx/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogMethodMembers.java (original)
+++ flex/whiteboard/mschmalle/falconjx/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogMethodMembers.java Wed Jan  9 16:17:27 2013
@@ -159,7 +159,7 @@ public class TestGoogMethodMembers exten
     public void testConstructor_withThisInBody()
     {
         IFunctionNode node = getMethod("public function A(){this.foo;}");
-        visitor.visitConstructor(node);
+        visitor.visitFunction(node);
         assertOut("/**\n * @constructor\n */\nA = function() {\n\tthis.foo;\n}");
     }
     

Modified: flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/as/codegen/ASBlockWalker.java
URL: http://svn.apache.org/viewvc/flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/as/codegen/ASBlockWalker.java?rev=1430932&r1=1430931&r2=1430932&view=diff
==============================================================================
--- flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/as/codegen/ASBlockWalker.java (original)
+++ flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/as/codegen/ASBlockWalker.java Wed Jan  9 16:17:27 2013
@@ -291,16 +291,6 @@ public class ASBlockWalker implements IA
     }
 
     @Override
-    public void visitConstructor(IFunctionNode node)
-    {
-        // TODO (mschmalle) what to do about missing constructor node?
-        if (node == null)
-            return;
-        debug("visitConstructor()");
-        walk(node);
-    }
-
-    @Override
     public void visitVariable(IVariableNode node)
     {
         debug("visitVariable()");

Modified: flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/js/codegen/JSEmitter.java
URL: http://svn.apache.org/viewvc/flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/js/codegen/JSEmitter.java?rev=1430932&r1=1430931&r2=1430932&view=diff
==============================================================================
--- flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/js/codegen/JSEmitter.java (original)
+++ flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/js/codegen/JSEmitter.java Wed Jan  9 16:17:27 2013
@@ -28,7 +28,6 @@ import org.apache.flex.compiler.internal
 import org.apache.flex.compiler.js.codegen.IJSEmitter;
 import org.apache.flex.compiler.tree.as.IASNode;
 import org.apache.flex.compiler.tree.as.IExpressionNode;
-import org.apache.flex.compiler.tree.as.IFunctionNode;
 import org.apache.flex.compiler.tree.as.IVariableNode;
 
 /**
@@ -42,13 +41,6 @@ public class JSEmitter extends ASEmitter
         super(out);
     }
 
-    public void emitConstructor(IFunctionNode node)
-    {
-        // for now, we just call back, this is to allow custom handling
-        // straight from the emitter
-        getWalker().visitConstructor(node);
-    }
-
     @Override
     public void emitFunctionObject(IExpressionNode node)
     {

Modified: flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/js/codegen/amd/JSAMDEmitter.java
URL: http://svn.apache.org/viewvc/flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/js/codegen/amd/JSAMDEmitter.java?rev=1430932&r1=1430931&r2=1430932&view=diff
==============================================================================
--- flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/js/codegen/amd/JSAMDEmitter.java (original)
+++ flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/js/codegen/amd/JSAMDEmitter.java Wed Jan  9 16:17:27 2013
@@ -58,29 +58,24 @@ public class JSAMDEmitter extends JSEmit
     //--------------------------------------------------------------------------
 
     @Override
-    public void emitConstructor(IFunctionNode node)
-    {
-        IClassDefinition definition = getClassDefinition(node);
-
-        FunctionNode fn = (FunctionNode) node;
-        fn.parseFunctionBody(new ArrayList<ICompilerProblem>());
-
-        String qname = definition.getQualifiedName();
-        write(qname);
-        write(" ");
-        write("=");
-        write(" ");
-        write("function");
-        emitParamters(node.getParameterNodes());
-        emitMethodScope(node.getScopedNode());
-    }
-
-    @Override
     public void emitMethod(IFunctionNode node)
     {
         if (node.isConstructor())
         {
-            emitConstructor(node);
+            IClassDefinition definition = getClassDefinition(node);
+
+            FunctionNode fn = (FunctionNode) node;
+            fn.parseFunctionBody(new ArrayList<ICompilerProblem>());
+
+            String qname = definition.getQualifiedName();
+            write(qname);
+            write(" ");
+            write("=");
+            write(" ");
+            write("function");
+            emitParamters(node.getParameterNodes());
+            emitMethodScope(node.getScopedNode());
+
             return;
         }
 

Modified: flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/js/codegen/goog/JSGoogEmitter.java
URL: http://svn.apache.org/viewvc/flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/js/codegen/goog/JSGoogEmitter.java?rev=1430932&r1=1430931&r2=1430932&view=diff
==============================================================================
--- flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/js/codegen/goog/JSGoogEmitter.java (original)
+++ flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/internal/js/codegen/goog/JSGoogEmitter.java Wed Jan  9 16:17:27 2013
@@ -129,7 +129,7 @@ public class JSGoogEmitter extends JSEmi
         IClassDefinition definition = node.getDefinition();
 
         // constructor
-        emitConstructor((IFunctionNode) definition.getConstructor().getNode());
+        emitMethod((IFunctionNode) definition.getConstructor().getNode());
         write(";\n");
         write("\n");
 
@@ -240,43 +240,6 @@ public class JSGoogEmitter extends JSEmi
         */
     }
     
-	@Override
-	public void emitConstructor(IFunctionNode node)
-	{
-        IClassDefinition definition = getClassDefinition(node);
-        
-        FunctionNode fn = (FunctionNode) node;
-        fn.parseFunctionBody(new ArrayList<ICompilerProblem>());
-
-        ICompilerProject project = getWalker().getProject();
-        
-        getDoc().emitMethodDoc(node, project);
-
-        boolean hasSuperClass = hasSuperClass(node, project);
-        
-    	String qname = definition.getQualifiedName();
-    	write(qname);
-        write(" ");
-        write("=");
-        write(" ");
-        write("function");
-        emitParamters(node.getParameterNodes());
-        if (node.getScopedNode().getChildCount() > 0 || hasSuperClass)
-        	emitMethodScope(node.getScopedNode());
-        else
-        	write(" {\n}");
-        
-        if (hasSuperClass)
-        {
-            write("\ngoog.inherits(");
-            write(qname);
-            write(", ");
-            String sname = getSuperClassDefinition(node, project).getQualifiedName();
-            write(sname);
-            write(")");
-        }
-    }
-
     @Override
     public void emitField(IVariableNode node)
     {
@@ -327,32 +290,62 @@ public class JSGoogEmitter extends JSEmi
     @Override
     public void emitMethod(IFunctionNode node)
     {
-        if (node.isConstructor())
-        {
-            emitConstructor(node);
-            return;
-        }
-
-        getDoc().emitMethodDoc(node, getWalker().getProject());
-        
         FunctionNode fn = (FunctionNode) node;
         fn.parseFunctionBody(new ArrayList<ICompilerProblem>());
 
+        ICompilerProject project = getWalker().getProject();
+        
+        getDoc().emitMethodDoc(node, project);
+        
+        boolean isConstructor = node.isConstructor();
+        
         String qname = getTypeDefinition(node).getQualifiedName();
         if (qname != null && !qname.equals(""))
         {
             write(qname);
-            write(".");
-            if (!fn.hasModifier(ASModifier.STATIC))
-                write("prototype.");
+            if (!isConstructor)
+            {
+            	write(".");
+            	if (!fn.hasModifier(ASModifier.STATIC))
+	            {
+	                write("prototype");
+	            	write(".");
+	            }
+            }
         }
 
-        emitMemberName(node);
+        if (!isConstructor)
+    		emitMemberName(node);
+        
         write(" ");
         write("=");
         write(" ");
         write("function");
+        
         emitParamters(node.getParameterNodes());
+
+        if (isConstructor)
+        {
+            boolean hasSuperClass = hasSuperClass(node, project);
+
+            if (node.getScopedNode().getChildCount() > 0 || hasSuperClass)
+            	emitMethodScope(node.getScopedNode());
+            else
+            	write(" {\n}");
+            
+            if (hasSuperClass)
+            {
+                write("\ngoog.inherits(");
+                write(qname);
+                write(", ");
+                String sname = getSuperClassDefinition(node, project).getQualifiedName();
+                write(sname);
+                write(")");
+            }
+            
+            return;
+        }
+
         emitMethodScope(node.getScopedNode());
     }
 

Modified: flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/js/codegen/goog/IJSGoogDocEmitter.java
URL: http://svn.apache.org/viewvc/flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/js/codegen/goog/IJSGoogDocEmitter.java?rev=1430932&r1=1430931&r2=1430932&view=diff
==============================================================================
--- flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/js/codegen/goog/IJSGoogDocEmitter.java (original)
+++ flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/js/codegen/goog/IJSGoogDocEmitter.java Wed Jan  9 16:17:27 2013
@@ -49,8 +49,6 @@ import org.apache.flex.compiler.tree.as.
 public interface IJSGoogDocEmitter extends IJSDocEmitter
 {
 	
-    //void emitConstructorDoc(IFunctionNode node, ICompilerProject project);
-
     void emitFieldDoc(IVariableNode node);
 
     void emitMethodDoc(IFunctionNode node, ICompilerProject project);

Modified: flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/visitor/IASBlockVisitor.java
URL: http://svn.apache.org/viewvc/flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/visitor/IASBlockVisitor.java?rev=1430932&r1=1430931&r2=1430932&view=diff
==============================================================================
--- flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/visitor/IASBlockVisitor.java (original)
+++ flex/whiteboard/mschmalle/falconjx/compiler.jx/src/org/apache/flex/compiler/visitor/IASBlockVisitor.java Wed Jan  9 16:17:27 2013
@@ -110,9 +110,6 @@ public interface IASBlockVisitor
 
     void visitFunction(IFunctionNode node);
 
-    // TODO (mschmalle) Figure out if the indirection is useful
-    void visitConstructor(IFunctionNode node);
-
     void visitGetter(IGetterNode node);
 
     void visitSetter(ISetterNode node);