Prechádzať zdrojové kódy

copy :overload metadata to child classes

Simon Krajewski 13 rokov pred
rodič
commit
3782c45d25
1 zmenil súbory, kde vykonal 14 pridanie a 0 odobranie
  1. 14 0
      typeload.ml

+ 14 - 0
typeload.ml

@@ -351,6 +351,13 @@ let valid_redefinition ctx f1 t1 f2 t2 =
 		(* in case args differs, or if an interface var *)
 		valid t1 t2
 
+let copy_meta meta_src meta_target sl =
+	let meta = ref meta_target in
+	List.iter (fun (m,e,p) ->
+		if List.mem m sl then meta := (m,e,p) :: !meta
+	) meta_src;
+	!meta
+
 let check_overriding ctx c p () =
 	match c.cl_super with
 	| None ->
@@ -938,6 +945,13 @@ let init_class ctx c p herits fields =
 			) in
 			f, false, cf, delay
 		| FFun fd ->
+			(match c.cl_super with
+				| None -> ()
+				| Some (c,_) ->
+					try
+						let sf = PMap.find name c.cl_fields in
+						f.cff_meta <- copy_meta sf.cf_meta f.cff_meta [":overload"];
+					with Not_found -> ());
 			let params = ref [] in
 			params := List.map (fun (n,flags) ->
 				(match flags with