You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by gr...@apache.org on 2016/10/11 07:17:20 UTC
[5/6] git commit: [flex-falcon] [refs/heads/develop] - [FIX] Fix for
static complex initializer from mxml script blocks,
tuning to newlines in the output.
[FIX] Fix for static complex initializer from mxml script blocks, tuning to newlines in the output.
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/e1a6e636
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/e1a6e636
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/e1a6e636
Branch: refs/heads/develop
Commit: e1a6e636a0f9fdeb92e7dddffac20cdf8156cf14
Parents: a7d6952
Author: greg-dove <gr...@gmail.com>
Authored: Tue Oct 11 18:58:22 2016 +1300
Committer: greg-dove <gr...@gmail.com>
Committed: Tue Oct 11 18:58:22 2016 +1300
----------------------------------------------------------------------
.../internal/codegen/js/jx/ClassEmitter.java | 12 +++---
.../internal/codegen/js/jx/FieldEmitter.java | 7 +++-
.../codegen/mxml/flexjs/MXMLFlexJSEmitter.java | 42 ++++++++++++++++++--
3 files changed, 51 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/e1a6e636/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/ClassEmitter.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/ClassEmitter.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/ClassEmitter.java
index 3b28e5f..0a37cf4 100644
--- a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/ClassEmitter.java
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/ClassEmitter.java
@@ -149,20 +149,22 @@ public class ClassEmitter extends JSSubEmitter implements
if (fjs.getFieldEmitter().hasComplexStaticInitializers)
{
writeNewline();
-
+ boolean complexInitOutput = false;
for (IDefinitionNode dnode : dnodes)
{
if (dnode.getNodeID() == ASTNodeID.VariableID)
{
- writeNewline();
- fjs.getFieldEmitter().emitFieldInitializer((IVariableNode) dnode);
+ complexInitOutput = fjs.getFieldEmitter().emitFieldInitializer((IVariableNode) dnode) || complexInitOutput;
}
else if (dnode.getNodeID() == ASTNodeID.BindableVariableID)
{
- writeNewline();
- fjs.getFieldEmitter().emitFieldInitializer((IVariableNode) dnode);
+ complexInitOutput = fjs.getFieldEmitter().emitFieldInitializer((IVariableNode) dnode) || complexInitOutput;
}
}
+ if (complexInitOutput) {
+ writeNewline();
+ writeNewline();
+ }
}
fjs.getPackageFooterEmitter().emitClassInfo(node);
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/e1a6e636/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/FieldEmitter.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/FieldEmitter.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/FieldEmitter.java
index b3b6bdb..8892220 100644
--- a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/FieldEmitter.java
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/FieldEmitter.java
@@ -26,6 +26,7 @@ import org.apache.flex.compiler.common.ASModifier;
import org.apache.flex.compiler.common.ModifiersSet;
import org.apache.flex.compiler.definitions.IDefinition;
import org.apache.flex.compiler.definitions.IVariableDefinition;
+import org.apache.flex.compiler.internal.codegen.Emitter;
import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
import org.apache.flex.compiler.internal.codegen.js.JSEmitterTokens;
import org.apache.flex.compiler.internal.codegen.js.JSSessionModel.BindableVarInfo;
@@ -173,7 +174,7 @@ public class FieldEmitter extends JSSubEmitter implements
}
}
- public void emitFieldInitializer(IVariableNode node)
+ public boolean emitFieldInitializer(IVariableNode node)
{
IDefinition definition = EmitterUtils.getClassDefinition(node);
@@ -199,6 +200,7 @@ public class FieldEmitter extends JSSubEmitter implements
className = getEmitter().formatQualifiedName(definition.getQualifiedName());
if (ndef.isStatic() && EmitterUtils.needsStaticInitializer(vnodeString, className) && !isPackageOrFileMember)
{
+ writeNewline();
write(className
+ ASEmitterTokens.MEMBER_ACCESS.getToken());
write(node.getName());
@@ -213,7 +215,10 @@ public class FieldEmitter extends JSSubEmitter implements
writeToken(ASEmitterTokens.EQUAL);
write(vnodeString);
write(ASEmitterTokens.SEMICOLON);
+ return true;
}
}
+
+ return false;
}
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/e1a6e636/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSEmitter.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSEmitter.java
index 3e8dfac..b128388 100644
--- a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSEmitter.java
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSEmitter.java
@@ -386,9 +386,9 @@ public class MXMLFlexJSEmitter extends MXMLEmitter implements
fjs.getBindableEmitter().emit(cdef);
fjs.getAccessorEmitter().emit(cdef);
-
- emitEvents(cname);
+ emitEvents(cname);
+ emitComplexStaticInitializers(node);
emitPropertyGetterSetters(cname);
emitMXMLDescriptorFuncs(cname);
@@ -2510,13 +2510,15 @@ public class MXMLFlexJSEmitter extends MXMLEmitter implements
{
IVariableNode varnode = (IVariableNode)schild;
IExpressionNode vnode = varnode.getAssignedValueNode();
- if (vnode != null && (!(varnode.isConst() || EmitterUtils.isScalar(vnode))))
+
+
+ if (vnode != null && (!EmitterUtils.isScalar(vnode)))
{
writeNewline();
write(ASEmitterTokens.THIS);
write(ASEmitterTokens.MEMBER_ACCESS);
write(varnode.getName());
- if (schildID == ASTNodeID.BindableVariableID)
+ if (schildID == ASTNodeID.BindableVariableID && !varnode.isConst())
write("_"); // use backing variable
write(ASEmitterTokens.SPACE);
writeToken(ASEmitterTokens.EQUAL);
@@ -2531,6 +2533,38 @@ public class MXMLFlexJSEmitter extends MXMLEmitter implements
}
}
}
+
+ public void emitComplexStaticInitializers(IASNode node){
+ JSFlexJSEmitter fjs = (JSFlexJSEmitter) ((IMXMLBlockWalker) getMXMLWalker())
+ .getASEmitter();
+
+ if (!fjs.getFieldEmitter().hasComplexStaticInitializers) return;
+ int n = node.getChildCount();
+ boolean sawOutput = false;
+ for (int i = 0; i < n; i++)
+ {
+ IASNode child = node.getChild(i);
+ if (child.getNodeID() == ASTNodeID.MXMLScriptID)
+ {
+ int m = child.getChildCount();
+ for (int j = 0; j < m; j++)
+ {
+ IASNode schild = child.getChild(j);
+ ASTNodeID schildID = schild.getNodeID();
+ if (schildID == ASTNodeID.VariableID ||
+ schildID == ASTNodeID.BindableVariableID)
+ {
+ sawOutput = fjs.getFieldEmitter().emitFieldInitializer((IVariableNode) schild) || sawOutput;
+ }
+ }
+ }
+ }
+
+ if (sawOutput) {
+ writeNewline();
+ writeNewline();
+ }
+ }
@Override
public void emitImplements(IMXMLImplementsNode node)