From 2e5aa3fba8fe96331ab420694aacf710dd995f43 Mon Sep 17 00:00:00 2001 From: ko1 Date: Mon, 18 Jun 2018 07:41:22 +0000 Subject: 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 --- vm_insnhelper.h | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'vm_insnhelper.h') 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)) -- cgit v1.2.3