You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by ah...@apache.org on 2015/08/01 01:48:40 UTC
[2/2] git commit: [flex-falcon] [refs/heads/develop] - subdocuments
need to have their object.defineproperties spit out in their own context
subdocuments need to have their object.defineproperties spit out in their own context
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/e22e7e14
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/e22e7e14
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/e22e7e14
Branch: refs/heads/develop
Commit: e22e7e14b63613ecd1bafe778ae2a6251cb0b14b
Parents: b3f143c
Author: Alex Harui <ah...@apache.org>
Authored: Fri Jul 31 16:43:23 2015 -0700
Committer: Alex Harui <ah...@apache.org>
Committed: Fri Jul 31 16:43:23 2015 -0700
----------------------------------------------------------------------
.../compiler/internal/codegen/as/ASEmitter.java | 5 +++
.../internal/codegen/js/JSSessionModel.java | 37 ++++++++++++++++++++
.../codegen/js/flexjs/JSFlexJSEmitter.java | 11 ++++++
.../codegen/mxml/flexjs/MXMLFlexJSEmitter.java | 7 ++--
4 files changed, 57 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/e22e7e14/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java
index d16081d..fa743c2 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java
@@ -126,6 +126,11 @@ public class ASEmitter implements IASEmitter, IEmitter
return builder;
}
+ protected void setBuilder(StringBuilder sb)
+ {
+ builder = sb;
+ }
+
protected void flushBuilder()
{
setBufferWrite(false);
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/e22e7e14/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSSessionModel.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSSessionModel.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSSessionModel.java
index 8bb30b4..2809937 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSSessionModel.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSSessionModel.java
@@ -22,6 +22,7 @@ package org.apache.flex.compiler.internal.codegen.js;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
+import java.util.Stack;
import org.apache.flex.compiler.definitions.IClassDefinition;
import org.apache.flex.compiler.tree.as.IGetterNode;
@@ -44,6 +45,16 @@ public class JSSessionModel
public ISetterNode setter;
}
+ private static class Context
+ {
+ public HashMap<String, PropertyNodes> propertyMap;
+ public List<String> interfacePropertyMap;
+ public HashMap<String, PropertyNodes> staticPropertyMap;
+ public ArrayList<String> bindableVars;
+ public IClassDefinition classDefinition;
+ }
+ private Stack<Context> stack = new Stack<Context>();
+
private HashMap<String, PropertyNodes> propertyMap = new HashMap<String, PropertyNodes>();
private List<String> interfacePropertyMap = new ArrayList<String>();
@@ -64,6 +75,32 @@ public class JSSessionModel
this.currentClass = currentClass;
}
+ public void pushClass(IClassDefinition currentClass)
+ {
+ Context context = new Context();
+ context.bindableVars = bindableVars;
+ context.interfacePropertyMap = interfacePropertyMap;
+ context.propertyMap = propertyMap;
+ context.staticPropertyMap = staticPropertyMap;
+ context.classDefinition = this.currentClass;
+ stack.push(context);
+ this.currentClass = currentClass;
+ bindableVars = new ArrayList<String>();
+ staticPropertyMap = new HashMap<String, PropertyNodes>();
+ interfacePropertyMap = new ArrayList<String>();
+ propertyMap = new HashMap<String, PropertyNodes>();
+ }
+
+ public void popClass()
+ {
+ Context context = stack.pop();
+ this.currentClass = context.classDefinition;
+ bindableVars = context.bindableVars;
+ staticPropertyMap = context.staticPropertyMap;
+ propertyMap = context.propertyMap;
+ interfacePropertyMap = context.interfacePropertyMap;
+ }
+
public HashMap<String, PropertyNodes> getPropertyMap()
{
return propertyMap;
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/e22e7e14/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 7b9b10a..67f54ba 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
@@ -23,6 +23,7 @@ import java.io.FilterWriter;
import org.apache.flex.compiler.codegen.js.flexjs.IJSFlexJSEmitter;
import org.apache.flex.compiler.codegen.js.goog.IJSGoogDocEmitter;
+import org.apache.flex.compiler.definitions.IClassDefinition;
import org.apache.flex.compiler.definitions.IPackageDefinition;
import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitter;
@@ -375,4 +376,14 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
{
definePropertyFunctionEmitter.emit(node);
}
+
+ public String stringifyDefineProperties(IClassDefinition cdef)
+ {
+ setBufferWrite(true);
+ accessorEmitter.emit(cdef);
+ String result = getBuilder().toString();
+ getBuilder().setLength(0);
+ setBufferWrite(false);
+ return result;
+ }
}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/e22e7e14/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 daade3e..5d44b8a 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
@@ -269,8 +269,7 @@ public class MXMLFlexJSEmitter extends MXMLEmitter implements
classDefinition = cdef;
IASEmitter asEmitter = ((IMXMLBlockWalker) getMXMLWalker())
.getASEmitter();
- IClassDefinition oldThisClass = ((JSFlexJSEmitter) asEmitter).getModel().getCurrentClass();
- ((JSFlexJSEmitter) asEmitter).getModel().setCurrentClass(cdef);
+ ((JSFlexJSEmitter) asEmitter).getModel().pushClass(cdef);
IASNode classNode = node.getContainedClassDefinitionNode();
// visit tags
@@ -302,6 +301,8 @@ public class MXMLFlexJSEmitter extends MXMLEmitter implements
emitBindingData(cname, cdef);
+ write(((JSFlexJSEmitter) asEmitter).stringifyDefineProperties(cdef));
+
descriptorTree = oldDescriptorTree;
propertiesTree = oldPropertiesTree;
events = oldEvents;
@@ -314,7 +315,7 @@ public class MXMLFlexJSEmitter extends MXMLEmitter implements
idCounter = oldIdCounter;
inMXMLContent = oldInMXMLContent;
classDefinition = oldClassDef;
- ((JSFlexJSEmitter) asEmitter).getModel().setCurrentClass(oldThisClass);
+ ((JSFlexJSEmitter) asEmitter).getModel().popClass();
}