Browse Source

"Fix" printing of embedded `any` to prevent recursion

Ginger Bill 8 years ago
parent
commit
81336b58cb
1 changed files with 20 additions and 6 deletions
  1. 20 6
      core/fmt.odin

+ 20 - 6
core/fmt.odin

@@ -783,8 +783,12 @@ fmt_value :: proc(fi: ^FmtInfo, v: any, verb: rune) {
 				write_string(fi.buf, b.names[i]);
 				write_string(fi.buf, " = ");
 
-				data := ^u8(v.data) + b.offsets[i];
-				fmt_arg(fi, any{rawptr(data), b.types[i]}, 'v');
+				if t := b.types[i]; types.is_any(t) {
+					write_string(fi.buf, "any{}");
+				} else {
+					data := ^u8(v.data) + b.offsets[i];
+					fmt_arg(fi, any{rawptr(data), t}, 'v');
+				}
 			}
 			write_byte(fi.buf, '}');
 
@@ -897,8 +901,13 @@ fmt_value :: proc(fi: ^FmtInfo, v: any, verb: rune) {
 
 			write_string(fi.buf, info.names[i]);
 			write_string(fi.buf, " = ");
-			data := ^u8(v.data) + info.offsets[i];
-			fmt_value(fi, any{rawptr(data), info.types[i]}, 'v');
+
+			if t := info.types[i]; types.is_any(t) {
+				write_string(fi.buf, "any{}");
+			} else {
+				data := ^u8(v.data) + info.offsets[i];
+				fmt_arg(fi, any{rawptr(data), t}, 'v');
+			}
 		}
 
 	case Union:
@@ -911,8 +920,13 @@ fmt_value :: proc(fi: ^FmtInfo, v: any, verb: rune) {
 
 			write_string(fi.buf, cf.names[i]);
 			write_string(fi.buf, " = ");
-			data := ^u8(v.data) + cf.offsets[i];
-			fmt_value(fi, any{rawptr(data), cf.types[i]}, 'v');
+
+			if t := cf.types[i]; types.is_any(t) {
+				write_string(fi.buf, "any{}");
+			} else {
+				data := ^u8(v.data) + cf.offsets[i];
+				fmt_arg(fi, any{rawptr(data), t}, 'v');
+			}
 		}
 
 	case RawUnion: