diff options
author | Björn Gustavsson <[email protected]> | 2017-07-06 10:03:27 +0200 |
---|---|---|
committer | GitHub <[email protected]> | 2017-07-06 10:03:27 +0200 |
commit | 250a10f86918db550c7067257f3c3544c14d2286 (patch) | |
tree | b50a7b313fcbc7aa3816bf6d0a134a2368100877 /erts/emulator/beam/beam_emu.c | |
parent | e8a2cae09282b25a8eda9b6f04876e23a854336b (diff) | |
parent | f2b332186a8cdb90b199b7121881b2ae8a454b8c (diff) | |
download | otp-250a10f86918db550c7067257f3c3544c14d2286.tar.gz otp-250a10f86918db550c7067257f3c3544c14d2286.tar.bz2 otp-250a10f86918db550c7067257f3c3544c14d2286.zip |
Merge pull request #1499 from josevalim/jv-tuple-calls
Make tuple calls opt-in
OTP-14497
Diffstat (limited to 'erts/emulator/beam/beam_emu.c')
-rw-r--r-- | erts/emulator/beam/beam_emu.c | 38 |
1 files changed, 5 insertions, 33 deletions
diff --git a/erts/emulator/beam/beam_emu.c b/erts/emulator/beam/beam_emu.c index 27d19d2504..872fba6899 100644 --- a/erts/emulator/beam/beam_emu.c +++ b/erts/emulator/beam/beam_emu.c @@ -6369,7 +6369,7 @@ BeamInstr *I, Uint stack_offset) { int arity; Export* ep; - Eterm tmp, this; + Eterm tmp; /* * Check the arguments which should be of the form apply(Module, @@ -6392,20 +6392,8 @@ BeamInstr *I, Uint stack_offset) while (1) { Eterm m, f, a; - /* The module argument may be either an atom or an abstract module - * (currently implemented using tuples, but this might change). - */ - this = THE_NON_VALUE; - if (is_not_atom(module)) { - Eterm* tp; - - if (is_not_tuple(module)) goto error; - tp = tuple_val(module); - if (arityval(tp[0]) < 1) goto error; - this = module; - module = tp[1]; - if (is_not_atom(module)) goto error; - } + + if (is_not_atom(module)) goto error; if (module != am_erlang || function != am_apply) break; @@ -6440,9 +6428,7 @@ BeamInstr *I, Uint stack_offset) } /* * Walk down the 3rd parameter of apply (the argument list) and copy - * the parameters to the x registers (reg[]). If the module argument - * was an abstract module, add 1 to the function arity and put the - * module argument in the n+1st x register as a THIS reference. + * the parameters to the x registers (reg[]). */ tmp = args; @@ -6459,9 +6445,6 @@ BeamInstr *I, Uint stack_offset) if (is_not_nil(tmp)) { /* Must be well-formed list */ goto error; } - if (this != THE_NON_VALUE) { - reg[arity++] = this; - } /* * Get the index into the export table, or failing that the export @@ -6500,18 +6483,7 @@ fixed_apply(Process* p, Eterm* reg, Uint arity, return 0; } - /* The module argument may be either an atom or an abstract module - * (currently implemented using tuples, but this might change). - */ - if (is_not_atom(module)) { - Eterm* tp; - if (is_not_tuple(module)) goto error; - tp = tuple_val(module); - if (arityval(tp[0]) < 1) goto error; - module = tp[1]; - if (is_not_atom(module)) goto error; - ++arity; - } + if (is_not_atom(module)) goto error; /* Handle apply of apply/3... */ if (module == am_erlang && function == am_apply && arity == 3) |