File 3561-features-Change-format-and-argument-order-for-option.patch of Package erlang
From 3cd663ee027a879240795f049ac96f5e4c4de11f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Cons=20T=20=C3=85hs?= <cons@erlang.org>
Date: Wed, 6 Apr 2022 12:05:11 +0200
Subject: [PATCH] [features] Change format and argument order for options and
directives
* Use {feature, <feature>, enable|disable} in options
and -compile(..)
* Use -feature(<feature>, enable|disable) in module
---
erts/test/lux/bad_feature_erlc.lux | 22 ++++++-------
erts/test/lux/feature_erlc.lux | 32 +++++++++----------
erts/test/lux/feature_erlcold.lux | 26 +++++++--------
erts/test/lux/feature_ifnot.lux | 14 ++++----
erts/test/lux/input/enable.hrl | 2 +-
erts/test/lux/input/f_bad_ifnot.erl | 2 +-
erts/test/lux/input/f_directives.erl | 4 +--
erts/test/lux/input/f_directives_2.erl | 6 ++--
erts/test/lux/input/f_directives_3.erl | 4 +--
erts/test/lux/input/f_disable.erl | 6 ++--
erts/test/lux/input/f_ifnot.erl | 2 +-
erts/test/lux/input/f_include_1.erl | 6 ++--
erts/test/lux/input/f_include_2.erl | 6 ++--
erts/test/lux/input/f_include_3.erl | 6 ++--
.../test/lux/input/f_incorrect_directives.erl | 4 +--
erts/test/lux/input/f_incorrect_disable.erl | 6 ++--
.../lux/input/feature_directive_maybe_ifn.erl | 4 +--
erts/test/lux/input/maybe.hrl | 2 +-
lib/compiler/src/compile.erl | 2 +-
lib/compiler/test/compile_SUITE.erl | 4 +--
lib/compiler/test/maybe_SUITE.erl | 2 +-
lib/compiler/test/test_lib.erl | 5 +--
lib/compiler/test/warnings_SUITE.erl | 6 ++--
lib/stdlib/src/epp.erl | 4 +--
lib/stdlib/src/erl_compile.erl | 4 +--
lib/stdlib/src/erl_features.erl | 20 ++++++------
lib/stdlib/test/epp_SUITE.erl | 8 ++---
lib/stdlib/test/erl_eval_SUITE.erl | 2 +-
lib/stdlib/test/erl_lint_SUITE.erl | 2 +-
lib/syntax_tools/test/syntax_tools_SUITE.erl | 4 +--
lib/tools/src/cover.erl | 5 +--
lib/tools/test/cover_SUITE.erl | 2 +-
32 files changed, 113 insertions(+), 111 deletions(-)
diff --git a/erts/test/lux/bad_feature_erlc.lux b/erts/test/lux/bad_feature_erlc.lux
index 84afadc8ff..903696d2ce 100644
--- a/erts/test/lux/bad_feature_erlc.lux
+++ b/erts/test/lux/bad_feature_erlc.lux
@@ -40,17 +40,17 @@
?SH-PROMPT:
[invoke ok]
- [invoke compile ignorant.erl "+'{enable_feature, ifn}'"]
+ [invoke compile ignorant.erl "+'{feature, ifn, enable}'"]
?the feature 'ifn' does not exist
?SH-PROMPT:
[invoke notok]
- [invoke compile ignorant.erl "+'{enable_feature, maybe}'"]
+ [invoke compile ignorant.erl "+'{feature, maybe, enable}'"]
?the feature 'maybe' does not exist
?SH-PROMPT:
[invoke notok]
- [invoke compile ignorant.erl "+'{enable_feature, ifn}' +'{enable_feature, maybe}'"]
+ [invoke compile ignorant.erl "+'{feature, ifn, enable}' +'{feature, maybe, enable}'"]
# FIXME these are in the wrong order
??the features 'maybe' and 'ifn' do not exist
?SH-PROMPT:
@@ -64,7 +64,7 @@
?the feature 'ifn' does not exist
[invoke notok]
- [invoke compile f_ifn.erl "'+{enable_feature, maybe}'"]
+ [invoke compile f_ifn.erl "'+{feature, maybe, enable}'"]
?the feature 'maybe' does not exist
?SH-PROMPT:
[invoke notok]
@@ -74,7 +74,7 @@
?SH-PROMPT:
[invoke notok]
- [invoke compile f_ifn.erl "'+{enable_feature, maybe}' '+{enable_feature, ifn}'"]
+ [invoke compile f_ifn.erl "'+{feature, maybe, enable}' '+{feature, ifn, enable}'"]
# FIXME Fix order!
??the features 'ifn' and 'maybe' do not exist
?SH-PROMPT:
@@ -90,7 +90,7 @@
?SH-PROMPT:
[invoke ok]
- [invoke compile f_maybe.erl "'+{enable_feature, maybe}'"]
+ [invoke compile f_maybe.erl "'+{feature, maybe, enable}'"]
?the feature 'maybe' does not exist
[invoke notok]
@@ -98,7 +98,7 @@
?the feature 'maybe' does not exist
[invoke notok]
- [invoke compile f_maybe.erl "'+{enable_feature, ifn}'"]
+ [invoke compile f_maybe.erl "'+{feature, ifn, enable}'"]
?the feature 'ifn' does not exist
?SH-PROMPT:
[invoke notok]
@@ -108,7 +108,7 @@
?SH-PROMPT:
[invoke notok]
- [invoke compile f_maybe.erl "'+{enable_feature, maybe}' '+{enable_feature, ifn}'"]
+ [invoke compile f_maybe.erl "'+{feature, maybe, enable}' '+{feature, ifn, enable}'"]
# FIXME fix order
??the features 'ifn' and 'maybe' do not exist
?SH-PROMPT:
@@ -149,17 +149,17 @@
???{ok,ignorant}
?$ERLPROMPT
- [invoke erl-compile ignorant.erl [{enable_feature,ifn}]]
+ [invoke erl-compile ignorant.erl [{feature,ifn,enable}]]
?the feature 'ifn' does not exist
?error
?$ERLPROMPT
- [invoke erl-compile ignorant.erl [{enable_feature,ifn},{enable_feature,while}]]
+ [invoke erl-compile ignorant.erl [{feature,ifn,enable},{feature,while,enable}]]
??the features 'ifn' and 'while' do not exist
?error
?$ERLPROMPT
- [invoke erl-compile ignorant.erl [{enable_feature,unless},{enable_feature,ifn},{enable_feature,while}]]
+ [invoke erl-compile ignorant.erl [{feature,unless,enable},{feature,ifn,enable},{feature,while,enable}]]
??the features 'unless', 'ifn' and 'while' do not exist
?error
?$ERLPROMPT
diff --git a/erts/test/lux/feature_erlc.lux b/erts/test/lux/feature_erlc.lux
index 83647db856..3a033d0aad 100644
--- a/erts/test/lux/feature_erlc.lux
+++ b/erts/test/lux/feature_erlc.lux
@@ -40,20 +40,20 @@
?SH-PROMPT:
[invoke ok]
- [invoke compile ignorant.erl "+'{enable_feature, ifn_expr}'"]
+ [invoke compile ignorant.erl "+'{feature, ifn_expr, enable}'"]
?syntax error before:
?syntax error before: ifn
?SH-PROMPT:
[invoke notok]
- [invoke compile ignorant.erl "+'{enable_feature, while_expr}'"]
+ [invoke compile ignorant.erl "+'{feature, while_expr, enable}'"]
?syntax error before: while
?syntax error before: while
?syntax error before: until
?SH-PROMPT:
[invoke notok]
- [invoke compile ignorant.erl "+'{enable_feature, ifn_expr}' +'{enable_feature, while_expr}'"]
+ [invoke compile ignorant.erl "+'{feature, ifn_expr, enable}' +'{feature, while_expr, enable}'"]
?syntax error before:
?syntax error before: while
?syntax error before: until
@@ -65,11 +65,11 @@
?SH-PROMPT:
[invoke ok]
- [invoke compile f_ifn.erl "'+{enable_feature, ifn_expr}'"]
+ [invoke compile f_ifn.erl "'+{feature, ifn_expr, enable}'"]
?SH-PROMPT:
[invoke ok]
- [invoke compile f_ifn.erl "'+{enable_feature, while_expr}'"]
+ [invoke compile f_ifn.erl "'+{feature, while_expr, enable}'"]
[invoke syntax-error while]
[invoke syntax-error until]
?SH-PROMPT:
@@ -81,7 +81,7 @@
?SH-PROMPT:
[invoke notok]
- [invoke compile f_ifn.erl "'+{enable_feature, while_expr}' '+{enable_feature, ifn_expr}'"]
+ [invoke compile f_ifn.erl "'+{feature, while_expr, enable}' '+{feature, ifn_expr, enable}'"]
[invoke syntax-error while]
[invoke syntax-error until]
?SH-PROMPT:
@@ -97,7 +97,7 @@
?SH-PROMPT:
[invoke ok]
- [invoke compile f_maybe.erl "'+{enable_feature, while_expr}'"]
+ [invoke compile f_maybe.erl "'+{feature, while_expr, enable}'"]
?SH-PROMPT:
[invoke ok]
@@ -105,7 +105,7 @@
?SH-PROMPT:
[invoke ok]
- [invoke compile f_maybe.erl "'+{enable_feature, ifn_expr}'"]
+ [invoke compile f_maybe.erl "'+{feature, ifn_expr, enable}'"]
?syntax error before:
?SH-PROMPT:
[invoke notok]
@@ -115,7 +115,7 @@
?SH-PROMPT:
[invoke notok]
- [invoke compile f_maybe.erl "'+{enable_feature, while_expr}' '+{enable_feature, ifn_expr}'"]
+ [invoke compile f_maybe.erl "'+{feature, while_expr, enable}' '+{feature, ifn_expr, enable}'"]
?syntax error before:
?SH-PROMPT:
[invoke notok]
@@ -129,7 +129,7 @@
?SH-PROMPT:
[invoke ok]
- [invoke compile f_maybe_ifn.erl "'+{enable_feature, while_expr}'"]
+ [invoke compile f_maybe_ifn.erl "'+{feature, while_expr, enable}'"]
?SH-PROMPT:
[invoke ok]
@@ -137,7 +137,7 @@
?SH-PROMPT:
[invoke ok]
- [invoke compile f_maybe_ifn.erl "'+{enable_feature, ifn_expr}'"]
+ [invoke compile f_maybe_ifn.erl "'+{feature, ifn_expr, enable}'"]
?SH-PROMPT:
[invoke ok]
@@ -145,7 +145,7 @@
?SH-PROMPT:
[invoke ok]
- [invoke compile f_maybe_ifn.erl "'+{enable_feature, while_expr}' '+{enable_feature, ifn_expr}'"]
+ [invoke compile f_maybe_ifn.erl "'+{feature, while_expr, enable}' '+{feature, ifn_expr, enable}'"]
?SH-PROMPT:
[invoke ok]
@@ -158,7 +158,7 @@
?SH-PROMPT:
[invoke ok]
- # This file has instances of -compile({enable_feature, ..}) inside
+ # This file has instances of -compile({feature, .., enable}) inside
[invoke compile f_directives.erl ""]
?SH-PROMPT:
[invoke ok]
@@ -172,13 +172,13 @@
???{ok,ignorant}
?$ERLPROMPT
- [invoke erl-compile ignorant.erl [{enable_feature,ifn_expr}]]
+ [invoke erl-compile ignorant.erl [{feature,ifn_expr,enable}]]
?syntax error before:
?syntax error before:
?error
?$ERLPROMPT
- [invoke erl-compile ignorant.erl [{enable_feature,ifn_expr},{enable_feature,while_expr}]]
+ [invoke erl-compile ignorant.erl [{feature,ifn_expr,enable},{feature,while_expr,enable}]]
?syntax error before:
?syntax error before: while
?syntax error before: until
@@ -282,7 +282,7 @@
[invoke start-erl ""]
- [invoke erl-compile f_macros.erl [{enable_feature,ifn_expr}]]
+ [invoke erl-compile f_macros.erl [{feature,ifn_expr,enable}]]
???{ok,f_macros}
?$ERLPROMPT
diff --git a/erts/test/lux/feature_erlcold.lux b/erts/test/lux/feature_erlcold.lux
index 82ee437b97..fa62cc85c3 100644
--- a/erts/test/lux/feature_erlcold.lux
+++ b/erts/test/lux/feature_erlcold.lux
@@ -20,7 +20,7 @@
[invoke ok]
# Different error message when ifn is not in parser
- [invoke compile feature_ignorant.erl "+'{enable_feature, ifn_expr}'"]
+ [invoke compile feature_ignorant.erl "+'{feature, ifn_expr, enable}'"]
?syntax error before:
?syntax error before: ifn
?SH-PROMPT:
@@ -33,7 +33,7 @@
?SH-PROMPT:
[invoke notok]
- [invoke compile feature_ignorant.erl "+'{enable_feature, while_expr}'"]
+ [invoke compile feature_ignorant.erl "+'{feature, while_expr, enable}'"]
?syntax error before: while
?syntax error before: while
?syntax error before: until
@@ -48,7 +48,7 @@
[invoke notok]
# Different error message when ifn not in parser
- [invoke compile feature_ignorant.erl "+'{enable_feature, ifn_expr}' +'{enable_feature, while_expr}'"]
+ [invoke compile feature_ignorant.erl "+'{feature, ifn_expr, enable}' +'{feature, while_expr, enable}'"]
?syntax error before:
?syntax error before: while
?syntax error before: until
@@ -69,7 +69,7 @@
?SH-PROMPT:
[invoke ok]
- [invoke compile feature_ifn.erl "'+{enable_feature, ifn_expr}'"]
+ [invoke compile feature_ifn.erl "'+{feature, ifn_expr, enable}'"]
?SH-PROMPT:
[invoke ok]
@@ -77,7 +77,7 @@
?SH-PROMPT:
[invoke ok]
- [invoke compile feature_ifn.erl "'+{enable_feature, while_expr}'"]
+ [invoke compile feature_ifn.erl "'+{feature, while_expr, enable}'"]
[invoke syntax-error while]
[invoke syntax-error until]
?SH-PROMPT:
@@ -89,7 +89,7 @@
?SH-PROMPT:
[invoke notok]
- [invoke compile feature_ifn.erl "'+{enable_feature, while_expr}' '+{enable_feature, ifn_expr}'"]
+ [invoke compile feature_ifn.erl "'+{feature, while_expr, enable}' '+{feature, ifn_expr, enable}'"]
[invoke syntax-error while]
[invoke syntax-error until]
?SH-PROMPT:
@@ -105,18 +105,18 @@
?SH-PROMPT:
[invoke ok]
- [invoke compile feature_maybe.erl "'+{enable_feature, while_expr}'"]
+ [invoke compile feature_maybe.erl "'+{feature, while_expr, enable}'"]
?SH-PROMPT:
[invoke ok]
# Different error message when ifn not in parser
- [invoke compile feature_maybe.erl "'+{enable_feature, ifn_expr}'"]
+ [invoke compile feature_maybe.erl "'+{feature, ifn_expr, enable}'"]
[invoke syntax-error ifn]
?SH-PROMPT:
[invoke notok]
# Different error message when ifn not in parser
- [invoke compile feature_maybe.erl "'+{enable_feature, while_expr}' '+{enable_feature, ifn_expr}'"]
+ [invoke compile feature_maybe.erl "'+{feature, while_expr, enable}' '+{feature, ifn_expr, enable}'"]
[invoke syntax-error ifn]
?SH-PROMPT:
[invoke notok]
@@ -125,15 +125,15 @@
?SH-PROMPT:
[invoke ok]
- [invoke compile feature_maybe_ifn.erl "'+{enable_feature, while_expr}'"]
+ [invoke compile feature_maybe_ifn.erl "'+{feature, while_expr, enable}'"]
?SH-PROMPT:
[invoke ok]
- [invoke compile feature_maybe_ifn.erl "'+{enable_feature, ifn_expr}'"]
+ [invoke compile feature_maybe_ifn.erl "'+{feature, ifn_expr, enable}'"]
?SH-PROMPT:
[invoke ok]
- [invoke compile feature_maybe_ifn.erl "'+{enable_feature, while_expr}' '+{enable_feature, ifn_expr}'"]
+ [invoke compile feature_maybe_ifn.erl "'+{feature, while_expr, enable}' '+{feature, ifn_expr, enable}'"]
?SH-PROMPT:
[invoke ok]
@@ -147,7 +147,7 @@
?$ERLPROMPT
# Different error message when ifn not in parser
- [invoke erl-compile feature_ignorant.erl [{enable_feature,ifn_expr}]]
+ [invoke erl-compile feature_ignorant.erl [{feature,ifn_expr,enable}]]
?syntax error before: ifn
?syntax error before: ifn
?error
diff --git a/erts/test/lux/feature_ifnot.lux b/erts/test/lux/feature_ifnot.lux
index fc3b332816..cfd99e1881 100644
--- a/erts/test/lux/feature_ifnot.lux
+++ b/erts/test/lux/feature_ifnot.lux
@@ -122,7 +122,7 @@
?$ERLPROMPT
# Moved from feature_erlcold.lux as ifn is no longer present in parser
- [invoke compile feature_ignorant.erl "+'{enable_feature, ifn_expr}'"]
+ [invoke compile feature_ignorant.erl "+'{feature, ifn_expr, enable}'"]
?syntax error before: ','
?syntax error before: ifn
?SH-PROMPT:
@@ -134,7 +134,7 @@
?SH-PROMPT:
[invoke notok]
- [invoke compile feature_ignorant.erl "+'{enable_feature, ifn_expr}' +'{enable_feature, maybe_expr}'"]
+ [invoke compile feature_ignorant.erl "+'{feature, ifn_expr, enable}' +'{feature, maybe_expr, enable}'"]
?syntax error before: ','
?syntax error before: maybe
?syntax error before: else
@@ -150,23 +150,23 @@
?SH-PROMPT:
[invoke notok]
- [invoke compile feature_maybe.erl "'+{enable_feature, ifn_expr}'"]
+ [invoke compile feature_maybe.erl "'+{feature, ifn_expr, enable}'"]
[invoke syntax-error ',']
?SH-PROMPT:
[invoke notok]
- [invoke compile feature_maybe.erl "'+{enable_feature, maybe_expr}' '+{enable_feature, ifn_expr}'"]
+ [invoke compile feature_maybe.erl "'+{feature, maybe_expr, enable}' '+{feature, ifn_expr, enable}'"]
[invoke syntax-error ',']
?SH-PROMPT:
[invoke notok]
- # This file has instances of -compile({enable_feature, ..}) inside
+ # This file has instances of -compile({feature, .., enable}) inside
[invoke compile feature_directive_maybe_ifn.erl "-enable-feature ifn_expr"]
?SH-PROMPT:
[invoke ok]
[shell erl]
- [invoke erl-compile feature_ignorant.erl [{enable_feature,ifn_expr}]]
+ [invoke erl-compile feature_ignorant.erl [{feature,ifn_expr,enable}]]
?syntax error before: ','
?syntax error before: ifn
?error
@@ -178,7 +178,7 @@
?SH-PROMPT:
!export ERLC_USE_SERVER=$erlcserver
?SH-PROMPT:
- # This file has instances of -compile({enable_feature, ..}) inside
+ # This file has instances of -compile({feature, .., enable}) inside
[invoke compile feature_directive_maybe_ifn.erl "-enable-feature ifn_expr"]
?SH-PROMPT:
[invoke ok]
diff --git a/erts/test/lux/input/enable.hrl b/erts/test/lux/input/enable.hrl
index d8eb0f1fc7..9835829d08 100644
--- a/erts/test/lux/input/enable.hrl
+++ b/erts/test/lux/input/enable.hrl
@@ -1 +1 @@
--feature(enable, maybe_expr).
+-feature(maybe_expr, enable).
diff --git a/erts/test/lux/input/f_bad_ifnot.erl b/erts/test/lux/input/f_bad_ifnot.erl
index e4c50f4303..f37b972904 100644
--- a/erts/test/lux/input/f_bad_ifnot.erl
+++ b/erts/test/lux/input/f_bad_ifnot.erl
@@ -20,7 +20,7 @@
-module(f_bad_ifnot).
--feature(enable, ifnot_expr).
+-feature(ifnot_expr, enable).
-export([f3/0]).
diff --git a/erts/test/lux/input/f_directives.erl b/erts/test/lux/input/f_directives.erl
index 47ee210fd1..308eb45916 100644
--- a/erts/test/lux/input/f_directives.erl
+++ b/erts/test/lux/input/f_directives.erl
@@ -23,8 +23,8 @@
%% This module uses both features ifn_expr and maybe_expr, so atoms
%% belonging to these need t be quoted.
--feature(enable, ifn_expr).
--feature(enable, while_expr).
+-feature(ifn_expr, enable).
+-feature(while_expr, enable).
-export([bar/0
]).
diff --git a/erts/test/lux/input/f_directives_2.erl b/erts/test/lux/input/f_directives_2.erl
index 07c93440f0..45c395a3b8 100644
--- a/erts/test/lux/input/f_directives_2.erl
+++ b/erts/test/lux/input/f_directives_2.erl
@@ -23,10 +23,10 @@
%% This module uses the feature ifn_expr, so atoms belonging to that
%% featurfe need to be quoted.
--feature(enable, while_expr).
--feature(enable, ifn_expr).
+-feature(while_expr, enable).
+-feature(ifn_expr, enable).
%% Disable feature so atoms beonging to maybe_expr can be unquoted
--feature(disable, while_expr).
+-feature(while_expr, disable).
-export([foo/0,
bar/0,
diff --git a/erts/test/lux/input/f_directives_3.erl b/erts/test/lux/input/f_directives_3.erl
index 279c519150..58dd1aa733 100644
--- a/erts/test/lux/input/f_directives_3.erl
+++ b/erts/test/lux/input/f_directives_3.erl
@@ -23,8 +23,8 @@
%% This module uses the feature ifn_expr, so atoms from that feature
%% need to be quoted.
--feature(enable, ifn_expr).
--feature(disable, while_expr).
+-feature(ifn_expr, enable).
+-feature(while_expr, disable).
-export([foo/0,
bar/0,
diff --git a/erts/test/lux/input/f_disable.erl b/erts/test/lux/input/f_disable.erl
index b72dfdb550..46874d3acd 100644
--- a/erts/test/lux/input/f_disable.erl
+++ b/erts/test/lux/input/f_disable.erl
@@ -20,8 +20,8 @@
-module(f_disable).
--feature(disable, ifn_expr).
--feature(disable, while_expr).
+-feature(ifn_expr, disable).
+-feature(while_expr, disable).
-export([no_ifn/0,
no_ftrs/0]).
@@ -44,7 +44,7 @@ no_ifn() ->
no_ftrs() ->
[ifn, while, until, ?BAR].
-%% -compile({enable_feature, ifn_expr}).
+%% -compile({feature, ifn_expr, enable}).
%% do(X) ->
%% ifn X > 10 ->
diff --git a/erts/test/lux/input/f_ifnot.erl b/erts/test/lux/input/f_ifnot.erl
index bb81239e7f..c31469704f 100644
--- a/erts/test/lux/input/f_ifnot.erl
+++ b/erts/test/lux/input/f_ifnot.erl
@@ -20,7 +20,7 @@
-module(f_ifnot).
--feature(enable, ifnot_expr).
+-feature(ifnot_expr, enable).
-export([f0/0,
f1/0,
diff --git a/erts/test/lux/input/f_include_1.erl b/erts/test/lux/input/f_include_1.erl
index c8dce1e503..05d2b98d61 100644
--- a/erts/test/lux/input/f_include_1.erl
+++ b/erts/test/lux/input/f_include_1.erl
@@ -1,19 +1,19 @@
-module(f_include_1).
--feature(enable, unless_expr).
+-feature(unless_expr, enable).
-ifdef(end_prefix).
-record(constant, {value = 42}).
-endif.
-ifdef(end_include).
--feature(enable, maybe_expr).
+-feature(maybe_expr, enable).
-endif.
-include("is_enabled.hrl").
-ifdef(end_include).
--feature(enable, ifnot_expr).
+-feature(ifnot_expr, enable).
-endif.
%% At this point the prefix will definitely end, if it has not already
diff --git a/erts/test/lux/input/f_include_2.erl b/erts/test/lux/input/f_include_2.erl
index 209c454fc9..9bb81c196a 100644
--- a/erts/test/lux/input/f_include_2.erl
+++ b/erts/test/lux/input/f_include_2.erl
@@ -1,19 +1,19 @@
-module(f_include_2).
--feature(enable, unless_expr).
+-feature(unless_expr, enable).
-ifdef(end_prefix).
-record(constant, {value = 42}).
-endif.
-ifdef(end_include).
--feature(enable, maybe_expr).
+-feature(maybe_expr, enable).
-endif.
-include("macro_enabled.hrl").
-ifdef(end_include).
--feature(enable, ifnot_expr).
+-feature(ifnot_expr, enable).
-endif.
%% At this point the prefix will definitely end, if it has not already
diff --git a/erts/test/lux/input/f_include_3.erl b/erts/test/lux/input/f_include_3.erl
index dba4a78dbb..294f3eb917 100644
--- a/erts/test/lux/input/f_include_3.erl
+++ b/erts/test/lux/input/f_include_3.erl
@@ -1,19 +1,19 @@
-module(f_include_3).
--feature(enable, unless_expr).
+-feature(unless_expr, enable).
-ifdef(end_prefix).
-record(constant, {value = 42}).
-endif.
-ifdef(end_include).
--feature(enable, maybe_expr).
+-feature(maybe_expr, enable).
-endif.
-include("enable.hrl").
-ifdef(end_include).
--feature(enable, ifnot_expr).
+-feature(ifnot_expr, enable).
-endif.
%% At this point the prefix will definitely end, if it has not already
diff --git a/erts/test/lux/input/f_incorrect_directives.erl b/erts/test/lux/input/f_incorrect_directives.erl
index 5e9129d1a1..6af2a2aa9b 100644
--- a/erts/test/lux/input/f_incorrect_directives.erl
+++ b/erts/test/lux/input/f_incorrect_directives.erl
@@ -28,13 +28,13 @@
]).
%% FIXME This is out of place, but not check in any test.
--feature(enable, ifn).
+-feature(ifn, enable).
foo() ->
%% Note: maybe_expr not active here
['ifn', maybe, then, 'if'].
--feature(enable, maybe).
+-feature(maybe, enable).
bar() ->
['then', 'maybe'].
diff --git a/erts/test/lux/input/f_incorrect_disable.erl b/erts/test/lux/input/f_incorrect_disable.erl
index 19f80c2e2c..53cb56b38b 100644
--- a/erts/test/lux/input/f_incorrect_disable.erl
+++ b/erts/test/lux/input/f_incorrect_disable.erl
@@ -22,7 +22,7 @@
-module(f_incorrect_disable).
--feature(disable, unless).
+-feature(unless, disable).
-export([do/1,
no_ifn/0,
@@ -38,7 +38,7 @@
no_ifn() ->
[ifn, 'maybe', ?FOO].
--feature(disable, maybe_expr).
+-feature(maybe_expr, disable).
-if(?FEATURE_ENABLED(maybe_expr)).
-define(BAR, has_maybe).
@@ -49,7 +49,7 @@ no_ifn() ->
no_ftrs() ->
[ifn, maybe, then, ?BAR].
--feature(enable, ifn_expr).
+-feature(ifn_expr, enable).
do(X) ->
ifn X > 10 ->
diff --git a/erts/test/lux/input/feature_directive_maybe_ifn.erl b/erts/test/lux/input/feature_directive_maybe_ifn.erl
index 82f448dc1a..c1ea3d48dd 100644
--- a/erts/test/lux/input/feature_directive_maybe_ifn.erl
+++ b/erts/test/lux/input/feature_directive_maybe_ifn.erl
@@ -42,7 +42,7 @@ ifn_0() -> false.
%% NOTE: We need to quote the feature name due to it being the same as
%% the new reserved word and it might have been enabled earlier, i.e.,
%% from the command line or in argumemts to compile:file/..
--compile({enable_feature, 'ifn_expr'}).
+-compile({feature, 'ifn_expr', enable}).
%% use_ifn(X) ->
%% ifn X > 0 ->
@@ -67,7 +67,7 @@ maybe_0() ->
maybe_0() -> false.
-endif.
--compile({enable_feature, 'maybe_expr'}).
+-compile({feature, 'maybe_expr', enable}).
-if(?FEATURE_ENABLED('maybe_expr')).
maybe_1() ->
diff --git a/erts/test/lux/input/maybe.hrl b/erts/test/lux/input/maybe.hrl
index ffa665f0eb..5ea653e511 100644
--- a/erts/test/lux/input/maybe.hrl
+++ b/erts/test/lux/input/maybe.hrl
@@ -1,5 +1,5 @@
-if(?enable_maybe > 0).
--feature(enable, while_expr).
+-feature(while_expr, enable).
-record(conditional, {on=off, 'until'=none}).
-else.
-record(conditional, {on=on, until=until}).
diff --git a/lib/compiler/src/compile.erl b/lib/compiler/src/compile.erl
index 4e80779479..54b1cd3141 100644
--- a/lib/compiler/src/compile.erl
+++ b/lib/compiler/src/compile.erl
@@ -1032,7 +1032,7 @@ do_parse_module(DefEncoding, #compile{ifile=File,options=Opts,dir=Dir}=St) ->
Encoding = proplists:get_value(encoding, Extra),
%% Get features used in the module, indicated by
%% enabling features with
- %% -compile({enable_feature, ..}).
+ %% -compile({feature, .., enable}).
UsedFtrs = proplists:get_value(features, Extra),
St1 = metadata_add_features(UsedFtrs, St),
Forms = case with_columns(Opts ++ compile_options(Forms0)) of
diff --git a/lib/compiler/test/compile_SUITE.erl b/lib/compiler/test/compile_SUITE.erl
index 8e7a97d58c..8cf14ab671 100644
--- a/lib/compiler/test/compile_SUITE.erl
+++ b/lib/compiler/test/compile_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2021. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2022. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -1450,7 +1450,7 @@ warnings(_Config) ->
test_lib:p_run(fun do_warnings/1, Files).
do_warnings(F) ->
- Options = [{enable_feature,maybe_expr},binary,bin_opt_info,recv_opt_info,return],
+ Options = [{feature,maybe_expr,enable},binary,bin_opt_info,recv_opt_info,return],
{ok,_,_,Ws} = compile:file(F, Options),
do_warnings_1(Ws, F).
diff --git a/lib/compiler/test/maybe_SUITE.erl b/lib/compiler/test/maybe_SUITE.erl
index 905bc33584..6c6e21f547 100644
--- a/lib/compiler/test/maybe_SUITE.erl
+++ b/lib/compiler/test/maybe_SUITE.erl
@@ -24,7 +24,7 @@
%% Note: also require the feature to be set during runtime as long as
%% the feature is experimental. This is currently done in ../Makefile
%% by overriding the test target. Ugly and very non local.
--feature(enable, maybe_expr).
+-feature(maybe_expr, enable).
-export([all/0, groups/0, init_per_suite/1, end_per_suite/1]).
-export([basic/1, nested/1]).
diff --git a/lib/compiler/test/test_lib.erl b/lib/compiler/test/test_lib.erl
index 48a8a970af..4f24310d15 100644
--- a/lib/compiler/test/test_lib.erl
+++ b/lib/compiler/test/test_lib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2021. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2022. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -86,7 +86,8 @@ opt_opts(Mod) ->
lists:filter(fun
(debug_info) -> true;
(dialyzer) -> true;
- ({enable_feature,_}) -> true;
+ ({feature,_,enable}) -> true;
+ ({feature,_,disable}) -> true;
(inline) -> true;
(no_bsm3) -> true;
(no_bsm_opt) -> true;
diff --git a/lib/compiler/test/warnings_SUITE.erl b/lib/compiler/test/warnings_SUITE.erl
index 8ab46fed09..96cd735cdf 100644
--- a/lib/compiler/test/warnings_SUITE.erl
+++ b/lib/compiler/test/warnings_SUITE.erl
@@ -1177,12 +1177,12 @@ eep49(Config) ->
Always
end.
">>,
- [{enable_feature,maybe_expr}],
+ [{feature,maybe_expr,enable}],
[]},
{disabled,
<<"foo() -> maybe. %Atom maybe.
">>,
- [{disable_feature,maybe_expr}],
+ [{feature,maybe_expr,disable}],
[]}
],
run(Config, Ts),
diff --git a/lib/stdlib/src/epp.erl b/lib/stdlib/src/epp.erl
index 1c2dbcb3bb..d642b53bf4 100644
--- a/lib/stdlib/src/epp.erl
+++ b/lib/stdlib/src/epp.erl
@@ -1002,8 +1002,8 @@ scan_err_warn(Toks, {atom,_,Tag}=Token, From, St) ->
wait_req_scan(St).
%% scan a feature directive
-scan_feature([{'(', _Ap}, {atom, _Am, Ind},
- {',', _}, {atom, _, Ftr}, {')', _}, {dot, _}],
+scan_feature([{'(', _Ap}, {atom, _Am, Ftr},
+ {',', _}, {atom, _, Ind}, {')', _}, {dot, _}],
Feature, From, St)
when St#epp.in_prefix,
(Ind =:= enable
diff --git a/lib/stdlib/src/erl_compile.erl b/lib/stdlib/src/erl_compile.erl
index 87af230c67..6cb8590f13 100644
--- a/lib/stdlib/src/erl_compile.erl
+++ b/lib/stdlib/src/erl_compile.erl
@@ -179,12 +179,12 @@ parse_generic_option("enable-feature" ++ Str, T0,
{FtrStr, T} = get_option("enable-feature", Str, T0),
Feature = list_to_atom(FtrStr),
compile1(T, Opts#options{
- specific = Spec ++ [{enable_feature, Feature}]});
+ specific = Spec ++ [{feature, Feature, enable}]});
parse_generic_option("disable-feature" ++ Str, T0,
#options{specific = Spec} = Opts) ->
{FtrStr, T} = get_option("disable-feature", Str, T0),
Feature = list_to_atom(FtrStr),
- compile1(T, Opts#options{specific = Spec ++ [{disable_feature, Feature}]});
+ compile1(T, Opts#options{specific = Spec ++ [{feature, Feature, disable}]});
parse_generic_option("describe-feature" ++ Str, T0,
#options{specific = Spec} = Opts) ->
{FtrStr, T} = get_option("disable-feature", Str, T0),
diff --git a/lib/stdlib/src/erl_features.erl b/lib/stdlib/src/erl_features.erl
index e969293a92..77ada029cb 100644
--- a/lib/stdlib/src/erl_features.erl
+++ b/lib/stdlib/src/erl_features.erl
@@ -188,8 +188,8 @@ keywords(Ftr, Map) ->
%% | {'error', error()}.
keyword_fun(Opts, KeywordFun) ->
%% Get items enabling or disabling features, preserving order.
- IsFtr = fun({enable_feature, _}) -> true;
- ({disable_feature, _}) -> true;
+ IsFtr = fun({feature, _, enable}) -> true;
+ ({feature, _, disable}) -> true;
(_) -> false
end,
FeatureOps = lists:filter(IsFtr, Opts),
@@ -310,8 +310,8 @@ init_features() ->
end,
init:get_arguments()),
- Cnv = fun('enable-feature') -> enable_feature;
- ('disable-feature') -> disable_feature
+ Cnv = fun('enable-feature') -> enable;
+ ('disable-feature') -> disable
end,
FeatureOps = lists:append(lists:map(fun({Tag, Strings}) ->
@@ -327,9 +327,9 @@ init_features() ->
try
Atom = list_to_atom(String),
case is_valid_feature(Atom) of
- true -> {true, {Cnv(Tag), Atom}};
+ true -> {true, {feature, Atom, Cnv(Tag)}};
false when Atom == all ->
- {true, {Cnv(Tag), Atom}};
+ {true, {feature, Atom, Cnv(Tag)}};
false -> false
end
catch
@@ -483,17 +483,17 @@ collect_features(FOps) ->
collect_features([], Add, Del) ->
{Add, Del};
-collect_features([{enable_feature, all}| FOps], Add, _Del) ->
+collect_features([{feature, all, enable}| FOps], Add, _Del) ->
All = features(),
Add1 = lists:foldl(fun add_ftr/2, Add, All),
collect_features(FOps, Add1, []);
-collect_features([{enable_feature, Feature}| FOps], Add, Del) ->
+collect_features([{feature, Feature, enable}| FOps], Add, Del) ->
collect_features(FOps, add_ftr(Feature, Add), Del -- [Feature]);
-collect_features([{disable_feature, all}| FOps], _Add, Del) ->
+collect_features([{feature, all, disable}| FOps], _Add, Del) ->
%% Start over
All = features(),
collect_features(FOps, [], Del -- All);
-collect_features([{disable_feature, Feature}| FOps], Add, Del) ->
+collect_features([{feature, Feature, disable}| FOps], Add, Del) ->
collect_features(FOps, Add -- [Feature],
add_ftr(Feature, Del)).
diff --git a/lib/stdlib/test/epp_SUITE.erl b/lib/stdlib/test/epp_SUITE.erl
index 3a62b79135..027d6ec42a 100644
--- a/lib/stdlib/test/epp_SUITE.erl
+++ b/lib/stdlib/test/epp_SUITE.erl
@@ -2018,7 +2018,7 @@ eval_tests(Config, Fun, Tests) ->
Return = Fun(Config, P, Opts),
%% The result should be the same when enabling maybe ... end
%% (making 'else' a keyword instead of an atom).
- Return = Fun(Config, P, [{enable_feature,maybe_expr}|Opts]),
+ Return = Fun(Config, P, [{feature,maybe_expr,enable}|Opts]),
case message_compare(E, Return) of
true ->
case E of
@@ -2041,7 +2041,7 @@ check_test(Config, Test, Opts) ->
PrivDir = proplists:get_value(priv_dir, Config),
File = filename:join(PrivDir, Filename),
ok = file:write_file(File, Test),
- case epp:parse_file(File, [PrivDir], Opts) of
+ case epp:parse_file(File, [{includes, PrivDir}| Opts]) of
{ok,Forms} ->
Errors = [E || E={error,_} <- Forms],
call_format_error([E || {error,E} <- Errors]),
@@ -2116,10 +2116,10 @@ run_test(Config, Test0, Opts0) ->
Opts = [return, {i,PrivDir},{outdir,PrivDir}] ++ Opts0,
{ok, epp_test, []} = compile:file(File, Opts),
AbsFile = filename:rootname(File, ".erl"),
- %% FIXME For now, use firbidden feature at rumtime
+ %% FIXME For now, use forbidden feature at rumtime
erl_features:enable_feature(maybe_expr),
{module, epp_test} = code:load_abs(AbsFile, epp_test),
- %% FIXME For now, use firbidden feature at rumtime
+ %% FIXME For now, use forbidden feature at rumtime
erl_features:disable_feature(maybe_expr),
Reply = epp_test:t(),
code:purge(epp_test),
diff --git a/lib/stdlib/test/erl_eval_SUITE.erl b/lib/stdlib/test/erl_eval_SUITE.erl
index 00a56d8a2b..faaa9f727f 100644
--- a/lib/stdlib/test/erl_eval_SUITE.erl
+++ b/lib/stdlib/test/erl_eval_SUITE.erl
@@ -18,7 +18,7 @@
%% %CopyrightEnd%
-module(erl_eval_SUITE).
--feature(enable, maybe_expr).
+-feature(maybe_expr, enable).
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
init_per_testcase/2, end_per_testcase/2,
init_per_group/2,end_per_group/2]).
diff --git a/lib/stdlib/test/erl_lint_SUITE.erl b/lib/stdlib/test/erl_lint_SUITE.erl
index 955e5fbb40..627d61c74d 100644
--- a/lib/stdlib/test/erl_lint_SUITE.erl
+++ b/lib/stdlib/test/erl_lint_SUITE.erl
@@ -4727,7 +4727,7 @@ unused_type2(Config) when is_list(Config) ->
%% Test maybe ... else ... end.
eep49(Config) when is_list(Config) ->
- EnableMaybe = {enable_feature,maybe_expr},
+ EnableMaybe = {feature,maybe_expr,enable},
Ts = [{exp1,
<<"t(X) ->
maybe
diff --git a/lib/syntax_tools/test/syntax_tools_SUITE.erl b/lib/syntax_tools/test/syntax_tools_SUITE.erl
index 623e79b207..6d91ab8f54 100644
--- a/lib/syntax_tools/test/syntax_tools_SUITE.erl
+++ b/lib/syntax_tools/test/syntax_tools_SUITE.erl
@@ -412,7 +412,7 @@ test_prettypr([File|Files],DataDir,PrivDir) ->
test_epp_dodger([], _, _) -> ok;
test_epp_dodger([Filename|Files],DataDir,PrivDir) ->
io:format("Parsing ~p~n", [Filename]),
- Options = [{enable_feature, maybe_expr}],
+ Options = [{feature, maybe_expr, enable}],
InFile = filename:join(DataDir, Filename),
Parsers = [{fun(File) -> epp_dodger:parse_file(File, Options) end,parse_file},
{fun(File) -> epp_dodger:quick_parse_file(File,
@@ -621,7 +621,7 @@ p_run_loop(Test, List, N, Refs0, Errors0) ->
end.
res_word_option() ->
- Options = [{enable_feature, maybe_expr}],
+ Options = [{feature, maybe_expr, enable}],
{ok, {_Ftrs, ResWordFun}} =
erl_features:keyword_fun(Options, fun erl_scan:f_reserved_word/1),
{reserved_word_fun, ResWordFun}.
diff --git a/lib/tools/src/cover.erl b/lib/tools/src/cover.erl
index 27006199d1..1f7a518dfe 100644
--- a/lib/tools/src/cover.erl
+++ b/lib/tools/src/cover.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2021. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2022. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -336,7 +336,8 @@ filter_options(Options) ->
{d, _Macro, _Value} -> true;
export_all -> true;
tuple_calls -> true;
- {enable_feature,_} -> true; %FIXME: To be removed.
+ {feature,_,enable} -> true; %FIXME: To be removed.
+ {feature,_,disable} -> true; %FIXME: To be removed.
_ -> false
end
end,
diff --git a/lib/tools/test/cover_SUITE.erl b/lib/tools/test/cover_SUITE.erl
index b02b3df0b6..9977fa8763 100644
--- a/lib/tools/test/cover_SUITE.erl
+++ b/lib/tools/test/cover_SUITE.erl
@@ -1881,7 +1881,7 @@ eep49(Config) ->
File = "t.erl",
Test = <<"-module(t).
- -feature(enable,maybe_expr).
+ -feature(maybe_expr,enable).
-export([t/0]).
t() ->
--
2.34.1