From d30cae56d82763681b633cba25ad553eb672ec16 Mon Sep 17 00:00:00 2001
From: Raimo Niskanen
Date: Thu, 6 Apr 2017 16:09:38 +0200
Subject: Make Module:init/1 mandatory
---
lib/stdlib/doc/src/gen_statem.xml | 17 ++++++++++-------
lib/stdlib/src/gen_statem.erl | 3 +--
2 files changed, 11 insertions(+), 9 deletions(-)
diff --git a/lib/stdlib/doc/src/gen_statem.xml b/lib/stdlib/doc/src/gen_statem.xml
index 5eb13db1aa..f7baaad5d1 100644
--- a/lib/stdlib/doc/src/gen_statem.xml
+++ b/lib/stdlib/doc/src/gen_statem.xml
@@ -146,7 +146,7 @@ erlang:'!' -----> Module:StateName/3
This gathers all code for a specific state
in one function as the gen_statem engine
branches depending on state name.
- Notice the fact that there is a mandatory callback function
+ Note the fact that the callback function
Module:terminate/3
makes the state name terminate unusable in this mode.
@@ -1704,7 +1704,7 @@ handle_event(_, _, State, Data) ->
Module:init(Args) -> Result(StateType)
- Optional function for initializing process and internal state.
+ Initializing process and internal state.
Args = term()
@@ -1720,7 +1720,7 @@ handle_event(_, _, State, Data) ->
start_link/3,4
or
start/3,4,
- this optional function is called by the new process to initialize
+ this function is called by the new process to initialize
the implementation state and server data.
@@ -1729,13 +1729,16 @@ handle_event(_, _, State, Data) ->
- This callback is optional, so a callback module does not need
- to export it, but most do. If this function is not exported,
- the gen_statem should be started through
+ Note that if the gen_statem is started trough
proc_lib
and
- enter_loop/4-6.
+ enter_loop/4-6,
+ this callback will never be called.
+ Since this callback is not optional it can
+ in that case be implemented as:
+
+init(Args) -> erlang:error(not_implemented, [Args]).
diff --git a/lib/stdlib/src/gen_statem.erl b/lib/stdlib/src/gen_statem.erl
index cacc932ec4..242ff87be7 100644
--- a/lib/stdlib/src/gen_statem.erl
+++ b/lib/stdlib/src/gen_statem.erl
@@ -287,8 +287,7 @@
StatusOption :: 'normal' | 'terminate'.
-optional_callbacks(
- [init/1, % One may use enter_loop/5,6,7 instead
- format_status/2, % Has got a default implementation
+ [format_status/2, % Has got a default implementation
terminate/3, % Has got a default implementation
code_change/4, % Only needed by advanced soft upgrade
%%
--
cgit v1.2.3