diff options
author | Björn Gustavsson <[email protected]> | 2011-12-21 07:41:48 +0100 |
---|---|---|
committer | Björn Gustavsson <[email protected]> | 2012-01-04 10:50:25 +0100 |
commit | 726f6e4c7afe8ce37b30eedbebe583e7b9bfc51b (patch) | |
tree | 2788e5963b2f34b29c3b21f4a0a8775f68563663 /lib/compiler/test/misc_SUITE.erl | |
parent | 53bd4974a1012669fb7db09815fabac01b586c12 (diff) | |
download | otp-726f6e4c7afe8ce37b30eedbebe583e7b9bfc51b.tar.gz otp-726f6e4c7afe8ce37b30eedbebe583e7b9bfc51b.tar.bz2 otp-726f6e4c7afe8ce37b30eedbebe583e7b9bfc51b.zip |
Add the beam_except pass to optimize exceptions
In order to save space, rewrite suitable calls to erlang:error/{1,2}
to special BEAM instructions.
This code is probably longer than the code taken out of v3_life and
v3_codegen in the previous commit, but it is much easier to
understand and maintain since the BEAM assembler format is better
understood than the v3_life format.
Diffstat (limited to 'lib/compiler/test/misc_SUITE.erl')
-rw-r--r-- | lib/compiler/test/misc_SUITE.erl | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/lib/compiler/test/misc_SUITE.erl b/lib/compiler/test/misc_SUITE.erl index 9b414cade6..5e13a93c52 100644 --- a/lib/compiler/test/misc_SUITE.erl +++ b/lib/compiler/test/misc_SUITE.erl @@ -190,6 +190,15 @@ silly_coverage(Config) when is_list(Config) -> {label,2}|non_proper_list]}],99}, ?line expect_error(fun() -> beam_block:module(BlockInput, []) end), + %% beam_except + ExceptInput = {?MODULE,[{foo,0}],[], + [{function,foo,0,2, + [{label,1}, + {line,loc}, + {func_info,{atom,?MODULE},{atom,foo},0}, + {label,2}|non_proper_list]}],99}, + expect_error(fun() -> beam_except:module(ExceptInput, []) end), + %% beam_bool BoolInput = {?MODULE,[{foo,0}],[], [{function,foo,0,2, @@ -253,8 +262,15 @@ expect_error(Fun) -> io:format("~p", [Any]), ?t:fail(call_was_supposed_to_fail) catch - _:_ -> - io:format("~p\n", [erlang:get_stacktrace()]) + Class:Reason -> + Stk = erlang:get_stacktrace(), + io:format("~p:~p\n~p\n", [Class,Reason,Stk]), + case {Class,Reason} of + {error,undef} -> + ?t:fail(not_supposed_to_fail_with_undef); + {_,_} -> + ok + end end. confused_literals(Config) when is_list(Config) -> |