ruby-internal 0.7.2 → 0.7.3

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 (63) hide show
  1. data/bin/ruby-internal-node-dump +1 -1
  2. data/bin/ruby-internal-obfuscate +1 -1
  3. data/ext/internal/method/extconf.rb +4 -0
  4. data/ext/internal/method/internal_method.h +65 -0
  5. data/ext/internal/method/{method.h.rpp → internal_method.h.rpp} +21 -0
  6. data/ext/internal/method/method.c +69 -13
  7. data/ext/internal/module/classpath.c +12 -14
  8. data/ext/internal/module/extconf.rb +3 -2
  9. data/ext/internal/module/module.c +36 -15
  10. data/ext/internal/node/block.h.rpp +1 -0
  11. data/ext/internal/node/extconf.rb +0 -22
  12. data/ext/internal/node/global_entry.h +45 -3
  13. data/ext/internal/node/global_entry.h.rpp +12 -3
  14. data/ext/internal/node/node.c +42 -15
  15. data/ext/internal/node/node_type_descrip.c +16 -20
  16. data/ext/internal/node/node_type_descrip.c.rpp +1 -0
  17. data/ext/internal/node/nodeinfo.c +133 -281
  18. data/ext/internal/node/nodeinfo.c.rpp +8 -4
  19. data/ext/internal/node/nodeinfo.h.rpp +2 -1
  20. data/ext/internal/noex/noex.c +4 -0
  21. data/ext/internal/proc/proc.c +2 -2
  22. data/ext/internal/vm/constants/constants.c +2 -0
  23. data/ext/internal/vm/constants/extconf.rb +2 -0
  24. data/ext/internal/vm/control_frame/control_frame.c +21 -3
  25. data/ext/internal/vm/control_frame/extconf.rb +4 -0
  26. data/ext/internal/vm/inline_cache/inline_cache.c +12 -5
  27. data/ext/internal/vm/instruction/insns_info.c +141 -64
  28. data/ext/internal/vm/instruction/insns_info.c.rpp +3 -0
  29. data/ext/internal/vm/instruction/insns_info.h +80 -71
  30. data/ext/internal/vm/iseq/iseq.c +6 -6
  31. data/ext/internal/vm/iseq/iseq_load.inc.rpp +6 -3
  32. data/ext/mkmf-ruby-internal.rb +21 -1
  33. data/ext/ruby_source_dir.rb +6 -2
  34. data/post-setup.rb +1 -0
  35. data/pre-config.rb +9 -0
  36. data/run_tests.rb +1 -0
  37. data/test/test_method.rb +1 -1
  38. data/test/test_module.rb +1 -1
  39. metadata +309 -321
  40. data/ext/internal/method/method.h +0 -20
  41. data/ext/internal/yarv-headers/debug.h +0 -36
  42. data/ext/internal/yarv-headers/dln.h +0 -41
  43. data/ext/internal/yarv-headers/encdb.h +0 -147
  44. data/ext/internal/yarv-headers/eval_intern.h +0 -215
  45. data/ext/internal/yarv-headers/gc.h +0 -75
  46. data/ext/internal/yarv-headers/id.h +0 -163
  47. data/ext/internal/yarv-headers/iseq.h +0 -103
  48. data/ext/internal/yarv-headers/node.h +0 -516
  49. data/ext/internal/yarv-headers/parse.h +0 -188
  50. data/ext/internal/yarv-headers/regenc.h +0 -207
  51. data/ext/internal/yarv-headers/regint.h +0 -842
  52. data/ext/internal/yarv-headers/regparse.h +0 -351
  53. data/ext/internal/yarv-headers/revision.h +0 -1
  54. data/ext/internal/yarv-headers/thread_pthread.h +0 -24
  55. data/ext/internal/yarv-headers/thread_win32.h +0 -33
  56. data/ext/internal/yarv-headers/transcode_data.h +0 -106
  57. data/ext/internal/yarv-headers/transdb.h +0 -147
  58. data/ext/internal/yarv-headers/version.h +0 -54
  59. data/ext/internal/yarv-headers/vm_core.h +0 -646
  60. data/ext/internal/yarv-headers/vm_exec.h +0 -184
  61. data/ext/internal/yarv-headers/vm_insnhelper.h +0 -195
  62. data/ext/internal/yarv-headers/vm_opts.h +0 -51
  63. data/ext/rubypp.rb +0 -97
@@ -61,6 +61,7 @@ VALUE dump_node_elem(enum Node_Elem_Name nen, NODE * n, VALUE node_hash)
61
61
  case NEN_NONE:
62
62
  return Qnil;
63
63
  #ruby <<END
64
+ $: << '.' # TODO: hack
64
65
  require 'read_node_h'
65
66
  require 'nodes'
66
67
  require 'node_type_descrip'
@@ -129,7 +130,7 @@ VALUE dump_node_elem(enum Node_Elem_Name nen, NODE * n, VALUE node_hash)
129
130
  else
130
131
  {
131
132
  path = rb_class_path(klass);
132
- if(STR2CSTR(path)[0] == '#')
133
+ if(StringValuePtr(path)[0] == '#')
133
134
  {
134
135
  rb_raise(rb_eArgError, "cannot dump anonymous class");
135
136
  }
@@ -256,20 +257,23 @@ void load_node_elem(enum Node_Elem_Name nen, VALUE v, NODE * n, VALUE node_hash,
256
257
  END
257
258
  when /\.value$/
258
259
  puts <<-END
260
+ int flags;
259
261
  Check_Type(v, T_ARRAY);
260
262
  if(RARRAY_LEN(v) != 2)
261
263
  {
262
264
  rb_raise(rb_eArgError, "wrong size for array");
263
265
  }
264
- int flags = NUM2INT(RARRAY_PTR(v)[0]);
266
+ flags = NUM2INT(RARRAY_PTR(v)[0]);
265
267
  switch(flags & T_MASK)
266
268
  {
267
269
  case T_CLASS:
268
270
  case T_MODULE:
269
271
  {
270
- VALUE str = RARRAY_PTR(v)[1];
272
+ VALUE str, klass;
273
+
274
+ str = RARRAY_PTR(v)[1];
271
275
  Check_Type(str, T_STRING);
272
- VALUE klass = rb_path2class(STR2CSTR(str));
276
+ klass = rb_path2class(StringValuePtr(str));
273
277
  if(flags & FL_SINGLETON)
274
278
  {
275
279
  *(VALUE *)(&n->nd_#{node_elem_name}) =
@@ -9,7 +9,8 @@ enum Node_Elem_Name
9
9
  {
10
10
  NEN_NONE,
11
11
  #ruby <<END
12
- require 'read_node_h.rb'
12
+ $: << '.' # TODO: hack
13
+ require 'read_node_h'
13
14
 
14
15
  NODEINFO.sort.each do |node_elem_name, node_elem_ref|
15
16
  puts " NEN_#{node_elem_name.upcase},"
@@ -2,6 +2,10 @@
2
2
 
3
3
  #include "internal/node/ruby_internal_node.h"
4
4
 
5
+ #ifdef RUBY_VM
6
+ #include "method.h"
7
+ #endif
8
+
5
9
  void Init_noex(void)
6
10
  {
7
11
  /*
@@ -133,13 +133,13 @@ static VALUE proc_dump(VALUE self, VALUE limit)
133
133
  {
134
134
  #ifdef RUBY_VM
135
135
  rb_proc_t * p;
136
- VALUE iseq;
136
+ VALUE iseq, str;
137
137
  rb_iseq_t * iseqdat;
138
138
  GetProcPtr(self, p);
139
139
  iseq = p->block.iseq->self;
140
140
  iseqdat = iseq_check(iseq);
141
141
  iseqdat->type = ISEQ_TYPE_TOP; /* TODO: is this right? */
142
- VALUE str = marshal_dump(iseq, limit);
142
+ str = marshal_dump(iseq, limit);
143
143
  return str;
144
144
  #else
145
145
  struct BLOCK * b;
@@ -25,7 +25,9 @@ void Init_constants(void)
25
25
  rb_define_const(rb_cRubyVM, "CALL_TAILCALL_BIT", INT2NUM(VM_CALL_TAILCALL_BIT));
26
26
  rb_define_const(rb_cRubyVM, "CALL_TAILRECURSION_BIT", INT2NUM(VM_CALL_TAILRECURSION_BIT));
27
27
  rb_define_const(rb_cRubyVM, "CALL_SUPER_BIT", INT2NUM(VM_CALL_SUPER_BIT));
28
+ #ifdef HAVE_RUBY_CALL_SEND_BIT
28
29
  rb_define_const(rb_cRubyVM, "CALL_SEND_BIT", INT2NUM(VM_CALL_SEND_BIT));
30
+ #endif
29
31
  rb_define_const(rb_cRubyVM, "SPECIAL_OBJECT_VMCORE", INT2NUM(VM_SPECIAL_OBJECT_VMCORE));
30
32
  rb_define_const(rb_cRubyVM, "SPECIAL_OBJECT_CBASE", INT2NUM(VM_SPECIAL_OBJECT_CBASE));
31
33
  #endif
@@ -1,3 +1,5 @@
1
1
  $: << '../../..'
2
2
  require 'mkmf-ruby-internal'
3
3
  create_ruby_internal_makefile 'internal/vm/constants/constants'
4
+
5
+ have_const('VM_CALL_SEND_BIT', [ 'ruby.h', 'vm_core.h' ])
@@ -85,11 +85,20 @@ static VALUE control_frame_proc(VALUE control_frame)
85
85
  */
86
86
  static VALUE control_frame_method_id(VALUE control_frame)
87
87
  {
88
+ ID method_id;
88
89
  struct RubyInternalControlFrame * cfp;
90
+
89
91
  Data_Get_Struct(control_frame, struct RubyInternalControlFrame, cfp);
90
- if(cfp->control_frame->method_id)
92
+
93
+ #if RUBY_VERSION_CODE >= 192
94
+ method_id = cfp->control_frame->me->called_id; /* TODO: right? */
95
+ #else
96
+ method_id = cfp->control_frame->method_id;
97
+ #endif
98
+
99
+ if(method_id)
91
100
  {
92
- return ID2SYM(cfp->control_frame->method_id);
101
+ return ID2SYM(method_id);
93
102
  }
94
103
  else
95
104
  {
@@ -105,9 +114,18 @@ static VALUE control_frame_method_id(VALUE control_frame)
105
114
  */
106
115
  static VALUE control_frame_method_class(VALUE control_frame)
107
116
  {
117
+ VALUE klass;
108
118
  struct RubyInternalControlFrame * cfp;
119
+
109
120
  Data_Get_Struct(control_frame, struct RubyInternalControlFrame, cfp);
110
- return cfp->control_frame->method_class;
121
+
122
+ #if RUBY_VERSION_CODE >= 192
123
+ klass = cfp->control_frame->me->klass; /* TODO: right? */
124
+ #else
125
+ klass = cfp->control_frame->method_class;
126
+ #endif
127
+
128
+ return klass;
111
129
  }
112
130
 
113
131
  /*
@@ -1,3 +1,7 @@
1
1
  $: << '../../..'
2
2
  require 'mkmf-ruby-internal'
3
+
4
+ ruby_version_code = RUBY_VERSION.gsub(/\./, '').to_i
5
+ $CPPFLAGS << " -DRUBY_VERSION_CODE=#{ruby_version_code}"
6
+
3
7
  create_ruby_internal_makefile 'internal/vm/control_frame/control_frame'
@@ -15,8 +15,15 @@
15
15
  */
16
16
  static VALUE inline_cache_klass(VALUE self)
17
17
  {
18
- /* TODO: returning the real value can crash the interpreter */
19
- return Qnil;
18
+ IC inline_cache = (IC)unwrap_node(self);
19
+ if (inline_cache->ic_class == Qundef)
20
+ {
21
+ return Qnil;
22
+ }
23
+ else
24
+ {
25
+ return inline_cache->ic_class;
26
+ }
20
27
  }
21
28
 
22
29
  /*
@@ -27,8 +34,8 @@ static VALUE inline_cache_klass(VALUE self)
27
34
  */
28
35
  static VALUE inline_cache_value(VALUE self)
29
36
  {
30
- IC inline_cache = unwrap_node(self);
31
- return inline_cache->ic_value;
37
+ /* TODO: Wrap the LABEL object (from compile.c) */
38
+ return Qnil;
32
39
  }
33
40
 
34
41
  /*
@@ -39,7 +46,7 @@ static VALUE inline_cache_value(VALUE self)
39
46
  */
40
47
  static VALUE inline_cache_vmstat(VALUE self)
41
48
  {
42
- IC inline_cache = unwrap_node(self);
49
+ IC inline_cache = (IC)unwrap_node(self);
43
50
  return INT2NUM(inline_cache->ic_vmstat);
44
51
  }
45
52
 
@@ -2,6 +2,9 @@
2
2
 
3
3
  #ifdef RUBY_VM
4
4
 
5
+ #include "iseq.h"
6
+ #include "vm_core.h"
7
+
5
8
  static rb_compile_option_t COMPILE_OPTION_DEFAULT = {
6
9
  OPT_INLINE_CONST_CACHE, /* int inline_const_cache; */
7
10
  OPT_PEEPHOLE_OPTIMIZATION, /* int peephole_optimization; */
@@ -601,9 +604,9 @@ static VALUE insn_GETINSTANCEVARIABLE_name(VALUE self)
601
604
  static VALUE insn_GETINSTANCEVARIABLE_operand_names(VALUE self)
602
605
  {
603
606
  VALUE v[] = {
604
- ID2SYM(rb_intern("id"))
607
+ ID2SYM(rb_intern("id")), ID2SYM(rb_intern("ic"))
605
608
  };
606
- return rb_ary_new4(1, v);
609
+ return rb_ary_new4(2, v);
607
610
  }
608
611
 
609
612
  /*
@@ -667,9 +670,9 @@ static VALUE insn_SETINSTANCEVARIABLE_name(VALUE self)
667
670
  static VALUE insn_SETINSTANCEVARIABLE_operand_names(VALUE self)
668
671
  {
669
672
  VALUE v[] = {
670
- ID2SYM(rb_intern("id"))
673
+ ID2SYM(rb_intern("id")), ID2SYM(rb_intern("ic"))
671
674
  };
672
- return rb_ary_new4(1, v);
675
+ return rb_ary_new4(2, v);
673
676
  }
674
677
 
675
678
  /*
@@ -3571,7 +3574,7 @@ static VALUE insn_GETINLINECACHE_name(VALUE self)
3571
3574
  static VALUE insn_GETINLINECACHE_operand_names(VALUE self)
3572
3575
  {
3573
3576
  VALUE v[] = {
3574
- ID2SYM(rb_intern("ic")), ID2SYM(rb_intern("dst"))
3577
+ ID2SYM(rb_intern("dst")), ID2SYM(rb_intern("ic"))
3575
3578
  };
3576
3579
  return rb_ary_new4(2, v);
3577
3580
  }
@@ -3637,7 +3640,7 @@ static VALUE insn_ONCEINLINECACHE_name(VALUE self)
3637
3640
  static VALUE insn_ONCEINLINECACHE_operand_names(VALUE self)
3638
3641
  {
3639
3642
  VALUE v[] = {
3640
- ID2SYM(rb_intern("ic")), ID2SYM(rb_intern("dst"))
3643
+ ID2SYM(rb_intern("dst")), ID2SYM(rb_intern("ic"))
3641
3644
  };
3642
3645
  return rb_ary_new4(2, v);
3643
3646
  }
@@ -3703,7 +3706,7 @@ static VALUE insn_SETINLINECACHE_name(VALUE self)
3703
3706
  static VALUE insn_SETINLINECACHE_operand_names(VALUE self)
3704
3707
  {
3705
3708
  VALUE v[] = {
3706
- ID2SYM(rb_intern("dst"))
3709
+ ID2SYM(rb_intern("ic"))
3707
3710
  };
3708
3711
  return rb_ary_new4(1, v);
3709
3712
  }
@@ -3901,9 +3904,9 @@ static VALUE insn_OPT_PLUS_name(VALUE self)
3901
3904
  static VALUE insn_OPT_PLUS_operand_names(VALUE self)
3902
3905
  {
3903
3906
  VALUE v[] = {
3904
-
3907
+ ID2SYM(rb_intern("ic"))
3905
3908
  };
3906
- return rb_ary_new4(0, v);
3909
+ return rb_ary_new4(1, v);
3907
3910
  }
3908
3911
 
3909
3912
  /*
@@ -3967,9 +3970,9 @@ static VALUE insn_OPT_MINUS_name(VALUE self)
3967
3970
  static VALUE insn_OPT_MINUS_operand_names(VALUE self)
3968
3971
  {
3969
3972
  VALUE v[] = {
3970
-
3973
+ ID2SYM(rb_intern("ic"))
3971
3974
  };
3972
- return rb_ary_new4(0, v);
3975
+ return rb_ary_new4(1, v);
3973
3976
  }
3974
3977
 
3975
3978
  /*
@@ -4033,9 +4036,9 @@ static VALUE insn_OPT_MULT_name(VALUE self)
4033
4036
  static VALUE insn_OPT_MULT_operand_names(VALUE self)
4034
4037
  {
4035
4038
  VALUE v[] = {
4036
-
4039
+ ID2SYM(rb_intern("ic"))
4037
4040
  };
4038
- return rb_ary_new4(0, v);
4041
+ return rb_ary_new4(1, v);
4039
4042
  }
4040
4043
 
4041
4044
  /*
@@ -4099,9 +4102,9 @@ static VALUE insn_OPT_DIV_name(VALUE self)
4099
4102
  static VALUE insn_OPT_DIV_operand_names(VALUE self)
4100
4103
  {
4101
4104
  VALUE v[] = {
4102
-
4105
+ ID2SYM(rb_intern("ic"))
4103
4106
  };
4104
- return rb_ary_new4(0, v);
4107
+ return rb_ary_new4(1, v);
4105
4108
  }
4106
4109
 
4107
4110
  /*
@@ -4165,9 +4168,9 @@ static VALUE insn_OPT_MOD_name(VALUE self)
4165
4168
  static VALUE insn_OPT_MOD_operand_names(VALUE self)
4166
4169
  {
4167
4170
  VALUE v[] = {
4168
-
4171
+ ID2SYM(rb_intern("ic"))
4169
4172
  };
4170
- return rb_ary_new4(0, v);
4173
+ return rb_ary_new4(1, v);
4171
4174
  }
4172
4175
 
4173
4176
  /*
@@ -4297,7 +4300,7 @@ static VALUE insn_OPT_NEQ_name(VALUE self)
4297
4300
  static VALUE insn_OPT_NEQ_operand_names(VALUE self)
4298
4301
  {
4299
4302
  VALUE v[] = {
4300
- ID2SYM(rb_intern("ic1")), ID2SYM(rb_intern("ic2"))
4303
+ ID2SYM(rb_intern("ic")), ID2SYM(rb_intern("ic_eq"))
4301
4304
  };
4302
4305
  return rb_ary_new4(2, v);
4303
4306
  }
@@ -4363,9 +4366,9 @@ static VALUE insn_OPT_LT_name(VALUE self)
4363
4366
  static VALUE insn_OPT_LT_operand_names(VALUE self)
4364
4367
  {
4365
4368
  VALUE v[] = {
4366
-
4369
+ ID2SYM(rb_intern("ic"))
4367
4370
  };
4368
- return rb_ary_new4(0, v);
4371
+ return rb_ary_new4(1, v);
4369
4372
  }
4370
4373
 
4371
4374
  /*
@@ -4429,9 +4432,9 @@ static VALUE insn_OPT_LE_name(VALUE self)
4429
4432
  static VALUE insn_OPT_LE_operand_names(VALUE self)
4430
4433
  {
4431
4434
  VALUE v[] = {
4432
-
4435
+ ID2SYM(rb_intern("ic"))
4433
4436
  };
4434
- return rb_ary_new4(0, v);
4437
+ return rb_ary_new4(1, v);
4435
4438
  }
4436
4439
 
4437
4440
  /*
@@ -4495,9 +4498,9 @@ static VALUE insn_OPT_GT_name(VALUE self)
4495
4498
  static VALUE insn_OPT_GT_operand_names(VALUE self)
4496
4499
  {
4497
4500
  VALUE v[] = {
4498
-
4501
+ ID2SYM(rb_intern("ic"))
4499
4502
  };
4500
- return rb_ary_new4(0, v);
4503
+ return rb_ary_new4(1, v);
4501
4504
  }
4502
4505
 
4503
4506
  /*
@@ -4561,9 +4564,9 @@ static VALUE insn_OPT_GE_name(VALUE self)
4561
4564
  static VALUE insn_OPT_GE_operand_names(VALUE self)
4562
4565
  {
4563
4566
  VALUE v[] = {
4564
-
4567
+ ID2SYM(rb_intern("ic"))
4565
4568
  };
4566
- return rb_ary_new4(0, v);
4569
+ return rb_ary_new4(1, v);
4567
4570
  }
4568
4571
 
4569
4572
  /*
@@ -4627,9 +4630,9 @@ static VALUE insn_OPT_LTLT_name(VALUE self)
4627
4630
  static VALUE insn_OPT_LTLT_operand_names(VALUE self)
4628
4631
  {
4629
4632
  VALUE v[] = {
4630
-
4633
+ ID2SYM(rb_intern("ic"))
4631
4634
  };
4632
- return rb_ary_new4(0, v);
4635
+ return rb_ary_new4(1, v);
4633
4636
  }
4634
4637
 
4635
4638
  /*
@@ -4693,9 +4696,9 @@ static VALUE insn_OPT_AREF_name(VALUE self)
4693
4696
  static VALUE insn_OPT_AREF_operand_names(VALUE self)
4694
4697
  {
4695
4698
  VALUE v[] = {
4696
-
4699
+ ID2SYM(rb_intern("ic"))
4697
4700
  };
4698
- return rb_ary_new4(0, v);
4701
+ return rb_ary_new4(1, v);
4699
4702
  }
4700
4703
 
4701
4704
  /*
@@ -4759,9 +4762,9 @@ static VALUE insn_OPT_ASET_name(VALUE self)
4759
4762
  static VALUE insn_OPT_ASET_operand_names(VALUE self)
4760
4763
  {
4761
4764
  VALUE v[] = {
4762
-
4765
+ ID2SYM(rb_intern("ic"))
4763
4766
  };
4764
- return rb_ary_new4(0, v);
4767
+ return rb_ary_new4(1, v);
4765
4768
  }
4766
4769
 
4767
4770
  /*
@@ -4825,9 +4828,9 @@ static VALUE insn_OPT_LENGTH_name(VALUE self)
4825
4828
  static VALUE insn_OPT_LENGTH_operand_names(VALUE self)
4826
4829
  {
4827
4830
  VALUE v[] = {
4828
-
4831
+ ID2SYM(rb_intern("ic"))
4829
4832
  };
4830
- return rb_ary_new4(0, v);
4833
+ return rb_ary_new4(1, v);
4831
4834
  }
4832
4835
 
4833
4836
  /*
@@ -4836,7 +4839,7 @@ static VALUE insn_OPT_LENGTH_operand_names(VALUE self)
4836
4839
  *
4837
4840
  * Returns the length of the instruction.
4838
4841
  */
4839
- static VALUE insn_OPT_SUCC_length(VALUE self)
4842
+ static VALUE insn_OPT_SIZE_length(VALUE self)
4840
4843
  {
4841
4844
  return LONG2NUM(insn_len(72));
4842
4845
  }
@@ -4847,7 +4850,7 @@ static VALUE insn_OPT_SUCC_length(VALUE self)
4847
4850
  *
4848
4851
  * Returns the numeric instruction number.
4849
4852
  */
4850
- static VALUE insn_OPT_SUCC_to_i(VALUE self)
4853
+ static VALUE insn_OPT_SIZE_to_i(VALUE self)
4851
4854
  {
4852
4855
  return NUM2LONG(72);
4853
4856
  }
@@ -4858,7 +4861,7 @@ static VALUE insn_OPT_SUCC_to_i(VALUE self)
4858
4861
  *
4859
4862
  * Returns an array containing the types of the operands.
4860
4863
  */
4861
- static VALUE insn_OPT_SUCC_operand_types(VALUE self)
4864
+ static VALUE insn_OPT_SIZE_operand_types(VALUE self)
4862
4865
  {
4863
4866
  VALUE operand_types = rb_ary_new();
4864
4867
  char const * s;
@@ -4871,6 +4874,72 @@ static VALUE insn_OPT_SUCC_operand_types(VALUE self)
4871
4874
  return operand_types;
4872
4875
  }
4873
4876
 
4877
+ /*
4878
+ * call-seq:
4879
+ * insn.name => Symbol
4880
+ *
4881
+ * Returns the name of the instruction.
4882
+ */
4883
+ static VALUE insn_OPT_SIZE_name(VALUE self)
4884
+ {
4885
+ return rb_intern("OPT_SIZE");
4886
+ }
4887
+
4888
+ /*
4889
+ * call-seq:
4890
+ * insn.name => Symbol
4891
+ *
4892
+ * Returns the name of the operands for this instruction.
4893
+ */
4894
+ static VALUE insn_OPT_SIZE_operand_names(VALUE self)
4895
+ {
4896
+ VALUE v[] = {
4897
+ ID2SYM(rb_intern("ic"))
4898
+ };
4899
+ return rb_ary_new4(1, v);
4900
+ }
4901
+
4902
+ /*
4903
+ * call-seq:
4904
+ * insn.length => Integer
4905
+ *
4906
+ * Returns the length of the instruction.
4907
+ */
4908
+ static VALUE insn_OPT_SUCC_length(VALUE self)
4909
+ {
4910
+ return LONG2NUM(insn_len(73));
4911
+ }
4912
+
4913
+ /*
4914
+ * call-seq:
4915
+ * insn.to_i => Integer
4916
+ *
4917
+ * Returns the numeric instruction number.
4918
+ */
4919
+ static VALUE insn_OPT_SUCC_to_i(VALUE self)
4920
+ {
4921
+ return NUM2LONG(73);
4922
+ }
4923
+
4924
+ /*
4925
+ * call-seq:
4926
+ * insn.operand_types => Array of Symbol
4927
+ *
4928
+ * Returns an array containing the types of the operands.
4929
+ */
4930
+ static VALUE insn_OPT_SUCC_operand_types(VALUE self)
4931
+ {
4932
+ VALUE operand_types = rb_ary_new();
4933
+ char const * s;
4934
+
4935
+ for(s = insn_op_types(73); *s != '\0'; ++s)
4936
+ {
4937
+ rb_ary_push(operand_types, ID2SYM(operand_type_name_of(*s)));
4938
+ }
4939
+
4940
+ return operand_types;
4941
+ }
4942
+
4874
4943
  /*
4875
4944
  * call-seq:
4876
4945
  * insn.name => Symbol
@@ -4891,9 +4960,9 @@ static VALUE insn_OPT_SUCC_name(VALUE self)
4891
4960
  static VALUE insn_OPT_SUCC_operand_names(VALUE self)
4892
4961
  {
4893
4962
  VALUE v[] = {
4894
-
4963
+ ID2SYM(rb_intern("ic"))
4895
4964
  };
4896
- return rb_ary_new4(0, v);
4965
+ return rb_ary_new4(1, v);
4897
4966
  }
4898
4967
 
4899
4968
  /*
@@ -4904,7 +4973,7 @@ static VALUE insn_OPT_SUCC_operand_names(VALUE self)
4904
4973
  */
4905
4974
  static VALUE insn_OPT_NOT_length(VALUE self)
4906
4975
  {
4907
- return LONG2NUM(insn_len(73));
4976
+ return LONG2NUM(insn_len(74));
4908
4977
  }
4909
4978
 
4910
4979
  /*
@@ -4915,7 +4984,7 @@ static VALUE insn_OPT_NOT_length(VALUE self)
4915
4984
  */
4916
4985
  static VALUE insn_OPT_NOT_to_i(VALUE self)
4917
4986
  {
4918
- return NUM2LONG(73);
4987
+ return NUM2LONG(74);
4919
4988
  }
4920
4989
 
4921
4990
  /*
@@ -4929,7 +4998,7 @@ static VALUE insn_OPT_NOT_operand_types(VALUE self)
4929
4998
  VALUE operand_types = rb_ary_new();
4930
4999
  char const * s;
4931
5000
 
4932
- for(s = insn_op_types(73); *s != '\0'; ++s)
5001
+ for(s = insn_op_types(74); *s != '\0'; ++s)
4933
5002
  {
4934
5003
  rb_ary_push(operand_types, ID2SYM(operand_type_name_of(*s)));
4935
5004
  }
@@ -4970,7 +5039,7 @@ static VALUE insn_OPT_NOT_operand_names(VALUE self)
4970
5039
  */
4971
5040
  static VALUE insn_OPT_REGEXPMATCH1_length(VALUE self)
4972
5041
  {
4973
- return LONG2NUM(insn_len(74));
5042
+ return LONG2NUM(insn_len(75));
4974
5043
  }
4975
5044
 
4976
5045
  /*
@@ -4981,7 +5050,7 @@ static VALUE insn_OPT_REGEXPMATCH1_length(VALUE self)
4981
5050
  */
4982
5051
  static VALUE insn_OPT_REGEXPMATCH1_to_i(VALUE self)
4983
5052
  {
4984
- return NUM2LONG(74);
5053
+ return NUM2LONG(75);
4985
5054
  }
4986
5055
 
4987
5056
  /*
@@ -4995,7 +5064,7 @@ static VALUE insn_OPT_REGEXPMATCH1_operand_types(VALUE self)
4995
5064
  VALUE operand_types = rb_ary_new();
4996
5065
  char const * s;
4997
5066
 
4998
- for(s = insn_op_types(74); *s != '\0'; ++s)
5067
+ for(s = insn_op_types(75); *s != '\0'; ++s)
4999
5068
  {
5000
5069
  rb_ary_push(operand_types, ID2SYM(operand_type_name_of(*s)));
5001
5070
  }
@@ -5036,7 +5105,7 @@ static VALUE insn_OPT_REGEXPMATCH1_operand_names(VALUE self)
5036
5105
  */
5037
5106
  static VALUE insn_OPT_REGEXPMATCH2_length(VALUE self)
5038
5107
  {
5039
- return LONG2NUM(insn_len(75));
5108
+ return LONG2NUM(insn_len(76));
5040
5109
  }
5041
5110
 
5042
5111
  /*
@@ -5047,7 +5116,7 @@ static VALUE insn_OPT_REGEXPMATCH2_length(VALUE self)
5047
5116
  */
5048
5117
  static VALUE insn_OPT_REGEXPMATCH2_to_i(VALUE self)
5049
5118
  {
5050
- return NUM2LONG(75);
5119
+ return NUM2LONG(76);
5051
5120
  }
5052
5121
 
5053
5122
  /*
@@ -5061,7 +5130,7 @@ static VALUE insn_OPT_REGEXPMATCH2_operand_types(VALUE self)
5061
5130
  VALUE operand_types = rb_ary_new();
5062
5131
  char const * s;
5063
5132
 
5064
- for(s = insn_op_types(75); *s != '\0'; ++s)
5133
+ for(s = insn_op_types(76); *s != '\0'; ++s)
5065
5134
  {
5066
5135
  rb_ary_push(operand_types, ID2SYM(operand_type_name_of(*s)));
5067
5136
  }
@@ -5102,7 +5171,7 @@ static VALUE insn_OPT_REGEXPMATCH2_operand_names(VALUE self)
5102
5171
  */
5103
5172
  static VALUE insn_OPT_CALL_C_FUNCTION_length(VALUE self)
5104
5173
  {
5105
- return LONG2NUM(insn_len(76));
5174
+ return LONG2NUM(insn_len(77));
5106
5175
  }
5107
5176
 
5108
5177
  /*
@@ -5113,7 +5182,7 @@ static VALUE insn_OPT_CALL_C_FUNCTION_length(VALUE self)
5113
5182
  */
5114
5183
  static VALUE insn_OPT_CALL_C_FUNCTION_to_i(VALUE self)
5115
5184
  {
5116
- return NUM2LONG(76);
5185
+ return NUM2LONG(77);
5117
5186
  }
5118
5187
 
5119
5188
  /*
@@ -5127,7 +5196,7 @@ static VALUE insn_OPT_CALL_C_FUNCTION_operand_types(VALUE self)
5127
5196
  VALUE operand_types = rb_ary_new();
5128
5197
  char const * s;
5129
5198
 
5130
- for(s = insn_op_types(76); *s != '\0'; ++s)
5199
+ for(s = insn_op_types(77); *s != '\0'; ++s)
5131
5200
  {
5132
5201
  rb_ary_push(operand_types, ID2SYM(operand_type_name_of(*s)));
5133
5202
  }
@@ -5168,7 +5237,7 @@ static VALUE insn_OPT_CALL_C_FUNCTION_operand_names(VALUE self)
5168
5237
  */
5169
5238
  static VALUE insn_BITBLT_length(VALUE self)
5170
5239
  {
5171
- return LONG2NUM(insn_len(77));
5240
+ return LONG2NUM(insn_len(78));
5172
5241
  }
5173
5242
 
5174
5243
  /*
@@ -5179,7 +5248,7 @@ static VALUE insn_BITBLT_length(VALUE self)
5179
5248
  */
5180
5249
  static VALUE insn_BITBLT_to_i(VALUE self)
5181
5250
  {
5182
- return NUM2LONG(77);
5251
+ return NUM2LONG(78);
5183
5252
  }
5184
5253
 
5185
5254
  /*
@@ -5193,7 +5262,7 @@ static VALUE insn_BITBLT_operand_types(VALUE self)
5193
5262
  VALUE operand_types = rb_ary_new();
5194
5263
  char const * s;
5195
5264
 
5196
- for(s = insn_op_types(77); *s != '\0'; ++s)
5265
+ for(s = insn_op_types(78); *s != '\0'; ++s)
5197
5266
  {
5198
5267
  rb_ary_push(operand_types, ID2SYM(operand_type_name_of(*s)));
5199
5268
  }
@@ -5234,7 +5303,7 @@ static VALUE insn_BITBLT_operand_names(VALUE self)
5234
5303
  */
5235
5304
  static VALUE insn_ANSWER_length(VALUE self)
5236
5305
  {
5237
- return LONG2NUM(insn_len(78));
5306
+ return LONG2NUM(insn_len(79));
5238
5307
  }
5239
5308
 
5240
5309
  /*
@@ -5245,7 +5314,7 @@ static VALUE insn_ANSWER_length(VALUE self)
5245
5314
  */
5246
5315
  static VALUE insn_ANSWER_to_i(VALUE self)
5247
5316
  {
5248
- return NUM2LONG(78);
5317
+ return NUM2LONG(79);
5249
5318
  }
5250
5319
 
5251
5320
  /*
@@ -5259,7 +5328,7 @@ static VALUE insn_ANSWER_operand_types(VALUE self)
5259
5328
  VALUE operand_types = rb_ary_new();
5260
5329
  char const * s;
5261
5330
 
5262
- for(s = insn_op_types(78); *s != '\0'; ++s)
5331
+ for(s = insn_op_types(79); *s != '\0'; ++s)
5263
5332
  {
5264
5333
  rb_ary_push(operand_types, ID2SYM(operand_type_name_of(*s)));
5265
5334
  }
@@ -5875,7 +5944,15 @@ void define_instruction_subclasses(VALUE rb_cInstruction)
5875
5944
  rb_define_method(rb_cInstruction_OPT_LENGTH, "name", insn_OPT_LENGTH_name, 0);
5876
5945
  }
5877
5946
  {
5878
- VALUE rb_cInstruction_OPT_SUCC = instruction_class[72] = rb_define_class_under(rb_cInstruction, "OPT_SUCC", rb_cInstruction);
5947
+ VALUE rb_cInstruction_OPT_SIZE = instruction_class[72] = rb_define_class_under(rb_cInstruction, "OPT_SIZE", rb_cInstruction);
5948
+ rb_define_method(rb_cInstruction_OPT_SIZE, "length", insn_OPT_SIZE_length, 0);
5949
+ rb_define_method(rb_cInstruction_OPT_SIZE, "to_i", insn_OPT_SIZE_to_i, 0);
5950
+ rb_define_method(rb_cInstruction_OPT_SIZE, "operand_types", insn_OPT_SIZE_operand_types, 0);
5951
+ rb_define_method(rb_cInstruction_OPT_SIZE, "operand_names", insn_OPT_SIZE_operand_names, 0);
5952
+ rb_define_method(rb_cInstruction_OPT_SIZE, "name", insn_OPT_SIZE_name, 0);
5953
+ }
5954
+ {
5955
+ VALUE rb_cInstruction_OPT_SUCC = instruction_class[73] = rb_define_class_under(rb_cInstruction, "OPT_SUCC", rb_cInstruction);
5879
5956
  rb_define_method(rb_cInstruction_OPT_SUCC, "length", insn_OPT_SUCC_length, 0);
5880
5957
  rb_define_method(rb_cInstruction_OPT_SUCC, "to_i", insn_OPT_SUCC_to_i, 0);
5881
5958
  rb_define_method(rb_cInstruction_OPT_SUCC, "operand_types", insn_OPT_SUCC_operand_types, 0);
@@ -5883,7 +5960,7 @@ void define_instruction_subclasses(VALUE rb_cInstruction)
5883
5960
  rb_define_method(rb_cInstruction_OPT_SUCC, "name", insn_OPT_SUCC_name, 0);
5884
5961
  }
5885
5962
  {
5886
- VALUE rb_cInstruction_OPT_NOT = instruction_class[73] = rb_define_class_under(rb_cInstruction, "OPT_NOT", rb_cInstruction);
5963
+ VALUE rb_cInstruction_OPT_NOT = instruction_class[74] = rb_define_class_under(rb_cInstruction, "OPT_NOT", rb_cInstruction);
5887
5964
  rb_define_method(rb_cInstruction_OPT_NOT, "length", insn_OPT_NOT_length, 0);
5888
5965
  rb_define_method(rb_cInstruction_OPT_NOT, "to_i", insn_OPT_NOT_to_i, 0);
5889
5966
  rb_define_method(rb_cInstruction_OPT_NOT, "operand_types", insn_OPT_NOT_operand_types, 0);
@@ -5891,7 +5968,7 @@ void define_instruction_subclasses(VALUE rb_cInstruction)
5891
5968
  rb_define_method(rb_cInstruction_OPT_NOT, "name", insn_OPT_NOT_name, 0);
5892
5969
  }
5893
5970
  {
5894
- VALUE rb_cInstruction_OPT_REGEXPMATCH1 = instruction_class[74] = rb_define_class_under(rb_cInstruction, "OPT_REGEXPMATCH1", rb_cInstruction);
5971
+ VALUE rb_cInstruction_OPT_REGEXPMATCH1 = instruction_class[75] = rb_define_class_under(rb_cInstruction, "OPT_REGEXPMATCH1", rb_cInstruction);
5895
5972
  rb_define_method(rb_cInstruction_OPT_REGEXPMATCH1, "length", insn_OPT_REGEXPMATCH1_length, 0);
5896
5973
  rb_define_method(rb_cInstruction_OPT_REGEXPMATCH1, "to_i", insn_OPT_REGEXPMATCH1_to_i, 0);
5897
5974
  rb_define_method(rb_cInstruction_OPT_REGEXPMATCH1, "operand_types", insn_OPT_REGEXPMATCH1_operand_types, 0);
@@ -5899,7 +5976,7 @@ void define_instruction_subclasses(VALUE rb_cInstruction)
5899
5976
  rb_define_method(rb_cInstruction_OPT_REGEXPMATCH1, "name", insn_OPT_REGEXPMATCH1_name, 0);
5900
5977
  }
5901
5978
  {
5902
- VALUE rb_cInstruction_OPT_REGEXPMATCH2 = instruction_class[75] = rb_define_class_under(rb_cInstruction, "OPT_REGEXPMATCH2", rb_cInstruction);
5979
+ VALUE rb_cInstruction_OPT_REGEXPMATCH2 = instruction_class[76] = rb_define_class_under(rb_cInstruction, "OPT_REGEXPMATCH2", rb_cInstruction);
5903
5980
  rb_define_method(rb_cInstruction_OPT_REGEXPMATCH2, "length", insn_OPT_REGEXPMATCH2_length, 0);
5904
5981
  rb_define_method(rb_cInstruction_OPT_REGEXPMATCH2, "to_i", insn_OPT_REGEXPMATCH2_to_i, 0);
5905
5982
  rb_define_method(rb_cInstruction_OPT_REGEXPMATCH2, "operand_types", insn_OPT_REGEXPMATCH2_operand_types, 0);
@@ -5907,7 +5984,7 @@ void define_instruction_subclasses(VALUE rb_cInstruction)
5907
5984
  rb_define_method(rb_cInstruction_OPT_REGEXPMATCH2, "name", insn_OPT_REGEXPMATCH2_name, 0);
5908
5985
  }
5909
5986
  {
5910
- VALUE rb_cInstruction_OPT_CALL_C_FUNCTION = instruction_class[76] = rb_define_class_under(rb_cInstruction, "OPT_CALL_C_FUNCTION", rb_cInstruction);
5987
+ VALUE rb_cInstruction_OPT_CALL_C_FUNCTION = instruction_class[77] = rb_define_class_under(rb_cInstruction, "OPT_CALL_C_FUNCTION", rb_cInstruction);
5911
5988
  rb_define_method(rb_cInstruction_OPT_CALL_C_FUNCTION, "length", insn_OPT_CALL_C_FUNCTION_length, 0);
5912
5989
  rb_define_method(rb_cInstruction_OPT_CALL_C_FUNCTION, "to_i", insn_OPT_CALL_C_FUNCTION_to_i, 0);
5913
5990
  rb_define_method(rb_cInstruction_OPT_CALL_C_FUNCTION, "operand_types", insn_OPT_CALL_C_FUNCTION_operand_types, 0);
@@ -5915,7 +5992,7 @@ void define_instruction_subclasses(VALUE rb_cInstruction)
5915
5992
  rb_define_method(rb_cInstruction_OPT_CALL_C_FUNCTION, "name", insn_OPT_CALL_C_FUNCTION_name, 0);
5916
5993
  }
5917
5994
  {
5918
- VALUE rb_cInstruction_BITBLT = instruction_class[77] = rb_define_class_under(rb_cInstruction, "BITBLT", rb_cInstruction);
5995
+ VALUE rb_cInstruction_BITBLT = instruction_class[78] = rb_define_class_under(rb_cInstruction, "BITBLT", rb_cInstruction);
5919
5996
  rb_define_method(rb_cInstruction_BITBLT, "length", insn_BITBLT_length, 0);
5920
5997
  rb_define_method(rb_cInstruction_BITBLT, "to_i", insn_BITBLT_to_i, 0);
5921
5998
  rb_define_method(rb_cInstruction_BITBLT, "operand_types", insn_BITBLT_operand_types, 0);
@@ -5923,7 +6000,7 @@ void define_instruction_subclasses(VALUE rb_cInstruction)
5923
6000
  rb_define_method(rb_cInstruction_BITBLT, "name", insn_BITBLT_name, 0);
5924
6001
  }
5925
6002
  {
5926
- VALUE rb_cInstruction_ANSWER = instruction_class[78] = rb_define_class_under(rb_cInstruction, "ANSWER", rb_cInstruction);
6003
+ VALUE rb_cInstruction_ANSWER = instruction_class[79] = rb_define_class_under(rb_cInstruction, "ANSWER", rb_cInstruction);
5927
6004
  rb_define_method(rb_cInstruction_ANSWER, "length", insn_ANSWER_length, 0);
5928
6005
  rb_define_method(rb_cInstruction_ANSWER, "to_i", insn_ANSWER_to_i, 0);
5929
6006
  rb_define_method(rb_cInstruction_ANSWER, "operand_types", insn_ANSWER_operand_types, 0);