From 800265f49f912dcf66846b13aa8032bf2f380caf Mon Sep 17 00:00:00 2001
From: Raimo Niskanen
Date: Fri, 30 Sep 2016 11:17:22 +0200
Subject: Improve docs and types
---
lib/stdlib/doc/src/gen_statem.xml | 77 +++++++++++++++++++++++++++++++--------
lib/stdlib/src/gen_statem.erl | 38 +++++++++++++------
2 files changed, 88 insertions(+), 27 deletions(-)
(limited to 'lib')
diff --git a/lib/stdlib/doc/src/gen_statem.xml b/lib/stdlib/doc/src/gen_statem.xml
index aa34f53d29..bba2de5e77 100644
--- a/lib/stdlib/doc/src/gen_statem.xml
+++ b/lib/stdlib/doc/src/gen_statem.xml
@@ -674,6 +674,9 @@ handle_event(_, _, State, Data) ->
they are merged with the current
That is: hibernate and timeout overrides
the current and reply sends a reply.
+ This has the same effect as if you would have appended
+ the actions from this state enter call to the actions
+ returned by the state function that changed states.
-
@@ -1002,28 +1005,42 @@ handle_event(_, _, State, Data) ->
-
+
- stop
+ keep_state
-
- Terminates the gen_statem by calling
- Module:terminate/3
- with Reason and
- NewData, if specified.
+ The gen_statem keeps the current state, or
+ does a state transition to the current state if you like,
+ sets NewData,
+ and executes all Actions.
+ This is the same as
+ {next_state,CurrentState,NewData,Actions}.
- stop_and_reply
+ keep_state_and_data
-
- Sends all Replies,
- then terminates the gen_statem by calling
- Module:terminate/3
- with Reason and
- NewData, if specified.
+ The gen_statem keeps the current state or
+ does a state transition to the current state if you like,
+ keeps the current server data,
+ and executes all Actions.
+ This is the same as
+ {next_state,CurrentState,CurrentData,Actions}.
+
+
+ All these terms are tuples or atoms and this property
+ will hold in any future version of gen_statem.
+
+
+
+
+
+
+
keep_state
-
@@ -1053,6 +1070,36 @@ handle_event(_, _, State, Data) ->
+
+
+
+
+ stop
+ -
+
+ Terminates the gen_statem by calling
+ Module:terminate/3
+ with Reason and
+ NewData, if specified.
+
+
+ stop_and_reply
+ -
+
+ Sends all Replies,
+ then terminates the gen_statem by calling
+ Module:terminate/3
+ with Reason and
+ NewData, if specified.
+
+
+
+
+ All these terms are tuples or atoms and this property
+ will hold in any future version of gen_statem.
+
+
+
@@ -1462,7 +1509,7 @@ handle_event(_, _, State, Data) ->
CallbackMode =
callback_mode() |
[ callback_mode()
- | state_entry_events ]
+ | state_enter() ]
@@ -1490,9 +1537,9 @@ handle_event(_, _, State, Data) ->
The CallbackMode is either just
- callback_mode()
+ callback_mode()
or a list containing
- callback_mode()
+ callback_mode()
and possibly the atom
state_enter.
diff --git a/lib/stdlib/src/gen_statem.erl b/lib/stdlib/src/gen_statem.erl
index aedcfc932f..9f5573af86 100644
--- a/lib/stdlib/src/gen_statem.erl
+++ b/lib/stdlib/src/gen_statem.erl
@@ -142,7 +142,7 @@
NextStateName :: state_name(),
NewData :: data(),
Actions :: [action()] | action()} |
- common_state_callback_result().
+ keep_state_callback_result().
-type state_function_enter_result() ::
{'next_state', % {next_state,NextStateName,NewData,[]}
NextStateName :: state_name(),
@@ -151,7 +151,7 @@
NextStateName :: state_name(),
NewData :: data(),
Actions :: [enter_action()] | enter_action()} |
- common_state_callback_result().
+ keep_state_callback_enter_result().
-type handle_event_result() ::
{'next_state', % {next_state,NextState,NewData,[]}
@@ -161,7 +161,7 @@
NextState :: state(),
NewData :: data(),
Actions :: [action()] | action()} |
- common_state_callback_result().
+ keep_state_callback_result().
-type handle_event_enter_result() ::
{'next_state', % {next_state,NextState,NewData,[]}
NextState :: state(),
@@ -170,6 +170,28 @@
NextState :: state(),
NewData :: data(),
Actions :: [enter_action()] | enter_action()} |
+ keep_state_callback_enter_result().
+
+-type keep_state_callback_result() ::
+ {'keep_state', % {keep_state,NewData,[]}
+ NewData :: data()} |
+ {'keep_state', % Keep state, change data
+ NewData :: data(),
+ Actions :: [action()] | action()} |
+ 'keep_state_and_data' | % {keep_state_and_data,[]}
+ {'keep_state_and_data', % Keep state and data -> only actions
+ Actions :: [action()] | action()} |
+ common_state_callback_result().
+
+-type keep_state_callback_enter_result() ::
+ {'keep_state', % {keep_state,NewData,[]}
+ NewData :: data()} |
+ {'keep_state', % Keep state, change data
+ NewData :: data(),
+ Actions :: [enter_action()] | enter_action()} |
+ 'keep_state_and_data' | % {keep_state_and_data,[]}
+ {'keep_state_and_data', % Keep state and data -> only actions
+ Actions :: [enter_action()] | enter_action()} |
common_state_callback_result().
-type common_state_callback_result() ::
@@ -185,15 +207,7 @@
{'stop_and_reply', % Reply then stop the server
Reason :: term(),
Replies :: [reply_action()] | reply_action(),
- NewData :: data()} |
- {'keep_state', % {keep_state,NewData,[]}
- NewData :: data()} |
- {'keep_state', % Keep state, change data
- NewData :: data(),
- Actions :: [ActionType] | ActionType} |
- 'keep_state_and_data' | % {keep_state_and_data,[]}
- {'keep_state_and_data', % Keep state and data -> only actions
- Actions :: [ActionType] | ActionType}.
+ NewData :: data()}.
%% The state machine init function. It is called only once and
--
cgit v1.2.3