ruby-internal 0.7.2 → 0.7.3

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -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
  #ruby <<END
6
9
  $:.unshift '../../..'
7
10
  require 'ruby_source_dir'
@@ -13,7 +13,7 @@
13
13
 
14
14
  /** -*-c-*-
15
15
  This file contains YARV instructions list.
16
-
16
+
17
17
  ----
18
18
  This file is auto generated by insns2vm.rb
19
19
  DO NOT TOUCH!
@@ -171,30 +171,32 @@ enum ruby_vminsn_type {
171
171
 
172
172
  BIN(opt_length) = 71,
173
173
 
174
- BIN(opt_succ) = 72,
174
+ BIN(opt_size) = 72,
175
+
176
+ BIN(opt_succ) = 73,
175
177
 
176
- BIN(opt_not) = 73,
178
+ BIN(opt_not) = 74,
177
179
 
178
- BIN(opt_regexpmatch1) = 74,
180
+ BIN(opt_regexpmatch1) = 75,
179
181
 
180
- BIN(opt_regexpmatch2) = 75,
182
+ BIN(opt_regexpmatch2) = 76,
181
183
 
182
- BIN(opt_call_c_function) = 76,
184
+ BIN(opt_call_c_function) = 77,
183
185
 
184
- BIN(bitblt) = 77,
186
+ BIN(bitblt) = 78,
185
187
 
186
- BIN(answer) = 78,
188
+ BIN(answer) = 79,
187
189
 
188
- VM_INSTRUCTION_SIZE = 79
190
+ VM_INSTRUCTION_SIZE = 80
189
191
  };
190
192
 
191
193
  /** -*-c-*-
192
194
  This file contains instruction information for yarv instruction sequence.
193
-
195
+
194
196
  ----
195
197
  This file is auto generated by insns2vm.rb
196
198
  DO NOT TOUCH!
197
-
199
+
198
200
  If you want to fix something, you must edit 'template/insns_info.inc.tmpl'
199
201
  or insns2vm.rb
200
202
  */
@@ -285,6 +287,7 @@ static const char *const insn_name_info[] = {
285
287
  "opt_aref",
286
288
  "opt_aset",
287
289
  "opt_length",
290
+ "opt_size",
288
291
  "opt_succ",
289
292
  "opt_not",
290
293
  "opt_regexpmatch1",
@@ -303,8 +306,8 @@ static const char *const insn_operand_info[] = {
303
306
  "V",
304
307
  "DN",
305
308
  "DN",
306
- "I",
307
- "I",
309
+ "IC",
310
+ "IC",
308
311
  "I",
309
312
  "I",
310
313
  "I",
@@ -348,27 +351,28 @@ static const char *const insn_operand_info[] = {
348
351
  "O",
349
352
  "O",
350
353
  "O",
351
- "CO",
352
- "CO",
353
- "O",
354
+ "OC",
355
+ "OC",
356
+ "C",
354
357
  "HO",
355
358
  "",
356
- "",
357
- "",
358
- "",
359
- "",
360
- "",
359
+ "C",
360
+ "C",
361
+ "C",
362
+ "C",
363
+ "C",
361
364
  "C",
362
365
  "CC",
363
- "",
364
- "",
365
- "",
366
- "",
367
- "",
368
- "",
369
- "",
370
- "",
371
- "",
366
+ "C",
367
+ "C",
368
+ "C",
369
+ "C",
370
+ "C",
371
+ "C",
372
+ "C",
373
+ "C",
374
+ "C",
375
+ "C",
372
376
  "C",
373
377
  "V",
374
378
  "",
@@ -386,8 +390,8 @@ static const int insn_len_info[] = {
386
390
  2,
387
391
  3,
388
392
  3,
389
- 2,
390
- 2,
393
+ 3,
394
+ 3,
391
395
  2,
392
396
  2,
393
397
  2,
@@ -436,22 +440,23 @@ static const int insn_len_info[] = {
436
440
  2,
437
441
  3,
438
442
  1,
439
- 1,
440
- 1,
441
- 1,
442
- 1,
443
- 1,
443
+ 2,
444
+ 2,
445
+ 2,
446
+ 2,
447
+ 2,
444
448
  2,
445
449
  3,
446
- 1,
447
- 1,
448
- 1,
449
- 1,
450
- 1,
451
- 1,
452
- 1,
453
- 1,
454
- 1,
450
+ 2,
451
+ 2,
452
+ 2,
453
+ 2,
454
+ 2,
455
+ 2,
456
+ 2,
457
+ 2,
458
+ 2,
459
+ 2,
455
460
  2,
456
461
  2,
457
462
  1,
@@ -539,6 +544,7 @@ static const int insn_stack_push_num_info[] = {
539
544
  1,
540
545
  1,
541
546
  1,
547
+ 1,
542
548
  0,
543
549
  1,
544
550
  1,
@@ -616,7 +622,7 @@ insn_stack_increase(int depth, int insn, VALUE *opes)
616
622
  }
617
623
  case BIN(concatstrings):{
618
624
  int inc = 0;
619
- rb_num_t num = FIX2INT(opes[0]);
625
+ int num = FIX2INT(opes[0]);
620
626
  inc += 1 - num;;
621
627
  return depth + inc;
622
628
  }
@@ -625,13 +631,13 @@ insn_stack_increase(int depth, int insn, VALUE *opes)
625
631
  }
626
632
  case BIN(toregexp):{
627
633
  int inc = 0;
628
- rb_num_t cnt = FIX2INT(opes[1]);
634
+ int cnt = FIX2INT(opes[1]);
629
635
  inc += 1 - cnt;;
630
636
  return depth + inc;
631
637
  }
632
638
  case BIN(newarray):{
633
639
  int inc = 0;
634
- rb_num_t num = FIX2INT(opes[0]);
640
+ int num = FIX2INT(opes[0]);
635
641
  inc += 1 - num;;
636
642
  return depth + inc;
637
643
  }
@@ -640,8 +646,8 @@ insn_stack_increase(int depth, int insn, VALUE *opes)
640
646
  }
641
647
  case BIN(expandarray):{
642
648
  int inc = 0;
643
- rb_num_t num = FIX2INT(opes[0]);
644
- rb_num_t flag = FIX2INT(opes[1]);
649
+ int num = FIX2INT(opes[0]);
650
+ int flag = FIX2INT(opes[1]);
645
651
  inc += num - 1 + (flag & 1 ? 1 : 0);;
646
652
  return depth + inc;
647
653
  }
@@ -656,7 +662,7 @@ insn_stack_increase(int depth, int insn, VALUE *opes)
656
662
  }
657
663
  case BIN(newhash):{
658
664
  int inc = 0;
659
- rb_num_t num = FIX2INT(opes[0]);
665
+ int num = FIX2INT(opes[0]);
660
666
  inc += 1 - num;;
661
667
  return depth + inc;
662
668
  }
@@ -671,7 +677,7 @@ insn_stack_increase(int depth, int insn, VALUE *opes)
671
677
  }
672
678
  case BIN(dupn):{
673
679
  int inc = 0;
674
- rb_num_t n = FIX2INT(opes[0]);
680
+ int n = FIX2INT(opes[0]);
675
681
  inc += n;;
676
682
  return depth + inc;
677
683
  }
@@ -695,7 +701,7 @@ insn_stack_increase(int depth, int insn, VALUE *opes)
695
701
  }
696
702
  case BIN(adjuststack):{
697
703
  int inc = 0;
698
- rb_num_t n = FIX2INT(opes[0]);
704
+ int n = FIX2INT(opes[0]);
699
705
  inc -= n;
700
706
  return depth + inc;
701
707
  }
@@ -710,21 +716,21 @@ insn_stack_increase(int depth, int insn, VALUE *opes)
710
716
  }
711
717
  case BIN(send):{
712
718
  int inc = 0;
713
- rb_num_t op_argc = FIX2INT(opes[1]);
714
- rb_num_t op_flag = FIX2INT(opes[3]);
715
- inc += - (op_argc + ((op_flag & VM_CALL_ARGS_BLOCKARG_BIT) ? 1 : 0));;
719
+ int op_argc = FIX2INT(opes[1]);
720
+ int op_flag = FIX2INT(opes[3]);
721
+ inc += - (int)(op_argc + ((op_flag & VM_CALL_ARGS_BLOCKARG_BIT) ? 1 : 0));;
716
722
  return depth + inc;
717
723
  }
718
724
  case BIN(invokesuper):{
719
725
  int inc = 0;
720
- rb_num_t op_argc = FIX2INT(opes[0]);
721
- rb_num_t op_flag = FIX2INT(opes[2]);
722
- inc += - (op_argc + ((op_flag & VM_CALL_ARGS_BLOCKARG_BIT) ? 1 : 0));;
726
+ int op_argc = FIX2INT(opes[0]);
727
+ int op_flag = FIX2INT(opes[2]);
728
+ inc += - (int)(op_argc + ((op_flag & VM_CALL_ARGS_BLOCKARG_BIT) ? 1 : 0));;
723
729
  return depth + inc;
724
730
  }
725
731
  case BIN(invokeblock):{
726
732
  int inc = 0;
727
- rb_num_t num = FIX2INT(opes[0]);
733
+ int num = FIX2INT(opes[0]);
728
734
  inc += 1 - num;;
729
735
  return depth + inc;
730
736
  }
@@ -808,6 +814,9 @@ insn_stack_increase(int depth, int insn, VALUE *opes)
808
814
  case BIN(opt_length):{
809
815
  return depth + 0;
810
816
  }
817
+ case BIN(opt_size):{
818
+ return depth + 0;
819
+ }
811
820
  case BIN(opt_succ):{
812
821
  return depth + 0;
813
822
  }
@@ -840,29 +849,29 @@ insn_stack_increase(int depth, int insn, VALUE *opes)
840
849
  /* some utilities */
841
850
 
842
851
  static int
843
- insn_len(int insn)
852
+ insn_len(VALUE insn)
844
853
  {
845
- return insn_len_info[insn];
854
+ return insn_len_info[(int)insn];
846
855
  }
847
856
 
848
857
  static const char *
849
- insn_name(int insn)
858
+ insn_name(VALUE insn)
850
859
  {
851
- return insn_name_info[insn];
860
+ return insn_name_info[(int)insn];
852
861
  }
853
862
 
854
863
  static const char *
855
- insn_op_types(int insn)
864
+ insn_op_types(VALUE insn)
856
865
  {
857
- return insn_operand_info[insn];
866
+ return insn_operand_info[(int)insn];
858
867
  }
859
868
 
860
869
  static int
861
- insn_op_type(int insn, int pos)
870
+ insn_op_type(VALUE insn, long pos)
862
871
  {
863
872
  int len = insn_len(insn) - 1;
864
873
  if(pos < len){
865
- return insn_operand_info[insn][pos];
874
+ return insn_operand_info[(int)insn][pos];
866
875
  }
867
876
  else{
868
877
  return 0;
@@ -871,9 +880,9 @@ insn_op_type(int insn, int pos)
871
880
 
872
881
  #ifdef USE_INSN_RET_NUM
873
882
  static int
874
- insn_ret_num(int insn)
883
+ insn_ret_num(VALUE insn)
875
884
  {
876
- return insn_stack_push_num_info[insn];
885
+ return insn_stack_push_num_info[(int)insn];
877
886
  }
878
887
  #endif
879
888
  void
@@ -2,6 +2,7 @@
2
2
  #include "insns_info.inc"
3
3
 
4
4
  #include "internal/node/ruby_internal_node.h"
5
+ #include "internal/node/global_entry.h"
5
6
  #include "internal/module/module.h"
6
7
  #include "internal/vm/instruction/instruction.h"
7
8
 
@@ -247,9 +248,12 @@ static VALUE operand_to_value(VALUE insn, int op_idx, VALUE operand)
247
248
 
248
249
  case TS_LINDEX:
249
250
  case TS_DINDEX:
250
- case TS_NUM:
251
+ case TS_OFFSET:
251
252
  return INT2FIX(operand);
252
253
 
254
+ case TS_NUM:
255
+ return UINT2NUM(operand);
256
+
253
257
  case TS_ISEQ:
254
258
  {
255
259
  rb_iseq_t * iseq = (rb_iseq_t *)operand;
@@ -269,10 +273,6 @@ static VALUE operand_to_value(VALUE insn, int op_idx, VALUE operand)
269
273
  return ID2SYM(rb_intern(rb_id2name(entry->id)));
270
274
  }
271
275
 
272
- case TS_OFFSET:
273
- /* TODO */
274
- return Qnil;
275
-
276
276
  case TS_VARIABLE:
277
277
  /* TODO */
278
278
  return Qnil;
@@ -549,7 +549,7 @@ void Init_iseq(void)
549
549
  "end",
550
550
  "cont",
551
551
  "sp",
552
- 0);
552
+ (void *)0);
553
553
  rb_const_set(rb_cISeq, rb_intern("CatchTableEntry"), rb_cCatchTableEntry);
554
554
 
555
555
  rb_const_set(rb_cISeq, rb_intern("CATCH_TYPE_RESCUE"), CATCH_TYPE_RESCUE);
@@ -1,8 +1,9 @@
1
1
  #ifndef ruby_internal_iseq_load__inc_
2
2
  #define ruby_internal_iseq_load__inc_
3
3
 
4
- #include "internal/yarv-headers/gc.h"
5
- #include "internal/yarv-headers/iseq.h"
4
+ #include "gc.h"
5
+ #include "iseq.h"
6
+ #include "vm_core.h"
6
7
 
7
8
  #ruby <<END
8
9
  ruby_version_code = RUBY_VERSION.gsub(/\./, '').to_i
@@ -19,9 +20,11 @@
19
20
  File.open(iseq_c_location) do |input|
20
21
  input.each_line do |line|
21
22
  case line
22
- when /^(iseq_load|iseq_alloc|iseq_mark|iseq_free|compile_data_free|make_compile_option|make_compile_option_value|prepare_iseq_build|cleanup_iseq_build|set_relation)/
23
+ when /^(iseq_load|iseq_alloc|iseq_mark|iseq_free|compile_data_free|make_compile_option|make_compile_option_value|prepare_iseq_build|cleanup_iseq_build|set_relation|iseq_memsize)/
23
24
  write = true
24
25
  puts prev_line
26
+ when /^static.*iseq_data_type.*=/
27
+ write = true
25
28
  when /^static.*COMPILE_OPTION_DEFAULT.*=/
26
29
  write = true
27
30
  when /^static.*COMPILE_OPTION_FALSE.*=/
@@ -73,7 +73,7 @@ END
73
73
  dest_file = rpp_file.sub(/\.rpp$/, '')
74
74
  append_to_makefile << <<END
75
75
  #{dest_file}: #{rpp_file} #{rb_files.join(' ')}
76
- \t$(RUBY) #{base_dir}/rubypp.rb #{rpp_file} #{dest_file}
76
+ \trubypp #{rpp_file} #{dest_file}
77
77
  END
78
78
  end
79
79
 
@@ -109,3 +109,23 @@ if ruby_version_code >= 190 then
109
109
  end
110
110
  end
111
111
 
112
+ module Kernel
113
+ if not method_defined?(:try_const)
114
+ alias_method :try_const, :try_constant
115
+ end
116
+
117
+ if not method_defined?(:checking_message)
118
+ def checking_message(checking_for, headers = nil, opt = "")
119
+ return checking_for
120
+ end
121
+ end
122
+
123
+ if not method_defined?(:have_const)
124
+ def have_const(const, headers = nil, opt = "", &b)
125
+ checking_for checking_message([*const].compact.join(' '), headers, opt) do
126
+ try_const(const, headers, opt, &b)
127
+ end
128
+ end
129
+ end
130
+ end
131
+
@@ -2,9 +2,13 @@ wd = Dir.pwd()
2
2
  metaconfig_dir = File.join(File.dirname(__FILE__), '..')
3
3
  Dir.chdir metaconfig_dir
4
4
  begin
5
- require 'setup.rb'
5
+ $: << '.' # TODO: hack
6
+ require 'setup'
6
7
  require 'rbconfig'
7
- config = ConfigTable.new(Config::CONFIG)
8
+ if not defined?(RbConfig) then
9
+ RbConfig = Config
10
+ end
11
+ config = ConfigTable.new(RbConfig::CONFIG)
8
12
  config.load_standard_entries
9
13
  config.load_script 'metaconfig'
10
14
  config.load_savefile
data/post-setup.rb CHANGED
@@ -1,3 +1,4 @@
1
+ $: << '.' # TODO: hack
1
2
  require 'run_tests'
2
3
  require 'generate_rdoc'
3
4