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);