Browse Source

a test (closes #5843)

Aleksandr Kuzmenko 6 years ago
parent
commit
c7755d23ed

+ 8 - 0
tests/misc/projects/Issue5843/Data.hx

@@ -0,0 +1,8 @@
+package;
+
+typedef Data = {
+	var some:String;
+	var data:Int;
+}
+
+typedef Transformed = Transform<Data>;

+ 45 - 0
tests/misc/projects/Issue5843/Macro.hx

@@ -0,0 +1,45 @@
+package;
+
+import haxe.ds.Option;
+import haxe.macro.Context;
+import haxe.macro.Expr;
+import haxe.macro.Type;
+
+class Macro {
+	public static function build() {
+		switch Context.getLocalType() {
+			case TInst(_, [Context.follow(_) => TAnonymous(_.get() => a)]):
+				return buildAnon(a);
+			case _: throw 'assert';
+		}
+	}
+	
+	
+	static function buildAnon(a:AnonType):Type {
+		var sig = Context.signature(a);
+		var name = sig;
+		try return Context.getType(name) catch(e:Dynamic) {}
+		var pos = Context.currentPos();
+		var fields = [];
+		for(field in a.fields) {
+			var meta = field.meta.get();
+			
+			fields.push({
+				kind: FieldType.FVar(Context.toComplexType(field.type)),
+				name: field.name,
+				pos: field.pos,
+				meta: meta,
+			});
+		}
+		
+		Context.defineType({
+			fields: fields,
+			kind: TDStructure,
+			name: name,
+			pack: [],
+			pos: pos,
+		});
+		
+		return Context.getType(name);
+	}
+}

+ 15 - 0
tests/misc/projects/Issue5843/Main.hx

@@ -0,0 +1,15 @@
+package;
+
+import Data;
+
+class Main {
+	static function main() {
+		trace('main');
+		var item:Item = null;
+		trace(item);
+	}
+}
+
+typedef Item = {
+	?data:Transformed, // remove the `?` to make it compile
+}

+ 4 - 0
tests/misc/projects/Issue5843/Transform.hx

@@ -0,0 +1,4 @@
+package;
+
+@:genericBuild(Macro.build())
+class Transform<T> {}

+ 2 - 0
tests/misc/projects/Issue5843/compile.hxml

@@ -0,0 +1,2 @@
+-main Main
+-js bin/test.js