debase-ruby_core_source 0.8.3 → 0.8.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +4 -0
  3. data/lib/debase/ruby_core_source.rb +0 -8
  4. data/lib/debase/ruby_core_source/{ruby-2.3.0-preview1 → ruby-2.3.0-p0}/addr2line.h +0 -0
  5. data/lib/debase/ruby_core_source/{ruby-2.3.0-preview1 → ruby-2.3.0-p0}/ccan/build_assert/build_assert.h +0 -0
  6. data/lib/debase/ruby_core_source/{ruby-2.3.0-preview1 → ruby-2.3.0-p0}/ccan/check_type/check_type.h +0 -0
  7. data/lib/debase/ruby_core_source/{ruby-2.3.0-preview1 → ruby-2.3.0-p0}/ccan/container_of/container_of.h +0 -0
  8. data/lib/debase/ruby_core_source/{ruby-2.3.0-preview1 → ruby-2.3.0-p0}/ccan/list/list.h +0 -0
  9. data/lib/debase/ruby_core_source/{ruby-2.3.0-preview1 → ruby-2.3.0-p0}/ccan/str/str.h +0 -0
  10. data/lib/debase/ruby_core_source/{ruby-2.3.0-preview1 → ruby-2.3.0-p0}/constant.h +0 -0
  11. data/lib/debase/ruby_core_source/{ruby-2.3.0-preview1 → ruby-2.3.0-p0}/dln.h +0 -0
  12. data/lib/debase/ruby_core_source/{ruby-2.3.0-preview1 → ruby-2.3.0-p0}/encindex.h +0 -0
  13. data/lib/debase/ruby_core_source/{ruby-2.3.0-preview1 → ruby-2.3.0-p0}/eval_intern.h +8 -29
  14. data/lib/debase/ruby_core_source/{ruby-2.3.0-preview1 → ruby-2.3.0-p0}/gc.h +0 -0
  15. data/lib/debase/ruby_core_source/{ruby-2.3.0-preview1 → ruby-2.3.0-p0}/id.h +1 -2
  16. data/lib/debase/ruby_core_source/{ruby-2.3.0-preview1 → ruby-2.3.0-p0}/id_table.h +0 -0
  17. data/lib/debase/ruby_core_source/ruby-2.3.0-p0/insns.inc +110 -0
  18. data/lib/debase/ruby_core_source/{ruby-2.3.0-preview1 → ruby-2.3.0-p0}/insns_info.inc +7 -0
  19. data/lib/debase/ruby_core_source/{ruby-2.3.0-preview1 → ruby-2.3.0-p0}/internal.h +33 -2
  20. data/lib/debase/ruby_core_source/{ruby-2.3.0-preview1 → ruby-2.3.0-p0}/iseq.h +69 -1
  21. data/lib/debase/ruby_core_source/{ruby-2.3.0-preview1 → ruby-2.3.0-p0}/known_errors.inc +0 -0
  22. data/lib/debase/ruby_core_source/{ruby-2.3.0-preview1 → ruby-2.3.0-p0}/method.h +7 -4
  23. data/lib/debase/ruby_core_source/{ruby-2.3.0-preview1 → ruby-2.3.0-p0}/node.h +4 -5
  24. data/lib/debase/ruby_core_source/{ruby-2.3.0-preview1 → ruby-2.3.0-p0}/node_name.inc +0 -0
  25. data/lib/debase/ruby_core_source/{ruby-2.3.0-preview1 → ruby-2.3.0-p0}/opt_sc.inc +8 -0
  26. data/lib/debase/ruby_core_source/{ruby-2.3.0-preview1 → ruby-2.3.0-p0}/optinsn.inc +0 -0
  27. data/lib/debase/ruby_core_source/{ruby-2.3.0-preview1 → ruby-2.3.0-p0}/optunifs.inc +1 -0
  28. data/lib/debase/ruby_core_source/{ruby-2.3.0-preview1 → ruby-2.3.0-p0}/parse.h +0 -0
  29. data/lib/debase/ruby_core_source/{ruby-2.3.0-preview1 → ruby-2.3.0-p0}/probes_helper.h +0 -0
  30. data/lib/debase/ruby_core_source/{ruby-2.3.0-preview1 → ruby-2.3.0-p0}/regenc.h +0 -0
  31. data/lib/debase/ruby_core_source/{ruby-2.3.0-preview1 → ruby-2.3.0-p0}/regint.h +25 -10
  32. data/lib/debase/ruby_core_source/{ruby-2.3.0-preview1 → ruby-2.3.0-p0}/regparse.h +5 -1
  33. data/lib/debase/ruby_core_source/ruby-2.3.0-p0/revision.h +1 -0
  34. data/lib/debase/ruby_core_source/{ruby-2.3.0-preview1 → ruby-2.3.0-p0}/ruby_atomic.h +2 -2
  35. data/lib/debase/ruby_core_source/{ruby-2.3.0-preview1 → ruby-2.3.0-p0}/siphash.h +0 -0
  36. data/lib/debase/ruby_core_source/{ruby-2.3.0-preview1 → ruby-2.3.0-p0}/symbol.h +0 -0
  37. data/lib/debase/ruby_core_source/{ruby-2.3.0-preview1 → ruby-2.3.0-p0}/thread_pthread.h +2 -2
  38. data/lib/debase/ruby_core_source/{ruby-2.3.0-preview1 → ruby-2.3.0-p0}/thread_win32.h +0 -0
  39. data/lib/debase/ruby_core_source/{ruby-2.3.0-preview1 → ruby-2.3.0-p0}/timev.h +0 -0
  40. data/lib/debase/ruby_core_source/{ruby-2.3.0-preview1 → ruby-2.3.0-p0}/transcode_data.h +0 -0
  41. data/lib/debase/ruby_core_source/{ruby-2.3.0-preview1 → ruby-2.3.0-p0}/version.h +5 -5
  42. data/lib/debase/ruby_core_source/{ruby-2.3.0-preview1 → ruby-2.3.0-p0}/vm.inc +174 -136
  43. data/lib/debase/ruby_core_source/{ruby-2.3.0-preview1 → ruby-2.3.0-p0}/vm_call_iseq_optimized.inc +0 -0
  44. data/lib/debase/ruby_core_source/{ruby-2.3.0-preview1 → ruby-2.3.0-p0}/vm_core.h +40 -20
  45. data/lib/debase/ruby_core_source/{ruby-2.3.0-preview1 → ruby-2.3.0-p0}/vm_debug.h +0 -0
  46. data/lib/debase/ruby_core_source/{ruby-2.3.0-preview1 → ruby-2.3.0-p0}/vm_exec.h +0 -0
  47. data/lib/debase/ruby_core_source/{ruby-2.3.0-preview1 → ruby-2.3.0-p0}/vm_insnhelper.h +0 -19
  48. data/lib/debase/ruby_core_source/{ruby-2.3.0-preview1 → ruby-2.3.0-p0}/vm_opts.h +2 -2
  49. data/lib/debase/ruby_core_source/{ruby-2.3.0-preview1 → ruby-2.3.0-p0}/vmtc.inc +1 -0
  50. data/lib/debase/ruby_core_source/version.rb +1 -1
  51. metadata +48 -48
  52. data/lib/debase/ruby_core_source/ruby-2.3.0-preview1/insns.inc +0 -109
  53. data/lib/debase/ruby_core_source/ruby-2.3.0-preview1/revision.h +0 -1
@@ -2,7 +2,7 @@
2
2
 
3
3
  method.h -
4
4
 
5
- $Author: nobu $
5
+ $Author: ko1 $
6
6
  created at: Wed Jul 15 20:02:33 2009
7
7
 
8
8
  Copyright (C) 2009 Koichi Sasada
@@ -42,7 +42,7 @@ typedef struct rb_cref_struct {
42
42
  const VALUE refinements;
43
43
  const VALUE klass;
44
44
  struct rb_cref_struct * const next;
45
- rb_scope_visibility_t scope_visi;
45
+ const rb_scope_visibility_t scope_visi;
46
46
  } rb_cref_t;
47
47
 
48
48
  /* method data type */
@@ -65,6 +65,8 @@ typedef struct rb_callable_method_entry_struct { /* same fields with rb_method_e
65
65
 
66
66
  #define METHOD_ENTRY_VISI(me) (rb_method_visibility_t)(((me)->flags & (IMEMO_FL_USER0 | IMEMO_FL_USER1)) >> (IMEMO_FL_USHIFT+0))
67
67
  #define METHOD_ENTRY_BASIC(me) (int) (((me)->flags & (IMEMO_FL_USER2 )) >> (IMEMO_FL_USHIFT+2))
68
+ #define METHOD_ENTRY_COMPLEMENTED(me) ((me)->flags & IMEMO_FL_USER3)
69
+ #define METHOD_ENTRY_COMPLEMENTED_SET(me) ((me)->flags = (me)->flags | IMEMO_FL_USER3)
68
70
 
69
71
  static inline void
70
72
  METHOD_ENTRY_VISI_SET(rb_method_entry_t *me, rb_method_visibility_t visi)
@@ -143,8 +145,9 @@ typedef struct rb_method_refined_struct {
143
145
  } rb_method_refined_t;
144
146
 
145
147
  typedef struct rb_method_definition_struct {
146
- rb_method_type_t type; /* method type */
147
- int alias_count;
148
+ rb_method_type_t type : 8; /* method type */
149
+ int alias_count : 28;
150
+ int complemented_count: 28;
148
151
 
149
152
  union {
150
153
  rb_method_iseq_t iseq;
@@ -2,7 +2,7 @@
2
2
 
3
3
  node.h -
4
4
 
5
- $Author: nobu $
5
+ $Author: hsbt $
6
6
  created at: Fri May 28 15:14:02 JST 1993
7
7
 
8
8
  Copyright (C) 1993-2007 Yukihiro Matsumoto
@@ -261,12 +261,10 @@ typedef struct RNode {
261
261
 
262
262
  #define RNODE(obj) (R_CAST(RNode)(obj))
263
263
 
264
- /* FL : 0..4: T_TYPES, 5: KEEP_WB, 6: PROMOTED, 7: FINALIZE, 8: TAINT, 9: UNTRUSTERD, 10: EXIVAR, 11: FREEZE */
264
+ /* FL : 0..4: T_TYPES, 5: KEEP_WB, 6: PROMOTED, 7: FINALIZE, 8: TAINT, 9: UNTRUSTED, 10: EXIVAR, 11: FREEZE */
265
265
  /* NODE_FL: 0..4: T_TYPES, 5: KEEP_WB, 6: PROMOTED, 7: NODE_FL_NEWLINE|NODE_FL_CREF_PUSHED_BY_EVAL,
266
266
  * 8..14: nd_type,
267
- * 15..: nd_line or
268
- * 15: NODE_FL_CREF_PUSHED_BY_EVAL
269
- * 16: NODE_FL_CREF_OMOD_SHARED
267
+ * 15..: nd_line
270
268
  */
271
269
  #define NODE_FL_NEWLINE (((VALUE)1)<<7)
272
270
 
@@ -508,6 +506,7 @@ void *rb_parser_malloc(struct parser_params *, size_t);
508
506
  void *rb_parser_realloc(struct parser_params *, void *, size_t);
509
507
  void *rb_parser_calloc(struct parser_params *, size_t, size_t);
510
508
  void rb_parser_free(struct parser_params *, void *);
509
+ void rb_parser_printf(struct parser_params *parser, const char *fmt, ...);
511
510
 
512
511
  RUBY_SYMBOL_EXPORT_END
513
512
 
@@ -652,6 +652,13 @@ SC_ERROR,
652
652
  SC_ERROR,
653
653
  SC_ERROR,
654
654
  SC_ERROR,
655
+ SC_ERROR},
656
+ {
657
+ SC_ERROR,
658
+ SC_ERROR,
659
+ SC_ERROR,
660
+ SC_ERROR,
661
+ SC_ERROR,
655
662
  SC_ERROR}
656
663
  };
657
664
 
@@ -745,6 +752,7 @@ static const VALUE sc_insn_next[] = {
745
752
  SCS_XX,
746
753
  SCS_XX,
747
754
  SCS_XX,
755
+ SCS_XX,
748
756
  SCS_XX
749
757
  };
750
758
 
@@ -119,6 +119,7 @@ static const int *const *const unified_insns_data[] = {
119
119
  0,
120
120
  0,
121
121
  0,
122
+ 0,
122
123
  0};
123
124
 
124
125
 
@@ -4,7 +4,7 @@
4
4
  regint.h - Onigmo (Oniguruma-mod) (regular expression library)
5
5
  **********************************************************************/
6
6
  /*-
7
- * Copyright (c) 2002-2008 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
7
+ * Copyright (c) 2002-2013 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
8
8
  * Copyright (c) 2011-2014 K.Takata <kentkt AT csc DOT jp>
9
9
  * All rights reserved.
10
10
  *
@@ -392,17 +392,17 @@ typedef unsigned int BitStatusType;
392
392
  #define BIT_STATUS_CLEAR(stats) (stats) = 0
393
393
  #define BIT_STATUS_ON_ALL(stats) (stats) = ~((BitStatusType )0)
394
394
  #define BIT_STATUS_AT(stats,n) \
395
- ((n) < (int )BIT_STATUS_BITS_NUM ? ((stats) & ((BitStatusType)1 << n)) : ((stats) & 1))
395
+ ((n) < (int )BIT_STATUS_BITS_NUM ? ((stats) & ((BitStatusType )1 << n)) : ((stats) & 1))
396
396
 
397
397
  #define BIT_STATUS_ON_AT(stats,n) do {\
398
- if ((n) < (int )BIT_STATUS_BITS_NUM) \
398
+ if ((n) < (int )BIT_STATUS_BITS_NUM)\
399
399
  (stats) |= (1 << (n));\
400
400
  else\
401
401
  (stats) |= 1;\
402
402
  } while (0)
403
403
 
404
404
  #define BIT_STATUS_ON_AT_SIMPLE(stats,n) do {\
405
- if ((n) < (int )BIT_STATUS_BITS_NUM)\
405
+ if ((n) < (int )BIT_STATUS_BITS_NUM)\
406
406
  (stats) |= (1 << (n));\
407
407
  } while (0)
408
408
 
@@ -485,23 +485,29 @@ typedef struct _BBuf {
485
485
  #define BBUF_INIT(buf,size) onig_bbuf_init((BBuf* )(buf), (size))
486
486
 
487
487
  #define BBUF_SIZE_INC(buf,inc) do{\
488
+ UChar *tmp;\
488
489
  (buf)->alloc += (inc);\
489
- (buf)->p = (UChar* )xrealloc((buf)->p, (buf)->alloc);\
490
- if (IS_NULL((buf)->p)) return(ONIGERR_MEMORY);\
490
+ tmp = (UChar* )xrealloc((buf)->p, (buf)->alloc);\
491
+ if (IS_NULL(tmp)) return(ONIGERR_MEMORY);\
492
+ (buf)->p = tmp;\
491
493
  } while (0)
492
494
 
493
495
  #define BBUF_EXPAND(buf,low) do{\
496
+ UChar *tmp;\
494
497
  do { (buf)->alloc *= 2; } while ((buf)->alloc < (unsigned int )low);\
495
- (buf)->p = (UChar* )xrealloc((buf)->p, (buf)->alloc);\
496
- if (IS_NULL((buf)->p)) return(ONIGERR_MEMORY);\
498
+ tmp = (UChar* )xrealloc((buf)->p, (buf)->alloc);\
499
+ if (IS_NULL(tmp)) return(ONIGERR_MEMORY);\
500
+ (buf)->p = tmp;\
497
501
  } while (0)
498
502
 
499
503
  #define BBUF_ENSURE_SIZE(buf,size) do{\
500
504
  unsigned int new_alloc = (buf)->alloc;\
501
505
  while (new_alloc < (unsigned int )(size)) { new_alloc *= 2; }\
502
506
  if ((buf)->alloc != new_alloc) {\
503
- (buf)->p = (UChar* )xrealloc((buf)->p, new_alloc);\
504
- if (IS_NULL((buf)->p)) return(ONIGERR_MEMORY);\
507
+ UChar *tmp;\
508
+ tmp = (UChar* )xrealloc((buf)->p, new_alloc);\
509
+ if (IS_NULL(tmp)) return(ONIGERR_MEMORY);\
510
+ (buf)->p = tmp;\
505
511
  (buf)->alloc = new_alloc;\
506
512
  }\
507
513
  } while (0)
@@ -903,6 +909,14 @@ typedef struct {
903
909
  #define IS_CODE_SB_WORD(enc,code) \
904
910
  (ONIGENC_IS_CODE_ASCII(code) && ONIGENC_IS_CODE_WORD(enc,code))
905
911
 
912
+ typedef struct OnigEndCallListItem {
913
+ struct OnigEndCallListItem* next;
914
+ void (*func)(void);
915
+ } OnigEndCallListItemType;
916
+
917
+ extern void onig_add_end_call(void (*func)(void));
918
+
919
+
906
920
  #ifdef ONIG_DEBUG
907
921
 
908
922
  typedef struct {
@@ -913,6 +927,7 @@ typedef struct {
913
927
 
914
928
  extern OnigOpInfoType OnigOpInfo[];
915
929
 
930
+
916
931
  extern void onig_print_compiled_byte_code P_((FILE* f, UChar* bp, UChar* bpend, UChar** nextp, OnigEncoding enc));
917
932
 
918
933
  #ifdef ONIG_DEBUG_STATISTICS
@@ -67,7 +67,11 @@ RUBY_SYMBOL_EXPORT_BEGIN
67
67
  BIT_NT_CANY | BIT_NT_BREF)) != 0)
68
68
 
69
69
  #define NTYPE(node) ((node)->u.base.type)
70
- #define SET_NTYPE(node, ntype) (node)->u.base.type = (ntype)
70
+ #define SET_NTYPE(node, ntype) \
71
+ do { \
72
+ int value = ntype; \
73
+ memcpy(&((node)->u.base.type), &value, sizeof(int)); \
74
+ } while (0)
71
75
 
72
76
  #define NSTR(node) (&((node)->u.str))
73
77
  #define NCCLASS(node) (&((node)->u.cclass))
@@ -0,0 +1 @@
1
+ #define RUBY_REVISION 53290
@@ -10,7 +10,7 @@ typedef unsigned int rb_atomic_t;
10
10
  # define ATOMIC_OR(var, val) __atomic_fetch_or(&(var), (val), __ATOMIC_SEQ_CST)
11
11
  # define ATOMIC_EXCHANGE(var, val) __atomic_exchange_n(&(var), (val), __ATOMIC_SEQ_CST)
12
12
  # define ATOMIC_CAS(var, oldval, newval) \
13
- ({ __typeof__(oldval) oldvaldup = (oldval); /* oldval should not be modified */ \
13
+ ({ __typeof__(var) oldvaldup = (oldval); /* oldval should not be modified */ \
14
14
  __atomic_compare_exchange_n(&(var), &oldvaldup, (newval), 0, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); \
15
15
  oldvaldup; })
16
16
 
@@ -81,7 +81,7 @@ rb_w32_atomic_cas(volatile rb_atomic_t *var, rb_atomic_t oldval, rb_atomic_t new
81
81
  # define ATOMIC_SIZE_INC(var) InterlockedIncrement64(&(var))
82
82
  # define ATOMIC_SIZE_DEC(var) InterlockedDecrement64(&(var))
83
83
  # define ATOMIC_SIZE_EXCHANGE(var, val) InterlockedExchange64(&(var), (val))
84
- # define ATOMIC_SIZE_CAS(var, oldval, val) InterlockedCompareExchange64(&(var), (oldval), (val))
84
+ # define ATOMIC_SIZE_CAS(var, oldval, newval) InterlockedCompareExchange64(&(var), (newval), (oldval))
85
85
  # else
86
86
  # define ATOMIC_SIZE_ADD(var, val) InterlockedExchangeAdd((LONG *)&(var), (val))
87
87
  # define ATOMIC_SIZE_SUB(var, val) InterlockedExchangeAdd((LONG *)&(var), -(LONG)(val))
@@ -2,7 +2,7 @@
2
2
 
3
3
  thread_pthread.h -
4
4
 
5
- $Author: normal $
5
+ $Author: kosaki $
6
6
 
7
7
  Copyright (C) 2004-2007 Koichi Sasada
8
8
 
@@ -26,7 +26,7 @@ typedef struct rb_thread_cond_struct {
26
26
  } rb_nativethread_cond_t;
27
27
 
28
28
  typedef struct native_thread_data_struct {
29
- void *signal_thread_list;
29
+ struct list_node ubf_list;
30
30
  rb_nativethread_cond_t sleep_cond;
31
31
  } native_thread_data_t;
32
32
 
@@ -1,10 +1,10 @@
1
1
  #define RUBY_VERSION "2.3.0"
2
- #define RUBY_RELEASE_DATE "2015-11-11"
3
- #define RUBY_PATCHLEVEL -1
2
+ #define RUBY_RELEASE_DATE "2015-12-25"
3
+ #define RUBY_PATCHLEVEL 0
4
4
 
5
5
  #define RUBY_RELEASE_YEAR 2015
6
- #define RUBY_RELEASE_MONTH 11
7
- #define RUBY_RELEASE_DAY 11
6
+ #define RUBY_RELEASE_MONTH 12
7
+ #define RUBY_RELEASE_DAY 25
8
8
 
9
9
  #include "ruby/version.h"
10
10
 
@@ -17,7 +17,7 @@
17
17
  #endif
18
18
 
19
19
  #if RUBY_PATCHLEVEL == -1
20
- #define RUBY_PATCHLEVEL_STR "preview1"
20
+ #define RUBY_PATCHLEVEL_STR "dev"
21
21
  #else
22
22
  #define RUBY_PATCHLEVEL_STR "p"STRINGIZE(RUBY_PATCHLEVEL)
23
23
  #endif
@@ -586,6 +586,35 @@ INSN_ENTRY(tostring){
586
586
  #undef INSN_LABEL
587
587
  #undef LABEL_IS_SC
588
588
  END_INSN(tostring);}}}
589
+ INSN_ENTRY(freezestring){
590
+ {
591
+ VALUE debug_info = (VALUE)GET_OPERAND(1);
592
+ VALUE str = TOPN(0);
593
+ DEBUG_ENTER_INSN("freezestring");
594
+ ADD_PC(1+1);
595
+ PREFETCH(GET_PC());
596
+ POPN(1);
597
+ #define CURRENT_INSN_freezestring 1
598
+ #define INSN_IS_SC() 0
599
+ #define INSN_LABEL(lab) LABEL_freezestring_##lab
600
+ #define LABEL_IS_SC(lab) LABEL_##lab##_##t
601
+ COLLECT_USAGE_INSN(BIN(freezestring));
602
+ COLLECT_USAGE_OPERAND(BIN(freezestring), 0, debug_info);
603
+ {
604
+ #line 403 "insns.def"
605
+ if (!NIL_P(debug_info)) {
606
+ rb_ivar_set(str, id_debug_created_info, debug_info);
607
+ }
608
+ rb_str_freeze(str);
609
+
610
+ #line 611 "vm.inc"
611
+ CHECK_VM_STACK_OVERFLOW_FOR_INSN(REG_CFP, 1);
612
+ PUSH(str);
613
+ #undef CURRENT_INSN_freezestring
614
+ #undef INSN_IS_SC
615
+ #undef INSN_LABEL
616
+ #undef LABEL_IS_SC
617
+ END_INSN(freezestring);}}}
589
618
  INSN_ENTRY(toregexp){
590
619
  {
591
620
  VALUE val;
@@ -603,7 +632,7 @@ INSN_ENTRY(toregexp){
603
632
  COLLECT_USAGE_OPERAND(BIN(toregexp), 0, opt);
604
633
  COLLECT_USAGE_OPERAND(BIN(toregexp), 1, cnt);
605
634
  {
606
- #line 404 "insns.def"
635
+ #line 421 "insns.def"
607
636
  VALUE rb_reg_new_ary(VALUE ary, int options);
608
637
  rb_num_t i;
609
638
  const VALUE ary = rb_ary_tmp_new(cnt);
@@ -614,7 +643,7 @@ INSN_ENTRY(toregexp){
614
643
  val = rb_reg_new_ary(ary, (int)opt);
615
644
  rb_ary_clear(ary);
616
645
 
617
- #line 618 "vm.inc"
646
+ #line 647 "vm.inc"
618
647
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(REG_CFP, 1);
619
648
  PUSH(val);
620
649
  #undef CURRENT_INSN_toregexp
@@ -637,11 +666,11 @@ INSN_ENTRY(newarray){
637
666
  COLLECT_USAGE_INSN(BIN(newarray));
638
667
  COLLECT_USAGE_OPERAND(BIN(newarray), 0, num);
639
668
  {
640
- #line 426 "insns.def"
669
+ #line 443 "insns.def"
641
670
  val = rb_ary_new4((long)num, STACK_ADDR_FROM_TOP(num));
642
671
  POPN(num);
643
672
 
644
- #line 645 "vm.inc"
673
+ #line 674 "vm.inc"
645
674
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(REG_CFP, 1);
646
675
  PUSH(val);
647
676
  #undef CURRENT_INSN_newarray
@@ -664,10 +693,10 @@ INSN_ENTRY(duparray){
664
693
  COLLECT_USAGE_INSN(BIN(duparray));
665
694
  COLLECT_USAGE_OPERAND(BIN(duparray), 0, ary);
666
695
  {
667
- #line 441 "insns.def"
696
+ #line 458 "insns.def"
668
697
  val = rb_ary_resurrect(ary);
669
698
 
670
- #line 671 "vm.inc"
699
+ #line 700 "vm.inc"
671
700
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(REG_CFP, 1);
672
701
  PUSH(val);
673
702
  #undef CURRENT_INSN_duparray
@@ -692,10 +721,10 @@ INSN_ENTRY(expandarray){
692
721
  COLLECT_USAGE_OPERAND(BIN(expandarray), 0, num);
693
722
  COLLECT_USAGE_OPERAND(BIN(expandarray), 1, flag);
694
723
  {
695
- #line 462 "insns.def"
724
+ #line 479 "insns.def"
696
725
  vm_expandarray(GET_CFP(), ary, num, (int)flag);
697
726
 
698
- #line 699 "vm.inc"
727
+ #line 728 "vm.inc"
699
728
  #undef CURRENT_INSN_expandarray
700
729
  #undef INSN_IS_SC
701
730
  #undef INSN_LABEL
@@ -717,7 +746,7 @@ INSN_ENTRY(concatarray){
717
746
  #define LABEL_IS_SC(lab) LABEL_##lab##_##t
718
747
  COLLECT_USAGE_INSN(BIN(concatarray));
719
748
  {
720
- #line 476 "insns.def"
749
+ #line 493 "insns.def"
721
750
  const VALUE ary2 = ary2st;
722
751
  VALUE tmp1 = rb_check_convert_type(ary1, T_ARRAY, "Array", "to_a");
723
752
  VALUE tmp2 = rb_check_convert_type(ary2, T_ARRAY, "Array", "to_a");
@@ -735,7 +764,7 @@ INSN_ENTRY(concatarray){
735
764
  }
736
765
  ary = rb_ary_concat(tmp1, tmp2);
737
766
 
738
- #line 739 "vm.inc"
767
+ #line 768 "vm.inc"
739
768
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(REG_CFP, 1);
740
769
  PUSH(ary);
741
770
  #undef CURRENT_INSN_concatarray
@@ -759,7 +788,7 @@ INSN_ENTRY(splatarray){
759
788
  COLLECT_USAGE_INSN(BIN(splatarray));
760
789
  COLLECT_USAGE_OPERAND(BIN(splatarray), 0, flag);
761
790
  {
762
- #line 505 "insns.def"
791
+ #line 522 "insns.def"
763
792
  VALUE tmp = rb_check_convert_type(ary, T_ARRAY, "Array", "to_a");
764
793
  if (NIL_P(tmp)) {
765
794
  tmp = rb_ary_new3(1, ary);
@@ -769,7 +798,7 @@ INSN_ENTRY(splatarray){
769
798
  }
770
799
  obj = tmp;
771
800
 
772
- #line 773 "vm.inc"
801
+ #line 802 "vm.inc"
773
802
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(REG_CFP, 1);
774
803
  PUSH(obj);
775
804
  #undef CURRENT_INSN_splatarray
@@ -792,7 +821,7 @@ INSN_ENTRY(newhash){
792
821
  COLLECT_USAGE_INSN(BIN(newhash));
793
822
  COLLECT_USAGE_OPERAND(BIN(newhash), 0, num);
794
823
  {
795
- #line 527 "insns.def"
824
+ #line 544 "insns.def"
796
825
  rb_num_t i;
797
826
 
798
827
  RUBY_DTRACE_CREATE_HOOK(HASH, num);
@@ -806,7 +835,7 @@ INSN_ENTRY(newhash){
806
835
  }
807
836
  POPN(num);
808
837
 
809
- #line 810 "vm.inc"
838
+ #line 839 "vm.inc"
810
839
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(REG_CFP, 1);
811
840
  PUSH(val);
812
841
  #undef CURRENT_INSN_newhash
@@ -831,10 +860,10 @@ INSN_ENTRY(newrange){
831
860
  COLLECT_USAGE_INSN(BIN(newrange));
832
861
  COLLECT_USAGE_OPERAND(BIN(newrange), 0, flag);
833
862
  {
834
- #line 552 "insns.def"
863
+ #line 569 "insns.def"
835
864
  val = rb_range_new(low, high, (int)flag);
836
865
 
837
- #line 838 "vm.inc"
866
+ #line 867 "vm.inc"
838
867
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(REG_CFP, 1);
839
868
  PUSH(val);
840
869
  #undef CURRENT_INSN_newrange
@@ -856,11 +885,11 @@ INSN_ENTRY(pop){
856
885
  #define LABEL_IS_SC(lab) LABEL_##lab##_##t
857
886
  COLLECT_USAGE_INSN(BIN(pop));
858
887
  {
859
- #line 570 "insns.def"
888
+ #line 587 "insns.def"
860
889
  (void)val;
861
890
  /* none */
862
891
 
863
- #line 864 "vm.inc"
892
+ #line 893 "vm.inc"
864
893
  #undef CURRENT_INSN_pop
865
894
  #undef INSN_IS_SC
866
895
  #undef INSN_LABEL
@@ -882,10 +911,10 @@ INSN_ENTRY(dup){
882
911
  #define LABEL_IS_SC(lab) LABEL_##lab##_##t
883
912
  COLLECT_USAGE_INSN(BIN(dup));
884
913
  {
885
- #line 585 "insns.def"
914
+ #line 602 "insns.def"
886
915
  val1 = val2 = val;
887
916
 
888
- #line 889 "vm.inc"
917
+ #line 918 "vm.inc"
889
918
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(REG_CFP, 2);
890
919
  PUSH(val1);
891
920
  PUSH(val2);
@@ -908,7 +937,7 @@ INSN_ENTRY(dupn){
908
937
  COLLECT_USAGE_INSN(BIN(dupn));
909
938
  COLLECT_USAGE_OPERAND(BIN(dupn), 0, n);
910
939
  {
911
- #line 599 "insns.def"
940
+ #line 616 "insns.def"
912
941
  rb_num_t i;
913
942
  VALUE *sp = STACK_ADDR_FROM_TOP(n);
914
943
  for (i = 0; i < n; i++) {
@@ -916,7 +945,7 @@ INSN_ENTRY(dupn){
916
945
  }
917
946
  INC_SP(n);
918
947
 
919
- #line 920 "vm.inc"
948
+ #line 949 "vm.inc"
920
949
  #undef CURRENT_INSN_dupn
921
950
  #undef INSN_IS_SC
922
951
  #undef INSN_LABEL
@@ -937,10 +966,10 @@ INSN_ENTRY(swap){
937
966
  #define LABEL_IS_SC(lab) LABEL_##lab##_##t
938
967
  COLLECT_USAGE_INSN(BIN(swap));
939
968
  {
940
- #line 619 "insns.def"
969
+ #line 636 "insns.def"
941
970
  /* none */
942
971
 
943
- #line 944 "vm.inc"
972
+ #line 973 "vm.inc"
944
973
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(REG_CFP, 2);
945
974
  PUSH(obj);
946
975
  PUSH(val);
@@ -963,7 +992,7 @@ INSN_ENTRY(reverse){
963
992
  COLLECT_USAGE_INSN(BIN(reverse));
964
993
  COLLECT_USAGE_OPERAND(BIN(reverse), 0, n);
965
994
  {
966
- #line 633 "insns.def"
995
+ #line 650 "insns.def"
967
996
  rb_num_t i;
968
997
  VALUE *sp = STACK_ADDR_FROM_TOP(n);
969
998
 
@@ -974,7 +1003,7 @@ INSN_ENTRY(reverse){
974
1003
  TOPN(i) = v0;
975
1004
  }
976
1005
 
977
- #line 978 "vm.inc"
1006
+ #line 1007 "vm.inc"
978
1007
  #undef CURRENT_INSN_reverse
979
1008
  #undef INSN_IS_SC
980
1009
  #undef INSN_LABEL
@@ -994,10 +1023,10 @@ INSN_ENTRY(reput){
994
1023
  #define LABEL_IS_SC(lab) LABEL_##lab##_##t
995
1024
  COLLECT_USAGE_INSN(BIN(reput));
996
1025
  {
997
- #line 655 "insns.def"
1026
+ #line 672 "insns.def"
998
1027
  /* none */
999
1028
 
1000
- #line 1001 "vm.inc"
1029
+ #line 1030 "vm.inc"
1001
1030
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(REG_CFP, 1);
1002
1031
  PUSH(val);
1003
1032
  #undef CURRENT_INSN_reput
@@ -1020,10 +1049,10 @@ INSN_ENTRY(topn){
1020
1049
  COLLECT_USAGE_INSN(BIN(topn));
1021
1050
  COLLECT_USAGE_OPERAND(BIN(topn), 0, n);
1022
1051
  {
1023
- #line 669 "insns.def"
1052
+ #line 686 "insns.def"
1024
1053
  val = TOPN(n);
1025
1054
 
1026
- #line 1027 "vm.inc"
1055
+ #line 1056 "vm.inc"
1027
1056
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(REG_CFP, 1);
1028
1057
  PUSH(val);
1029
1058
  #undef CURRENT_INSN_topn
@@ -1046,10 +1075,10 @@ INSN_ENTRY(setn){
1046
1075
  COLLECT_USAGE_INSN(BIN(setn));
1047
1076
  COLLECT_USAGE_OPERAND(BIN(setn), 0, n);
1048
1077
  {
1049
- #line 683 "insns.def"
1078
+ #line 700 "insns.def"
1050
1079
  TOPN(n-1) = val;
1051
1080
 
1052
- #line 1053 "vm.inc"
1081
+ #line 1082 "vm.inc"
1053
1082
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(REG_CFP, 1);
1054
1083
  PUSH(val);
1055
1084
  #undef CURRENT_INSN_setn
@@ -1071,10 +1100,10 @@ INSN_ENTRY(adjuststack){
1071
1100
  COLLECT_USAGE_INSN(BIN(adjuststack));
1072
1101
  COLLECT_USAGE_OPERAND(BIN(adjuststack), 0, n);
1073
1102
  {
1074
- #line 697 "insns.def"
1103
+ #line 714 "insns.def"
1075
1104
  DEC_SP(n);
1076
1105
 
1077
- #line 1078 "vm.inc"
1106
+ #line 1107 "vm.inc"
1078
1107
  #undef CURRENT_INSN_adjuststack
1079
1108
  #undef INSN_IS_SC
1080
1109
  #undef INSN_LABEL
@@ -1100,10 +1129,10 @@ INSN_ENTRY(defined){
1100
1129
  COLLECT_USAGE_OPERAND(BIN(defined), 1, obj);
1101
1130
  COLLECT_USAGE_OPERAND(BIN(defined), 2, needstr);
1102
1131
  {
1103
- #line 716 "insns.def"
1132
+ #line 733 "insns.def"
1104
1133
  val = vm_defined(th, GET_CFP(), op_type, obj, needstr, v);
1105
1134
 
1106
- #line 1107 "vm.inc"
1135
+ #line 1136 "vm.inc"
1107
1136
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(REG_CFP, 1);
1108
1137
  PUSH(val);
1109
1138
  #undef CURRENT_INSN_defined
@@ -1128,7 +1157,7 @@ INSN_ENTRY(checkmatch){
1128
1157
  COLLECT_USAGE_INSN(BIN(checkmatch));
1129
1158
  COLLECT_USAGE_OPERAND(BIN(checkmatch), 0, flag);
1130
1159
  {
1131
- #line 735 "insns.def"
1160
+ #line 752 "insns.def"
1132
1161
  enum vm_check_match_type checkmatch_type =
1133
1162
  (enum vm_check_match_type)(flag & VM_CHECKMATCH_TYPE_MASK);
1134
1163
  result = Qfalse;
@@ -1148,7 +1177,7 @@ INSN_ENTRY(checkmatch){
1148
1177
  }
1149
1178
  }
1150
1179
 
1151
- #line 1152 "vm.inc"
1180
+ #line 1181 "vm.inc"
1152
1181
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(REG_CFP, 1);
1153
1182
  PUSH(result);
1154
1183
  #undef CURRENT_INSN_checkmatch
@@ -1173,7 +1202,7 @@ INSN_ENTRY(checkkeyword){
1173
1202
  COLLECT_USAGE_OPERAND(BIN(checkkeyword), 0, kw_bits_index);
1174
1203
  COLLECT_USAGE_OPERAND(BIN(checkkeyword), 1, keyword_index);
1175
1204
  {
1176
- #line 766 "insns.def"
1205
+ #line 783 "insns.def"
1177
1206
  const VALUE *ep = GET_EP();
1178
1207
  const VALUE kw_bits = *(ep - kw_bits_index);
1179
1208
 
@@ -1186,7 +1215,7 @@ INSN_ENTRY(checkkeyword){
1186
1215
  ret = rb_hash_has_key(kw_bits, INT2FIX(keyword_index)) ? Qfalse : Qtrue;
1187
1216
  }
1188
1217
 
1189
- #line 1190 "vm.inc"
1218
+ #line 1219 "vm.inc"
1190
1219
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(REG_CFP, 1);
1191
1220
  PUSH(ret);
1192
1221
  #undef CURRENT_INSN_checkkeyword
@@ -1208,7 +1237,7 @@ INSN_ENTRY(trace){
1208
1237
  COLLECT_USAGE_INSN(BIN(trace));
1209
1238
  COLLECT_USAGE_OPERAND(BIN(trace), 0, nf);
1210
1239
  {
1211
- #line 790 "insns.def"
1240
+ #line 807 "insns.def"
1212
1241
  rb_event_flag_t flag = (rb_event_flag_t)nf;
1213
1242
 
1214
1243
  if (RUBY_DTRACE_METHOD_ENTRY_ENABLED() ||
@@ -1235,7 +1264,7 @@ INSN_ENTRY(trace){
1235
1264
  EXEC_EVENT_HOOK(th, flag, GET_SELF(), 0, 0 /* id and klass are resolved at callee */,
1236
1265
  (flag & (RUBY_EVENT_RETURN | RUBY_EVENT_B_RETURN)) ? TOPN(0) : Qundef);
1237
1266
 
1238
- #line 1239 "vm.inc"
1267
+ #line 1268 "vm.inc"
1239
1268
  #undef CURRENT_INSN_trace
1240
1269
  #undef INSN_IS_SC
1241
1270
  #undef INSN_LABEL
@@ -1262,7 +1291,7 @@ INSN_ENTRY(defineclass){
1262
1291
  COLLECT_USAGE_OPERAND(BIN(defineclass), 1, class_iseq);
1263
1292
  COLLECT_USAGE_OPERAND(BIN(defineclass), 2, flags);
1264
1293
  {
1265
- #line 836 "insns.def"
1294
+ #line 853 "insns.def"
1266
1295
  VALUE klass;
1267
1296
  rb_vm_defineclass_type_t type = VM_DEFINECLASS_TYPE(flags);
1268
1297
 
@@ -1341,17 +1370,19 @@ INSN_ENTRY(defineclass){
1341
1370
  rb_bug("unknown defineclass type: %d", (int)type);
1342
1371
  }
1343
1372
 
1373
+ rb_iseq_check(class_iseq);
1374
+
1344
1375
  /* enter scope */
1345
1376
  vm_push_frame(th, class_iseq, VM_FRAME_MAGIC_CLASS, klass,
1346
1377
  VM_ENVVAL_BLOCK_PTR(GET_BLOCK_PTR()),
1347
- (VALUE)vm_cref_push(th, klass, NULL),
1378
+ (VALUE)vm_cref_push(th, klass, NULL, FALSE),
1348
1379
  class_iseq->body->iseq_encoded, GET_SP(),
1349
- class_iseq->body->local_size, class_iseq->body->stack_max);
1350
-
1380
+ class_iseq->body->local_size,
1381
+ class_iseq->body->stack_max);
1351
1382
  RESTORE_REGS();
1352
1383
  NEXT_INSN();
1353
1384
 
1354
- #line 1355 "vm.inc"
1385
+ #line 1386 "vm.inc"
1355
1386
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(REG_CFP, 1);
1356
1387
  PUSH(val);
1357
1388
  #undef CURRENT_INSN_defineclass
@@ -1378,14 +1409,14 @@ INSN_ENTRY(send){
1378
1409
  COLLECT_USAGE_OPERAND(BIN(send), 1, cc);
1379
1410
  COLLECT_USAGE_OPERAND(BIN(send), 2, blockiseq);
1380
1411
  {
1381
- #line 941 "insns.def"
1412
+ #line 960 "insns.def"
1382
1413
  struct rb_calling_info calling;
1383
1414
 
1384
1415
  vm_caller_setup_arg_block(th, reg_cfp, &calling, ci, blockiseq, FALSE);
1385
1416
  vm_search_method(ci, cc, calling.recv = TOPN(calling.argc = ci->orig_argc));
1386
1417
  CALL_METHOD(&calling, ci, cc);
1387
1418
 
1388
- #line 1389 "vm.inc"
1419
+ #line 1420 "vm.inc"
1389
1420
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(REG_CFP, 1);
1390
1421
  PUSH(val);
1391
1422
  #undef CURRENT_INSN_send
@@ -1408,7 +1439,7 @@ INSN_ENTRY(opt_str_freeze){
1408
1439
  COLLECT_USAGE_INSN(BIN(opt_str_freeze));
1409
1440
  COLLECT_USAGE_OPERAND(BIN(opt_str_freeze), 0, str);
1410
1441
  {
1411
- #line 954 "insns.def"
1442
+ #line 973 "insns.def"
1412
1443
  if (BASIC_OP_UNREDEFINED_P(BOP_FREEZE, STRING_REDEFINED_OP_FLAG)) {
1413
1444
  val = str;
1414
1445
  }
@@ -1416,7 +1447,7 @@ INSN_ENTRY(opt_str_freeze){
1416
1447
  val = rb_funcall(rb_str_resurrect(str), idFreeze, 0);
1417
1448
  }
1418
1449
 
1419
- #line 1420 "vm.inc"
1450
+ #line 1451 "vm.inc"
1420
1451
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(REG_CFP, 1);
1421
1452
  PUSH(val);
1422
1453
  #undef CURRENT_INSN_opt_str_freeze
@@ -1441,13 +1472,13 @@ INSN_ENTRY(opt_send_without_block){
1441
1472
  COLLECT_USAGE_OPERAND(BIN(opt_send_without_block), 0, ci);
1442
1473
  COLLECT_USAGE_OPERAND(BIN(opt_send_without_block), 1, cc);
1443
1474
  {
1444
- #line 973 "insns.def"
1475
+ #line 992 "insns.def"
1445
1476
  struct rb_calling_info calling;
1446
1477
  calling.blockptr = NULL;
1447
1478
  vm_search_method(ci, cc, calling.recv = TOPN(calling.argc = ci->orig_argc));
1448
1479
  CALL_METHOD(&calling, ci, cc);
1449
1480
 
1450
- #line 1451 "vm.inc"
1481
+ #line 1482 "vm.inc"
1451
1482
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(REG_CFP, 1);
1452
1483
  PUSH(val);
1453
1484
  #undef CURRENT_INSN_opt_send_without_block
@@ -1474,7 +1505,7 @@ INSN_ENTRY(invokesuper){
1474
1505
  COLLECT_USAGE_OPERAND(BIN(invokesuper), 1, cc);
1475
1506
  COLLECT_USAGE_OPERAND(BIN(invokesuper), 2, blockiseq);
1476
1507
  {
1477
- #line 990 "insns.def"
1508
+ #line 1009 "insns.def"
1478
1509
  struct rb_calling_info calling;
1479
1510
  calling.argc = ci->orig_argc;
1480
1511
 
@@ -1483,7 +1514,7 @@ INSN_ENTRY(invokesuper){
1483
1514
  vm_search_super_method(th, GET_CFP(), &calling, ci, cc);
1484
1515
  CALL_METHOD(&calling, ci, cc);
1485
1516
 
1486
- #line 1487 "vm.inc"
1517
+ #line 1518 "vm.inc"
1487
1518
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(REG_CFP, 1);
1488
1519
  PUSH(val);
1489
1520
  #undef CURRENT_INSN_invokesuper
@@ -1506,7 +1537,7 @@ INSN_ENTRY(invokeblock){
1506
1537
  COLLECT_USAGE_INSN(BIN(invokeblock));
1507
1538
  COLLECT_USAGE_OPERAND(BIN(invokeblock), 0, ci);
1508
1539
  {
1509
- #line 1010 "insns.def"
1540
+ #line 1029 "insns.def"
1510
1541
  struct rb_calling_info calling;
1511
1542
  calling.argc = ci->orig_argc;
1512
1543
  calling.blockptr = NULL;
@@ -1518,7 +1549,7 @@ INSN_ENTRY(invokeblock){
1518
1549
  NEXT_INSN();
1519
1550
  }
1520
1551
 
1521
- #line 1522 "vm.inc"
1552
+ #line 1553 "vm.inc"
1522
1553
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(REG_CFP, 1);
1523
1554
  PUSH(val);
1524
1555
  #undef CURRENT_INSN_invokeblock
@@ -1540,7 +1571,7 @@ INSN_ENTRY(leave){
1540
1571
  #define LABEL_IS_SC(lab) LABEL_##lab##_##t
1541
1572
  COLLECT_USAGE_INSN(BIN(leave));
1542
1573
  {
1543
- #line 1033 "insns.def"
1574
+ #line 1052 "insns.def"
1544
1575
  if (OPT_CHECKED_RUN) {
1545
1576
  const VALUE *const bp = vm_base_ptr(reg_cfp);
1546
1577
  if (reg_cfp->sp != bp) {
@@ -1566,7 +1597,7 @@ INSN_ENTRY(leave){
1566
1597
  RESTORE_REGS();
1567
1598
  }
1568
1599
 
1569
- #line 1570 "vm.inc"
1600
+ #line 1601 "vm.inc"
1570
1601
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(REG_CFP, 1);
1571
1602
  PUSH(val);
1572
1603
  #undef CURRENT_INSN_leave
@@ -1590,13 +1621,13 @@ INSN_ENTRY(throw){
1590
1621
  COLLECT_USAGE_INSN(BIN(throw));
1591
1622
  COLLECT_USAGE_OPERAND(BIN(throw), 0, throw_state);
1592
1623
  {
1593
- #line 1074 "insns.def"
1624
+ #line 1093 "insns.def"
1594
1625
  RUBY_VM_CHECK_INTS(th);
1595
1626
  val = vm_throw(th, GET_CFP(), throw_state, throwobj);
1596
1627
  THROW_EXCEPTION(val);
1597
1628
  /* unreachable */
1598
1629
 
1599
- #line 1600 "vm.inc"
1630
+ #line 1631 "vm.inc"
1600
1631
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(REG_CFP, 1);
1601
1632
  PUSH(val);
1602
1633
  #undef CURRENT_INSN_throw
@@ -1618,11 +1649,11 @@ INSN_ENTRY(jump){
1618
1649
  COLLECT_USAGE_INSN(BIN(jump));
1619
1650
  COLLECT_USAGE_OPERAND(BIN(jump), 0, dst);
1620
1651
  {
1621
- #line 1095 "insns.def"
1652
+ #line 1114 "insns.def"
1622
1653
  RUBY_VM_CHECK_INTS(th);
1623
1654
  JUMP(dst);
1624
1655
 
1625
- #line 1626 "vm.inc"
1656
+ #line 1657 "vm.inc"
1626
1657
  #undef CURRENT_INSN_jump
1627
1658
  #undef INSN_IS_SC
1628
1659
  #undef INSN_LABEL
@@ -1643,13 +1674,13 @@ INSN_ENTRY(branchif){
1643
1674
  COLLECT_USAGE_INSN(BIN(branchif));
1644
1675
  COLLECT_USAGE_OPERAND(BIN(branchif), 0, dst);
1645
1676
  {
1646
- #line 1110 "insns.def"
1677
+ #line 1129 "insns.def"
1647
1678
  if (RTEST(val)) {
1648
1679
  RUBY_VM_CHECK_INTS(th);
1649
1680
  JUMP(dst);
1650
1681
  }
1651
1682
 
1652
- #line 1653 "vm.inc"
1683
+ #line 1684 "vm.inc"
1653
1684
  #undef CURRENT_INSN_branchif
1654
1685
  #undef INSN_IS_SC
1655
1686
  #undef INSN_LABEL
@@ -1670,13 +1701,13 @@ INSN_ENTRY(branchunless){
1670
1701
  COLLECT_USAGE_INSN(BIN(branchunless));
1671
1702
  COLLECT_USAGE_OPERAND(BIN(branchunless), 0, dst);
1672
1703
  {
1673
- #line 1127 "insns.def"
1704
+ #line 1146 "insns.def"
1674
1705
  if (!RTEST(val)) {
1675
1706
  RUBY_VM_CHECK_INTS(th);
1676
1707
  JUMP(dst);
1677
1708
  }
1678
1709
 
1679
- #line 1680 "vm.inc"
1710
+ #line 1711 "vm.inc"
1680
1711
  #undef CURRENT_INSN_branchunless
1681
1712
  #undef INSN_IS_SC
1682
1713
  #undef INSN_LABEL
@@ -1697,13 +1728,13 @@ INSN_ENTRY(branchnil){
1697
1728
  COLLECT_USAGE_INSN(BIN(branchnil));
1698
1729
  COLLECT_USAGE_OPERAND(BIN(branchnil), 0, dst);
1699
1730
  {
1700
- #line 1144 "insns.def"
1731
+ #line 1163 "insns.def"
1701
1732
  if (NIL_P(val)) {
1702
1733
  RUBY_VM_CHECK_INTS(th);
1703
1734
  JUMP(dst);
1704
1735
  }
1705
1736
 
1706
- #line 1707 "vm.inc"
1737
+ #line 1738 "vm.inc"
1707
1738
  #undef CURRENT_INSN_branchnil
1708
1739
  #undef INSN_IS_SC
1709
1740
  #undef INSN_LABEL
@@ -1726,7 +1757,7 @@ INSN_ENTRY(getinlinecache){
1726
1757
  COLLECT_USAGE_OPERAND(BIN(getinlinecache), 0, dst);
1727
1758
  COLLECT_USAGE_OPERAND(BIN(getinlinecache), 1, ic);
1728
1759
  {
1729
- #line 1166 "insns.def"
1760
+ #line 1185 "insns.def"
1730
1761
  if (ic->ic_serial == GET_GLOBAL_CONSTANT_STATE() &&
1731
1762
  (ic->ic_cref == NULL || ic->ic_cref == rb_vm_get_cref(GET_EP()))) {
1732
1763
  val = ic->ic_value.value;
@@ -1737,7 +1768,7 @@ INSN_ENTRY(getinlinecache){
1737
1768
  val = Qnil;
1738
1769
  }
1739
1770
 
1740
- #line 1741 "vm.inc"
1771
+ #line 1772 "vm.inc"
1741
1772
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(REG_CFP, 1);
1742
1773
  PUSH(val);
1743
1774
  #undef CURRENT_INSN_getinlinecache
@@ -1760,14 +1791,14 @@ INSN_ENTRY(setinlinecache){
1760
1791
  COLLECT_USAGE_INSN(BIN(setinlinecache));
1761
1792
  COLLECT_USAGE_OPERAND(BIN(setinlinecache), 0, ic);
1762
1793
  {
1763
- #line 1188 "insns.def"
1794
+ #line 1207 "insns.def"
1764
1795
  VM_ASSERT(ic->ic_value.value != Qundef);
1765
1796
  ic->ic_value.value = val;
1766
1797
  ic->ic_serial = GET_GLOBAL_CONSTANT_STATE() - ruby_vm_const_missing_count;
1767
1798
  ic->ic_cref = vm_get_const_key_cref(GET_EP());
1768
1799
  ruby_vm_const_missing_count = 0;
1769
1800
 
1770
- #line 1771 "vm.inc"
1801
+ #line 1802 "vm.inc"
1771
1802
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(REG_CFP, 1);
1772
1803
  PUSH(val);
1773
1804
  #undef CURRENT_INSN_setinlinecache
@@ -1792,7 +1823,7 @@ INSN_ENTRY(once){
1792
1823
  COLLECT_USAGE_OPERAND(BIN(once), 0, iseq);
1793
1824
  COLLECT_USAGE_OPERAND(BIN(once), 1, ic);
1794
1825
  {
1795
- #line 1206 "insns.def"
1826
+ #line 1225 "insns.def"
1796
1827
  union iseq_inline_storage_entry *is = (union iseq_inline_storage_entry *)ic;
1797
1828
 
1798
1829
  #define RUNNING_THREAD_ONCE_DONE ((rb_thread_t *)(0x1))
@@ -1818,7 +1849,7 @@ INSN_ENTRY(once){
1818
1849
  goto retry;
1819
1850
  }
1820
1851
 
1821
- #line 1822 "vm.inc"
1852
+ #line 1853 "vm.inc"
1822
1853
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(REG_CFP, 1);
1823
1854
  PUSH(val);
1824
1855
  #undef CURRENT_INSN_once
@@ -1843,14 +1874,17 @@ INSN_ENTRY(opt_case_dispatch){
1843
1874
  COLLECT_USAGE_OPERAND(BIN(opt_case_dispatch), 0, hash);
1844
1875
  COLLECT_USAGE_OPERAND(BIN(opt_case_dispatch), 1, else_offset);
1845
1876
  {
1846
- #line 1243 "insns.def"
1877
+ #line 1262 "insns.def"
1847
1878
  switch(TYPE(key)) {
1848
1879
  case T_FLOAT: {
1849
1880
  double ival;
1850
- if (modf(RFLOAT_VALUE(key), &ival) == 0.0) {
1881
+ if (modf(RFLOAT_VALUE(key), &ival) == 0.0 && !isinf(ival)) {
1851
1882
  key = FIXABLE(ival) ? LONG2FIX((long)ival) : rb_dbl2big(ival);
1852
1883
  }
1853
1884
  }
1885
+ case T_TRUE:
1886
+ case T_FALSE:
1887
+ case T_NIL:
1854
1888
  case T_SYMBOL: /* fall through */
1855
1889
  case T_FIXNUM:
1856
1890
  case T_BIGNUM:
@@ -1858,7 +1892,11 @@ INSN_ENTRY(opt_case_dispatch){
1858
1892
  if (BASIC_OP_UNREDEFINED_P(BOP_EQQ,
1859
1893
  SYMBOL_REDEFINED_OP_FLAG |
1860
1894
  FIXNUM_REDEFINED_OP_FLAG |
1895
+ FLOAT_REDEFINED_OP_FLAG |
1861
1896
  BIGNUM_REDEFINED_OP_FLAG |
1897
+ NIL_REDEFINED_OP_FLAG |
1898
+ TRUE_REDEFINED_OP_FLAG |
1899
+ FALSE_REDEFINED_OP_FLAG |
1862
1900
  STRING_REDEFINED_OP_FLAG)) {
1863
1901
  st_data_t val;
1864
1902
  if (st_lookup(RHASH_TBL_RAW(hash), key, &val)) {
@@ -1873,7 +1911,7 @@ INSN_ENTRY(opt_case_dispatch){
1873
1911
  break;
1874
1912
  }
1875
1913
 
1876
- #line 1877 "vm.inc"
1914
+ #line 1915 "vm.inc"
1877
1915
  #undef CURRENT_INSN_opt_case_dispatch
1878
1916
  #undef INSN_IS_SC
1879
1917
  #undef INSN_LABEL
@@ -1898,7 +1936,7 @@ INSN_ENTRY(opt_plus){
1898
1936
  COLLECT_USAGE_OPERAND(BIN(opt_plus), 0, ci);
1899
1937
  COLLECT_USAGE_OPERAND(BIN(opt_plus), 1, cc);
1900
1938
  {
1901
- #line 1286 "insns.def"
1939
+ #line 1312 "insns.def"
1902
1940
  if (FIXNUM_2_P(recv, obj) &&
1903
1941
  BASIC_OP_UNREDEFINED_P(BOP_PLUS,FIXNUM_REDEFINED_OP_FLAG)) {
1904
1942
  /* fixnum + fixnum */
@@ -1950,7 +1988,7 @@ INSN_ENTRY(opt_plus){
1950
1988
  CALL_SIMPLE_METHOD(recv);
1951
1989
  }
1952
1990
 
1953
- #line 1954 "vm.inc"
1991
+ #line 1992 "vm.inc"
1954
1992
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(REG_CFP, 1);
1955
1993
  PUSH(val);
1956
1994
  #undef CURRENT_INSN_opt_plus
@@ -1977,7 +2015,7 @@ INSN_ENTRY(opt_minus){
1977
2015
  COLLECT_USAGE_OPERAND(BIN(opt_minus), 0, ci);
1978
2016
  COLLECT_USAGE_OPERAND(BIN(opt_minus), 1, cc);
1979
2017
  {
1980
- #line 1349 "insns.def"
2018
+ #line 1375 "insns.def"
1981
2019
  if (FIXNUM_2_P(recv, obj) &&
1982
2020
  BASIC_OP_UNREDEFINED_P(BOP_MINUS, FIXNUM_REDEFINED_OP_FLAG)) {
1983
2021
  long a, b, c;
@@ -2014,7 +2052,7 @@ INSN_ENTRY(opt_minus){
2014
2052
  CALL_SIMPLE_METHOD(recv);
2015
2053
  }
2016
2054
 
2017
- #line 2018 "vm.inc"
2055
+ #line 2056 "vm.inc"
2018
2056
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(REG_CFP, 1);
2019
2057
  PUSH(val);
2020
2058
  #undef CURRENT_INSN_opt_minus
@@ -2041,7 +2079,7 @@ INSN_ENTRY(opt_mult){
2041
2079
  COLLECT_USAGE_OPERAND(BIN(opt_mult), 0, ci);
2042
2080
  COLLECT_USAGE_OPERAND(BIN(opt_mult), 1, cc);
2043
2081
  {
2044
- #line 1397 "insns.def"
2082
+ #line 1423 "insns.def"
2045
2083
  if (FIXNUM_2_P(recv, obj) &&
2046
2084
  BASIC_OP_UNREDEFINED_P(BOP_MULT, FIXNUM_REDEFINED_OP_FLAG)) {
2047
2085
  long a, b;
@@ -2080,7 +2118,7 @@ INSN_ENTRY(opt_mult){
2080
2118
  CALL_SIMPLE_METHOD(recv);
2081
2119
  }
2082
2120
 
2083
- #line 2084 "vm.inc"
2121
+ #line 2122 "vm.inc"
2084
2122
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(REG_CFP, 1);
2085
2123
  PUSH(val);
2086
2124
  #undef CURRENT_INSN_opt_mult
@@ -2107,7 +2145,7 @@ INSN_ENTRY(opt_div){
2107
2145
  COLLECT_USAGE_OPERAND(BIN(opt_div), 0, ci);
2108
2146
  COLLECT_USAGE_OPERAND(BIN(opt_div), 1, cc);
2109
2147
  {
2110
- #line 1447 "insns.def"
2148
+ #line 1473 "insns.def"
2111
2149
  if (FIXNUM_2_P(recv, obj) &&
2112
2150
  BASIC_OP_UNREDEFINED_P(BOP_DIV, FIXNUM_REDEFINED_OP_FLAG)) {
2113
2151
  long x, y, div;
@@ -2159,7 +2197,7 @@ INSN_ENTRY(opt_div){
2159
2197
  CALL_SIMPLE_METHOD(recv);
2160
2198
  }
2161
2199
 
2162
- #line 2163 "vm.inc"
2200
+ #line 2201 "vm.inc"
2163
2201
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(REG_CFP, 1);
2164
2202
  PUSH(val);
2165
2203
  #undef CURRENT_INSN_opt_div
@@ -2186,7 +2224,7 @@ INSN_ENTRY(opt_mod){
2186
2224
  COLLECT_USAGE_OPERAND(BIN(opt_mod), 0, ci);
2187
2225
  COLLECT_USAGE_OPERAND(BIN(opt_mod), 1, cc);
2188
2226
  {
2189
- #line 1510 "insns.def"
2227
+ #line 1536 "insns.def"
2190
2228
  if (FIXNUM_2_P(recv, obj) &&
2191
2229
  BASIC_OP_UNREDEFINED_P(BOP_MOD, FIXNUM_REDEFINED_OP_FLAG )) {
2192
2230
  long x, y;
@@ -2242,7 +2280,7 @@ INSN_ENTRY(opt_mod){
2242
2280
  CALL_SIMPLE_METHOD(recv);
2243
2281
  }
2244
2282
 
2245
- #line 2246 "vm.inc"
2283
+ #line 2284 "vm.inc"
2246
2284
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(REG_CFP, 1);
2247
2285
  PUSH(val);
2248
2286
  #undef CURRENT_INSN_opt_mod
@@ -2269,7 +2307,7 @@ INSN_ENTRY(opt_eq){
2269
2307
  COLLECT_USAGE_OPERAND(BIN(opt_eq), 0, ci);
2270
2308
  COLLECT_USAGE_OPERAND(BIN(opt_eq), 1, cc);
2271
2309
  {
2272
- #line 1577 "insns.def"
2310
+ #line 1603 "insns.def"
2273
2311
  val = opt_eq_func(recv, obj, ci, cc);
2274
2312
 
2275
2313
  if (val == Qundef) {
@@ -2279,7 +2317,7 @@ INSN_ENTRY(opt_eq){
2279
2317
  CALL_SIMPLE_METHOD(recv);
2280
2318
  }
2281
2319
 
2282
- #line 2283 "vm.inc"
2320
+ #line 2321 "vm.inc"
2283
2321
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(REG_CFP, 1);
2284
2322
  PUSH(val);
2285
2323
  #undef CURRENT_INSN_opt_eq
@@ -2310,7 +2348,7 @@ INSN_ENTRY(opt_neq){
2310
2348
  COLLECT_USAGE_OPERAND(BIN(opt_neq), 2, ci_eq);
2311
2349
  COLLECT_USAGE_OPERAND(BIN(opt_neq), 3, cc_eq);
2312
2350
  {
2313
- #line 1598 "insns.def"
2351
+ #line 1624 "insns.def"
2314
2352
  extern VALUE rb_obj_not_equal(VALUE obj1, VALUE obj2);
2315
2353
  vm_search_method(ci, cc, recv);
2316
2354
 
@@ -2331,7 +2369,7 @@ INSN_ENTRY(opt_neq){
2331
2369
  CALL_SIMPLE_METHOD(recv);
2332
2370
  }
2333
2371
 
2334
- #line 2335 "vm.inc"
2372
+ #line 2373 "vm.inc"
2335
2373
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(REG_CFP, 1);
2336
2374
  PUSH(val);
2337
2375
  #undef CURRENT_INSN_opt_neq
@@ -2358,7 +2396,7 @@ INSN_ENTRY(opt_lt){
2358
2396
  COLLECT_USAGE_OPERAND(BIN(opt_lt), 0, ci);
2359
2397
  COLLECT_USAGE_OPERAND(BIN(opt_lt), 1, cc);
2360
2398
  {
2361
- #line 1630 "insns.def"
2399
+ #line 1656 "insns.def"
2362
2400
  if (FIXNUM_2_P(recv, obj) &&
2363
2401
  BASIC_OP_UNREDEFINED_P(BOP_LT, FIXNUM_REDEFINED_OP_FLAG)) {
2364
2402
  SIGNED_VALUE a = recv, b = obj;
@@ -2391,7 +2429,7 @@ INSN_ENTRY(opt_lt){
2391
2429
  CALL_SIMPLE_METHOD(recv);
2392
2430
  }
2393
2431
 
2394
- #line 2395 "vm.inc"
2432
+ #line 2433 "vm.inc"
2395
2433
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(REG_CFP, 1);
2396
2434
  PUSH(val);
2397
2435
  #undef CURRENT_INSN_opt_lt
@@ -2418,7 +2456,7 @@ INSN_ENTRY(opt_le){
2418
2456
  COLLECT_USAGE_OPERAND(BIN(opt_le), 0, ci);
2419
2457
  COLLECT_USAGE_OPERAND(BIN(opt_le), 1, cc);
2420
2458
  {
2421
- #line 1674 "insns.def"
2459
+ #line 1700 "insns.def"
2422
2460
  if (FIXNUM_2_P(recv, obj) &&
2423
2461
  BASIC_OP_UNREDEFINED_P(BOP_LE, FIXNUM_REDEFINED_OP_FLAG)) {
2424
2462
  SIGNED_VALUE a = recv, b = obj;
@@ -2442,7 +2480,7 @@ INSN_ENTRY(opt_le){
2442
2480
  CALL_SIMPLE_METHOD(recv);
2443
2481
  }
2444
2482
 
2445
- #line 2446 "vm.inc"
2483
+ #line 2484 "vm.inc"
2446
2484
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(REG_CFP, 1);
2447
2485
  PUSH(val);
2448
2486
  #undef CURRENT_INSN_opt_le
@@ -2469,7 +2507,7 @@ INSN_ENTRY(opt_gt){
2469
2507
  COLLECT_USAGE_OPERAND(BIN(opt_gt), 0, ci);
2470
2508
  COLLECT_USAGE_OPERAND(BIN(opt_gt), 1, cc);
2471
2509
  {
2472
- #line 1709 "insns.def"
2510
+ #line 1735 "insns.def"
2473
2511
  if (FIXNUM_2_P(recv, obj) &&
2474
2512
  BASIC_OP_UNREDEFINED_P(BOP_GT, FIXNUM_REDEFINED_OP_FLAG)) {
2475
2513
  SIGNED_VALUE a = recv, b = obj;
@@ -2502,7 +2540,7 @@ INSN_ENTRY(opt_gt){
2502
2540
  CALL_SIMPLE_METHOD(recv);
2503
2541
  }
2504
2542
 
2505
- #line 2506 "vm.inc"
2543
+ #line 2544 "vm.inc"
2506
2544
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(REG_CFP, 1);
2507
2545
  PUSH(val);
2508
2546
  #undef CURRENT_INSN_opt_gt
@@ -2529,7 +2567,7 @@ INSN_ENTRY(opt_ge){
2529
2567
  COLLECT_USAGE_OPERAND(BIN(opt_ge), 0, ci);
2530
2568
  COLLECT_USAGE_OPERAND(BIN(opt_ge), 1, cc);
2531
2569
  {
2532
- #line 1753 "insns.def"
2570
+ #line 1779 "insns.def"
2533
2571
  if (FIXNUM_2_P(recv, obj) &&
2534
2572
  BASIC_OP_UNREDEFINED_P(BOP_GE, FIXNUM_REDEFINED_OP_FLAG)) {
2535
2573
  SIGNED_VALUE a = recv, b = obj;
@@ -2552,7 +2590,7 @@ INSN_ENTRY(opt_ge){
2552
2590
  CALL_SIMPLE_METHOD(recv);
2553
2591
  }
2554
2592
 
2555
- #line 2556 "vm.inc"
2593
+ #line 2594 "vm.inc"
2556
2594
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(REG_CFP, 1);
2557
2595
  PUSH(val);
2558
2596
  #undef CURRENT_INSN_opt_ge
@@ -2579,7 +2617,7 @@ INSN_ENTRY(opt_ltlt){
2579
2617
  COLLECT_USAGE_OPERAND(BIN(opt_ltlt), 0, ci);
2580
2618
  COLLECT_USAGE_OPERAND(BIN(opt_ltlt), 1, cc);
2581
2619
  {
2582
- #line 1787 "insns.def"
2620
+ #line 1813 "insns.def"
2583
2621
  if (!SPECIAL_CONST_P(recv)) {
2584
2622
  if (RBASIC_CLASS(recv) == rb_cString &&
2585
2623
  BASIC_OP_UNREDEFINED_P(BOP_LTLT, STRING_REDEFINED_OP_FLAG)) {
@@ -2600,7 +2638,7 @@ INSN_ENTRY(opt_ltlt){
2600
2638
  CALL_SIMPLE_METHOD(recv);
2601
2639
  }
2602
2640
 
2603
- #line 2604 "vm.inc"
2641
+ #line 2642 "vm.inc"
2604
2642
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(REG_CFP, 1);
2605
2643
  PUSH(val);
2606
2644
  #undef CURRENT_INSN_opt_ltlt
@@ -2627,7 +2665,7 @@ INSN_ENTRY(opt_aref){
2627
2665
  COLLECT_USAGE_OPERAND(BIN(opt_aref), 0, ci);
2628
2666
  COLLECT_USAGE_OPERAND(BIN(opt_aref), 1, cc);
2629
2667
  {
2630
- #line 1819 "insns.def"
2668
+ #line 1845 "insns.def"
2631
2669
  if (!SPECIAL_CONST_P(recv)) {
2632
2670
  if (RBASIC_CLASS(recv) == rb_cArray && BASIC_OP_UNREDEFINED_P(BOP_AREF, ARRAY_REDEFINED_OP_FLAG) && FIXNUM_P(obj)) {
2633
2671
  val = rb_ary_entry(recv, FIX2LONG(obj));
@@ -2646,7 +2684,7 @@ INSN_ENTRY(opt_aref){
2646
2684
  CALL_SIMPLE_METHOD(recv);
2647
2685
  }
2648
2686
 
2649
- #line 2650 "vm.inc"
2687
+ #line 2688 "vm.inc"
2650
2688
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(REG_CFP, 1);
2651
2689
  PUSH(val);
2652
2690
  #undef CURRENT_INSN_opt_aref
@@ -2674,7 +2712,7 @@ INSN_ENTRY(opt_aset){
2674
2712
  COLLECT_USAGE_OPERAND(BIN(opt_aset), 0, ci);
2675
2713
  COLLECT_USAGE_OPERAND(BIN(opt_aset), 1, cc);
2676
2714
  {
2677
- #line 1849 "insns.def"
2715
+ #line 1875 "insns.def"
2678
2716
  if (!SPECIAL_CONST_P(recv)) {
2679
2717
  if (RBASIC_CLASS(recv) == rb_cArray && BASIC_OP_UNREDEFINED_P(BOP_ASET, ARRAY_REDEFINED_OP_FLAG) && FIXNUM_P(obj)) {
2680
2718
  rb_ary_store(recv, FIX2LONG(obj), set);
@@ -2696,7 +2734,7 @@ INSN_ENTRY(opt_aset){
2696
2734
  CALL_SIMPLE_METHOD(recv);
2697
2735
  }
2698
2736
 
2699
- #line 2700 "vm.inc"
2737
+ #line 2738 "vm.inc"
2700
2738
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(REG_CFP, 1);
2701
2739
  PUSH(val);
2702
2740
  #undef CURRENT_INSN_opt_aset
@@ -2724,7 +2762,7 @@ INSN_ENTRY(opt_aset_with){
2724
2762
  COLLECT_USAGE_OPERAND(BIN(opt_aset_with), 1, cc);
2725
2763
  COLLECT_USAGE_OPERAND(BIN(opt_aset_with), 2, key);
2726
2764
  {
2727
- #line 1882 "insns.def"
2765
+ #line 1908 "insns.def"
2728
2766
  if (!SPECIAL_CONST_P(recv) && RBASIC_CLASS(recv) == rb_cHash && BASIC_OP_UNREDEFINED_P(BOP_ASET, HASH_REDEFINED_OP_FLAG)) {
2729
2767
  rb_hash_aset(recv, key, val);
2730
2768
  }
@@ -2735,7 +2773,7 @@ INSN_ENTRY(opt_aset_with){
2735
2773
  CALL_SIMPLE_METHOD(recv);
2736
2774
  }
2737
2775
 
2738
- #line 2739 "vm.inc"
2776
+ #line 2777 "vm.inc"
2739
2777
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(REG_CFP, 1);
2740
2778
  PUSH(val);
2741
2779
  #undef CURRENT_INSN_opt_aset_with
@@ -2763,7 +2801,7 @@ INSN_ENTRY(opt_aref_with){
2763
2801
  COLLECT_USAGE_OPERAND(BIN(opt_aref_with), 1, cc);
2764
2802
  COLLECT_USAGE_OPERAND(BIN(opt_aref_with), 2, key);
2765
2803
  {
2766
- #line 1904 "insns.def"
2804
+ #line 1930 "insns.def"
2767
2805
  if (!SPECIAL_CONST_P(recv) && RBASIC_CLASS(recv) == rb_cHash && BASIC_OP_UNREDEFINED_P(BOP_AREF, HASH_REDEFINED_OP_FLAG)) {
2768
2806
  val = rb_hash_aref(recv, key);
2769
2807
  }
@@ -2773,7 +2811,7 @@ INSN_ENTRY(opt_aref_with){
2773
2811
  CALL_SIMPLE_METHOD(recv);
2774
2812
  }
2775
2813
 
2776
- #line 2777 "vm.inc"
2814
+ #line 2815 "vm.inc"
2777
2815
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(REG_CFP, 1);
2778
2816
  PUSH(val);
2779
2817
  #undef CURRENT_INSN_opt_aref_with
@@ -2799,7 +2837,7 @@ INSN_ENTRY(opt_length){
2799
2837
  COLLECT_USAGE_OPERAND(BIN(opt_length), 0, ci);
2800
2838
  COLLECT_USAGE_OPERAND(BIN(opt_length), 1, cc);
2801
2839
  {
2802
- #line 1925 "insns.def"
2840
+ #line 1951 "insns.def"
2803
2841
  if (!SPECIAL_CONST_P(recv)) {
2804
2842
  if (RBASIC_CLASS(recv) == rb_cString &&
2805
2843
  BASIC_OP_UNREDEFINED_P(BOP_LENGTH, STRING_REDEFINED_OP_FLAG)) {
@@ -2823,7 +2861,7 @@ INSN_ENTRY(opt_length){
2823
2861
  CALL_SIMPLE_METHOD(recv);
2824
2862
  }
2825
2863
 
2826
- #line 2827 "vm.inc"
2864
+ #line 2865 "vm.inc"
2827
2865
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(REG_CFP, 1);
2828
2866
  PUSH(val);
2829
2867
  #undef CURRENT_INSN_opt_length
@@ -2849,7 +2887,7 @@ INSN_ENTRY(opt_size){
2849
2887
  COLLECT_USAGE_OPERAND(BIN(opt_size), 0, ci);
2850
2888
  COLLECT_USAGE_OPERAND(BIN(opt_size), 1, cc);
2851
2889
  {
2852
- #line 1960 "insns.def"
2890
+ #line 1986 "insns.def"
2853
2891
  if (!SPECIAL_CONST_P(recv)) {
2854
2892
  if (RBASIC_CLASS(recv) == rb_cString &&
2855
2893
  BASIC_OP_UNREDEFINED_P(BOP_SIZE, STRING_REDEFINED_OP_FLAG)) {
@@ -2873,7 +2911,7 @@ INSN_ENTRY(opt_size){
2873
2911
  CALL_SIMPLE_METHOD(recv);
2874
2912
  }
2875
2913
 
2876
- #line 2877 "vm.inc"
2914
+ #line 2915 "vm.inc"
2877
2915
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(REG_CFP, 1);
2878
2916
  PUSH(val);
2879
2917
  #undef CURRENT_INSN_opt_size
@@ -2899,7 +2937,7 @@ INSN_ENTRY(opt_empty_p){
2899
2937
  COLLECT_USAGE_OPERAND(BIN(opt_empty_p), 0, ci);
2900
2938
  COLLECT_USAGE_OPERAND(BIN(opt_empty_p), 1, cc);
2901
2939
  {
2902
- #line 1995 "insns.def"
2940
+ #line 2021 "insns.def"
2903
2941
  if (!SPECIAL_CONST_P(recv)) {
2904
2942
  if (RBASIC_CLASS(recv) == rb_cString &&
2905
2943
  BASIC_OP_UNREDEFINED_P(BOP_EMPTY_P, STRING_REDEFINED_OP_FLAG)) {
@@ -2926,7 +2964,7 @@ INSN_ENTRY(opt_empty_p){
2926
2964
  CALL_SIMPLE_METHOD(recv);
2927
2965
  }
2928
2966
 
2929
- #line 2930 "vm.inc"
2967
+ #line 2968 "vm.inc"
2930
2968
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(REG_CFP, 1);
2931
2969
  PUSH(val);
2932
2970
  #undef CURRENT_INSN_opt_empty_p
@@ -2952,7 +2990,7 @@ INSN_ENTRY(opt_succ){
2952
2990
  COLLECT_USAGE_OPERAND(BIN(opt_succ), 0, ci);
2953
2991
  COLLECT_USAGE_OPERAND(BIN(opt_succ), 1, cc);
2954
2992
  {
2955
- #line 2033 "insns.def"
2993
+ #line 2059 "insns.def"
2956
2994
  if (SPECIAL_CONST_P(recv)) {
2957
2995
  if (FIXNUM_P(recv) &&
2958
2996
  BASIC_OP_UNREDEFINED_P(BOP_SUCC, FIXNUM_REDEFINED_OP_FLAG)) {
@@ -2984,7 +3022,7 @@ INSN_ENTRY(opt_succ){
2984
3022
  CALL_SIMPLE_METHOD(recv);
2985
3023
  }
2986
3024
 
2987
- #line 2988 "vm.inc"
3025
+ #line 3026 "vm.inc"
2988
3026
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(REG_CFP, 1);
2989
3027
  PUSH(val);
2990
3028
  #undef CURRENT_INSN_opt_succ
@@ -3010,7 +3048,7 @@ INSN_ENTRY(opt_not){
3010
3048
  COLLECT_USAGE_OPERAND(BIN(opt_not), 0, ci);
3011
3049
  COLLECT_USAGE_OPERAND(BIN(opt_not), 1, cc);
3012
3050
  {
3013
- #line 2076 "insns.def"
3051
+ #line 2102 "insns.def"
3014
3052
  extern VALUE rb_obj_not(VALUE obj);
3015
3053
 
3016
3054
  vm_search_method(ci, cc, recv);
@@ -3023,7 +3061,7 @@ INSN_ENTRY(opt_not){
3023
3061
  CALL_SIMPLE_METHOD(recv);
3024
3062
  }
3025
3063
 
3026
- #line 3027 "vm.inc"
3064
+ #line 3065 "vm.inc"
3027
3065
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(REG_CFP, 1);
3028
3066
  PUSH(val);
3029
3067
  #undef CURRENT_INSN_opt_not
@@ -3047,7 +3085,7 @@ INSN_ENTRY(opt_regexpmatch1){
3047
3085
  COLLECT_USAGE_INSN(BIN(opt_regexpmatch1));
3048
3086
  COLLECT_USAGE_OPERAND(BIN(opt_regexpmatch1), 0, r);
3049
3087
  {
3050
- #line 2101 "insns.def"
3088
+ #line 2127 "insns.def"
3051
3089
  if (BASIC_OP_UNREDEFINED_P(BOP_MATCH, REGEXP_REDEFINED_OP_FLAG)) {
3052
3090
  val = rb_reg_match(r, obj);
3053
3091
  }
@@ -3055,7 +3093,7 @@ INSN_ENTRY(opt_regexpmatch1){
3055
3093
  val = rb_funcall(r, idEqTilde, 1, obj);
3056
3094
  }
3057
3095
 
3058
- #line 3059 "vm.inc"
3096
+ #line 3097 "vm.inc"
3059
3097
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(REG_CFP, 1);
3060
3098
  PUSH(val);
3061
3099
  #undef CURRENT_INSN_opt_regexpmatch1
@@ -3082,7 +3120,7 @@ INSN_ENTRY(opt_regexpmatch2){
3082
3120
  COLLECT_USAGE_OPERAND(BIN(opt_regexpmatch2), 0, ci);
3083
3121
  COLLECT_USAGE_OPERAND(BIN(opt_regexpmatch2), 1, cc);
3084
3122
  {
3085
- #line 2120 "insns.def"
3123
+ #line 2146 "insns.def"
3086
3124
  if (CLASS_OF(obj2) == rb_cString &&
3087
3125
  BASIC_OP_UNREDEFINED_P(BOP_MATCH, STRING_REDEFINED_OP_FLAG)) {
3088
3126
  val = rb_reg_match(obj1, obj2);
@@ -3093,7 +3131,7 @@ INSN_ENTRY(opt_regexpmatch2){
3093
3131
  CALL_SIMPLE_METHOD(obj2);
3094
3132
  }
3095
3133
 
3096
- #line 3097 "vm.inc"
3134
+ #line 3135 "vm.inc"
3097
3135
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(REG_CFP, 1);
3098
3136
  PUSH(val);
3099
3137
  #undef CURRENT_INSN_opt_regexpmatch2
@@ -3115,7 +3153,7 @@ INSN_ENTRY(opt_call_c_function){
3115
3153
  COLLECT_USAGE_INSN(BIN(opt_call_c_function));
3116
3154
  COLLECT_USAGE_OPERAND(BIN(opt_call_c_function), 0, funcptr);
3117
3155
  {
3118
- #line 2142 "insns.def"
3156
+ #line 2168 "insns.def"
3119
3157
  reg_cfp = (funcptr)(th, reg_cfp);
3120
3158
 
3121
3159
  if (reg_cfp == 0) {
@@ -3127,7 +3165,7 @@ INSN_ENTRY(opt_call_c_function){
3127
3165
  RESTORE_REGS();
3128
3166
  NEXT_INSN();
3129
3167
 
3130
- #line 3131 "vm.inc"
3168
+ #line 3169 "vm.inc"
3131
3169
  #undef CURRENT_INSN_opt_call_c_function
3132
3170
  #undef INSN_IS_SC
3133
3171
  #undef INSN_LABEL
@@ -3147,10 +3185,10 @@ INSN_ENTRY(bitblt){
3147
3185
  #define LABEL_IS_SC(lab) LABEL_##lab##_##t
3148
3186
  COLLECT_USAGE_INSN(BIN(bitblt));
3149
3187
  {
3150
- #line 2165 "insns.def"
3188
+ #line 2191 "insns.def"
3151
3189
  ret = rb_str_new2("a bit of bacon, lettuce and tomato");
3152
3190
 
3153
- #line 3154 "vm.inc"
3191
+ #line 3192 "vm.inc"
3154
3192
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(REG_CFP, 1);
3155
3193
  PUSH(ret);
3156
3194
  #undef CURRENT_INSN_bitblt
@@ -3172,10 +3210,10 @@ INSN_ENTRY(answer){
3172
3210
  #define LABEL_IS_SC(lab) LABEL_##lab##_##t
3173
3211
  COLLECT_USAGE_INSN(BIN(answer));
3174
3212
  {
3175
- #line 2179 "insns.def"
3213
+ #line 2205 "insns.def"
3176
3214
  ret = INT2FIX(42);
3177
3215
 
3178
- #line 3179 "vm.inc"
3216
+ #line 3217 "vm.inc"
3179
3217
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(REG_CFP, 1);
3180
3218
  PUSH(ret);
3181
3219
  #undef CURRENT_INSN_answer
@@ -3209,7 +3247,7 @@ INSN_ENTRY(getlocal_OP__WC__0){
3209
3247
  }
3210
3248
  val = *(ep - idx);
3211
3249
 
3212
- #line 3213 "vm.inc"
3250
+ #line 3251 "vm.inc"
3213
3251
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(REG_CFP, 1);
3214
3252
  PUSH(val);
3215
3253
  #undef level
@@ -3244,7 +3282,7 @@ INSN_ENTRY(getlocal_OP__WC__1){
3244
3282
  }
3245
3283
  val = *(ep - idx);
3246
3284
 
3247
- #line 3248 "vm.inc"
3285
+ #line 3286 "vm.inc"
3248
3286
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(REG_CFP, 1);
3249
3287
  PUSH(val);
3250
3288
  #undef level
@@ -3279,7 +3317,7 @@ INSN_ENTRY(setlocal_OP__WC__0){
3279
3317
  }
3280
3318
  *(ep - idx) = val;
3281
3319
 
3282
- #line 3283 "vm.inc"
3320
+ #line 3321 "vm.inc"
3283
3321
  #undef level
3284
3322
  #undef CURRENT_INSN_setlocal_OP__WC__0
3285
3323
  #undef INSN_IS_SC
@@ -3312,7 +3350,7 @@ INSN_ENTRY(setlocal_OP__WC__1){
3312
3350
  }
3313
3351
  *(ep - idx) = val;
3314
3352
 
3315
- #line 3316 "vm.inc"
3353
+ #line 3354 "vm.inc"
3316
3354
  #undef level
3317
3355
  #undef CURRENT_INSN_setlocal_OP__WC__1
3318
3356
  #undef INSN_IS_SC
@@ -3336,7 +3374,7 @@ INSN_ENTRY(putobject_OP_INT2FIX_O_0_C_){
3336
3374
  #line 297 "insns.def"
3337
3375
  /* */
3338
3376
 
3339
- #line 3340 "vm.inc"
3377
+ #line 3378 "vm.inc"
3340
3378
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(REG_CFP, 1);
3341
3379
  PUSH(val);
3342
3380
  #undef val
@@ -3362,7 +3400,7 @@ INSN_ENTRY(putobject_OP_INT2FIX_O_1_C_){
3362
3400
  #line 297 "insns.def"
3363
3401
  /* */
3364
3402
 
3365
- #line 3366 "vm.inc"
3403
+ #line 3404 "vm.inc"
3366
3404
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(REG_CFP, 1);
3367
3405
  PUSH(val);
3368
3406
  #undef val