From 91048957f0681dba853f5720d3618aa1c5d0255e Mon Sep 17 00:00:00 2001
From: Hans Bolinder
Date: Tue, 29 Nov 2016 09:37:21 +0100
Subject: stdilb: Check for bad type constraints in function types
The parser recognizes the 'is_subtype(V, T)' syntax for constraints,
and of course the new 'V :: T' syntax, but other variants result in an
error message. Up to now, the parser and linter have let badly formed
constraints through, and relied upon Dialyzer to emit warnings.
is_subtype/2 cannot easily be taken out from the parser. Not only
would we need find a way to emit a (linter) warning, but there also
needs to be an option for suppressing the linter warning as
compilation with +warnings_as_errors has to work. (Notice that the
abstract format representation for 'V :: T' is the same as for
'is_subtype(V, T)'.)
This correction was triggered by an email from Robert, and Kostis
created pull request 1214 to provide a fix. However, Kostis' fix
disallowed is_subtype() altogether, which breaks backward
compatibility.
As of Erlang/OTP 19.0 (ticket OTP-11879), the 'is_subtype(V, T)' is no
longer documented.
---
erts/doc/src/absform.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
(limited to 'erts/doc')
diff --git a/erts/doc/src/absform.xml b/erts/doc/src/absform.xml
index ab00d47425..fe8e3b30e7 100644
--- a/erts/doc/src/absform.xml
+++ b/erts/doc/src/absform.xml
@@ -886,7 +886,7 @@
Rep(Fc) = [Rep(C_1), ..., Rep(C_k)].
- - If C is a constraint is_subtype(V, T) or V :: T,
+
- If C is a constraint V :: T,
where V is a type variable
and T is a type, then Rep(C) =
{type,LINE,constraint,[{atom,LINE,is_subtype},[Rep(V),Rep(T)]]}.
--
cgit v1.2.3