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

openSUSE Build Service is sponsored by