diff options
author | Björn Gustavsson <[email protected]> | 2011-08-08 09:42:26 +0200 |
---|---|---|
committer | Björn Gustavsson <[email protected]> | 2011-10-11 11:36:36 +0200 |
commit | e87760199eb9d3c02480e92a0bcf76864c750972 (patch) | |
tree | 8bac71ff949c5cf5a6be41ffc12004d3ecb9297d /erts/emulator | |
parent | 3f8f70e8594ee956dba7edb3602dc9e26e144a69 (diff) | |
download | otp-e87760199eb9d3c02480e92a0bcf76864c750972.tar.gz otp-e87760199eb9d3c02480e92a0bcf76864c750972.tar.bz2 otp-e87760199eb9d3c02480e92a0bcf76864c750972.zip |
Combine 'store_var' with 'next_arg'
'store_var' is always followed by 'next_arg'.
Diffstat (limited to 'erts/emulator')
-rw-r--r-- | erts/emulator/beam/beam_load.c | 3 | ||||
-rwxr-xr-x | erts/emulator/utils/beam_makeops | 4 |
2 files changed, 4 insertions, 3 deletions
diff --git a/erts/emulator/beam/beam_load.c b/erts/emulator/beam/beam_load.c index e858305e9c..7d2b4dea28 100644 --- a/erts/emulator/beam/beam_load.c +++ b/erts/emulator/beam/beam_load.c @@ -4516,11 +4516,12 @@ transform_engine(LoaderState* st) i = *pc++; instr->a[ap].val = i; break; - case TOP_store_var: + case TOP_store_var_next_arg: i = *pc++; ASSERT(i < TE_MAX_VARS); instr->a[ap].type = var[i].type; instr->a[ap].val = var[i].val; + ap++; break; case TOP_try_me_else: restart = pc + 1; diff --git a/erts/emulator/utils/beam_makeops b/erts/emulator/utils/beam_makeops index 5e86356e10..9c7e5e94a5 100755 --- a/erts/emulator/utils/beam_makeops +++ b/erts/emulator/utils/beam_makeops @@ -1613,14 +1613,14 @@ sub tr_gen_to { if ($var ne '') { &error($where, "variable '$var' unbound") unless defined $var{$var}; - push(@code, &make_op($var, 'store_var', $var{$var})); + push(@code, &make_op($var, 'store_var_next_arg', $var{$var})); } elsif ($type ne '') { push(@code, &make_op('', 'store_type', "TAG_$type")); if ($type_val) { push(@code, &make_op('', 'store_val', $type_val)); } + push(@code, make_op('', 'next_arg')); } - push(@code, &make_op('', 'next_arg')); } pop(@code) if is_instr($code[$#code], 'next_arg'); } |