Updated Branches: refs/heads/develop 612357a52 -> a86993ea4
Minor code cleanup - cleaned up the emitting of "goog.bind" and accessors - cleaned up the emitting of "goog.provide" and "goog.require" Signed-off-by: Erik de Bruin <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/a86993ea Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/a86993ea Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/a86993ea Branch: refs/heads/develop Commit: a86993ea4e4da4b928689aaf3a57b10ba8b54721 Parents: 612357a Author: Erik de Bruin <[email protected]> Authored: Tue Apr 9 14:36:46 2013 +0200 Committer: Erik de Bruin <[email protected]> Committed: Tue Apr 9 14:36:46 2013 +0200 ---------------------------------------------------------------------- .../codegen/js/flexjs/JSFlexJSEmitter.java | 36 ++++-- .../codegen/js/goog/JSGoogEmitterTokens.java | 1 + .../codegen/mxml/flexjs/MXMLFlexJSEmitter.java | 85 +++++++++------ 3 files changed, 75 insertions(+), 47 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/a86993ea/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java ---------------------------------------------------------------------- diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java index 0c711ce..a3914f2 100644 --- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java +++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java @@ -285,8 +285,8 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter boolean emitName = true; // FIXME (erikdebruin) I desperately needed a way to bypass the addition - // of the 'self' prefix when running the tests... Or - // I'd have to put the prefix in ~150 asserts! + // of the 'self' prefix when running the tests... Or + // I'd have to put the prefix in ~150 asserts! boolean isRunningInTestMode = cnode != null && cnode.getQualifiedName().equalsIgnoreCase("A"); @@ -296,7 +296,8 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter if (useGoogBind) { - write("goog.bind("); + write(JSGoogEmitterTokens.GOOG_BIND); + write(ASEmitterTokens.PAREN_OPEN); } if (writeThis) @@ -308,7 +309,10 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter if (useGoogBind) { write(node.getName()); - write(", self)"); + + writeToken(ASEmitterTokens.COMMA); + write(JSGoogEmitterTokens.SELF); + write(ASEmitterTokens.PAREN_CLOSE); emitName = false; } @@ -323,7 +327,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter && (pnode.equals(anode.getChild(0)) || node.equals(anode .getChild(0))); - write((anode != null && isLeftSide) ? "set_" : "get_"); + writeGetSetPrefix(!(anode != null && isLeftSide)); write(node.getName()); write(ASEmitterTokens.PAREN_OPEN); @@ -399,11 +403,9 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter { writeToken(ASEmitterTokens.COMMA); write(ASEmitterTokens.SINGLE_QUOTE); - if (fnode.getNodeID() == ASTNodeID.GetterID) - write("get_"); - else if (fnode.getNodeID() == ASTNodeID.SetterID) - write("set_"); - + if (fnode.getNodeID() == ASTNodeID.GetterID + || fnode.getNodeID() == ASTNodeID.SetterID) + writeGetSetPrefix(fnode.getNodeID() == ASTNodeID.GetterID); write(fnode.getName()); write(ASEmitterTokens.SINGLE_QUOTE); } @@ -446,7 +448,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter write(ASEmitterTokens.SEMICOLON); } } - + @Override public void emitBinaryOperator(IBinaryOperatorNode node) { @@ -536,7 +538,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter } write(ASEmitterTokens.MEMBER_ACCESS); - write((node instanceof IGetterNode) ? "get_" : "set_"); + writeGetSetPrefix(node instanceof IGetterNode); writeToken(node.getName()); writeToken(ASEmitterTokens.EQUAL); write(ASEmitterTokens.FUNCTION); @@ -544,4 +546,14 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter //writeNewline(); emitMethodScope(node.getScopedNode()); } + + private void writeGetSetPrefix(boolean isGet) + { + if (isGet) + write(ASEmitterTokens.GET); + else + write(ASEmitterTokens.SET); + write("_"); + } + } http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/a86993ea/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitterTokens.java ---------------------------------------------------------------------- diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitterTokens.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitterTokens.java index d97fb46..5229395 100644 --- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitterTokens.java +++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitterTokens.java @@ -7,6 +7,7 @@ public enum JSGoogEmitterTokens implements IEmitterTokens AS3("__AS3__"), GOOG_ARRAY_FOREACH("goog.array.forEach"), GOOG_BASE("goog.base"), + GOOG_BIND("goog.bind"), GOOG_INHERITS("goog.inherits"), GOOG_PROVIDE("goog.provide"), GOOG_REQUIRE("goog.require"), http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/a86993ea/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSEmitter.java ---------------------------------------------------------------------- diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSEmitter.java index f9effde..5db7405 100644 --- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSEmitter.java +++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSEmitter.java @@ -95,14 +95,14 @@ public class MXMLFlexJSEmitter extends MXMLEmitter implements if (isMainFile) { - // fake a 'root' node, like 'mxmlContent' + // fake root node; the main file doesn't have 'mxmlContent' as root MXMLDescriptorSpecifier fakeRoot = new MXMLDescriptorSpecifier(); fakeRoot.name = "mxmlContent"; descriptorTree.add(fakeRoot); currentInstances.add(fakeRoot); } - // visit tags + // visit MXML final int len = node.getChildCount(); for (int i = 0; i < len; i++) { @@ -110,29 +110,9 @@ public class MXMLFlexJSEmitter extends MXMLEmitter implements } String cname = node.getFileNode().getName(); - emitHeaderDoc(cname, "provide"); - - writeNewline(); - emitHeaderDoc(node.getBaseClassName(), "require"); - ArrayList<String> writtenInstances = new ArrayList<String>(); - for (MXMLDescriptorSpecifier instance : instances) - { - String name = instance.name; - if (writtenInstances.indexOf(name) == -1) - { - emitHeaderDoc(name, "require"); - writtenInstances.add(name); - } - } - for (String name : imports) - { - if (writtenInstances.indexOf(name) == -1) - { - emitHeaderDoc(name, "require"); - writtenInstances.add(name); - } - } - + + emitHeader(node); + writeNewline(); writeNewline("/**"); writeNewline(" * @constructor"); @@ -251,7 +231,6 @@ public class MXMLFlexJSEmitter extends MXMLEmitter implements } } - // top level is 'mxmlContent', skip it... MXMLDescriptorSpecifier root = descriptorTree.get(0); root.isTopNodeInMainFile = isMainFile; @@ -560,21 +539,44 @@ public class MXMLFlexJSEmitter extends MXMLEmitter implements } //-------------------------------------------------------------------------- - // Utils + // JS output //-------------------------------------------------------------------------- - @Override - protected void emitAttributeValue(IASNode node) + private void emitHeader(IMXMLDocumentNode node) { - IMXMLLiteralNode cnode = (IMXMLLiteralNode) node.getChild(0); - - if (cnode.getValue() != null) - getMXMLWalker().walk((IASNode) cnode); // Literal + String cname = node.getFileNode().getName(); + + emitHeaderLine(cname, true); + writeNewline(); + emitHeaderLine(node.getBaseClassName()); + ArrayList<String> writtenInstances = new ArrayList<String>(); + for (MXMLDescriptorSpecifier instance : instances) + { + String name = instance.name; + if (writtenInstances.indexOf(name) == -1) + { + emitHeaderLine(name); + writtenInstances.add(name); + } + } + for (String name : imports) // imports from fx:script tags + { + if (writtenInstances.indexOf(name) == -1) + { + emitHeaderLine(name); + writtenInstances.add(name); + } + } + } + + private void emitHeaderLine(String qname) + { + emitHeaderLine(qname, false); } - private void emitHeaderDoc(String qname, String type) + private void emitHeaderLine(String qname, boolean isProvide) { - write((type == "provide") ? JSGoogEmitterTokens.GOOG_PROVIDE + write((isProvide) ? JSGoogEmitterTokens.GOOG_PROVIDE : JSGoogEmitterTokens.GOOG_REQUIRE); write(ASEmitterTokens.PAREN_OPEN); write(ASEmitterTokens.SINGLE_QUOTE); @@ -584,6 +586,19 @@ public class MXMLFlexJSEmitter extends MXMLEmitter implements writeNewline(ASEmitterTokens.SEMICOLON); } + //-------------------------------------------------------------------------- + // Utils + //-------------------------------------------------------------------------- + + @Override + protected void emitAttributeValue(IASNode node) + { + IMXMLLiteralNode cnode = (IMXMLLiteralNode) node.getChild(0); + + if (cnode.getValue() != null) + getMXMLWalker().walk((IASNode) cnode); // Literal + } + private MXMLDescriptorSpecifier getCurrentDescriptor(String type) { MXMLDescriptorSpecifier currentDescriptor = null;
