diff options
author | Björn Gustavsson <[email protected]> | 2011-08-10 15:14:36 +0200 |
---|---|---|
committer | Björn Gustavsson <[email protected]> | 2011-10-11 11:46:34 +0200 |
commit | f2e79b0670d1c56205ae89ac248de53f46d56ee8 (patch) | |
tree | 2b32de96974bee6e25b59300f382bf114eda03d0 /erts/emulator/beam/beam_load.c | |
parent | 2a30746d09f467c13e9361774867462ae4f2bd32 (diff) | |
download | otp-f2e79b0670d1c56205ae89ac248de53f46d56ee8.tar.gz otp-f2e79b0670d1c56205ae89ac248de53f46d56ee8.tar.bz2 otp-f2e79b0670d1c56205ae89ac248de53f46d56ee8.zip |
Refactor 'too_old_compiler' handling
In the handling of generic instructions, we used to always
test whether the instruction was 'too_old_compiler' and abort
loading with a special error message.
Refactor the code so that we only do test if we an error
has occurred. That will allow us to make the test more expensive
in the future, allowing us to customize error messages for certain
opcode without any cost in the successful case.
Diffstat (limited to 'erts/emulator/beam/beam_load.c')
-rw-r--r-- | erts/emulator/beam/beam_load.c | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/erts/emulator/beam/beam_load.c b/erts/emulator/beam/beam_load.c index 655b5496a8..7c32518ba9 100644 --- a/erts/emulator/beam/beam_load.c +++ b/erts/emulator/beam/beam_load.c @@ -1887,14 +1887,6 @@ load_code(LoaderState* stp) } /* - * Special error message instruction. - */ - if (stp->genop->op == genop_too_old_compiler_0) { - LoadError0(stp, "please re-compile this module with an " - ERLANG_OTP_RELEASE " compiler"); - } - - /* * From the collected generic instruction, find the specific * instruction. */ @@ -1945,7 +1937,17 @@ load_code(LoaderState* stp) ERLANG_OTP_RELEASE " compiler "); } - LoadError0(stp, "no specific operation found"); + /* + * Some generic instructions should have a special + * error message. + */ + switch (stp->genop->op) { + case genop_too_old_compiler_0: + LoadError0(stp, "please re-compile this module with an " + ERLANG_OTP_RELEASE " compiler"); + default: + LoadError0(stp, "no specific operation found"); + } } stp->specific_op = specific; @@ -2409,6 +2411,8 @@ load_code(LoaderState* stp) #define no_fpe_signals(St) 0 #endif +#define never(St) 0 + /* * Predicate that tests whether a jump table can be used. */ |