소스 검색

allowed array literals to be dynamic.

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

+ 10 - 1
typer.ml

@@ -664,11 +664,20 @@ and type_expr ctx ?(need_val=true) (e,p) =
 		mk (TObjectDecl fields) (TAnon types) p
 	| EArrayDecl el ->
 		let t , pt = t_array ctx in
+		let dyn = ref ctx.untyped in
 		let el = List.map (fun e ->
 			let e = type_expr ctx e in
-			unify ctx e.etype pt e.epos;
+			if not (!dyn) then (try
+				unify ctx e.etype pt e.epos;
+			with 
+				Error (Cannot_unify _,_) -> dyn := true);
 			e
 		) el in
+		let t = if !dyn then begin
+			let t , pt = t_array ctx in
+			unify ctx t_dynamic pt p;
+			t
+		end else t in
 		mk (TArrayDecl el) t p
 	| EVars vl ->
 		let vl = List.map (fun (v,t,e) ->