diff --git a/src/typing.ml b/src/typing.ml index 78f9b572bcf..4de6c4bd2eb 100644 --- a/src/typing.ml +++ b/src/typing.ml @@ -401,7 +401,8 @@ and infer_exp' env exp : T.typ = (T.string_of_typ_expand env.cons t1) ) | ObjE (sort, id, fields) -> - infer_obj env sort.it id fields + let env' = if sort.it = T.Actor then { env with async = false } else env in + infer_obj env' sort.it id fields | DotE (exp1, {it = Name n;_}) -> let t1 = infer_exp_promote env exp1 in (try @@ -561,7 +562,7 @@ and infer_exp' env exp : T.typ = T.Async t | AwaitE exp1 -> if not env.async then - local_error env exp.at "misplaced await"; + error env exp.at "misplaced await"; let t1 = infer_exp_promote env exp1 in (try T.as_async_sub env.cons t1 @@ -638,7 +639,8 @@ and check_exp' env t exp = | OptE exp1, _ when T.is_opt t -> check_exp env (T.as_opt t) exp1 | ObjE (sort, id, fields), T.Obj (s, tfs) when s = sort.it -> - ignore (check_obj env s tfs id fields exp.at) + let env' = if sort.it = T.Actor then { env with async = false } else env in + ignore (check_obj env' s tfs id fields exp.at) | ArrayE exps, T.Array t' -> List.iter (check_exp env (T.as_immut t')) exps | AsyncE exp1, T.Async t' -> diff --git a/test/fail/ok/await-in-actor.tc.ok b/test/fail/ok/await-in-actor.tc.ok new file mode 100644 index 00000000000..fe8cedf4c75 --- /dev/null +++ b/test/fail/ok/await-in-actor.tc.ok @@ -0,0 +1 @@ +await-in-actor.as:3.17-3.34: type error, misplaced await diff --git a/test/run/ok/actor.tc.ok b/test/run/ok/actor.tc.ok new file mode 100644 index 00000000000..c23a254bf29 --- /dev/null +++ b/test/run/ok/actor.tc.ok @@ -0,0 +1 @@ +actor.as:14.31-14.49: type error, misplaced await