ソースを参照

[all] Re-enabled @:native on functions. Closes #1492

Cauê Waneck 11 年 前
コミット
dacb8631d3
3 ファイル変更38 行追加5 行削除
  1. 15 3
      filters.ml
  2. 21 0
      tests/unit/issues/Issue1492.hx
  3. 2 2
      type.ml

+ 15 - 3
filters.ml

@@ -910,17 +910,29 @@ let check_private_path ctx t = match t with
 
 (* Rewrites class or enum paths if @:native metadata is set *)
 let apply_native_paths ctx t =
-	let get_real_path meta path =
+	let get_native_name meta =
 		let (_,e,mp) = Meta.get Meta.Native meta in
 		match e with
 		| [Ast.EConst (Ast.String name),p] ->
-			(Meta.RealPath,[Ast.EConst (Ast.String (s_type_path path)),p],mp),parse_path name
+			name,p
 		| _ ->
 			error "String expected" mp
 	in
+	let get_real_path meta path =
+		let name,p = get_native_name meta in
+		(Meta.RealPath,[Ast.EConst (Ast.String (s_type_path path)), p], p), parse_path name
+	in
 	try
 		(match t with
 		| TClassDecl c ->
+			let field cf = try
+				let name,_ = get_native_name cf.cf_meta in
+				cf.cf_name <- name;
+			with Not_found ->
+				()
+			in
+			List.iter field c.cl_ordered_fields;
+			List.iter field c.cl_ordered_statics;
 			let meta,path = get_real_path c.cl_meta c.cl_path in
 			c.cl_meta <- meta :: c.cl_meta;
 			c.cl_path <- path;
@@ -1174,4 +1186,4 @@ let run com tctx main =
 		add_meta_field;
 		check_void_field;
 	] in
-	List.iter (fun t -> List.iter (fun f -> f tctx t) type_filters) com.types
+	List.iter (fun t -> List.iter (fun f -> f tctx t) type_filters) com.types

+ 21 - 0
tests/unit/issues/Issue1492.hx

@@ -0,0 +1,21 @@
+package unit.issues;
+
+class Issue1492 extends Test {
+function test() {
+eq("foo", myFunc());
+var d:Dynamic = this;
+eq("foo", d.myNativeFunc());
+
+eq("bar", Issue1492.myStaticVar);
+var d:Dynamic = Issue1492;
+eq("bar", d.myNativeStaticVar);
+}
+
+@:native("myNativeFunc")
+function myFunc() {
+return "foo";
+}
+
+@:native("myNativeStaticVar")
+static var myStaticVar = "bar";
+}

+ 2 - 2
type.ml

@@ -145,7 +145,7 @@ and texpr = {
 }
 
 and tclass_field = {
-	cf_name : string;
+	mutable cf_name : string;
 	mutable cf_type : t;
 	mutable cf_public : bool;
 	cf_pos : pos;
@@ -1872,4 +1872,4 @@ let find_array_access a pl t1 t2 is_set =
 				end
 			| _ -> loop cfl
 	in
-	loop a.a_array
+	loop a.a_array