Browse Source

make sure we always reset `in_call_args`

Simon Krajewski 9 years ago
parent
commit
a6c92dd3f6
1 changed files with 2 additions and 3 deletions
  1. 2 3
      typer.ml

+ 2 - 3
typer.ml

@@ -671,7 +671,6 @@ let rec unify_call_args' ctx el args r callp inline force_inline =
 	let in_call_args = ctx.in_call_args in
 	ctx.in_call_args <- true;
 	let call_error err p =
-		ctx.in_call_args <- in_call_args;
 		raise (Error (Call_error err,p))
 	in
 	let arg_error ul name opt p =
@@ -698,7 +697,7 @@ let rec unify_call_args' ctx el args r callp inline force_inline =
 	(* let force_inline, is_extern = match cf with Some(TInst(c,_),f) -> is_forced_inline (Some c) f, c.cl_extern | _ -> false, false in *)
 	let type_against t e =
 		let e = type_expr ctx e (WithType t) in
-		(try Codegen.AbstractCast.cast_or_unify_raise ctx t e e.epos with Error (Unify l,p) -> ctx.in_call_args <- in_call_args; raise (WithTypeError (l,p)))
+		(try Codegen.AbstractCast.cast_or_unify_raise ctx t e e.epos with Error (Unify l,p) -> raise (WithTypeError (l,p)))
 	in
 	let rec loop el args = match el,args with
 		| [],[] ->
@@ -739,7 +738,7 @@ let rec unify_call_args' ctx el args r callp inline force_inline =
 						arg_error ul name false p
 			end
 	in
-	let el = loop el args in
+	let el = try loop el args with exc -> ctx.in_call_args <- in_call_args; raise exc; in
 	ctx.in_call_args <- in_call_args;
 	el,TFun(args,r)