« Erlang R11B-5 リリース | Main | Erlang で echo server »

Friday, June 15, 2007

Erlang の smart_exception で例外が変になる

smart_exception をデフォルトで使うようにしていたのだけど,どうも例外がおかしくなってしまう模様.
これじゃ使えないじゃない.しょんぼり.

とりあえず家に帰ったらTipsからはいったん消しておこう.
これははまる.

以下のようなコードで確認できる.

-module(exception). -export([test/0]).

test() ->
  try
    test2()
  catch
    Ex -> io:format("Catch ~p~n", [Ex])
  end.

test2() ->
  throw(exception),
  io:format("throwed exception~n").

これを smart_exception 有り無しで実行すると・・・

$ erlc exception.erl && erl -noshell -run exception test -run init stop Catch exception

$ erlc +'{parse_transform, smart_exceptions}' exception.erl && erl -noshell -run exception test -run init stop
throwed exception

こうなってしまい,smart_exception を使うと,throwが無視されてしまう...

----

追記.

氷魚にゃさんが原因を見つけてくれた.

smart_exceptions.erl の

%% define r10 means 'try' is used in the generated code rather
%% than 'catch'. Note that try is _handled_ by default.
%% -define(r10, true).

となっているところの -define をコメントアウトして

-define(r10, true).

とすると直る模様.

「R10B compatibility is weak, not very tested」と書いてあるところが
多少不安だけども(^^;
(すでにR11Bだし)

----

Erlang Tipsの方も修正しました.

インストールされた方は,お手数ですがもう1回入れ直してください.
tar.gzのアーカイブも新しいものに差し替えました.

|

« Erlang R11B-5 リリース | Main | Erlang で echo server »

Comments

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



TrackBack


Listed below are links to weblogs that reference Erlang の smart_exception で例外が変になる:

« Erlang R11B-5 リリース | Main | Erlang で echo server »