diff options
| author | Jeremy Yallop <yallop@gmail.com> | 2017-01-09 07:39:52 +0000 |
|---|---|---|
| committer | Jeremy Yallop <yallop@gmail.com> | 2017-09-25 14:57:23 +0100 |
| commit | e4158aba6871e8319e04c326fe2e09bcd3dcf33b (patch) | |
| tree | 36a4f842f3673cb8caaef5c1ea174a7357df865c | |
| parent | 570937a3cd9735edd19708309467b46d796d9be0 (diff) | |
| download | ocaml-e4158aba6871e8319e04c326fe2e09bcd3dcf33b.tar.gz | |
let-rec check: module constraint is inspection.
| -rw-r--r-- | testsuite/tests/letrec-disallowed/module_constraints.ml | 6 | ||||
| -rw-r--r-- | testsuite/tests/letrec-disallowed/module_constraints.ml.reference | 9 | ||||
| -rw-r--r-- | typing/typecore.ml | 2 |
3 files changed, 16 insertions, 1 deletions
diff --git a/testsuite/tests/letrec-disallowed/module_constraints.ml b/testsuite/tests/letrec-disallowed/module_constraints.ml new file mode 100644 index 0000000000..faf81f234d --- /dev/null +++ b/testsuite/tests/letrec-disallowed/module_constraints.ml @@ -0,0 +1,6 @@ +module type S = sig val y : float end;; +module type T = sig val x : float val y : float end;; +type t = T : (module S) -> t;; + +let rec x = let module M = (val m) in T (module M) +and (m : (module T)) = (module (struct let x = 10.0 and y = 20.0 end));; diff --git a/testsuite/tests/letrec-disallowed/module_constraints.ml.reference b/testsuite/tests/letrec-disallowed/module_constraints.ml.reference new file mode 100644 index 0000000000..b1aec6fca0 --- /dev/null +++ b/testsuite/tests/letrec-disallowed/module_constraints.ml.reference @@ -0,0 +1,9 @@ + +# module type S = sig val y : float end +# module type T = sig val x : float val y : float end +# type t = T : (module S) -> t +# Characters 13-51: + let rec x = let module M = (val m) in T (module M) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Error: This kind of expression is not allowed as right-hand side of `let rec' +# diff --git a/typing/typecore.ml b/typing/typecore.ml index 6195136951..6fd70d1696 100644 --- a/typing/typecore.ml +++ b/typing/typecore.ml @@ -2117,7 +2117,7 @@ struct (inspect (modexp env f)) (inspect (modexp env p))) | Tmod_constraint (m, _, _, _) -> - modexp env m + Use.inspect (modexp env m) | Tmod_unpack (e, _) -> expression env e and path : Env.env -> Path.t -> Use.t = |
