Переглянути джерело

store `@:realPath` of class fields and use it for xml generation (closes #3270)

Simon Krajewski 11 роки тому
батько
коміт
2fcd2ca3af
2 змінених файлів з 16 додано та 2 видалено
  1. 6 1
      filters.ml
  2. 10 1
      genxml.ml

+ 6 - 1
filters.ml

@@ -841,6 +841,10 @@ let apply_native_paths ctx t =
 		| _ ->
 			error "String expected" mp
 	in
+	let get_real_name meta name =
+		let name',p = get_native_name meta in
+		(Meta.RealPath,[Ast.EConst (Ast.String (name)), p], p), name'
+	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
@@ -850,8 +854,9 @@ let apply_native_paths ctx t =
 		| TClassDecl c ->
 			let did_change = ref false in
 			let field cf = try
-				let name,_ = get_native_name cf.cf_meta in
+				let meta,name = get_real_name cf.cf_meta cf.cf_name in
 				cf.cf_name <- name;
+				cf.cf_meta <- meta :: cf.cf_meta;
 				List.iter (fun cf -> cf.cf_name <- name) cf.cf_overloads;
 				did_change := true
 			with Not_found ->

+ 10 - 1
genxml.ml

@@ -157,7 +157,16 @@ and gen_field att f =
 		| Some ({eexpr = TFunction tf}) -> Some tf
 		| _ -> None
 	in
-	node f.cf_name (if f.cf_public then ("public","1") :: att else att) (gen_type ~tfunc:tfunc f.cf_type :: gen_meta f.cf_meta @ gen_doc_opt f.cf_doc @ overloads)
+	let field_name cf =
+		try
+			begin match Meta.get Meta.RealPath cf.cf_meta with
+				| _,[EConst (String (s)),_],_ -> s
+				| _ -> raise Not_found
+			end;
+		with Not_found ->
+			cf.cf_name
+	in
+	node (field_name f) (if f.cf_public then ("public","1") :: att else att) (gen_type ~tfunc:tfunc f.cf_type :: gen_meta f.cf_meta @ gen_doc_opt f.cf_doc @ overloads)
 
 let gen_constr e =
 	let doc = gen_doc_opt e.ef_doc in