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/20 16:59:32 UTC
svn commit: r1435869 - in /flex/falcon/trunk:
compiler.jx.tests/src/org/apache/flex/compiler/internal/as/codegen/
compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/
compiler.jx/src/org/apache/flex/compiler/internal/as/codegen/ com...
Author: erikdebruin
Date: Sun Jan 20 15:59:32 2013
New Revision: 1435869
URL: http://svn.apache.org/viewvc?rev=1435869&view=rev
Log:
- cleared some TODOs
- removed some @Ignore and handles the newly 'liberated' requirements
Modified:
flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/as/codegen/TestExpressions.java
flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/as/codegen/TestGlobalClasses.java
flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogExpressions.java
flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogFieldMembers.java
flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogGlobalClasses.java
flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogGlobalFunctions.java
flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogStatements.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/JSGoogDocEmitter.java
flex/falcon/trunk/compiler.jx/src/org/apache/flex/compiler/internal/js/codegen/goog/JSGoogEmitter.java
Modified: flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/as/codegen/TestExpressions.java
URL: http://svn.apache.org/viewvc/flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/as/codegen/TestExpressions.java?rev=1435869&r1=1435868&r2=1435869&view=diff
==============================================================================
--- flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/as/codegen/TestExpressions.java (original)
+++ flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/as/codegen/TestExpressions.java Sun Jan 20 15:59:32 2013
@@ -696,8 +696,7 @@ public class TestExpressions extends Tes
@Test
public void testVisitUnaryOperatorNode_Typeof_NoParens()
{
- // TODO (mschmalle) the notation without parenthesis is
- // also valid in AS/JS
+ // TODO (mschmalle) the notation without parenthesis is also valid in AS/JS
IUnaryOperatorNode node = getUnaryNode("typeof a");
visitor.visitUnaryOperator(node);
assertOut("typeof a");
@@ -723,6 +722,7 @@ public class TestExpressions extends Tes
@Test
public void testVisitUnaryOperatorNode_Concate_2()
{
+ // TODO (mschmalle) what's up with the escaping of backslashes?
IBinaryOperatorNode node = getBinaryNode("\"a\\\"\" + \"\\\"b\"");
visitor.visitBinaryOperator(node);
assertOut("\"a\\\"\" + \"\\\"b\"");
Modified: flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/as/codegen/TestGlobalClasses.java
URL: http://svn.apache.org/viewvc/flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/as/codegen/TestGlobalClasses.java?rev=1435869&r1=1435868&r2=1435869&view=diff
==============================================================================
--- flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/as/codegen/TestGlobalClasses.java (original)
+++ flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/as/codegen/TestGlobalClasses.java Sun Jan 20 15:59:32 2013
@@ -185,8 +185,7 @@ public class TestGlobalClasses extends T
@Test
public void testRegExp()
{
- // TODO (erikdebruin) how to handle the escaping of backslashes in
- // strings in the tests?
+ // TODO (mschmalle) the backslashes in don't match the backslashes out...
IVariableNode node = getVariable("var a:RegExp = new RegExp('test-\\d', 'i');");
visitor.visitVariable(node);
assertOut("var a:RegExp = new RegExp('test-\\\\d', 'i')");
Modified: flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogExpressions.java
URL: http://svn.apache.org/viewvc/flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogExpressions.java?rev=1435869&r1=1435868&r2=1435869&view=diff
==============================================================================
--- flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogExpressions.java (original)
+++ flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogExpressions.java Sun Jan 20 15:59:32 2013
@@ -27,7 +27,6 @@ import org.apache.flex.compiler.tree.as.
import org.apache.flex.compiler.tree.as.IFunctionNode;
import org.apache.flex.compiler.tree.as.IIfNode;
import org.apache.flex.compiler.tree.as.IVariableNode;
-import org.junit.Ignore;
import org.junit.Test;
/**
@@ -147,30 +146,28 @@ public class TestGoogExpressions extends
assertOut("is(a, b)");
}
- @Ignore
@Override
@Test
public void testVisitBinaryOperator_NamespaceAccess_1()
{
// TODO (mschmalle) this needs INamespaceAccessExpressionNode interface
- // TODO (erikdebruin) JS implementation?
+ // TODO (erikdebruin) we need a 'goog.require("a")' in the header
NamespaceAccessExpressionNode node = (NamespaceAccessExpressionNode) getExpressionNode(
"a::b", NamespaceAccessExpressionNode.class);
visitor.visitNamespaceAccessExpression(node);
- assertOut("");
+ assertOut("a.b");
}
- @Ignore
@Override
@Test
public void testVisitBinaryOperator_NamespaceAccess_2()
{
// TODO (mschmalle) this needs INamespaceAccessExpressionNode interface
- // TODO (erikdebruin) JS implementation?
+ // TODO (erikdebruin) we need a 'goog.require("a.b")' in the header
NamespaceAccessExpressionNode node = (NamespaceAccessExpressionNode) getExpressionNode(
"a::b::c", NamespaceAccessExpressionNode.class);
visitor.visitNamespaceAccessExpression(node);
- assertOut("");
+ assertOut("a.b.c");
}
protected IBackend createBackend()
Modified: flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogFieldMembers.java
URL: http://svn.apache.org/viewvc/flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogFieldMembers.java?rev=1435869&r1=1435868&r2=1435869&view=diff
==============================================================================
--- flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogFieldMembers.java (original)
+++ flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogFieldMembers.java Sun Jan 20 15:59:32 2013
@@ -23,7 +23,6 @@ import org.apache.flex.compiler.clients.
import org.apache.flex.compiler.internal.as.codegen.TestFieldMembers;
import org.apache.flex.compiler.internal.js.driver.goog.GoogBackend;
import org.apache.flex.compiler.tree.as.IVariableNode;
-import org.junit.Ignore;
import org.junit.Test;
/**
@@ -98,18 +97,16 @@ public class TestGoogFieldMembers extend
{
IVariableNode node = getField("protected var foo:Vector.<Foo>;");
visitor.visitVariable(node);
- assertOut("/**\n * @protected\n * @type {Array.<Foo>}\n */\nA.prototype.foo");
+ assertOut("/**\n * @protected\n * @type {Vector.<Foo>}\n */\nA.prototype.foo");
}
- @Ignore
@Override
@Test
public void testField_withNamespaceTypeCollectionComplex()
{
- // TODO (erikdebruin) not sure how to annotate this using 'goog'
IVariableNode node = getField("protected var foo:Vector.<Vector.<Vector.<Foo>>>;");
visitor.visitVariable(node);
- assertOut("");
+ assertOut("/**\n * @protected\n * @type {Vector.<Vector.<Vector.<Foo>>>}\n */\nA.prototype.foo");
}
@Override
Modified: flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogGlobalClasses.java
URL: http://svn.apache.org/viewvc/flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogGlobalClasses.java?rev=1435869&r1=1435868&r2=1435869&view=diff
==============================================================================
--- flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogGlobalClasses.java (original)
+++ flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogGlobalClasses.java Sun Jan 20 15:59:32 2013
@@ -277,15 +277,13 @@ public class TestGoogGlobalClasses exten
assertOut("var /** @type {URIError} */ a = new URIError()");
}
- @Ignore
@Override
@Test
public void testVector()
{
- // TODO (erikdebruin) loose the '.<String>' in the output: Vector.<String>
IVariableNode node = getVariable("var a:Vector.<String> = new Vector.<String>(['Hello', 'World']);");
visitor.visitVariable(node);
- assertOut("var /** @type {Array.<String>} */ a = new Vector.<String>(['Hello','World'])");
+ assertOut("var /** @type {Vector.<string>} */ a = new Vector(['Hello','World'])");
}
@Override
Modified: flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogGlobalFunctions.java
URL: http://svn.apache.org/viewvc/flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogGlobalFunctions.java?rev=1435869&r1=1435868&r2=1435869&view=diff
==============================================================================
--- flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogGlobalFunctions.java (original)
+++ flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogGlobalFunctions.java Sun Jan 20 15:59:32 2013
@@ -24,7 +24,6 @@ import org.apache.flex.compiler.internal
import org.apache.flex.compiler.internal.js.driver.goog.GoogBackend;
import org.apache.flex.compiler.tree.as.IFunctionCallNode;
import org.apache.flex.compiler.tree.as.IVariableNode;
-import org.junit.Ignore;
import org.junit.Test;
/**
@@ -204,16 +203,13 @@ public class TestGoogGlobalFunctions ext
assertOut("var /** @type {string} */ a = unescape('%25')");
}
- @Ignore
@Override
@Test
public void testVector()
{
- // TODO (erikdebruin) first create a Vector workaround, then revisit
- // this test.
IVariableNode node = getVariable("var a:Vector.<String> = Vector.<String>(['Hello', 'World']);");
visitor.visitVariable(node);
- assertOut("var /** @type {Object.<string>} */ a = Vector(['Hello','World'])");
+ assertOut("var /** @type {Vector.<string>} */ a = Vector(['Hello','World'])");
}
@Override
Modified: flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogStatements.java
URL: http://svn.apache.org/viewvc/flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogStatements.java?rev=1435869&r1=1435868&r2=1435869&view=diff
==============================================================================
--- flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogStatements.java (original)
+++ flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogStatements.java Sun Jan 20 15:59:32 2013
@@ -27,7 +27,6 @@ import org.apache.flex.compiler.tree.as.
import org.apache.flex.compiler.tree.as.IForLoopNode;
import org.apache.flex.compiler.tree.as.ITryNode;
import org.apache.flex.compiler.tree.as.IVariableNode;
-import org.junit.Ignore;
import org.junit.Test;
/**
@@ -167,27 +166,26 @@ public class TestGoogStatements extends
assertOut("for (var /** @type {number} */ i in obj)\n\tbreak;");
}
- @Ignore
@Override
@Test
public void testVisitForEach_1()
{
- // TODO (erikdebruin) handle workaround for "for-each" loop
+ // TODO (erikdebruin) the assert is a placeholder for the eventual workaround
IForLoopNode node = (IForLoopNode) getNode(
"for each(var i:int in obj) { break; }", IForLoopNode.class);
visitor.visitForLoop(node);
- assertOut("for each (var i:int in obj) {\n\tbreak;\n}");
+ assertOut("for-each (var /** @type {number} */ i in obj) {\n\tbreak;\n}");
}
- @Ignore
@Override
@Test
public void testVisitForEach_1a()
{
+ // TODO (erikdebruin) the assert is a placeholder for the eventual workaround
IForLoopNode node = (IForLoopNode) getNode(
"for each(var i:int in obj) break; ", IForLoopNode.class);
visitor.visitForLoop(node);
- assertOut("for each (var i:int in obj)\n\tbreak;");
+ assertOut("for-each (var /** @type {number} */ i in obj)\n\tbreak;");
}
//----------------------------------
@@ -248,19 +246,19 @@ public class TestGoogStatements extends
"foo: for each(var i:int in obj) { break foo; }",
LabeledStatementNode.class);
visitor.visitLabeledStatement(node);
- assertOut("foo : for each (var /** @type {number} */ i in obj) {\n\tbreak foo;\n}");
+ assertOut("foo : for-each (var /** @type {number} */ i in obj) {\n\tbreak foo;\n}");
}
@Override
@Test
public void testVisitLabel_1a()
{
- // TODO LabelStatement messes up in finally{} block, something is wrong there
+ // TODO (mschmalle) LabelStatement messes up in finally{} block, something is wrong there
LabeledStatementNode node = (LabeledStatementNode) getNode(
"foo: for each(var i:int in obj) break foo;",
LabeledStatementNode.class);
visitor.visitLabeledStatement(node);
- assertOut("foo : for each (var /** @type {number} */ i in obj)\n\tbreak foo;");
+ assertOut("foo : for-each (var /** @type {number} */ i in obj)\n\tbreak foo;");
}
//----------------------------------
@@ -285,7 +283,7 @@ public class TestGoogStatements extends
+ "foo: for each(var i:int in obj) break foo;",
IFileNode.class);
visitor.visitFile(node);
- assertOut("goog.provide('A');\n\n/**\n * @constructor\n */\nA = function() {\n};\n\nA.prototype.a = function() {\n\ttry {\n\t\ta;\n\t} catch (e) {\n\t\tif (a) {\n\t\t\tif (b) {\n\t\t\t\tif (c)\n\t\t\t\t\tb;\n\t\t\t\telse if (f)\n\t\t\t\t\ta;\n\t\t\t\telse\n\t\t\t\t\te;\n\t\t\t}\n\t\t}\n\t} finally {\n\t}\n\tif (d)\n\t\tfor (var /** @type {number} */ i = 0; i < len; i++)\n\t\t\tbreak;\n\tif (a) {\n\t\twith (ab) {\n\t\t\tc();\n\t\t}\n\t\tdo {\n\t\t\ta++;\n\t\t\tdo\n\t\t\t\ta++;\n\t\t\twhile (a > b);\n\t\t} while (c > d);\n\t}\n\tif (b) {\n\t\ttry {\n\t\t\ta;\n\t\t\tthrow new Error('foo');\n\t\t} catch (e) {\n\t\t\tswitch (i) {\n\t\t\t\tcase 1:\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\treturn;\n\t\t\t}\n\t\t} catch (f) {\n\t\t\tc;\n\t\t\teee.dd;\n\t\t} finally {\n\t\t\td;\n\t\t\tvar /** @type {Object} */ a = function(foo, bar) {\n\t\t\t\tbar = typeof bar !== 'undefined' ? bar : 'goo';\n\t\t\t\treturn -1;\n\t\t\t};\n\t\t\teee.dd;\n\t\t\teee.dd;\n\t\t\teee.dd;\n\t\t\
teee.dd;\n\t\t}\n\t}\n\tfoo : for each (var /** @type {number} */ i in obj)\n\t\tbreak foo;;\n};");
+ assertOut("goog.provide('A');\n\n/**\n * @constructor\n */\nA = function() {\n};\n\nA.prototype.a = function() {\n\ttry {\n\t\ta;\n\t} catch (e) {\n\t\tif (a) {\n\t\t\tif (b) {\n\t\t\t\tif (c)\n\t\t\t\t\tb;\n\t\t\t\telse if (f)\n\t\t\t\t\ta;\n\t\t\t\telse\n\t\t\t\t\te;\n\t\t\t}\n\t\t}\n\t} finally {\n\t}\n\tif (d)\n\t\tfor (var /** @type {number} */ i = 0; i < len; i++)\n\t\t\tbreak;\n\tif (a) {\n\t\twith (ab) {\n\t\t\tc();\n\t\t}\n\t\tdo {\n\t\t\ta++;\n\t\t\tdo\n\t\t\t\ta++;\n\t\t\twhile (a > b);\n\t\t} while (c > d);\n\t}\n\tif (b) {\n\t\ttry {\n\t\t\ta;\n\t\t\tthrow new Error('foo');\n\t\t} catch (e) {\n\t\t\tswitch (i) {\n\t\t\t\tcase 1:\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\treturn;\n\t\t\t}\n\t\t} catch (f) {\n\t\t\tc;\n\t\t\teee.dd;\n\t\t} finally {\n\t\t\td;\n\t\t\tvar /** @type {Object} */ a = function(foo, bar) {\n\t\t\t\tbar = typeof bar !== 'undefined' ? bar : 'goo';\n\t\t\t\treturn -1;\n\t\t\t};\n\t\t\teee.dd;\n\t\t\teee.dd;\n\t\t\teee.dd;\n\t\t\
teee.dd;\n\t\t}\n\t}\n\tfoo : for-each (var /** @type {number} */ i in obj)\n\t\tbreak foo;;\n};");
}
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=1435869&r1=1435868&r2=1435869&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 Sun Jan 20 15:59:32 2013
@@ -100,6 +100,7 @@ public class ASEmitter implements IASEmi
public static final String COMMA = ",";
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 INDENT = "\t";
@@ -1118,7 +1119,7 @@ public class ASEmitter implements IASEmi
return -1;
}
- private static final boolean isImplicit(IContainerNode node)
+ protected static final boolean isImplicit(IContainerNode node)
{
return node.getContainerType() == ContainerType.IMPLICIT
|| node.getContainerType() == ContainerType.SYNTHESIZED;
Modified: flex/falcon/trunk/compiler.jx/src/org/apache/flex/compiler/internal/js/codegen/goog/JSGoogDocEmitter.java
URL: http://svn.apache.org/viewvc/flex/falcon/trunk/compiler.jx/src/org/apache/flex/compiler/internal/js/codegen/goog/JSGoogDocEmitter.java?rev=1435869&r1=1435868&r2=1435869&view=diff
==============================================================================
--- flex/falcon/trunk/compiler.jx/src/org/apache/flex/compiler/internal/js/codegen/goog/JSGoogDocEmitter.java (original)
+++ flex/falcon/trunk/compiler.jx/src/org/apache/flex/compiler/internal/js/codegen/goog/JSGoogDocEmitter.java Sun Jan 20 15:59:32 2013
@@ -408,9 +408,8 @@ public class JSGoogDocEmitter extends JS
else if (name.equals(IASLanguageConstants._int) ||
name.equals(IASLanguageConstants.uint))
result = IASLanguageConstants.Number.toLowerCase();
- else if (name.matches("Vector.<.*>"))
- // TODO (erikdebruin) will this work with nested Vector declarations?
- result = name.replace(IASLanguageConstants.Vector, IASLanguageConstants.Array);
+
+ result = result.replace(IASLanguageConstants.String, IASLanguageConstants.String.toLowerCase());
return result;
}
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=1435869&r1=1435868&r2=1435869&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 Sun Jan 20 15:59:32 2013
@@ -36,6 +36,7 @@ import org.apache.flex.compiler.internal
import org.apache.flex.compiler.internal.tree.as.ChainedVariableNode;
import org.apache.flex.compiler.internal.tree.as.FunctionCallNode;
import org.apache.flex.compiler.internal.tree.as.FunctionNode;
+import org.apache.flex.compiler.internal.tree.as.NamespaceAccessExpressionNode;
import org.apache.flex.compiler.js.codegen.goog.IJSGoogDocEmitter;
import org.apache.flex.compiler.js.codegen.goog.IJSGoogEmitter;
import org.apache.flex.compiler.problems.ICompilerProblem;
@@ -45,8 +46,10 @@ import org.apache.flex.compiler.tree.as.
import org.apache.flex.compiler.tree.as.IAccessorNode;
import org.apache.flex.compiler.tree.as.IBinaryOperatorNode;
import org.apache.flex.compiler.tree.as.IClassNode;
+import org.apache.flex.compiler.tree.as.IContainerNode;
import org.apache.flex.compiler.tree.as.IDefinitionNode;
import org.apache.flex.compiler.tree.as.IExpressionNode;
+import org.apache.flex.compiler.tree.as.IForLoopNode;
import org.apache.flex.compiler.tree.as.IFunctionCallNode;
import org.apache.flex.compiler.tree.as.IFunctionNode;
import org.apache.flex.compiler.tree.as.IGetterNode;
@@ -57,6 +60,7 @@ import org.apache.flex.compiler.tree.as.
import org.apache.flex.compiler.tree.as.IScopedNode;
import org.apache.flex.compiler.tree.as.ISetterNode;
import org.apache.flex.compiler.tree.as.ITypeNode;
+import org.apache.flex.compiler.tree.as.ITypedExpressionNode;
import org.apache.flex.compiler.tree.as.IVariableNode;
/**
@@ -176,6 +180,10 @@ public class JSGoogEmitter extends JSEmi
emitMethod((IFunctionNode) definition.getConstructor().getNode());
write(SEMICOLON);
+ // TODO (erikdebruin) create a way to visit all members before actually
+ // emitting the members themselves. This will allow
+ // us to write stuff like a 'shared' property for
+ // all combinations of accessors, for instance.
IDefinitionNode[] dnodes = node.getAllMemberNodes();
for (IDefinitionNode dnode : dnodes)
{
@@ -635,6 +643,33 @@ public class JSGoogEmitter extends JSEmi
getWalker().walk(node.getNameExpressionNode());
}
+ @Override
+ public void emitTypedExpression(ITypedExpressionNode node)
+ {
+ getWalker().walk(node.getCollectionNode());
+ // (erikdebruin) for 'goog', leave out the ".<WhateverType>" part
+ }
+
+ @Override
+ public void emitForEachLoop(IForLoopNode node)
+ {
+ IContainerNode xnode = (IContainerNode) node.getChild(1);
+ write(IASKeywordConstants.FOR);
+ write(DASH);
+ write(IASKeywordConstants.EACH);
+ write(SPACE);
+ write(PARENTHESES_OPEN);
+
+ IContainerNode cnode = node.getConditionalsContainerNode();
+ getWalker().walk(cnode.getChild(0));
+
+ write(PARENTHESES_CLOSE);
+ if (!isImplicit(xnode))
+ write(SPACE);
+
+ getWalker().walk(node.getStatementContentsNode());
+ }
+
public JSGoogEmitter(FilterWriter out)
{
super(out);
@@ -783,6 +818,14 @@ public class JSGoogEmitter extends JSEmi
//--------------------------------------------------------------------------
@Override
+ public void emitNamespaceAccessExpression(NamespaceAccessExpressionNode node)
+ {
+ getWalker().walk(node.getLeftOperandNode());
+ write(PERIOD);
+ getWalker().walk(node.getRightOperandNode());
+ }
+
+ @Override
public void emitBinaryOperator(IBinaryOperatorNode node)
{
ASTNodeID id = node.getNodeID();