소스 검색

added __resolve compile-time support when class implement Dynamic

Nicolas Cannasse 19 년 전
부모
커밋
c283cff2e5
1개의 변경된 파일5개의 추가작업 그리고 1개의 파일을 삭제
  1. 5 1
      typer.ml

+ 5 - 1
typer.ml

@@ -714,7 +714,11 @@ let type_field ctx e i p get =
 		let rec loop_dyn c params =
 			match c.cl_dynamic with
 			| Some t ->
-				AccExpr (mk (TField (e,i)) (apply_params c.cl_types params t) p)
+				let t = apply_params c.cl_types params t in
+				if PMap.mem "__resolve" c.cl_fields then
+					AccExpr (mk (TCall (mk (TField (e,"__resolve")) (mk_mono()) p,[type_constant ctx (String i) p])) t p)
+				else
+					AccExpr (mk (TField (e,i)) t p)
 			| None ->
 				match c.cl_super with
 				| None -> raise Not_found