Browse Source

[macro] fix TypeParamDecl meta reification and printing (#9578)

Dmitrii Maganov 5 năm trước cách đây
mục cha
commit
ef13fee34b

+ 1 - 0
src/syntax/reification.ml

@@ -360,6 +360,7 @@ let reify in_macro =
 		to_obj [
 			"name", to_placed_name t.tp_name;
 			"params", (EArrayDecl (List.map (to_tparam_decl p) t.tp_params),p);
+			"meta", to_meta t.tp_meta p;
 			"constraints", (EArrayDecl (match t.tp_constraints with None -> [] | Some th -> [to_ctype th p]),p)
 		] p
 	and to_type_def (t,p) =

+ 2 - 1
std/haxe/macro/Printer.hx

@@ -183,7 +183,8 @@ class Printer {
 	}
 
 	public function printTypeParamDecl(tpd:TypeParamDecl)
-		return tpd.name
+		return (tpd.meta != null && tpd.meta.length > 0 ? tpd.meta.map(printMetadata).join(" ") + " " : "")
+			+ tpd.name
 			+ (tpd.params != null && tpd.params.length > 0 ? "<" + tpd.params.map(printTypeParamDecl).join(", ") + ">" : "")
 			+ (tpd.constraints != null && tpd.constraints.length > 0 ? ":(" + tpd.constraints.map(printComplexType).join(", ") + ")" : "");
 

+ 11 - 0
tests/unit/src/unit/issues/Issue9565.hx

@@ -0,0 +1,11 @@
+package unit.issues;
+
+class Issue9565 extends Test {
+  function test() {
+    var td = macro class Foo<@:foo T> {};
+    var printer = new haxe.macro.Printer();
+    var s = printer.printTypeDefinition(td);
+    s = ~/[\t\n\r]/g.replace(s, "");
+    eq("class Foo<@:foo T> {}", s);
+  }
+}