Browse Source

[hl] Keep track of depth in Array.toString (#8339)

* keep track of depth in Array.toString

* exception handling

* move toStringDepth to Std, use HL rethrow
Aurel 6 năm trước cách đây
mục cha
commit
75c73052af
2 tập tin đã thay đổi với 13 bổ sung3 xóa
  1. 1 0
      std/hl/_std/Std.hx
  2. 12 3
      std/hl/types/ArrayObj.hx

+ 1 - 0
std/hl/_std/Std.hx

@@ -27,6 +27,7 @@ private typedef Rand = hl.Abstract<"hl_random">;
 class Std {
 
 	static var rnd : Rand;
+	static var toStringDepth : Int = 0;
 
 	static function __init__() : Void {
 		rnd = rnd_sys();

+ 12 - 3
std/hl/types/ArrayObj.hx

@@ -139,14 +139,23 @@ class ArrayObj<T> extends ArrayBase {
 		return ret;
 	}
 
+	@:access(Std.toStringDepth)
 	override function toString() : String {
+		if (Std.toStringDepth >= 5) return "...";
+		Std.toStringDepth++;
 		var b = new StringBuf();
 		b.addChar("[".code);
-		for( i in 0...length ) {
-			if( i > 0 ) b.addChar(",".code);
-			b.add(array[i]);
+		try {
+			for( i in 0...length ) {
+				if( i > 0 ) b.addChar(",".code);
+				b.add(array[i]);
+			}
+		} catch( e : Dynamic ) {
+			Std.toStringDepth--;
+			hl.Api.rethrow(e);
 		}
 		b.addChar("]".code);
+		Std.toStringDepth--;
 		return b.toString();
 	}