diff options
author | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-06-18 07:41:22 +0000 |
---|---|---|
committer | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-06-18 07:41:22 +0000 |
commit | 2e5aa3fba8fe96331ab420694aacf710dd995f43 (patch) | |
tree | 98877b525b4e94b0b15505be70051f73d7b3bdd4 /vm_insnhelper.h | |
parent | 4a4f7aeaa16d0dbcc9580b345fa34deaa6a97898 (diff) | |
download | ruby-2e5aa3fba8fe96331ab420694aacf710dd995f43.tar.gz |
hidden objects should not be pushed.
* vm_insnhelper.h (PUSH): hidden objects (klass == 0) should not be pushed
to a VM value stack. Add assertion for it.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63687 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'vm_insnhelper.h')
-rw-r--r-- | vm_insnhelper.h | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/vm_insnhelper.h b/vm_insnhelper.h index f630f73194..25bd92f6fd 100644 --- a/vm_insnhelper.h +++ b/vm_insnhelper.h @@ -36,7 +36,18 @@ RUBY_SYMBOL_EXPORT_END /* deal with stack */ /**********************************************************/ -#define PUSH(x) (SET_SV(x), INC_SP(1)) +static inline int +rb_obj_hidden_p(VALUE obj) +{ + if (SPECIAL_CONST_P(obj)) { + return FALSE; + } + else { + return RBASIC_CLASS(obj) ? FALSE : TRUE; + } +} + +#define PUSH(x) (VM_ASSERT(!rb_obj_hidden_p(x)), SET_SV(x), INC_SP(1)) #define TOPN(n) (*(GET_SP()-(n)-1)) #define POPN(n) (DEC_SP(n)) #define POP() (DEC_SP(1)) |