File 3573-features-Remove-unneeded-functions.patch of Package erlang
From cc69af25a7f50a37b4ed7d052c838a11d4e6c1f5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Cons=20T=20=C3=85hs?= <cons@erlang.org>
Date: Fri, 29 Apr 2022 13:49:04 +0200
Subject: [PATCH 3/6] [features] Remove unneeded functions
* Changing set if enabled features not allowed during runtime
* Adjust test to not use removed functions
* Adjust test to start peer with feature enabled
---
erts/test/lux/feature_erlc.lux | 26 ++++-----------------
erts/test/lux/feature_output.lux | 11 +--------
erts/test/lux/feature_runtime.lux | 31 ++++++-------------------
lib/stdlib/src/erl_features.erl | 38 -------------------------------
lib/stdlib/test/epp_SUITE.erl | 27 +++++++++++++++-------
5 files changed, 32 insertions(+), 101 deletions(-)
diff --git a/erts/test/lux/feature_erlc.lux b/erts/test/lux/feature_erlc.lux
index 5082f56ad1..e4a092cff6 100644
--- a/erts/test/lux/feature_erlc.lux
+++ b/erts/test/lux/feature_erlc.lux
@@ -255,13 +255,8 @@
!f(Fs).
?$ERLPROMPT
- # Somewhat questionable if we really should allow this in runtime
- # FIXME WE should *not* allow this at runtime.
- !Fs = erl_features:enable_feature(ifn_expr).
- ?$ERLPROMPT
- [invoke same-members Fs "[cond_expr,maps,ifn_expr]"]
- !f(Fs).
- ?$ERLPROMPT
+ [invoke quit-erl]
+ [invoke start-erl "-enable-feature ifn_expr"]
!l(f_macros).
?{module,f_macros}
@@ -286,7 +281,7 @@
???{ok,f_macros}
?$ERLPROMPT
- # This should be allowed as we have not enabled the feature in the
+ # This should not be allowed as we have not enabled the feature in the
# runtime
!l(f_macros).
??{error,not_allowed}
@@ -309,19 +304,8 @@
[invoke ok]
[shell erl]
- # FIXME This should not be allowed at runtime..
- !Fs = erl_features:enable_feature(ifn_expr).
- ?$ERLPROMPT
- [invoke same-members Fs "[cond_expr,maps,ifn_expr]"]
- !f(Fs).
- ?$ERLPROMPT
-
- # FIXME This should not be allowed at runtime..
- !Fs = erl_features:enable_feature(while_expr).
- ?$ERLPROMPT
- [invoke same-members Fs "[cond_expr,maps,ifn_expr,while_expr]"]
- !f(Fs).
- ?$ERLPROMPT
+ [invoke quit-erl]
+ [invoke start-erl "-enable-feature while_expr -enable-feature ifn_expr"]
!l(f_macros).
?{module,f_macros}
diff --git a/erts/test/lux/feature_output.lux b/erts/test/lux/feature_output.lux
index 0b20d3fc4a..30e6c3064f 100644
--- a/erts/test/lux/feature_output.lux
+++ b/erts/test/lux/feature_output.lux
@@ -8,24 +8,15 @@
!export OTP_TEST_FEATURES=true
?SH-PROMPT:
-undefined function
- !erl -pa $outdir
- ?$ERLPROMPT
+ [invoke start-erl "-enable-feature while_expr -enable-feature ifn_expr"]
# Output should should know about the new reserved words during runtime
- [invoke same-members "erl_features:enable_feature(while_expr)" "[cond_expr,maps,while_expr]"]
-
- [invoke same-members "erl_features:enable_feature(ifn_expr)" "[cond_expr,maps,while_expr,ifn_expr]"]
-
# !feature_directive_maybe_ifn:foo().
!['ifn','while','until','if'].
??['ifn','while','until','if']
?$ERLPROMPT
- !erl_features:enable_feature(ifn_expr).
- ?[ifn_expr,maybe_expr]
- ?$ERLPROMPT
-
[cleanup]
[invoke no-dump]
!rm -fr $outdir
diff --git a/erts/test/lux/feature_runtime.lux b/erts/test/lux/feature_runtime.lux
index 1048164a52..3dd1b2aca8 100644
--- a/erts/test/lux/feature_runtime.lux
+++ b/erts/test/lux/feature_runtime.lux
@@ -8,8 +8,7 @@
!export OTP_TEST_FEATURES=true
?SH-PROMPT:
-undefined function
- !erl
- ?$ERLPROMPT
+ [invoke start-erl ""]
[invoke same-members "erl_features:enabled()" "[cond_expr,maps]"]
@@ -17,28 +16,23 @@
??[]
?$ERLPROMPT
- [invoke same-members "erl_features:enable_feature(while_expr)" "[cond_expr,maps,while_expr]"]
+ [invoke quit-erl]
+ [invoke start-erl "-enable-feature while_expr"]
!erl_features:keywords().
??['while','until']
?$ERLPROMPT
- [invoke same-members "erl_features:disable_feature(while_expr)" "[cond_expr,maps]"]
-
- !erl_features:keywords().
- ??[]
- ?$ERLPROMPT
-
- [invoke same-members "erl_features:enable_feature(ifn_expr)" "[cond_expr,maps,ifn_expr]"]
-
- [invoke same-members "erl_features:enable_feature(while_expr)" "[cond_expr,maps,ifn_expr,while_expr]"]
+ [invoke quit-erl]
+ [invoke start-erl "-enable-feature ifn_expr -enable-feature while_expr"]
[invoke same-members "erl_features:enabled()" "[cond_expr,maps,ifn_expr,while_expr]"]
!erl_features:keywords().
??['while','until','ifn']
- [invoke same-members "erl_features:disable_feature(ifn_expr)" "[cond_expr,maps,while_expr]"]
+ [invoke quit-erl]
+ [invoke start-erl "-enable-feature while_expr"]
[invoke same-members "erl_features:enabled()" "[cond_expr,maps,while_expr]"]
@@ -46,17 +40,6 @@
??['while','until']
?$ERLPROMPT
- [invoke same-members "erl_features:disable_feature(while_expr)" "[cond_expr,maps]"]
-
- !erl_features:keywords().
- ??[]
- ?$ERLPROMPT
-
- !erl_features:enable_feature(misfeature).
- ??invalid_feature
- ??argument 1: unknown feature
- ?$ERLPROMPT
-
[shell erl]
[invoke quit-erl]
diff --git a/lib/stdlib/src/erl_features.erl b/lib/stdlib/src/erl_features.erl
index edb1e71d52..399d048c27 100644
--- a/lib/stdlib/src/erl_features.erl
+++ b/lib/stdlib/src/erl_features.erl
@@ -29,8 +29,6 @@
keywords/1,
keyword_fun/2,
keyword_fun/4,
- enable_feature/1,
- disable_feature/1,
used/1,
format_error/1,
format_error/2]).
@@ -374,42 +372,6 @@ ensure_init() ->
init_features()
end.
-%% FIXME - remove this. It should not be available at runtime. This
-%% is all done by the init code.
-enable_feature(Feature) ->
- ?VALID_FEATURE(Feature),
-
- Features = enabled(),
- case lists:member(Feature, Features) of
- true ->
- %% already there, maybe raise an error
- Features;
- false ->
- NewFeatures = [Feature| Features],
- enabled_features(NewFeatures),
- Keywords = keywords(),
- New = keywords(Feature),
- set_keywords(New ++ Keywords),
- NewFeatures
- end.
-
-disable_feature(Feature) ->
- ?VALID_FEATURE(Feature),
-
- Features = enabled(),
- case lists:member(Feature, Features) of
- true ->
- NewFeatures = Features -- [Feature],
- enabled_features(NewFeatures),
- Keywords = keywords(),
- Rem = keywords(Feature),
- set_keywords(Keywords -- Rem),
- NewFeatures;
- false ->
- %% Not there, possibly raise an error
- Features
- end.
-
%% Return list of currently enabled features
-spec enabled() -> [feature()].
enabled() ->
diff --git a/lib/stdlib/test/epp_SUITE.erl b/lib/stdlib/test/epp_SUITE.erl
index 027d6ec42a..5d7e362c50 100644
--- a/lib/stdlib/test/epp_SUITE.erl
+++ b/lib/stdlib/test/epp_SUITE.erl
@@ -2116,14 +2116,23 @@ 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 forbidden feature at rumtime
- erl_features:enable_feature(maybe_expr),
- {module, epp_test} = code:load_abs(AbsFile, epp_test),
- %% FIXME For now, use forbidden feature at rumtime
- erl_features:disable_feature(maybe_expr),
- Reply = epp_test:t(),
- code:purge(epp_test),
- Reply.
+
+ case lists:member({feature, maybe_expr, enable}, Opts0) of
+ false ->
+ %% Run in node
+ {module, epp_test} = code:load_abs(AbsFile, epp_test),
+ Reply = epp_test:t(),
+ code:purge(epp_test),
+ Reply;
+ true ->
+ %% Run in peer with maybe_expr enabled
+ {ok, Peer, Node} =
+ ?CT_PEER(#{args => ["-enable-feature","maybe_expr"],
+ connection => 0}),
+ {module, epp_test} =
+ rpc:call(Node, code, load_abs, [AbsFile, epp_test]),
+ rpc:call(Node, epp_test, t, []),
+ end.
fail() ->
ct:fail(failed).
--
2.35.3