aboutsummaryrefslogtreecommitdiffstats
path: root/erts/preloaded/ebin/prim_eval.beam
AgeCommit message (Collapse)Author
2016-05-10Update preloaded modulesLukas Larsson
2016-05-03Update preloaded modulesBjörn-Egil Dahlberg
2016-04-15Update preloaded modulesLukas Larsson
2016-02-17Update preloaded modulesHans Bolinder
2016-02-02Update preloaded modulesLukas Larsson
2016-01-26Update preloaded modulesLukas Larsson
2015-12-16Update preloaded modulesBjörn Gustavsson
2015-12-16Update preloaded modulesBjörn Gustavsson
2015-12-08Update preloaded modulesBjörn-Egil Dahlberg
2015-05-12Update preloaded modulesRickard Green
2015-03-26Update preloaded modulesHenrik Nord
2014-04-01Update preloaded modulesBjörn-Egil Dahlberg
2014-02-26Update preloaded and primary bootstrapRickard Green
2013-12-09Update preloaded modulesMagnus Lidén
2013-12-09Update preloaded modulesMagnus Lidén
2013-12-06Update preloaded modulesMagnus Lidén
2013-09-13Update preloaded modulesMagnus Lidén
2013-06-12Update preloaded modulesBjörn-Egil Dahlberg
2013-05-28Added preloaded prim_evalFredrik Gustafsson
2013-05-28Fix receive support in erl_eval with a BEAM moduleAnthony Ramine
Using the low-level BEAM instructions, we can loop over each message in the process queue and removes the first message that matches, without receiving them all to later send them back to itself. The function prim_eval:'receive'/2 is equivalent to the following pseudo-code: 'receive'(F, T) -> RESET MESSAGE QUEUE POINTER, LOOP: case PEEK CURRENT MESSAGE WITH TIMEOUT T of {ok,Msg} -> case F(Msg) of nomatch -> DECREMENT TIMEOUT T, ADVANCE MESSAGE QUEUE POINTER, GOTO LOOP; Result -> RESET MESSAGE QUEUE POINTER, Result end; timeout -> RESET MESSAGE QUEUE POINTER, timeout end. To not break Dialyzer and other tools, we use a stub Erlang module which abstract code is forcefully inserted into prim_inet.erl afterwards compilation.