You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by ha...@apache.org on 2019/12/10 09:39:33 UTC

[royale-asjs] branch develop updated: The most significant memory optimization to date

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 <ha...@in-tools.com>
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++)