Selaa lähdekoodia

Merge pull request #3991 from TiVo/optimize-json-parser-memory-usage

optimised Json parser to prevent creating unecessary String buffers
Dan Korostelev 10 vuotta sitten
vanhempi
commit
9317926632
1 muutettua tiedostoa jossa 11 lisäystä ja 3 poistoa
  1. 11 3
      std/haxe/format/JsonParser.hx

+ 11 - 3
std/haxe/format/JsonParser.hx

@@ -135,12 +135,15 @@ class JsonParser {
 
 
 	function parseString() {
 	function parseString() {
 		var start = pos;
 		var start = pos;
-		var buf = new StringBuf();
+		var buf = null;
 		while( true ) {
 		while( true ) {
 			var c = nextChar();
 			var c = nextChar();
 			if( c == '"'.code )
 			if( c == '"'.code )
 				break;
 				break;
 			if( c == '\\'.code ) {
 			if( c == '\\'.code ) {
+				if (buf == null) {
+					buf = new StringBuf();
+				}
 				buf.addSub(str,start, pos - start - 1);
 				buf.addSub(str,start, pos - start - 1);
 				c = nextChar();
 				c = nextChar();
 				switch( c ) {
 				switch( c ) {
@@ -190,8 +193,13 @@ class JsonParser {
 			else if( StringTools.isEof(c) )
 			else if( StringTools.isEof(c) )
 				throw "Unclosed string";
 				throw "Unclosed string";
 		}
 		}
-		buf.addSub(str,start, pos - start - 1);
-		return buf.toString();
+		if (buf == null) {
+			return str.substr(start, pos - start - 1);
+		}
+		else {
+			buf.addSub(str,start, pos - start - 1);
+			return buf.toString();
+		}
 	}
 	}
 
 
 	inline function parseNumber( c : Int ) : Dynamic {
 	inline function parseNumber( c : Int ) : Dynamic {