<div dir="ltr">The third parameter is described in the Core Erlang specification (<a href="https://www.it.uu.se/research/group/hipe/cerl/doc/core_erlang-1.0.3.pdf">https://www.it.uu.se/research/group/hipe/cerl/doc/core_erlang-1.0.3.pdf</a>), albeit in a very opaque way. This is because the Core Erlang language doesn't go into any details about things that can be left to the actual Erlang implementation to decide how it should work.<br><br>The third parameter is the exception object itself. This needs to be an Erlang term so that it can be handled and passed around, but for efficiency, the BEAM will pack the necessary info into a bignum, which is a cheap and compact representation. It will stay like this until someone really needs to do anything except pass it on upwards, in which case it can be unpacked to a more readable tuple with a stack trace. This detail is completely implementation dependent and should not be relied on by programmers on the Erlang level.<br></div><div class="gmail_extra"><br clear="all"><div><div class="gmail_signature"><br>        /Richard</div></div>
<br><div class="gmail_quote">On Mon, Oct 19, 2015 at 10:14 AM, Jonas Falkevik <span dir="ltr"><<a href="mailto:jonas.falkevik@mobilearts.com" target="_blank">jonas.falkevik@mobilearts.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word">It seems to be the stack trace at least in R16B03-1.<div><div><br></div><div>erl source:</div><div><div>-module(test).</div><div>-compile(export_all).</div><div><br></div><div>test() -></div><div>    try </div><div><span style="white-space:pre-wrap">  </span>foo:bar()</div><div>    catch</div><div>        some:thing -> ok;</div><div><span style="white-space:pre-wrap">       </span>error:E -></div><div><span style="white-space:pre-wrap">    </span>    io:format("third: ~p~n", [E])</div><div>    end.</div></div><div><br></div><div>core erlang modification:</div><div><br></div><div><div>@@ -18,10 +18,10 @@</div><span class=""><div> <span style="white-space:pre-wrap">       </span>      <'some','thing',_cor4> when 'true' -></div><div> <span style="white-space:pre-wrap">                </span>  'ok'</div></span><div> <span style="white-space:pre-wrap">   </span>      %% Line 9</div><div>-<span style="white-space:pre-wrap">      </span>      <'error',E,_cor5> when 'true' -></div><div>+<span style="white-space:pre-wrap">      </span>      <'error',_E,F> when 'true' -></div><div> <span style="white-space:pre-wrap">                </span>  %% Line 10</div><div> <span style="white-space:pre-wrap">          </span>  call 'io':'format'</div><div>-<span style="white-space:pre-wrap">           </span>      ([116|[104|[105|[114|[100|[58|[32|[126|[112|[126|[110]]]]]]]]]]], [E|[]])</div><div>+<span style="white-space:pre-wrap">              </span>      ([116|[104|[105|[114|[100|[58|[32|[126|[112|[126|[110]]]]]]]]]]], [F|[]])</div><span class=""><div> <span style="white-space:pre-wrap">      </span>      ( <_cor3,_cor2,_cor1> when 'true' -></div><div> <span style="white-space:pre-wrap">         </span>    primop 'raise'</div><div> <span style="white-space:pre-wrap">                   </span>(_cor1, _cor2)</div></span></div><div><br></div><div><br></div><div><br></div><div><div>Erlang R16B03-1 (erts-5.10.4) [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false]</div><div><br></div><div>Eshell V5.10.4  (abort with ^G)</div><div>1> c(test, [to_core]).</div><div>** Warning: No object file created - nothing loaded **</div><div>ok</div><div>2> c(test, [from_core]).</div><div>{ok,test}</div><div>3> test:test().         </div><div>third: [[{foo,bar,[],[]},</div><div>         {test,test,0,[]},</div><div>         {erl_eval,do_apply,6,[{file,"erl_eval.erl"},{line,573}]},</div><div>         {shell,exprs,7,[{file,"shell.erl"},{line,674}]},</div><div>         {shell,eval_exprs,7,[{file,"shell.erl"},{line,629}]},</div><div>         {shell,eval_loop,3,[{file,"shell.erl"},{line,614}]}]|</div><div>        -000000000000000016]</div><div>ok</div></div><div><br></div><div>/Jonas</div><div><div><div><div class="h5"><div><br></div><div>On Oct 15, 2015, at 19:57 , Vladimir Gordeev wrote:</div><br></div></div><blockquote type="cite"><div><div class="h5"><div dir="ltr">If you compile some try-catch statements into Core Erlang, you may notice,<div>that it receives three params in exception pattern: <a href="http://tryerl.seriyps.ru/#id=3bf3" target="_blank">http://tryerl.seriyps.ru/#id=3bf3</a><br></div><div><br>this:<br><br></div><div><div>    try foo:bar()</div><div>    catch</div><div>        some:thing -> ok</div><div>    end.<br><br>into this:<br><br><div><span style="white-space:pre-wrap"> </span>try</div><div><span style="white-space:pre-wrap">      </span>    call 'foo':'bar'</div><div><span style="white-space:pre-wrap">           </span>()</div><div><span style="white-space:pre-wrap">       </span>of <_cor0> -></div><div><span style="white-space:pre-wrap">   </span>    _cor0</div><div><span style="white-space:pre-wrap">      </span>catch <_cor3,_cor2,_cor1> -></div><div><span style="white-space:pre-wrap">    </span>    case <_cor3,_cor2,_cor1> of</div><div><span style="white-space:pre-wrap">  </span>      %% Line 7</div><div><span style="white-space:pre-wrap">       </span>      <'some','thing',_cor4> when 'true' -></div><div><span style="white-space:pre-wrap">          </span>  'ok'</div><div><span style="white-space:pre-wrap">  </span>      ( <_cor3,_cor2,_cor1> when 'true' -></div><div><span style="white-space:pre-wrap">           </span>    primop 'raise'</div><div><span style="white-space:pre-wrap">                     </span>(_cor1, _cor2)</div><div><span style="white-space:pre-wrap">           </span>-| ['compiler_generated'] )</div><div><span style="white-space:pre-wrap">      </span>    end<br><br>In "An introduction to Core Erlang" catch described as taking two params: <a href="http://www.erlang.org/workshop/carlsson.ps" target="_blank">http://www.erlang.org/workshop/carlsson.ps</a><br><br></div></div></div><div>Question is: what is this third param (_cor4) for?</div></div></div></div>
_______________________________________________<br>erlang-questions mailing list<br><a href="mailto:erlang-questions@erlang.org" target="_blank">erlang-questions@erlang.org</a><br><a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br></blockquote></div><br></div></div></div><br>_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" rel="noreferrer" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
<br></blockquote></div><br></div>