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();
 
     }