Browse Source

allow Type.resolveClass/resolveEnum to work without custom @:macro hacks

Simon Krajewski 13 năm trước cách đây
mục cha
commit
9ff8e4a509
1 tập tin đã thay đổi với 20 bổ sung1 xóa
  1. 20 1
      std/neko/_std/Type.hx

+ 20 - 1
std/neko/_std/Type.hx

@@ -70,7 +70,22 @@ enum ValueType {
 		return a.join(".");
 	}
 
+	#if macro
+	static var moduleName:String;
+	@:macro static function macroResolve()
+	{
+		if (moduleName != null)
+			haxe.macro.Context.getModule(moduleName);
+		return macro null;
+	}	
+	#end
+	
 	public static function resolveClass( name : String ) : Class<Dynamic> untyped {
+		#if macro
+		moduleName = name;
+		macroResolve();
+		#end
+		
 		var path = name.split(".");
 		cl = Reflect.field(untyped neko.Boot.__classes,path[0]);
 		var i = 1;
@@ -84,8 +99,12 @@ enum ValueType {
 		return cl;
 	}
 
-
 	public static function resolveEnum( name : String ) : Enum<Dynamic> untyped {
+		#if macro
+		moduleName = name;
+		macroResolve();
+		#end
+		
 		var path = name.split(".");
 		e = Reflect.field(neko.Boot.__classes,path[0]);
 		var i = 1;