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 2013/01/21 19:38:16 UTC
svn commit: r1436541 - in /flex/falcon/trunk:
compiler.jx.tests/src/org/apache/flex/compiler/internal/as/codegen/
compiler.jx/src/org/apache/flex/compiler/as/codegen/
compiler.jx/src/org/apache/flex/compiler/internal/as/codegen/
compiler.jx/src/org/apa...
Author: mschmalle
Date: Mon Jan 21 18:38:16 2013
New Revision: 1436541
URL: http://svn.apache.org/viewvc?rev=1436541&view=rev
Log:
Flex:FalconJx
- Changed signature of package visitor to IPackageDefiniton for mxml polymorphism
Modified:
flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/as/codegen/TestWalkerBase.java
flex/falcon/trunk/compiler.jx/src/org/apache/flex/compiler/as/codegen/IASEmitter.java
flex/falcon/trunk/compiler.jx/src/org/apache/flex/compiler/internal/as/codegen/ASBlockWalker.java
flex/falcon/trunk/compiler.jx/src/org/apache/flex/compiler/internal/as/codegen/ASEmitter.java
flex/falcon/trunk/compiler.jx/src/org/apache/flex/compiler/internal/js/codegen/goog/JSGoogEmitter.java
flex/falcon/trunk/compiler.jx/src/org/apache/flex/compiler/visitor/IASBlockVisitor.java
flex/falcon/trunk/compiler.jx/src/org/apache/flex/compiler/visitor/IASBlockWalker.java
Modified: flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/as/codegen/TestWalkerBase.java
URL: http://svn.apache.org/viewvc/flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/as/codegen/TestWalkerBase.java?rev=1436541&r1=1436540&r2=1436541&view=diff
==============================================================================
--- flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/as/codegen/TestWalkerBase.java (original)
+++ flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/as/codegen/TestWalkerBase.java Mon Jan 21 18:38:16 2013
@@ -14,7 +14,7 @@ public class TestWalkerBase extends Test
{
protected IASBlockVisitor visitor;
- private IBackend backend;
+ protected IBackend backend;
private ASFilterWriter writer;
Modified: flex/falcon/trunk/compiler.jx/src/org/apache/flex/compiler/as/codegen/IASEmitter.java
URL: http://svn.apache.org/viewvc/flex/falcon/trunk/compiler.jx/src/org/apache/flex/compiler/as/codegen/IASEmitter.java?rev=1436541&r1=1436540&r2=1436541&view=diff
==============================================================================
--- flex/falcon/trunk/compiler.jx/src/org/apache/flex/compiler/as/codegen/IASEmitter.java (original)
+++ flex/falcon/trunk/compiler.jx/src/org/apache/flex/compiler/as/codegen/IASEmitter.java Mon Jan 21 18:38:16 2013
@@ -21,6 +21,7 @@ package org.apache.flex.compiler.as.code
import java.io.Writer;
+import org.apache.flex.compiler.definitions.IPackageDefinition;
import org.apache.flex.compiler.internal.tree.as.FunctionObjectNode;
import org.apache.flex.compiler.internal.tree.as.LabeledStatementNode;
import org.apache.flex.compiler.internal.tree.as.NamespaceAccessExpressionNode;
@@ -47,7 +48,6 @@ import org.apache.flex.compiler.tree.as.
import org.apache.flex.compiler.tree.as.INamespaceNode;
import org.apache.flex.compiler.tree.as.INumericLiteralNode;
import org.apache.flex.compiler.tree.as.IObjectLiteralValuePairNode;
-import org.apache.flex.compiler.tree.as.IPackageNode;
import org.apache.flex.compiler.tree.as.IParameterNode;
import org.apache.flex.compiler.tree.as.IReturnNode;
import org.apache.flex.compiler.tree.as.ISetterNode;
@@ -103,18 +103,14 @@ public interface IASEmitter
*/
void writeNewline();
-
-
- void emitPackageHeader(IPackageNode node);
+ void emitPackageHeader(IPackageDefinition definition);
- void emitPackageHeaderContents(IPackageNode node);
+ void emitPackageHeaderContents(IPackageDefinition definition);
- void emitPackageContents(IPackageNode node);
+ void emitPackageContents(IPackageDefinition definition);
- void emitPackageFooter(IPackageNode node);
+ void emitPackageFooter(IPackageDefinition definition);
-
-
/**
* Emit a Class.
*
Modified: flex/falcon/trunk/compiler.jx/src/org/apache/flex/compiler/internal/as/codegen/ASBlockWalker.java
URL: http://svn.apache.org/viewvc/flex/falcon/trunk/compiler.jx/src/org/apache/flex/compiler/internal/as/codegen/ASBlockWalker.java?rev=1436541&r1=1436540&r2=1436541&view=diff
==============================================================================
--- flex/falcon/trunk/compiler.jx/src/org/apache/flex/compiler/internal/as/codegen/ASBlockWalker.java (original)
+++ flex/falcon/trunk/compiler.jx/src/org/apache/flex/compiler/internal/as/codegen/ASBlockWalker.java Mon Jan 21 18:38:16 2013
@@ -25,6 +25,7 @@ import org.apache.flex.compiler.as.codeg
import org.apache.flex.compiler.definitions.IClassDefinition;
import org.apache.flex.compiler.definitions.IDefinition;
import org.apache.flex.compiler.definitions.IInterfaceDefinition;
+import org.apache.flex.compiler.definitions.IPackageDefinition;
import org.apache.flex.compiler.internal.semantics.SemanticUtils;
import org.apache.flex.compiler.internal.tree.as.BaseLiteralContainerNode;
import org.apache.flex.compiler.internal.tree.as.FunctionObjectNode;
@@ -93,7 +94,13 @@ import org.apache.flex.compiler.visitor.
public class ASBlockWalker implements IASBlockVisitor, IASBlockWalker
{
private IASEmitter emitter;
-
+
+ @Override
+ public IASEmitter getEmitter()
+ {
+ return emitter;
+ }
+
private final List<ICompilerProblem> errors;
List<ICompilerProblem> getErrors()
@@ -184,10 +191,11 @@ public class ASBlockWalker implements IA
public void visitPackage(IPackageNode node)
{
debug("visitPackage()");
- emitter.emitPackageHeader(node);
- emitter.emitPackageHeaderContents(node);
- emitter.emitPackageContents(node);
- emitter.emitPackageFooter(node);
+ IPackageDefinition definition = (IPackageDefinition) node.getDefinition();
+ emitter.emitPackageHeader(definition);
+ emitter.emitPackageHeaderContents(definition);
+ emitter.emitPackageContents(definition);
+ emitter.emitPackageFooter(definition);
}
//--------------------------------------------------------------------------
@@ -567,4 +575,5 @@ public class ASBlockWalker implements IA
&& (definition.getParent() instanceof IClassDefinition || definition
.getParent() instanceof IInterfaceDefinition);
}
+
}
Modified: flex/falcon/trunk/compiler.jx/src/org/apache/flex/compiler/internal/as/codegen/ASEmitter.java
URL: http://svn.apache.org/viewvc/flex/falcon/trunk/compiler.jx/src/org/apache/flex/compiler/internal/as/codegen/ASEmitter.java?rev=1436541&r1=1436540&r2=1436541&view=diff
==============================================================================
--- flex/falcon/trunk/compiler.jx/src/org/apache/flex/compiler/internal/as/codegen/ASEmitter.java (original)
+++ flex/falcon/trunk/compiler.jx/src/org/apache/flex/compiler/internal/as/codegen/ASEmitter.java Mon Jan 21 18:38:16 2013
@@ -32,6 +32,7 @@ import org.apache.flex.compiler.constant
import org.apache.flex.compiler.constants.IASLanguageConstants;
import org.apache.flex.compiler.definitions.IDefinition;
import org.apache.flex.compiler.definitions.IFunctionDefinition;
+import org.apache.flex.compiler.definitions.IPackageDefinition;
import org.apache.flex.compiler.definitions.IVariableDefinition;
import org.apache.flex.compiler.internal.tree.as.ChainedVariableNode;
import org.apache.flex.compiler.internal.tree.as.FunctionNode;
@@ -101,11 +102,14 @@ public class ASEmitter implements IASEmi
public static final String CURLYBRACE_CLOSE = "}";
public static final String CURLYBRACE_OPEN = "{";
public static final String DASH = "-";
- public static final String EQUALS = ASTNodeID.AssignmentExpressionID.getParaphrase();
- public static final String FUNCTION = IASKeywordConstants.FUNCTION.toLowerCase();
+ public static final String EQUALS = ASTNodeID.AssignmentExpressionID
+ .getParaphrase();
+ public static final String FUNCTION = IASKeywordConstants.FUNCTION
+ .toLowerCase();
public static final String INDENT = "\t";
public static final String LENGTH = "length";
- public static final String LESS_THEN = ASTNodeID.Op_LessThanID.getParaphrase();
+ public static final String LESS_THEN = ASTNodeID.Op_LessThanID
+ .getParaphrase();
public static final String NL = "\n";
public static final String PARENTHESES_CLOSE = ")";
public static final String PARENTHESES_OPEN = "(";
@@ -170,9 +174,9 @@ public class ASEmitter implements IASEmi
@Override
public void write(String value)
{
- try
- {
- out.write(value);
+ try
+ {
+ out.write(value);
}
catch (IOException e)
{
@@ -199,7 +203,7 @@ public class ASEmitter implements IASEmi
{
currentIndent--;
}
-
+
@Override
public void writeNewline()
{
@@ -222,14 +226,15 @@ public class ASEmitter implements IASEmi
//--------------------------------------------------------------------------
@Override
- public void emitPackageHeader(IPackageNode node)
+ public void emitPackageHeader(IPackageDefinition definition)
{
writeToken(IASKeywordConstants.PACKAGE);
+ IPackageNode node = definition.getNode();
String name = node.getQualifiedName();
if (name != null && !name.equals(""))
{
- write(SPACE);
+ write(SPACE);
getWalker().walk(node.getNameExpressionNode());
}
@@ -238,13 +243,14 @@ public class ASEmitter implements IASEmi
}
@Override
- public void emitPackageHeaderContents(IPackageNode node)
+ public void emitPackageHeaderContents(IPackageDefinition definition)
{
}
@Override
- public void emitPackageContents(IPackageNode node)
+ public void emitPackageContents(IPackageDefinition definition)
{
+ IPackageNode node = definition.getNode();
ITypeNode tnode = findTypeNode(node);
if (tnode != null)
{
@@ -255,7 +261,7 @@ public class ASEmitter implements IASEmi
}
@Override
- public void emitPackageFooter(IPackageNode node)
+ public void emitPackageFooter(IPackageDefinition definition)
{
indentPop();
writeNewline();
@@ -333,18 +339,18 @@ public class ASEmitter implements IASEmi
{
write(SEMICOLON);
if (i < len - 1)
- writeNewline();
+ writeNewline();
}
else if (mnode.getNodeID() == ASTNodeID.FunctionID)
{
if (i < len - 1)
- writeNewline();
+ writeNewline();
}
else if (mnode.getNodeID() == ASTNodeID.GetterID
|| mnode.getNodeID() == ASTNodeID.SetterID)
{
if (i < len - 1)
- writeNewline();
+ writeNewline();
}
i++;
}
@@ -400,7 +406,7 @@ public class ASEmitter implements IASEmi
getWalker().walk(mnode);
write(SEMICOLON);
if (i < len - 1)
- writeNewline();
+ writeNewline();
i++;
}
@@ -641,9 +647,8 @@ public class ASEmitter implements IASEmi
}
else if (node instanceof IVariableNode)
{
- write(((IVariableNode) node).isConst() ?
- IASKeywordConstants.CONST :
- IASKeywordConstants.VAR);
+ write(((IVariableNode) node).isConst() ? IASKeywordConstants.CONST
+ : IASKeywordConstants.VAR);
write(SPACE);
}
}
@@ -684,7 +689,7 @@ public class ASEmitter implements IASEmi
IExpressionNode anode = node.getAssignedValueNode();
if (anode != null)
{
- write(SPACE);
+ write(SPACE);
write(EQUALS);
write(SPACE);
getWalker().walk(anode);
@@ -706,7 +711,7 @@ public class ASEmitter implements IASEmi
{
if (node != null)
{
- write(SPACE);
+ write(SPACE);
write(EQUALS);
write(SPACE);
getWalker().walk(node);
@@ -721,7 +726,7 @@ public class ASEmitter implements IASEmi
protected void emitMethodScope(IScopedNode node)
{
- write(SPACE);
+ write(SPACE);
getWalker().walk(node);
}
@@ -770,7 +775,7 @@ public class ASEmitter implements IASEmi
getWalker().walk(conditional.getChild(0)); // conditional expression
write(PARENTHESES_CLOSE);
if (!isImplicit(xnode))
- write(SPACE);
+ write(SPACE);
getWalker().walk(conditional.getChild(1)); // BlockNode
IConditionalNode[] nodes = node.getElseIfNodes();
@@ -786,7 +791,7 @@ public class ASEmitter implements IASEmi
if (isImplicit)
writeNewline();
else
- write(SPACE);
+ write(SPACE);
write(IASKeywordConstants.ELSE);
write(SPACE);
@@ -796,7 +801,7 @@ public class ASEmitter implements IASEmi
getWalker().walk(enode.getChild(0));
write(PARENTHESES_CLOSE);
if (!isImplicit)
- write(SPACE);
+ write(SPACE);
getWalker().walk(enode.getChild(1)); // ConditionalNode
}
@@ -811,10 +816,10 @@ public class ASEmitter implements IASEmi
if (isImplicit)
writeNewline();
else
- write(SPACE);
+ write(SPACE);
write(IASKeywordConstants.ELSE);
if (!isImplicit)
- write(SPACE);
+ write(SPACE);
getWalker().walk(elseNode); // TerminalNode
}
@@ -835,7 +840,7 @@ public class ASEmitter implements IASEmi
write(PARENTHESES_CLOSE);
if (!isImplicit(xnode))
- write(SPACE);
+ write(SPACE);
getWalker().walk(node.getStatementContentsNode());
}
@@ -862,7 +867,7 @@ public class ASEmitter implements IASEmi
write(PARENTHESES_CLOSE);
if (!isImplicit(xnode))
- write(SPACE);
+ write(SPACE);
getWalker().walk(node.getStatementContentsNode());
}
@@ -892,7 +897,7 @@ public class ASEmitter implements IASEmi
getWalker().walk(casen.getConditionalExpressionNode());
write(COLON);
if (!isImplicit(cnode))
- write(SPACE);
+ write(SPACE);
getWalker().walk(casen.getStatementContentsNode());
if (i == cnodes.length - 1 && dnode == null)
{
@@ -908,7 +913,7 @@ public class ASEmitter implements IASEmi
write(IASKeywordConstants.DEFAULT);
write(COLON);
if (!isImplicit(cnode))
- write(SPACE);
+ write(SPACE);
getWalker().walk(dnode);
indentPop();
writeNewline();
@@ -926,7 +931,7 @@ public class ASEmitter implements IASEmi
getWalker().walk(node.getConditionalExpressionNode());
write(PARENTHESES_CLOSE);
if (!isImplicit(cnode))
- write(SPACE);
+ write(SPACE);
getWalker().walk(node.getStatementContentsNode());
}
@@ -936,10 +941,10 @@ public class ASEmitter implements IASEmi
IContainerNode cnode = (IContainerNode) node.getChild(0);
write(IASKeywordConstants.DO);
if (!isImplicit(cnode))
- write(SPACE);
+ write(SPACE);
getWalker().walk(node.getStatementContentsNode());
if (!isImplicit(cnode))
- write(SPACE);
+ write(SPACE);
else
writeNewline(); // TODO (mschmalle) there is something wrong here, block should NL
write(IASKeywordConstants.WHILE);
@@ -960,7 +965,7 @@ public class ASEmitter implements IASEmi
getWalker().walk(node.getTargetNode());
write(PARENTHESES_CLOSE);
if (!isImplicit(cnode))
- write(SPACE);
+ write(SPACE);
getWalker().walk(node.getStatementContentsNode());
}
@@ -985,7 +990,7 @@ public class ASEmitter implements IASEmi
ITerminalNode fnode = node.getFinallyNode();
if (fnode != null)
{
- write(SPACE);
+ write(SPACE);
write(IASKeywordConstants.FINALLY);
write(SPACE);
getWalker().walk(fnode);
@@ -995,7 +1000,7 @@ public class ASEmitter implements IASEmi
@Override
public void emitCatch(ICatchNode node)
{
- write(SPACE);
+ write(SPACE);
write(IASKeywordConstants.CATCH);
write(SPACE);
write(PARENTHESES_OPEN);
@@ -1012,7 +1017,7 @@ public class ASEmitter implements IASEmi
IExpressionNode rnode = node.getReturnValueNode();
if (rnode != null && rnode.getNodeID() != ASTNodeID.NilID)
{
- write(SPACE);
+ write(SPACE);
getWalker().walk(rnode);
}
}
@@ -1046,7 +1051,7 @@ public class ASEmitter implements IASEmi
{
getWalker().walk(node.getLeftOperandNode());
if (node.getNodeID() != ASTNodeID.Op_CommaID)
- write(SPACE);
+ write(SPACE);
write(node.getOperator().getOperatorText());
write(SPACE);
getWalker().walk(node.getRightOperandNode());
@@ -1137,7 +1142,7 @@ public class ASEmitter implements IASEmi
getWalker().walk(node0);
write(SEMICOLON);
if (node1.getNodeID() != ASTNodeID.NilID)
- write(SPACE);
+ write(SPACE);
}
// condition or target
if (node1 != null)
@@ -1145,7 +1150,7 @@ public class ASEmitter implements IASEmi
getWalker().walk(node1);
write(SEMICOLON);
if (node2.getNodeID() != ASTNodeID.NilID)
- write(SPACE);
+ write(SPACE);
}
// iterator
if (node2 != null)
@@ -1200,9 +1205,9 @@ public class ASEmitter implements IASEmi
@Override
public void emitLiteralContainer(IContainerNode node)
{
- ContainerType type = node.getContainerType();
- String postFix = "";
-
+ ContainerType type = node.getContainerType();
+ String postFix = "";
+
if (type == ContainerType.BRACES)
{
write(CURLYBRACE_OPEN);
@@ -1233,7 +1238,7 @@ public class ASEmitter implements IASEmi
}
if (postFix != "")
- write(postFix);
+ write(postFix);
}
@Override
@@ -1261,7 +1266,7 @@ public class ASEmitter implements IASEmi
IIdentifierNode lnode = node.getLabelNode();
if (lnode != null)
{
- write(SPACE);
+ write(SPACE);
getWalker().walk(lnode);
}
}
Modified: flex/falcon/trunk/compiler.jx/src/org/apache/flex/compiler/internal/js/codegen/goog/JSGoogEmitter.java
URL: http://svn.apache.org/viewvc/flex/falcon/trunk/compiler.jx/src/org/apache/flex/compiler/internal/js/codegen/goog/JSGoogEmitter.java?rev=1436541&r1=1436540&r2=1436541&view=diff
==============================================================================
--- flex/falcon/trunk/compiler.jx/src/org/apache/flex/compiler/internal/js/codegen/goog/JSGoogEmitter.java (original)
+++ flex/falcon/trunk/compiler.jx/src/org/apache/flex/compiler/internal/js/codegen/goog/JSGoogEmitter.java Mon Jan 21 18:38:16 2013
@@ -70,10 +70,10 @@ import org.apache.flex.compiler.tree.as.
*/
public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
{
- private static final String CONSTRUCTOR_EMPTY = "emptyConstructor";
- private static final String CONSTRUCTOR_FULL = "fullConstructor";
- private static final String SUPER_FUNCTION_CALL = "replaceSuperFunction";
-
+ private static final String CONSTRUCTOR_EMPTY = "emptyConstructor";
+ private static final String CONSTRUCTOR_FULL = "fullConstructor";
+ private static final String SUPER_FUNCTION_CALL = "replaceSuperFunction";
+
public static final String GOOG_BASE = "goog.base";
public static final String GOOG_INHERITS = "goog.inherits";
public static final String GOOG_PROVIDE = "goog.provide";
@@ -86,7 +86,7 @@ public class JSGoogEmitter extends JSEmi
// know if we visited the complementary instance already...
// Q for (mschmalle): do we need to reset this at some point?
private List<String> propertyNames = new ArrayList<String>();
-
+
IJSGoogDocEmitter getDoc()
{
return (IJSGoogDocEmitter) getDocEmitter();
@@ -97,8 +97,9 @@ public class JSGoogEmitter extends JSEmi
//--------------------------------------------------------------------------
@Override
- public void emitPackageHeader(IPackageNode node)
+ public void emitPackageHeader(IPackageDefinition definition)
{
+ IPackageNode node = definition.getNode();
ITypeNode type = findTypeNode(node);
if (type == null)
return;
@@ -116,8 +117,9 @@ public class JSGoogEmitter extends JSEmi
}
@Override
- public void emitPackageHeaderContents(IPackageNode node)
+ public void emitPackageHeaderContents(IPackageDefinition definition)
{
+ IPackageNode node = definition.getNode();
ITypeNode type = findTypeNode(node);
if (type == null)
return;
@@ -129,7 +131,7 @@ public class JSGoogEmitter extends JSEmi
{
if (imp.indexOf(AS3) != -1)
continue;
-
+
/* goog.require('x');\n */
write(GOOG_REQUIRE);
write(PARENTHESES_OPEN);
@@ -140,30 +142,31 @@ public class JSGoogEmitter extends JSEmi
write(SEMICOLON);
writeNewline();
}
-
+
// (erikdebruin) only write 'closing' line break when there are
// actually imports...
- if (list.size() > 1 ||
- (list.size() == 1 && list.get(0).indexOf(AS3) == -1))
+ if (list.size() > 1
+ || (list.size() == 1 && list.get(0).indexOf(AS3) == -1))
{
writeNewline();
}
}
@Override
- public void emitPackageContents(IPackageNode node)
+ public void emitPackageContents(IPackageDefinition definition)
{
+ IPackageNode node = definition.getNode();
ITypeNode type = findTypeNode(node);
if (type == null)
return;
IClassNode cnode = (IClassNode) type;
-
+
emitClass(cnode);
}
@Override
- public void emitPackageFooter(IPackageNode node)
+ public void emitPackageFooter(IPackageDefinition definition)
{
}
@@ -204,23 +207,23 @@ public class JSGoogEmitter extends JSEmi
write(SEMICOLON);
}
}
- else if (dnode.getNodeID() == ASTNodeID.GetterID ||
- dnode.getNodeID() == ASTNodeID.SetterID)
+ else if (dnode.getNodeID() == ASTNodeID.GetterID
+ || dnode.getNodeID() == ASTNodeID.SetterID)
{
writeNewline();
writeNewline();
- emitAccessors((IAccessorNode) dnode);
+ emitAccessors((IAccessorNode) dnode);
write(SEMICOLON);
}
}
}
-
+
@Override
public void emitInterface(IInterfaceNode node)
{
- getDoc().emitInterfaceDoc(node);
+ getDoc().emitInterfaceDoc(node);
- write(node.getNamespace());
+ write(node.getNamespace());
write(SPACE);
writeToken(IASKeywordConstants.INTERFACE);
@@ -233,40 +236,40 @@ public class JSGoogEmitter extends JSEmi
write(CURLYBRACE_CLOSE);
final IDefinitionNode[] members = node.getAllMemberDefinitionNodes();
- for (IDefinitionNode mnode : members)
- {
- boolean isAccessor = mnode.getNodeID() == ASTNodeID.GetterID ||
- mnode.getNodeID() == ASTNodeID.SetterID;
-
- String qname = node.getQualifiedName();
-
- if (!isAccessor || !propertyNames.contains(qname))
- {
- writeNewline();
-
- emitMemberName(node);
- write(PERIOD);
- write(PROTOTYPE);
- write(PERIOD);
- write(mnode.getQualifiedName());
-
- if (isAccessor && !propertyNames.contains(qname))
- {
- propertyNames.add(qname);
- }
- else
- {
- write(SPACE);
- write(EQUALS);
- write(SPACE);
- write(FUNCTION);
-
- emitParamters(((IFunctionNode) mnode).getParameterNodes());
- }
-
- write(SEMICOLON);
- }
- }
+ for (IDefinitionNode mnode : members)
+ {
+ boolean isAccessor = mnode.getNodeID() == ASTNodeID.GetterID
+ || mnode.getNodeID() == ASTNodeID.SetterID;
+
+ String qname = node.getQualifiedName();
+
+ if (!isAccessor || !propertyNames.contains(qname))
+ {
+ writeNewline();
+
+ emitMemberName(node);
+ write(PERIOD);
+ write(PROTOTYPE);
+ write(PERIOD);
+ write(mnode.getQualifiedName());
+
+ if (isAccessor && !propertyNames.contains(qname))
+ {
+ propertyNames.add(qname);
+ }
+ else
+ {
+ write(SPACE);
+ write(EQUALS);
+ write(SPACE);
+ write(FUNCTION);
+
+ emitParamters(((IFunctionNode) mnode).getParameterNodes());
+ }
+
+ write(SEMICOLON);
+ }
+ }
}
@Override
@@ -277,19 +280,19 @@ public class JSGoogEmitter extends JSEmi
getDoc().emitFieldDoc(node);
/* x.prototype.y = z */
-
+
String root = "";
if (!node.isConst())
{
- root = PROTOTYPE;
- root += PERIOD;
+ root = PROTOTYPE;
+ root += PERIOD;
}
write(definition.getQualifiedName() + PERIOD + root + node.getName());
-
+
IExpressionNode vnode = node.getAssignedValueNode();
if (vnode != null)
{
- write(SPACE);
+ write(SPACE);
write(EQUALS);
write(SPACE);
getWalker().walk(vnode);
@@ -321,18 +324,18 @@ public class JSGoogEmitter extends JSEmi
}
IExpressionNode avnode = node.getAssignedValueNode();
-
+
if (avnode != null)
{
- String opcode = avnode.getNodeID().getParaphrase();
- if (opcode != "AnonymousFunction")
- getDoc().emitVarDoc(node);
+ String opcode = avnode.getNodeID().getParaphrase();
+ if (opcode != "AnonymousFunction")
+ getDoc().emitVarDoc(node);
}
else
{
- getDoc().emitVarDoc(node);
+ getDoc().emitVarDoc(node);
}
-
+
emitDeclarationName(node);
emitAssignedValue(avnode);
@@ -352,39 +355,39 @@ public class JSGoogEmitter extends JSEmi
}
}
}
-
+
@Override
public void emitGetAccessor(IGetterNode node)
{
emitObjectDefineProperty(node);
}
-
+
@Override
public void emitSetAccessor(ISetterNode node)
{
emitObjectDefineProperty(node);
}
-
+
private void emitAccessors(IAccessorNode node)
{
- String qname = node.getQualifiedName();
- if (!propertyNames.contains(qname))
- {
- emitField(node);
+ String qname = node.getQualifiedName();
+ if (!propertyNames.contains(qname))
+ {
+ emitField(node);
write(SEMICOLON);
writeNewline();
writeNewline();
-
- propertyNames.add(qname);
- }
-
- if (node.getNodeID() == ASTNodeID.GetterID)
+
+ propertyNames.add(qname);
+ }
+
+ if (node.getNodeID() == ASTNodeID.GetterID)
{
- emitGetAccessor((IGetterNode) node);
+ emitGetAccessor((IGetterNode) node);
}
else if (node.getNodeID() == ASTNodeID.SetterID)
{
- emitSetAccessor((ISetterNode) node);
+ emitSetAccessor((ISetterNode) node);
}
}
@@ -395,50 +398,50 @@ public class JSGoogEmitter extends JSEmi
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);
if (!isConstructor)
{
- write(PERIOD);
- if (!fn.hasModifier(ASModifier.STATIC))
- {
- write(PROTOTYPE);
- write(PERIOD);
- }
+ write(PERIOD);
+ if (!fn.hasModifier(ASModifier.STATIC))
+ {
+ write(PROTOTYPE);
+ write(PERIOD);
+ }
}
}
if (!isConstructor)
- emitMemberName(node);
-
+ emitMemberName(node);
+
write(SPACE);
write(EQUALS);
write(SPACE);
write(FUNCTION);
-
+
emitParamters(node.getParameterNodes());
boolean hasSuperClass = hasSuperClass(node);
if (isConstructor && node.getScopedNode().getChildCount() == 0)
{
- write(SPACE);
- write(CURLYBRACE_OPEN);
+ write(SPACE);
+ write(CURLYBRACE_OPEN);
if (hasSuperClass)
- emitSuperCall(node, CONSTRUCTOR_EMPTY);
+ emitSuperCall(node, CONSTRUCTOR_EMPTY);
writeNewline();
- write(CURLYBRACE_CLOSE);
+ write(CURLYBRACE_CLOSE);
}
if (!isConstructor || node.getScopedNode().getChildCount() > 0)
- emitMethodScope(node.getScopedNode());
+ emitMethodScope(node.getScopedNode());
if (isConstructor && hasSuperClass)
{
@@ -449,7 +452,8 @@ public class JSGoogEmitter extends JSEmi
write(qname);
write(COMMA);
write(SPACE);
- String sname = getSuperClassDefinition(node, project).getQualifiedName();
+ String sname = getSuperClassDefinition(node, project)
+ .getQualifiedName();
write(sname);
write(PARENTHESES_CLOSE);
}
@@ -458,23 +462,23 @@ public class JSGoogEmitter extends JSEmi
@Override
public void emitFunctionCall(IFunctionCallNode node)
{
- ASTNodeID id = node.getChild(0).getNodeID();
-
- if (id == ASTNodeID.MemberAccessExpressionID)
- id = node.getChild(0).getChild(0).getNodeID();
-
- if (id != ASTNodeID.SuperID)
- super.emitFunctionCall(node);
- else
- emitSuperCall(node, SUPER_FUNCTION_CALL);
+ ASTNodeID id = node.getChild(0).getNodeID();
+
+ if (id == ASTNodeID.MemberAccessExpressionID)
+ id = node.getChild(0).getChild(0).getNodeID();
+
+ if (id != ASTNodeID.SuperID)
+ super.emitFunctionCall(node);
+ else
+ emitSuperCall(node, SUPER_FUNCTION_CALL);
}
@Override
public void emitFunctionBlockHeader(IFunctionNode node)
{
- if (node.isConstructor() && hasSuperClass(node))
- emitSuperCall(node, CONSTRUCTOR_FULL);
-
+ if (node.isConstructor() && hasSuperClass(node))
+ emitSuperCall(node, CONSTRUCTOR_FULL);
+
emitRestParameterCodeBlock(node);
emitDefaultParameterCodeBlock(node);
@@ -482,62 +486,63 @@ public class JSGoogEmitter extends JSEmi
private void emitSuperCall(IASNode node, String type)
{
- IFunctionNode fnode =
- (node instanceof IFunctionNode) ? (IFunctionNode) node : null;
- IFunctionCallNode fcnode =
- (node instanceof IFunctionCallNode) ? (FunctionCallNode) node : null;
-
- if (type == CONSTRUCTOR_EMPTY)
- {
- indentPush();
- writeNewline();
- indentPop();
- }
- else if (type == SUPER_FUNCTION_CALL)
- {
- if (fnode == null)
- fnode = (IFunctionNode) fcnode.getAncestorOfType(IFunctionNode.class);
- }
-
- write(GOOG_BASE);
- write(PARENTHESES_OPEN);
- write(IASKeywordConstants.THIS);
-
- if (fnode != null && !fnode.isConstructor())
- {
- write(COMMA);
- write(SPACE);
- write(SINGLE_QUOTE);
- write(fnode.getName());
- write(SINGLE_QUOTE);
- }
-
- if (fcnode != null)
- {
- IExpressionNode[] enodes = fcnode.getArgumentNodes();
- int len = enodes.length;
- for (int i = 0; i < len; i++)
- {
- write(COMMA);
- write(SPACE);
-
- getWalker().walk(enodes[i]);
- }
- }
-
- write(PARENTHESES_CLOSE);
-
- if (type == CONSTRUCTOR_FULL)
- {
- write(SEMICOLON);
- writeNewline();
- }
- else if (type == CONSTRUCTOR_EMPTY)
- {
- write(SEMICOLON);
- }
+ IFunctionNode fnode = (node instanceof IFunctionNode) ? (IFunctionNode) node
+ : null;
+ IFunctionCallNode fcnode = (node instanceof IFunctionCallNode) ? (FunctionCallNode) node
+ : null;
+
+ if (type == CONSTRUCTOR_EMPTY)
+ {
+ indentPush();
+ writeNewline();
+ indentPop();
+ }
+ else if (type == SUPER_FUNCTION_CALL)
+ {
+ if (fnode == null)
+ fnode = (IFunctionNode) fcnode
+ .getAncestorOfType(IFunctionNode.class);
+ }
+
+ write(GOOG_BASE);
+ write(PARENTHESES_OPEN);
+ write(IASKeywordConstants.THIS);
+
+ if (fnode != null && !fnode.isConstructor())
+ {
+ write(COMMA);
+ write(SPACE);
+ write(SINGLE_QUOTE);
+ write(fnode.getName());
+ write(SINGLE_QUOTE);
+ }
+
+ if (fcnode != null)
+ {
+ IExpressionNode[] enodes = fcnode.getArgumentNodes();
+ int len = enodes.length;
+ for (int i = 0; i < len; i++)
+ {
+ write(COMMA);
+ write(SPACE);
+
+ getWalker().walk(enodes[i]);
+ }
+ }
+
+ write(PARENTHESES_CLOSE);
+
+ if (type == CONSTRUCTOR_FULL)
+ {
+ write(SEMICOLON);
+ writeNewline();
+ }
+ else if (type == CONSTRUCTOR_EMPTY)
+ {
+ write(SEMICOLON);
+ }
}
-
+
private void emitDefaultParameterCodeBlock(IFunctionNode node)
{
IParameterNode[] pnodes = node.getParameterNodes();
@@ -561,12 +566,12 @@ public class JSGoogEmitter extends JSEmi
for (int i = 0, n = parameters.size(); i < n; i++)
{
- IParameterNode pnode = parameters.get(i);
-
+ IParameterNode pnode = parameters.get(i);
+
if (pnode != null)
{
code.setLength(0);
-
+
/* x = typeof y !== 'undefined' ? y : z;\n */
code.append(pnode.getName());
code.append(SPACE);
@@ -574,7 +579,7 @@ public class JSGoogEmitter extends JSEmi
code.append(SPACE);
code.append(IASKeywordConstants.TYPEOF);
code.append(SPACE);
- code.append(pnode.getName());
+ code.append(pnode.getName());
code.append(SPACE);
code.append(ASTNodeID.Op_StrictNotEqualID.getParaphrase());
code.append(SPACE);
@@ -584,18 +589,18 @@ public class JSGoogEmitter extends JSEmi
code.append(SPACE);
code.append(ASTNodeID.TernaryExpressionID.getParaphrase());
code.append(SPACE);
- code.append(pnode.getName());
- code.append(SPACE);
- code.append(COLON);
- code.append(SPACE);
+ code.append(pnode.getName());
+ code.append(SPACE);
+ code.append(COLON);
+ code.append(SPACE);
code.append(pnode.getDefaultValue());
- code.append(SEMICOLON);
+ code.append(SEMICOLON);
write(code.toString());
-
+
if (i == n - 1 && !hasBody(node))
indentPop();
-
+
writeNewline();
}
}
@@ -618,21 +623,21 @@ public class JSGoogEmitter extends JSEmi
code.append(SPACE);
code.append(IASLanguageConstants.Array);
code.append(PERIOD);
- code.append(PROTOTYPE);
- code.append(PERIOD);
- code.append(SLICE);
- code.append(PERIOD);
- code.append(CALL);
- code.append(PARENTHESES_OPEN);
- code.append(IASLanguageConstants.arguments);
- code.append(COMMA);
- code.append(SPACE);
- code.append(String.valueOf(pnodes.length - 1));
- code.append(PARENTHESES_CLOSE);
- code.append(SEMICOLON);
+ code.append(PROTOTYPE);
+ code.append(PERIOD);
+ code.append(SLICE);
+ code.append(PERIOD);
+ code.append(CALL);
+ code.append(PARENTHESES_OPEN);
+ code.append(IASLanguageConstants.arguments);
+ code.append(COMMA);
+ code.append(SPACE);
+ code.append(String.valueOf(pnodes.length - 1));
+ code.append(PARENTHESES_CLOSE);
+ code.append(SEMICOLON);
write(code.toString());
-
+
writeNewline();
}
}
@@ -665,7 +670,7 @@ public class JSGoogEmitter extends JSEmi
write(PARENTHESES_CLOSE);
if (!isImplicit(xnode))
- write(SPACE);
+ write(SPACE);
getWalker().walk(node.getStatementContentsNode());
}
@@ -719,23 +724,28 @@ public class JSGoogEmitter extends JSEmi
private static IClassDefinition getClassDefinition(IDefinitionNode node)
{
- IClassNode tnode = (IClassNode) node.getAncestorOfType(IClassNode.class);
+ IClassNode tnode = (IClassNode) node
+ .getAncestorOfType(IClassNode.class);
return tnode.getDefinition();
}
- private static IClassDefinition getSuperClassDefinition(IDefinitionNode node, ICompilerProject project)
+ private static IClassDefinition getSuperClassDefinition(
+ IDefinitionNode node, ICompilerProject project)
{
- IClassDefinition parent = (IClassDefinition) node.getDefinition().getParent();
+ IClassDefinition parent = (IClassDefinition) node.getDefinition()
+ .getParent();
IClassDefinition superClass = parent.resolveBaseClass(project);
return superClass;
}
private boolean hasSuperClass(IDefinitionNode node)
{
- ICompilerProject project = getWalker().getProject();
- IClassDefinition superClassDefinition = getSuperClassDefinition(node, project);
- String qname = superClassDefinition.getQualifiedName();
- return superClassDefinition != null && !qname.equals(IASLanguageConstants.Object);
+ ICompilerProject project = getWalker().getProject();
+ IClassDefinition superClassDefinition = getSuperClassDefinition(node,
+ project);
+ String qname = superClassDefinition.getQualifiedName();
+ return superClassDefinition != null
+ && !qname.equals(IASLanguageConstants.Object);
}
private static boolean hasBody(IFunctionNode node)
@@ -754,10 +764,10 @@ public class JSGoogEmitter extends JSEmi
configurable: true}
);
*/
-
+
FunctionNode fn = (FunctionNode) node;
fn.parseFunctionBody(problems);
-
+
// head
write(IASLanguageConstants.Object);
write(PERIOD);
@@ -772,8 +782,8 @@ public class JSGoogEmitter extends JSEmi
write(type.getQualifiedName());
if (!node.hasModifier(ASModifier.STATIC))
{
- write(PERIOD);
- write(PROTOTYPE);
+ write(PERIOD);
+ write(PROTOTYPE);
}
write(COMMA);
write(SPACE);
@@ -790,16 +800,14 @@ public class JSGoogEmitter extends JSEmi
// info object
// declaration
write(CURLYBRACE_OPEN);
- write(node.getNodeID() ==
- ASTNodeID.GetterID ?
- IASKeywordConstants.GET :
- IASKeywordConstants.SET);
+ write(node.getNodeID() == ASTNodeID.GetterID ? IASKeywordConstants.GET
+ : IASKeywordConstants.SET);
write(COLON);
write(FUNCTION);
emitParamters(node.getParameterNodes());
emitMethodScope(node.getScopedNode());
-
+
write(COMMA);
write(SPACE);
write(CONFIGURABLE);
@@ -828,12 +836,12 @@ public class JSGoogEmitter extends JSEmi
@Override
public void emitBinaryOperator(IBinaryOperatorNode node)
{
- ASTNodeID id = node.getNodeID();
-
- if (id == ASTNodeID.Op_AsID || id == ASTNodeID.Op_IsID)
+ ASTNodeID id = node.getNodeID();
+
+ if (id == ASTNodeID.Op_AsID || id == ASTNodeID.Op_IsID)
{
- // TODO (erikdebruin) replace: this is a placeholder for the
- // eventual implementation
+ // TODO (erikdebruin) replace: this is a placeholder for the
+ // eventual implementation
write((id == ASTNodeID.Op_AsID) ? "as" : "is");
write(PARENTHESES_OPEN);
getWalker().walk(node.getLeftOperandNode());
@@ -844,31 +852,33 @@ public class JSGoogEmitter extends JSEmi
}
else
{
- getWalker().walk(node.getLeftOperandNode());
+ getWalker().walk(node.getLeftOperandNode());
if (id != ASTNodeID.Op_CommaID)
write(SPACE);
-
+
// (erikdebruin) rewrite 'a &&= b' to 'a = a && b'
- if (id == ASTNodeID.Op_LogicalAndAssignID || id == ASTNodeID.Op_LogicalOrAssignID)
+ if (id == ASTNodeID.Op_LogicalAndAssignID
+ || id == ASTNodeID.Op_LogicalOrAssignID)
{
- IIdentifierNode lnode = (IIdentifierNode) node.getLeftOperandNode();
-
+ IIdentifierNode lnode = (IIdentifierNode) node
+ .getLeftOperandNode();
+
write(EQUALS);
write(SPACE);
write(lnode.getName());
write(SPACE);
- write((id == ASTNodeID.Op_LogicalAndAssignID) ?
- ASTNodeID.Op_LogicalAndID.getParaphrase() :
- ASTNodeID.Op_LogicalOrID.getParaphrase());
+ write((id == ASTNodeID.Op_LogicalAndAssignID) ? ASTNodeID.Op_LogicalAndID
+ .getParaphrase() : ASTNodeID.Op_LogicalOrID
+ .getParaphrase());
}
else
{
- write(node.getOperator().getOperatorText());
+ write(node.getOperator().getOperatorText());
}
-
+
write(SPACE);
-
+
getWalker().walk(node.getRightOperandNode());
}
}
Modified: flex/falcon/trunk/compiler.jx/src/org/apache/flex/compiler/visitor/IASBlockVisitor.java
URL: http://svn.apache.org/viewvc/flex/falcon/trunk/compiler.jx/src/org/apache/flex/compiler/visitor/IASBlockVisitor.java?rev=1436541&r1=1436540&r2=1436541&view=diff
==============================================================================
--- flex/falcon/trunk/compiler.jx/src/org/apache/flex/compiler/visitor/IASBlockVisitor.java (original)
+++ flex/falcon/trunk/compiler.jx/src/org/apache/flex/compiler/visitor/IASBlockVisitor.java Mon Jan 21 18:38:16 2013
@@ -91,10 +91,10 @@ public interface IASBlockVisitor
void visitCompilationUnit(ICompilationUnit unit);
- void visitPackage(IPackageNode node);
-
void visitFile(IFileNode node);
+ void visitPackage(IPackageNode node);
+
void visitClass(IClassNode node);
void visitInterface(IInterfaceNode node);
Modified: flex/falcon/trunk/compiler.jx/src/org/apache/flex/compiler/visitor/IASBlockWalker.java
URL: http://svn.apache.org/viewvc/flex/falcon/trunk/compiler.jx/src/org/apache/flex/compiler/visitor/IASBlockWalker.java?rev=1436541&r1=1436540&r2=1436541&view=diff
==============================================================================
--- flex/falcon/trunk/compiler.jx/src/org/apache/flex/compiler/visitor/IASBlockWalker.java (original)
+++ flex/falcon/trunk/compiler.jx/src/org/apache/flex/compiler/visitor/IASBlockWalker.java Mon Jan 21 18:38:16 2013
@@ -19,6 +19,7 @@
package org.apache.flex.compiler.visitor;
+import org.apache.flex.compiler.as.codegen.IASEmitter;
import org.apache.flex.compiler.projects.ICompilerProject;
import org.apache.flex.compiler.tree.as.IASNode;
@@ -41,5 +42,9 @@ public interface IASBlockWalker extends
* @param node The {@link IASNode} to traverse using the current strategy
*/
void walk(IASNode node);
-
+
+ /**
+ * The current code emitter.
+ */
+ IASEmitter getEmitter();
}