From 3ef5ae1b06a49654284dce3e0a0f851c98d81d1b Mon Sep 17 00:00:00 2001 From: Joachim Breitner Date: Wed, 5 Dec 2018 17:19:45 +0100 Subject: [PATCH 1/2] =?UTF-8?q?Do=20not=20consider=20an=20`actor=20?= =?UTF-8?q?=E2=80=A6`=20as=20an=20async-context?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit this fixes #106. But before this can be merged, the problem of the multiply reported error messages needs to be fixed (or the `local_error` turned into an `error`, but that would be chickening out.) --- src/typing.ml | 6 ++++-- test/fail/ok/await-in-actor.tc.ok | 4 ++++ test/run/ok/actor.tc.ok | 28 ++++++++++++++++++++++++++++ 3 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 test/fail/ok/await-in-actor.tc.ok create mode 100644 test/run/ok/actor.tc.ok diff --git a/src/typing.ml b/src/typing.ml index 78f9b572bcf..a1deaa1d0f9 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 @@ -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..f675f65a2af --- /dev/null +++ b/test/fail/ok/await-in-actor.tc.ok @@ -0,0 +1,4 @@ +await-in-actor.as:3.17-3.34: type error, misplaced await +await-in-actor.as:3.17-3.34: type error, misplaced await +await-in-actor.as:3.17-3.34: type error, misplaced await +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..ca64bf116fe --- /dev/null +++ b/test/run/ok/actor.tc.ok @@ -0,0 +1,28 @@ +actor.as:14.31-14.49: type error, misplaced await +actor.as:25.31-25.49: type error, misplaced await +actor.as:26.31-26.49: type error, misplaced await +actor.as:37.31-37.49: type error, misplaced await +actor.as:50.31-50.49: type error, misplaced await +actor.as:68.21-68.67: type error, misplaced await +actor.as:69.21-69.67: type error, misplaced await +actor.as:14.31-14.49: type error, misplaced await +actor.as:14.31-14.49: type error, misplaced await +actor.as:14.31-14.49: type error, misplaced await +actor.as:25.31-25.49: type error, misplaced await +actor.as:26.31-26.49: type error, misplaced await +actor.as:25.31-25.49: type error, misplaced await +actor.as:26.31-26.49: type error, misplaced await +actor.as:25.31-25.49: type error, misplaced await +actor.as:26.31-26.49: type error, misplaced await +actor.as:37.31-37.49: type error, misplaced await +actor.as:37.31-37.49: type error, misplaced await +actor.as:37.31-37.49: type error, misplaced await +actor.as:50.31-50.49: type error, misplaced await +actor.as:50.31-50.49: type error, misplaced await +actor.as:50.31-50.49: type error, misplaced await +actor.as:68.21-68.67: type error, misplaced await +actor.as:69.21-69.67: type error, misplaced await +actor.as:68.21-68.67: type error, misplaced await +actor.as:69.21-69.67: type error, misplaced await +actor.as:68.21-68.67: type error, misplaced await +actor.as:69.21-69.67: type error, misplaced await From fdfd550f2d21180b144bc69fa7df6f211e20eaa3 Mon Sep 17 00:00:00 2001 From: Joachim Breitner Date: Thu, 6 Dec 2018 11:43:03 +0100 Subject: [PATCH 2/2] =?UTF-8?q?Make=20=E2=80=9Cmisplaced=20await=E2=80=9D?= =?UTF-8?q?=20a=20non-recoverable=20errors?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit so that I can merge #107 with good conscience. I still with this were not necessary. --- src/typing.ml | 2 +- test/fail/ok/await-in-actor.tc.ok | 3 --- test/run/ok/actor.tc.ok | 27 --------------------------- 3 files changed, 1 insertion(+), 31 deletions(-) diff --git a/src/typing.ml b/src/typing.ml index a1deaa1d0f9..4de6c4bd2eb 100644 --- a/src/typing.ml +++ b/src/typing.ml @@ -562,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 diff --git a/test/fail/ok/await-in-actor.tc.ok b/test/fail/ok/await-in-actor.tc.ok index f675f65a2af..fe8cedf4c75 100644 --- a/test/fail/ok/await-in-actor.tc.ok +++ b/test/fail/ok/await-in-actor.tc.ok @@ -1,4 +1 @@ await-in-actor.as:3.17-3.34: type error, misplaced await -await-in-actor.as:3.17-3.34: type error, misplaced await -await-in-actor.as:3.17-3.34: type error, misplaced await -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 index ca64bf116fe..c23a254bf29 100644 --- a/test/run/ok/actor.tc.ok +++ b/test/run/ok/actor.tc.ok @@ -1,28 +1 @@ actor.as:14.31-14.49: type error, misplaced await -actor.as:25.31-25.49: type error, misplaced await -actor.as:26.31-26.49: type error, misplaced await -actor.as:37.31-37.49: type error, misplaced await -actor.as:50.31-50.49: type error, misplaced await -actor.as:68.21-68.67: type error, misplaced await -actor.as:69.21-69.67: type error, misplaced await -actor.as:14.31-14.49: type error, misplaced await -actor.as:14.31-14.49: type error, misplaced await -actor.as:14.31-14.49: type error, misplaced await -actor.as:25.31-25.49: type error, misplaced await -actor.as:26.31-26.49: type error, misplaced await -actor.as:25.31-25.49: type error, misplaced await -actor.as:26.31-26.49: type error, misplaced await -actor.as:25.31-25.49: type error, misplaced await -actor.as:26.31-26.49: type error, misplaced await -actor.as:37.31-37.49: type error, misplaced await -actor.as:37.31-37.49: type error, misplaced await -actor.as:37.31-37.49: type error, misplaced await -actor.as:50.31-50.49: type error, misplaced await -actor.as:50.31-50.49: type error, misplaced await -actor.as:50.31-50.49: type error, misplaced await -actor.as:68.21-68.67: type error, misplaced await -actor.as:69.21-69.67: type error, misplaced await -actor.as:68.21-68.67: type error, misplaced await -actor.as:69.21-69.67: type error, misplaced await -actor.as:68.21-68.67: type error, misplaced await -actor.as:69.21-69.67: type error, misplaced await