This is an automated email from the ASF dual-hosted git repository.

harbs pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/royale-asjs.git


The following commit(s) were added to refs/heads/develop by this push:
     new 6664fb4  The most significant memory optimization to date
6664fb4 is described below

commit 6664fb4bb5308b376ba269635a48e63ba729ba7b
Author: Harbs <[email protected]>
AuthorDate: Tue Dec 10 11:29:15 2019 +0200

    The most significant memory optimization to date
---
 frameworks/projects/XML/src/main/royale/XML.as     | 55 ++++++++++++----------
 .../projects/XML/src/main/royale/XMLAttribute.as   |  6 ++-
 frameworks/projects/XML/src/main/royale/XMLText.as |  5 +-
 3 files changed, 37 insertions(+), 29 deletions(-)

diff --git a/frameworks/projects/XML/src/main/royale/XML.as 
b/frameworks/projects/XML/src/main/royale/XML.as
index 3becc31..9df4b14 100644
--- a/frameworks/projects/XML/src/main/royale/XML.as
+++ b/frameworks/projects/XML/src/main/royale/XML.as
@@ -560,7 +560,9 @@ package
                
                private static var _defaultNS:String;
                private static var _internal:Boolean;
-               
+               /**
+                * @royaleignorecoercion XML
+                */
                public function XML(xml:* = null)
                {
                        // _origStr = xml;
@@ -583,24 +585,21 @@ package
                                        _value = '';
                                }
                        }
-                       
-                       Object.defineProperty(this,"0",
-                                       {
-                                               "get": _zeroIndexGetter,
-                                               "set": _zeroIndexSetter,
-                                               enumerable: true,
-                                               configurable: true
-                                       }
-                       );
-               }
-               
-               private function _zeroIndexGetter():XML {
-                       return this;
-               }
-               private function _zeroIndexSetter():void {
-                       //do nothing
+                       if(!_class_initialized)
+                       {
+                               Object.defineProperty(XML.prototype,"0",
+                                               {
+                                                       "get": 
function():XML{return this as XML},
+                                                       "set": 
function():void{},
+                                                       enumerable: true,
+                                                       configurable: true
+                                               }
+                               );
+                               _class_initialized = true;
+                       }
                }
-               
+
+               private static var _class_initialized:Boolean = false;
                
                private static const xmlRegEx:RegExp = /&(?![\w]+;)/g;
                private static const isWhitespace:RegExp = /^\s+$/;
@@ -672,9 +671,8 @@ package
                                        foundCount = 1; //top level root tag 
wins
                                        
                                        if (foundCount != 0) {
-                                               //reset any earlier settings
-                                               delete this._nodeKind;
-                                               delete this._value;
+                                               //reset any earlier settings\
+                                               resetNodeKind();
                                        }
                                        _name = 
getQName(node.localName,node.prefix,node.namespaceURI,false);
                                        _internal = true;
@@ -740,7 +738,11 @@ package
                        if (foundCount > 1) throw new TypeError('Error #1088: 
The markup in the document following the root element must be well-formed.');
 
                }
-               
+               protected function resetNodeKind():void{
+                       delete this._nodeKind;
+                       delete this._value;
+                       delete this._name;
+               }
                protected var _children:Array;
                protected var _attributes:Array;
                private var _parent:XML;
@@ -898,7 +900,7 @@ package
                                if (lastChild && lastChild.getNodeRef() == 
ELEMENT) {
                                        
                                        const wrapper:XML = new XML();
-                                       delete wrapper._nodeKind;
+                                       wrapper.resetNodeKind();
                                        child = new XML(child.toString());
                                        wrapper.setName(lastChild.name());
                                        child.setParent(wrapper);
@@ -1161,9 +1163,12 @@ package
                        */
                        var i:int;
                        var xml:XML = new XML();
+                       xml.resetNodeKind();
                        xml.setNodeKind(getNodeKindInternal());
                        xml.setName(name());
-                       xml.setValue(_value);
+                       if(_value){
+                               xml.setValue(_value);
+                       }
                        var len:int;
                        len = namespaceLength();
                        for(i=0;i<len;i++)
@@ -1743,7 +1748,7 @@ package
                        return _name? _name.localName : null;
                }
                
-               private var _name:QName;
+               protected var _name:QName;
                
                /**
                 * Gives the qualified name for the XML object.
diff --git a/frameworks/projects/XML/src/main/royale/XMLAttribute.as 
b/frameworks/projects/XML/src/main/royale/XMLAttribute.as
index 84dcf2e..8a26c1f 100644
--- a/frameworks/projects/XML/src/main/royale/XMLAttribute.as
+++ b/frameworks/projects/XML/src/main/royale/XMLAttribute.as
@@ -22,7 +22,8 @@ package
   {
     public function XMLAttribute()
     {
-      
+      super();
+                       resetNodeKind();
     }
                override protected function getNodeRef():String{
                        return "a";
@@ -32,7 +33,8 @@ package
                        var i:int;
                        var xml:XML = new XMLAttribute();
                        xml.setName(name());
-                       xml.setValue(_value);
+                       if(_value)xml.setValue(_value);
+                       
                        var len:int;
                        len = namespaceLength();
                        for(i=0;i<len;i++)
diff --git a/frameworks/projects/XML/src/main/royale/XMLText.as 
b/frameworks/projects/XML/src/main/royale/XMLText.as
index bcbeb6c..a2f47ed 100644
--- a/frameworks/projects/XML/src/main/royale/XMLText.as
+++ b/frameworks/projects/XML/src/main/royale/XMLText.as
@@ -22,7 +22,8 @@ package
   {
     public function XMLText()
     {
-      
+      super();
+                       resetNodeKind();
     }
                override protected function getNodeRef():String{
                        return "t";
@@ -33,7 +34,7 @@ package
                        var i:int;
                        var xml:XML = new XMLText();
                        xml.setName(name());
-                       xml.setValue(_value);
+                       if(_value)xml.setValue(_value);
                        var len:int;
                        len = namespaceLength();
                        for(i=0;i<len;i++)

Reply via email to