Browse Source

[js] use dot path strings for Cls.__name__ (closes #7141) (#7225)

Dan Korostelev 7 years ago
parent
commit
6398c3cb50
4 changed files with 7 additions and 11 deletions
  1. 1 1
      src/generators/genjs.ml
  2. 1 2
      std/haxe/macro/ExampleJSGenerator.hx
  3. 3 3
      std/js/_std/Std.hx
  4. 2 5
      std/js/_std/Type.hx

+ 1 - 1
src/generators/genjs.ml

@@ -1050,7 +1050,7 @@ let generate_class___name__ ctx c =
 		let p = s_path ctx c.cl_path in
 		print ctx "%s.__name__ = " p;
 		if has_feature ctx "Type.getClassName" then
-			print ctx "[%s]" (String.concat "," (List.map (fun s -> Printf.sprintf "\"%s\"" (Ast.s_escape s)) (fst c.cl_path @ [snd c.cl_path])))
+			print ctx "\"%s\"" (dot_path c.cl_path)
 		else
 			print ctx "true";
 		newline ctx;

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

@@ -137,8 +137,7 @@ class ExampleJSGenerator {
 		else
 			print("function() { }");
 		newline();
-		var name = p.split(".").map(api.quoteString).join(",");
-		print('$p.__name__ = [$name]');
+		print('$p.__name__ = "$p"');
 		newline();
 		if( c.superClass != null ) {
 			var psup = getPath(c.superClass.t.get());

+ 3 - 3
std/js/_std/Std.hx

@@ -62,12 +62,12 @@ import js.Boot;
 
 	static function __init__() : Void untyped {
 		__feature__("js.Boot.getClass",String.prototype.__class__ = __feature__("Type.resolveClass",$hxClasses["String"] = String,String));
-		__feature__("js.Boot.isClass",String.__name__ = __feature__("Type.getClassName",["String"],true));
+		__feature__("js.Boot.isClass",String.__name__ = __feature__("Type.getClassName","String",true));
 		__feature__("Type.resolveClass",$hxClasses["Array"] = Array);
-		__feature__("js.Boot.isClass",Array.__name__ = __feature__("Type.getClassName",["Array"],true));
+		__feature__("js.Boot.isClass",Array.__name__ = __feature__("Type.getClassName","Array",true));
 		__feature__("Date.*", {
 			__feature__("js.Boot.getClass",__js__('Date').prototype.__class__ = __feature__("Type.resolveClass",$hxClasses["Date"] = __js__('Date'),__js__('Date')));
-			__feature__("js.Boot.isClass",__js__('Date').__name__ = ["Date"]);
+			__feature__("js.Boot.isClass",__js__('Date').__name__ = "Date");
 		});
 		__feature__("Int.*",__js__('var Int = { };'));
 		__feature__("Dynamic.*",__js__('var Dynamic = { };'));

+ 2 - 5
std/js/_std/Type.hx

@@ -53,11 +53,8 @@ enum ValueType {
 	}
 
 
-	public static function getClassName( c : Class<Dynamic> ) : String {
-		var a : Array<String> = untyped c.__name__;
-		if (a == null)
-			return null;
-		return a.join(".");
+	public static inline function getClassName( c : Class<Dynamic> ) : String {
+		return untyped __define_feature__("Type.getClassName", c.__name__);
 	}
 
 	public static function getEnumName( e : Enum<Dynamic> ) : String {