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.
- data/bin/ruby-internal-node-dump +1 -1
- data/bin/ruby-internal-obfuscate +1 -1
- data/ext/internal/method/extconf.rb +4 -0
- data/ext/internal/method/internal_method.h +65 -0
- data/ext/internal/method/{method.h.rpp → internal_method.h.rpp} +21 -0
- data/ext/internal/method/method.c +69 -13
- data/ext/internal/module/classpath.c +12 -14
- data/ext/internal/module/extconf.rb +3 -2
- data/ext/internal/module/module.c +36 -15
- data/ext/internal/node/block.h.rpp +1 -0
- data/ext/internal/node/extconf.rb +0 -22
- data/ext/internal/node/global_entry.h +45 -3
- data/ext/internal/node/global_entry.h.rpp +12 -3
- data/ext/internal/node/node.c +42 -15
- data/ext/internal/node/node_type_descrip.c +16 -20
- data/ext/internal/node/node_type_descrip.c.rpp +1 -0
- data/ext/internal/node/nodeinfo.c +133 -281
- data/ext/internal/node/nodeinfo.c.rpp +8 -4
- data/ext/internal/node/nodeinfo.h.rpp +2 -1
- data/ext/internal/noex/noex.c +4 -0
- data/ext/internal/proc/proc.c +2 -2
- data/ext/internal/vm/constants/constants.c +2 -0
- data/ext/internal/vm/constants/extconf.rb +2 -0
- data/ext/internal/vm/control_frame/control_frame.c +21 -3
- data/ext/internal/vm/control_frame/extconf.rb +4 -0
- data/ext/internal/vm/inline_cache/inline_cache.c +12 -5
- data/ext/internal/vm/instruction/insns_info.c +141 -64
- data/ext/internal/vm/instruction/insns_info.c.rpp +3 -0
- data/ext/internal/vm/instruction/insns_info.h +80 -71
- data/ext/internal/vm/iseq/iseq.c +6 -6
- data/ext/internal/vm/iseq/iseq_load.inc.rpp +6 -3
- data/ext/mkmf-ruby-internal.rb +21 -1
- data/ext/ruby_source_dir.rb +6 -2
- data/post-setup.rb +1 -0
- data/pre-config.rb +9 -0
- data/run_tests.rb +1 -0
- data/test/test_method.rb +1 -1
- data/test/test_module.rb +1 -1
- metadata +309 -321
- data/ext/internal/method/method.h +0 -20
- data/ext/internal/yarv-headers/debug.h +0 -36
- data/ext/internal/yarv-headers/dln.h +0 -41
- data/ext/internal/yarv-headers/encdb.h +0 -147
- data/ext/internal/yarv-headers/eval_intern.h +0 -215
- data/ext/internal/yarv-headers/gc.h +0 -75
- data/ext/internal/yarv-headers/id.h +0 -163
- data/ext/internal/yarv-headers/iseq.h +0 -103
- data/ext/internal/yarv-headers/node.h +0 -516
- data/ext/internal/yarv-headers/parse.h +0 -188
- data/ext/internal/yarv-headers/regenc.h +0 -207
- data/ext/internal/yarv-headers/regint.h +0 -842
- data/ext/internal/yarv-headers/regparse.h +0 -351
- data/ext/internal/yarv-headers/revision.h +0 -1
- data/ext/internal/yarv-headers/thread_pthread.h +0 -24
- data/ext/internal/yarv-headers/thread_win32.h +0 -33
- data/ext/internal/yarv-headers/transcode_data.h +0 -106
- data/ext/internal/yarv-headers/transdb.h +0 -147
- data/ext/internal/yarv-headers/version.h +0 -54
- data/ext/internal/yarv-headers/vm_core.h +0 -646
- data/ext/internal/yarv-headers/vm_exec.h +0 -184
- data/ext/internal/yarv-headers/vm_insnhelper.h +0 -195
- data/ext/internal/yarv-headers/vm_opts.h +0 -51
- data/ext/rubypp.rb +0 -97
@@ -1,28 +1,6 @@
|
|
1
1
|
$: << '../..'
|
2
2
|
require 'mkmf-ruby-internal'
|
3
3
|
|
4
|
-
module Kernel
|
5
|
-
if not method_defined?(:try_const)
|
6
|
-
alias_method :try_const, :try_constant
|
7
|
-
end
|
8
|
-
|
9
|
-
if not method_defined?(:checking_message)
|
10
|
-
def checking_message(checking_for, headers = nil, opt = "")
|
11
|
-
return checking_for
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
if not method_defined?(:have_const)
|
16
|
-
def have_const(const, headers = nil, opt = "", &b)
|
17
|
-
checking_for checking_message([*const].compact.join(' '), headers, opt) do
|
18
|
-
try_const(const, headers, opt, &b)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
ruby_version_code = RUBY_VERSION.gsub(/\./, '').to_i
|
25
|
-
|
26
4
|
have_type('st_data_t', [ 'ruby.h', 'st.h' ]) or
|
27
5
|
have_type('st_data_t', [ 'ruby.h', 'ruby/st.h'])
|
28
6
|
|
@@ -1,10 +1,52 @@
|
|
1
1
|
#ifndef global_entry__h_
|
2
2
|
#define global_entry__h_
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
|
4
|
+
st_table * rb_global_tbl;
|
5
|
+
|
6
|
+
#define global_entry rb_global_entry
|
7
|
+
#define gvar_getter_t rb_gvar_getter_t
|
8
|
+
#define gvar_setter_t rb_gvar_setter_t
|
9
|
+
#define gvar_marker_t rb_gvar_marker_t
|
10
|
+
|
11
|
+
struct global_variable {
|
12
|
+
int counter;
|
13
|
+
void *data;
|
14
|
+
gvar_getter_t *getter;
|
15
|
+
gvar_setter_t *setter;
|
16
|
+
gvar_marker_t *marker;
|
17
|
+
int block_trace;
|
18
|
+
struct trace_var *trace;
|
7
19
|
};
|
20
|
+
#define undef_getter rb_gvar_undef_getter
|
21
|
+
#define undef_setter rb_gvar_undef_setter
|
22
|
+
#define undef_marker rb_gvar_undef_marker
|
23
|
+
struct global_entry*
|
24
|
+
rb_global_entry(ID id)
|
25
|
+
{
|
26
|
+
struct global_entry *entry;
|
27
|
+
st_data_t data;
|
28
|
+
|
29
|
+
if (!st_lookup(rb_global_tbl, (st_data_t)id, &data)) {
|
30
|
+
struct global_variable *var;
|
31
|
+
entry = ALLOC(struct global_entry);
|
32
|
+
var = ALLOC(struct global_variable);
|
33
|
+
entry->id = id;
|
34
|
+
entry->var = var;
|
35
|
+
var->counter = 1;
|
36
|
+
var->data = 0;
|
37
|
+
var->getter = undef_getter;
|
38
|
+
var->setter = undef_setter;
|
39
|
+
var->marker = undef_marker;
|
40
|
+
|
41
|
+
var->block_trace = 0;
|
42
|
+
var->trace = 0;
|
43
|
+
st_add_direct(rb_global_tbl, id, (st_data_t)entry);
|
44
|
+
}
|
45
|
+
else {
|
46
|
+
entry = (struct global_entry *)data;
|
47
|
+
}
|
48
|
+
return entry;
|
49
|
+
}
|
8
50
|
|
9
51
|
#endif
|
10
52
|
|
@@ -1,23 +1,32 @@
|
|
1
1
|
#ifndef global_entry__h_
|
2
2
|
#define global_entry__h_
|
3
3
|
|
4
|
+
st_table * rb_global_tbl;
|
5
|
+
|
4
6
|
#ruby <<END
|
5
7
|
$: << '../..'
|
8
|
+
$: << '.' # TODO: hack
|
6
9
|
require 'ruby_source_dir'
|
7
10
|
variable_c_location = "#{RUBY_SOURCE_DIR}/variable.c"
|
8
11
|
File.open(variable_c_location) do |variable_c|
|
9
12
|
write = false
|
10
13
|
stopwrite = false
|
14
|
+
prev_line = ''
|
11
15
|
while (line = variable_c.gets) != nil do
|
12
16
|
case line
|
13
|
-
when /^
|
17
|
+
when /^rb_global_entry\(.*\)/,
|
18
|
+
/^struct global_variable {/
|
19
|
+
puts prev_line
|
14
20
|
write = true
|
15
21
|
stopwrite = false
|
22
|
+
when /^#define (global_entry|gvar_getter_t|gvar_setter_t|gvar_marker_t|undef_getter|undef_setter|undef_marker)/
|
23
|
+
puts line
|
16
24
|
when /^\}/
|
17
|
-
stopwrite = true
|
25
|
+
stopwrite = true
|
18
26
|
end
|
19
27
|
puts line if write
|
20
|
-
|
28
|
+
write = false if stopwrite
|
29
|
+
prev_line = line
|
21
30
|
end
|
22
31
|
end
|
23
32
|
END
|
data/ext/internal/node/node.c
CHANGED
@@ -224,9 +224,9 @@ static VALUE node_flags(VALUE self)
|
|
224
224
|
*/
|
225
225
|
static VALUE node_nd_file(VALUE self)
|
226
226
|
{
|
227
|
+
#ifdef HAVE_RB_SOURCE_FILENAME
|
227
228
|
NODE * n;
|
228
229
|
Data_Get_Struct(self, NODE, n);
|
229
|
-
#ifdef HAVE_RB_SOURCE_FILENAME
|
230
230
|
if(n->nd_file)
|
231
231
|
{
|
232
232
|
return rb_str_new2(n->nd_file);
|
@@ -306,19 +306,25 @@ static VALUE node_bracket(VALUE node, VALUE member)
|
|
306
306
|
{
|
307
307
|
ID id = SYMBOL_P(member)
|
308
308
|
? SYM2ID(member)
|
309
|
-
: rb_intern(
|
309
|
+
: rb_intern(StringValuePtr(member));
|
310
310
|
return rb_funcall(node, id, 0);
|
311
311
|
}
|
312
312
|
|
313
|
+
static VALUE node_classname(VALUE node)
|
314
|
+
{
|
315
|
+
VALUE str = rb_str_new2("#<");
|
316
|
+
rb_str_cat2(str, rb_class2name(CLASS_OF(node)));
|
317
|
+
rb_str_cat2(str, " ");
|
318
|
+
return str;
|
319
|
+
}
|
320
|
+
|
313
321
|
#ifdef HAVE_RB_PROTECT_INSPECT
|
314
322
|
static VALUE node_inspect_protect(VALUE node)
|
315
323
|
#else
|
316
324
|
static VALUE node_inspect_protect(VALUE node, VALUE dummy, int recur)
|
317
325
|
#endif
|
318
326
|
{
|
319
|
-
VALUE str =
|
320
|
-
rb_str_cat2(str, rb_class2name(CLASS_OF(node)));
|
321
|
-
rb_str_cat2(str, " ");
|
327
|
+
VALUE str = node_classname(node);
|
322
328
|
VALUE members = node_members(node);
|
323
329
|
int j;
|
324
330
|
|
@@ -501,10 +507,19 @@ VALUE eval_ruby_node(NODE * node, VALUE self, VALUE cref)
|
|
501
507
|
}
|
502
508
|
else
|
503
509
|
{
|
510
|
+
#ifdef HAVE_RB_SOURCE_FILENAME
|
504
511
|
VALUE filename = node->nd_file
|
505
512
|
? rb_str_new2(node->nd_file)
|
506
513
|
: rb_str_new2("<unknown>");
|
514
|
+
#else
|
515
|
+
VALUE filename = Qnil;
|
516
|
+
#endif
|
517
|
+
|
518
|
+
VALUE filepath = Qnil; /* TODO */
|
519
|
+
|
507
520
|
VALUE iseq;
|
521
|
+
rb_proc_t * p;
|
522
|
+
VALUE proc;
|
508
523
|
|
509
524
|
if(nd_type(node) != NODE_SCOPE)
|
510
525
|
{
|
@@ -519,6 +534,9 @@ VALUE eval_ruby_node(NODE * node, VALUE self, VALUE cref)
|
|
519
534
|
node,
|
520
535
|
rb_str_new2("<compiled>"),
|
521
536
|
filename,
|
537
|
+
#if RUBY_VERSION_CODE >= 192
|
538
|
+
filepath,
|
539
|
+
#endif
|
522
540
|
self,
|
523
541
|
ISEQ_TYPE_TOP);
|
524
542
|
|
@@ -528,9 +546,6 @@ VALUE eval_ruby_node(NODE * node, VALUE self, VALUE cref)
|
|
528
546
|
/* VALUE result = rb_iseq_eval(iseq);
|
529
547
|
return result; */
|
530
548
|
|
531
|
-
rb_proc_t * p;
|
532
|
-
VALUE proc;
|
533
|
-
|
534
549
|
proc = create_proc(rb_cProc, Qnil, iseq_check(iseq));
|
535
550
|
GetProcPtr(proc, p);
|
536
551
|
p->block.self = self;
|
@@ -646,17 +661,20 @@ NODE * load_node_from_hash(VALUE arr, VALUE orig_node_id, VALUE node_hash, VALUE
|
|
646
661
|
NODE * n = NEW_NIL();
|
647
662
|
VALUE s3, s2, s1, rb_nd_file, rb_flags;
|
648
663
|
unsigned long flags;
|
649
|
-
char *nd_file = 0;
|
650
664
|
Node_Type_Descrip const *descrip;
|
651
665
|
NODE tmp_node;
|
652
666
|
|
667
|
+
#ifdef HAVE_RB_SOURCE_FILENAME
|
668
|
+
char *nd_file = 0;
|
669
|
+
#endif
|
670
|
+
|
653
671
|
nd_set_type(&tmp_node, NODE_NIL);
|
654
672
|
|
655
673
|
Check_Type(arr, T_ARRAY);
|
656
674
|
s3 = rb_ary_pop(arr);
|
657
675
|
s2 = rb_ary_pop(arr);
|
658
676
|
s1 = rb_ary_pop(arr);
|
659
|
-
rb_nd_file = rb_ary_pop(arr);
|
677
|
+
rb_nd_file = rb_ary_pop(arr); /* TODO: warning: set but not used */
|
660
678
|
rb_flags = rb_ary_pop(arr);
|
661
679
|
flags = NUM2INT(rb_flags);
|
662
680
|
tmp_node.flags = flags;
|
@@ -686,7 +704,10 @@ NODE * load_node_from_hash(VALUE arr, VALUE orig_node_id, VALUE node_hash, VALUE
|
|
686
704
|
*/
|
687
705
|
memcpy(n, &tmp_node, sizeof(NODE));
|
688
706
|
n->flags = flags;
|
707
|
+
|
708
|
+
#ifdef HAVE_RB_SOURCE_FILENAME
|
689
709
|
n->nd_file = nd_file;
|
710
|
+
#endif
|
690
711
|
|
691
712
|
return n;
|
692
713
|
}
|
@@ -758,7 +779,7 @@ static VALUE node_compile_string(int argc, VALUE * argv, VALUE self)
|
|
758
779
|
file = NIL_P(file) ? rb_str_new2("(compiled)") : file;
|
759
780
|
line = NIL_P(line) ? INT2NUM(1) : line;
|
760
781
|
|
761
|
-
node = rb_compile_string(
|
782
|
+
node = rb_compile_string(StringValuePtr(file), str, NUM2INT(line));
|
762
783
|
|
763
784
|
#ifdef RUBY_VM
|
764
785
|
if(!node)
|
@@ -788,8 +809,11 @@ static VALUE node_compile_string(int argc, VALUE * argv, VALUE self)
|
|
788
809
|
*/
|
789
810
|
static VALUE node_bytecode_compile(int argc, VALUE * argv, VALUE self)
|
790
811
|
{
|
812
|
+
NODE * node;
|
791
813
|
VALUE name = Qnil;
|
792
814
|
VALUE filename = Qnil;
|
815
|
+
VALUE filepath = Qnil; /* TODO */
|
816
|
+
|
793
817
|
rb_scan_args(argc, argv, "02", &name, &filename);
|
794
818
|
|
795
819
|
if(name == Qnil)
|
@@ -802,12 +826,15 @@ static VALUE node_bytecode_compile(int argc, VALUE * argv, VALUE self)
|
|
802
826
|
filename = name;
|
803
827
|
}
|
804
828
|
|
805
|
-
|
829
|
+
node = unwrap_node(self);
|
806
830
|
|
807
831
|
return rb_iseq_new(
|
808
832
|
node,
|
809
833
|
name,
|
810
834
|
filename,
|
835
|
+
#if RUBY_VERSION_CODE >= 192
|
836
|
+
filepath,
|
837
|
+
#endif
|
811
838
|
Qfalse,
|
812
839
|
ISEQ_TYPE_TOP);
|
813
840
|
}
|
@@ -823,7 +850,7 @@ static VALUE node_bytecode_compile(int argc, VALUE * argv, VALUE self)
|
|
823
850
|
static VALUE node_dump(VALUE self, VALUE limit)
|
824
851
|
{
|
825
852
|
NODE * n;
|
826
|
-
VALUE node_hash, arr;
|
853
|
+
VALUE node_hash, arr, s;
|
827
854
|
|
828
855
|
if(rb_safe_level() >= 4)
|
829
856
|
{
|
@@ -836,7 +863,7 @@ static VALUE node_dump(VALUE self, VALUE limit)
|
|
836
863
|
arr = rb_ary_new();
|
837
864
|
rb_ary_push(arr, node_id(n));
|
838
865
|
rb_ary_push(arr, node_hash);
|
839
|
-
|
866
|
+
s = marshal_dump(arr, limit);
|
840
867
|
return s;
|
841
868
|
}
|
842
869
|
|
@@ -1051,7 +1078,7 @@ void Init_node(void)
|
|
1051
1078
|
{
|
1052
1079
|
int actual_ruby_version_code = 0;
|
1053
1080
|
VALUE ruby_version_str = rb_const_get(rb_cObject, rb_intern("RUBY_VERSION"));
|
1054
|
-
char const * s =
|
1081
|
+
char const * s = StringValuePtr(ruby_version_str);
|
1055
1082
|
|
1056
1083
|
for(; *s != '\0'; ++s)
|
1057
1084
|
{
|
@@ -6,13 +6,12 @@ Node_Type_Descrip node_type_descrips_unsorted[] = {
|
|
6
6
|
#ifdef HAVE_NODE_ALLOCA
|
7
7
|
{ NODE_ALLOCA, NEN_CFNC, NEN_VALUE, NEN_CNT, "ALLOCA" },
|
8
8
|
#endif
|
9
|
-
{ NODE_AND,
|
9
|
+
{ NODE_AND, NEN_2ND, NEN_1ST, NEN_NONE, "AND" },
|
10
10
|
{ NODE_ARGS, NEN_REST, NEN_OPT, NEN_CNT, "ARGS" },
|
11
11
|
{ NODE_ARGSCAT, NEN_HEAD, NEN_BODY, NEN_NONE, "ARGSCAT" },
|
12
12
|
{ NODE_ARGSPUSH, NEN_HEAD, NEN_BODY, NEN_NONE, "ARGSPUSH" },
|
13
|
-
{ NODE_ARRAY,
|
14
|
-
{ NODE_ATTRASGN, NEN_ARGS, NEN_MID,
|
15
|
-
{ NODE_ATTRSET, NEN_VID, NEN_NONE, NEN_NONE, "ATTRSET" },
|
13
|
+
{ NODE_ARRAY, NEN_ALEN, NEN_HEAD, NEN_NEXT, "ARRAY" },
|
14
|
+
{ NODE_ATTRASGN, NEN_RECV, NEN_ARGS, NEN_MID, "ATTRASGN" },
|
16
15
|
{ NODE_BACK_REF, NEN_NTH, NEN_CNT, NEN_NONE, "BACK_REF" },
|
17
16
|
{ NODE_BEGIN, NEN_BODY, NEN_NONE, NEN_NONE, "BEGIN" },
|
18
17
|
{ NODE_BLOCK, NEN_HEAD, NEN_NEXT, NEN_NONE, "BLOCK" },
|
@@ -23,8 +22,7 @@ Node_Type_Descrip node_type_descrips_unsorted[] = {
|
|
23
22
|
{ NODE_CALL, NEN_ARGS, NEN_MID, NEN_RECV, "CALL" },
|
24
23
|
{ NODE_CASE, NEN_HEAD, NEN_BODY, NEN_NEXT, "CASE" },
|
25
24
|
{ NODE_CDECL, NEN_VALUE, NEN_VID, NEN_NONE, "CDECL" },
|
26
|
-
{
|
27
|
-
{ NODE_CLASS, NEN_CPATH, NEN_BODY, NEN_SUPER, "CLASS" },
|
25
|
+
{ NODE_CLASS, NEN_SUPER, NEN_CPATH, NEN_BODY, "CLASS" },
|
28
26
|
{ NODE_COLON2, NEN_HEAD, NEN_MID, NEN_NONE, "COLON2" },
|
29
27
|
{ NODE_COLON3, NEN_MID, NEN_NONE, NEN_NONE, "COLON3" },
|
30
28
|
{ NODE_CONST, NEN_VID, NEN_NONE, NEN_NONE, "CONST" },
|
@@ -35,11 +33,11 @@ Node_Type_Descrip node_type_descrips_unsorted[] = {
|
|
35
33
|
{ NODE_DASGN_CURR, NEN_VALUE, NEN_VID, NEN_NONE, "DASGN_CURR" },
|
36
34
|
{ NODE_DEFINED, NEN_HEAD, NEN_NONE, NEN_NONE, "DEFINED" },
|
37
35
|
{ NODE_DEFN, NEN_DEFN, NEN_MID, NEN_NOEX, "DEFN" },
|
38
|
-
{ NODE_DEFS, NEN_DEFN,
|
36
|
+
{ NODE_DEFS, NEN_DEFN, NEN_RECV, NEN_MID, "DEFS" },
|
39
37
|
{ NODE_DOT2, NEN_BEG, NEN_END, NEN_STATE, "DOT2" },
|
40
38
|
{ NODE_DOT3, NEN_BEG, NEN_END, NEN_STATE, "DOT3" },
|
41
|
-
{ NODE_DREGX, NEN_LIT,
|
42
|
-
{ NODE_DREGX_ONCE, NEN_LIT,
|
39
|
+
{ NODE_DREGX, NEN_LIT, NEN_NEXT, NEN_CFLAG, "DREGX" },
|
40
|
+
{ NODE_DREGX_ONCE, NEN_LIT, NEN_NEXT, NEN_CFLAG, "DREGX_ONCE" },
|
43
41
|
{ NODE_DSTR, NEN_LIT, NEN_NEXT, NEN_NONE, "DSTR" },
|
44
42
|
{ NODE_DSYM, NEN_LIT, NEN_NEXT, NEN_NONE, "DSYM" },
|
45
43
|
{ NODE_DVAR, NEN_VID, NEN_NONE, NEN_NONE, "DVAR" },
|
@@ -47,10 +45,9 @@ Node_Type_Descrip node_type_descrips_unsorted[] = {
|
|
47
45
|
{ NODE_ENSURE, NEN_HEAD, NEN_ENSR, NEN_NONE, "ENSURE" },
|
48
46
|
{ NODE_EVSTR, NEN_BODY, NEN_NONE, NEN_NONE, "EVSTR" },
|
49
47
|
{ NODE_FALSE, NEN_NONE, NEN_NONE, NEN_NONE, "FALSE" },
|
50
|
-
{ NODE_FBODY, NEN_BODY, NEN_CNT, NEN_OID, "FBODY" },
|
51
48
|
{ NODE_FCALL, NEN_ARGS, NEN_MID, NEN_NONE, "FCALL" },
|
52
|
-
{ NODE_FLIP2, NEN_BEG, NEN_END,
|
53
|
-
{ NODE_FLIP3, NEN_BEG, NEN_END,
|
49
|
+
{ NODE_FLIP2, NEN_CNT, NEN_BEG, NEN_END, "FLIP2" },
|
50
|
+
{ NODE_FLIP3, NEN_CNT, NEN_BEG, NEN_END, "FLIP3" },
|
54
51
|
{ NODE_FOR, NEN_BODY, NEN_ITER, NEN_VAR, "FOR" },
|
55
52
|
{ NODE_GASGN, NEN_VALUE, NEN_VID, NEN_ENTRY, "GASGN" },
|
56
53
|
{ NODE_GVAR, NEN_VID, NEN_ENTRY, NEN_NONE, "GVAR" },
|
@@ -65,25 +62,24 @@ Node_Type_Descrip node_type_descrips_unsorted[] = {
|
|
65
62
|
{ NODE_LVAR, NEN_VID, NEN_CNT, NEN_NONE, "LVAR" },
|
66
63
|
{ NODE_MASGN, NEN_ARGS, NEN_HEAD, NEN_VALUE, "MASGN" },
|
67
64
|
{ NODE_MATCH, NEN_LIT, NEN_VALUE, NEN_NONE, "MATCH" },
|
68
|
-
{ NODE_MATCH2,
|
69
|
-
{ NODE_MATCH3,
|
65
|
+
{ NODE_MATCH2, NEN_RECV, NEN_VALUE, NEN_NONE, "MATCH2" },
|
66
|
+
{ NODE_MATCH3, NEN_RECV, NEN_VALUE, NEN_NONE, "MATCH3" },
|
70
67
|
{ NODE_MEMO, NEN_NONE, NEN_NONE, NEN_NONE, "MEMO" },
|
71
|
-
{ NODE_METHOD, NEN_BODY, NEN_CLSS, NEN_NOEX, "METHOD" },
|
72
68
|
{ NODE_MODULE, NEN_CPATH, NEN_BODY, NEN_NONE, "MODULE" },
|
73
69
|
{ NODE_NEXT, NEN_STTS, NEN_NONE, NEN_NONE, "NEXT" },
|
74
70
|
{ NODE_NIL, NEN_NONE, NEN_NONE, NEN_NONE, "NIL" },
|
75
71
|
{ NODE_NTH_REF, NEN_NTH, NEN_CNT, NEN_NONE, "NTH_REF" },
|
76
72
|
{ NODE_OPT_N, NEN_BODY, NEN_NONE, NEN_NONE, "OPT_N" },
|
77
73
|
{ NODE_OP_ASGN1, NEN_ARGS, NEN_MID, NEN_RECV, "OP_ASGN1" },
|
78
|
-
{ NODE_OP_ASGN2,
|
74
|
+
{ NODE_OP_ASGN2, NEN_RECV, NEN_NEXT, NEN_VALUE, "OP_ASGN2" },
|
79
75
|
{ NODE_OP_ASGN2_ARG, NEN_VID, NEN_AID, NEN_MID, "OP_ASGN2_ARG" },
|
80
|
-
{ NODE_OP_ASGN_AND,
|
76
|
+
{ NODE_OP_ASGN_AND, NEN_RECV, NEN_VALUE, NEN_NONE, "OP_ASGN_AND" },
|
81
77
|
{ NODE_OP_ASGN_OR, NEN_AID, NEN_VALUE, NEN_RECV, "OP_ASGN_OR" },
|
82
|
-
{ NODE_OR,
|
78
|
+
{ NODE_OR, NEN_2ND, NEN_1ST, NEN_NONE, "OR" },
|
83
79
|
{ NODE_POSTEXE, NEN_NONE, NEN_NONE, NEN_NONE, "POSTEXE" },
|
84
80
|
{ NODE_REDO, NEN_NONE, NEN_NONE, NEN_NONE, "REDO" },
|
85
|
-
{ NODE_RESBODY, NEN_HEAD,
|
86
|
-
{ NODE_RESCUE, NEN_HEAD,
|
81
|
+
{ NODE_RESBODY, NEN_HEAD, NEN_BODY, NEN_ARGS, "RESBODY" },
|
82
|
+
{ NODE_RESCUE, NEN_HEAD, NEN_RESQ, NEN_ELSE, "RESCUE" },
|
87
83
|
{ NODE_RETRY, NEN_NONE, NEN_NONE, NEN_NONE, "RETRY" },
|
88
84
|
{ NODE_RETURN, NEN_STTS, NEN_NONE, NEN_NONE, "RETURN" },
|
89
85
|
{ NODE_SCLASS, NEN_BODY, NEN_RECV, NEN_NONE, "SCLASS" },
|
@@ -228,7 +228,7 @@ VALUE dump_node_elem(enum Node_Elem_Name nen, NODE * n, VALUE node_hash)
|
|
228
228
|
else
|
229
229
|
{
|
230
230
|
path = rb_class_path(klass);
|
231
|
-
if(
|
231
|
+
if(StringValuePtr(path)[0] == '#')
|
232
232
|
{
|
233
233
|
rb_raise(rb_eArgError, "cannot dump anonymous class");
|
234
234
|
}
|
@@ -322,7 +322,7 @@ VALUE dump_node_elem(enum Node_Elem_Name nen, NODE * n, VALUE node_hash)
|
|
322
322
|
else
|
323
323
|
{
|
324
324
|
path = rb_class_path(klass);
|
325
|
-
if(
|
325
|
+
if(StringValuePtr(path)[0] == '#')
|
326
326
|
{
|
327
327
|
rb_raise(rb_eArgError, "cannot dump anonymous class");
|
328
328
|
}
|
@@ -521,7 +521,7 @@ VALUE dump_node_elem(enum Node_Elem_Name nen, NODE * n, VALUE node_hash)
|
|
521
521
|
else
|
522
522
|
{
|
523
523
|
path = rb_class_path(klass);
|
524
|
-
if(
|
524
|
+
if(StringValuePtr(path)[0] == '#')
|
525
525
|
{
|
526
526
|
rb_raise(rb_eArgError, "cannot dump anonymous class");
|
527
527
|
}
|
@@ -658,7 +658,7 @@ VALUE dump_node_elem(enum Node_Elem_Name nen, NODE * n, VALUE node_hash)
|
|
658
658
|
else
|
659
659
|
{
|
660
660
|
path = rb_class_path(klass);
|
661
|
-
if(
|
661
|
+
if(StringValuePtr(path)[0] == '#')
|
662
662
|
{
|
663
663
|
rb_raise(rb_eArgError, "cannot dump anonymous class");
|
664
664
|
}
|
@@ -872,7 +872,7 @@ VALUE dump_node_elem(enum Node_Elem_Name nen, NODE * n, VALUE node_hash)
|
|
872
872
|
else
|
873
873
|
{
|
874
874
|
path = rb_class_path(klass);
|
875
|
-
if(
|
875
|
+
if(StringValuePtr(path)[0] == '#')
|
876
876
|
{
|
877
877
|
rb_raise(rb_eArgError, "cannot dump anonymous class");
|
878
878
|
}
|
@@ -1131,20 +1131,23 @@ void load_node_elem(enum Node_Elem_Name nen, VALUE v, NODE * n, VALUE node_hash,
|
|
1131
1131
|
}
|
1132
1132
|
case NEN_CLSS:
|
1133
1133
|
{
|
1134
|
+
int flags;
|
1134
1135
|
Check_Type(v, T_ARRAY);
|
1135
1136
|
if(RARRAY_LEN(v) != 2)
|
1136
1137
|
{
|
1137
1138
|
rb_raise(rb_eArgError, "wrong size for array");
|
1138
1139
|
}
|
1139
|
-
|
1140
|
+
flags = NUM2INT(RARRAY_PTR(v)[0]);
|
1140
1141
|
switch(flags & T_MASK)
|
1141
1142
|
{
|
1142
1143
|
case T_CLASS:
|
1143
1144
|
case T_MODULE:
|
1144
1145
|
{
|
1145
|
-
VALUE str
|
1146
|
+
VALUE str, klass;
|
1147
|
+
|
1148
|
+
str = RARRAY_PTR(v)[1];
|
1146
1149
|
Check_Type(str, T_STRING);
|
1147
|
-
|
1150
|
+
klass = rb_path2class(StringValuePtr(str));
|
1148
1151
|
if(flags & FL_SINGLETON)
|
1149
1152
|
{
|
1150
1153
|
*(VALUE *)(&n->nd_clss) =
|
@@ -1220,20 +1223,23 @@ void load_node_elem(enum Node_Elem_Name nen, VALUE v, NODE * n, VALUE node_hash,
|
|
1220
1223
|
}
|
1221
1224
|
case NEN_CVAL:
|
1222
1225
|
{
|
1226
|
+
int flags;
|
1223
1227
|
Check_Type(v, T_ARRAY);
|
1224
1228
|
if(RARRAY_LEN(v) != 2)
|
1225
1229
|
{
|
1226
1230
|
rb_raise(rb_eArgError, "wrong size for array");
|
1227
1231
|
}
|
1228
|
-
|
1232
|
+
flags = NUM2INT(RARRAY_PTR(v)[0]);
|
1229
1233
|
switch(flags & T_MASK)
|
1230
1234
|
{
|
1231
1235
|
case T_CLASS:
|
1232
1236
|
case T_MODULE:
|
1233
1237
|
{
|
1234
|
-
VALUE str
|
1238
|
+
VALUE str, klass;
|
1239
|
+
|
1240
|
+
str = RARRAY_PTR(v)[1];
|
1235
1241
|
Check_Type(str, T_STRING);
|
1236
|
-
|
1242
|
+
klass = rb_path2class(StringValuePtr(str));
|
1237
1243
|
if(flags & FL_SINGLETON)
|
1238
1244
|
{
|
1239
1245
|
*(VALUE *)(&n->nd_cval) =
|
@@ -1414,20 +1420,23 @@ void load_node_elem(enum Node_Elem_Name nen, VALUE v, NODE * n, VALUE node_hash,
|
|
1414
1420
|
}
|
1415
1421
|
case NEN_LIT:
|
1416
1422
|
{
|
1423
|
+
int flags;
|
1417
1424
|
Check_Type(v, T_ARRAY);
|
1418
1425
|
if(RARRAY_LEN(v) != 2)
|
1419
1426
|
{
|
1420
1427
|
rb_raise(rb_eArgError, "wrong size for array");
|
1421
1428
|
}
|
1422
|
-
|
1429
|
+
flags = NUM2INT(RARRAY_PTR(v)[0]);
|
1423
1430
|
switch(flags & T_MASK)
|
1424
1431
|
{
|
1425
1432
|
case T_CLASS:
|
1426
1433
|
case T_MODULE:
|
1427
1434
|
{
|
1428
|
-
VALUE str
|
1435
|
+
VALUE str, klass;
|
1436
|
+
|
1437
|
+
str = RARRAY_PTR(v)[1];
|
1429
1438
|
Check_Type(str, T_STRING);
|
1430
|
-
|
1439
|
+
klass = rb_path2class(StringValuePtr(str));
|
1431
1440
|
if(flags & FL_SINGLETON)
|
1432
1441
|
{
|
1433
1442
|
*(VALUE *)(&n->nd_lit) =
|
@@ -1556,20 +1565,23 @@ void load_node_elem(enum Node_Elem_Name nen, VALUE v, NODE * n, VALUE node_hash,
|
|
1556
1565
|
}
|
1557
1566
|
case NEN_ORIG:
|
1558
1567
|
{
|
1568
|
+
int flags;
|
1559
1569
|
Check_Type(v, T_ARRAY);
|
1560
1570
|
if(RARRAY_LEN(v) != 2)
|
1561
1571
|
{
|
1562
1572
|
rb_raise(rb_eArgError, "wrong size for array");
|
1563
1573
|
}
|
1564
|
-
|
1574
|
+
flags = NUM2INT(RARRAY_PTR(v)[0]);
|
1565
1575
|
switch(flags & T_MASK)
|
1566
1576
|
{
|
1567
1577
|
case T_CLASS:
|
1568
1578
|
case T_MODULE:
|
1569
1579
|
{
|
1570
|
-
VALUE str
|
1580
|
+
VALUE str, klass;
|
1581
|
+
|
1582
|
+
str = RARRAY_PTR(v)[1];
|
1571
1583
|
Check_Type(str, T_STRING);
|
1572
|
-
|
1584
|
+
klass = rb_path2class(StringValuePtr(str));
|
1573
1585
|
if(flags & FL_SINGLETON)
|
1574
1586
|
{
|
1575
1587
|
*(VALUE *)(&n->nd_orig) =
|
@@ -1808,20 +1820,23 @@ void load_node_elem(enum Node_Elem_Name nen, VALUE v, NODE * n, VALUE node_hash,
|
|
1808
1820
|
}
|
1809
1821
|
case NEN_TVAL:
|
1810
1822
|
{
|
1823
|
+
int flags;
|
1811
1824
|
Check_Type(v, T_ARRAY);
|
1812
1825
|
if(RARRAY_LEN(v) != 2)
|
1813
1826
|
{
|
1814
1827
|
rb_raise(rb_eArgError, "wrong size for array");
|
1815
1828
|
}
|
1816
|
-
|
1829
|
+
flags = NUM2INT(RARRAY_PTR(v)[0]);
|
1817
1830
|
switch(flags & T_MASK)
|
1818
1831
|
{
|
1819
1832
|
case T_CLASS:
|
1820
1833
|
case T_MODULE:
|
1821
1834
|
{
|
1822
|
-
VALUE str
|
1835
|
+
VALUE str, klass;
|
1836
|
+
|
1837
|
+
str = RARRAY_PTR(v)[1];
|
1823
1838
|
Check_Type(str, T_STRING);
|
1824
|
-
|
1839
|
+
klass = rb_path2class(StringValuePtr(str));
|
1825
1840
|
if(flags & FL_SINGLETON)
|
1826
1841
|
{
|
1827
1842
|
*(VALUE *)(&n->nd_tval) =
|
@@ -2000,16 +2015,6 @@ static VALUE node_alen(VALUE self)
|
|
2000
2015
|
Data_Get_Struct(self, NODE, n);
|
2001
2016
|
return LONG2NUM(n->nd_alen);
|
2002
2017
|
}
|
2003
|
-
/*
|
2004
|
-
* Return the Node's _argc_ member. The return type is an
|
2005
|
-
* Integer.
|
2006
|
-
*/
|
2007
|
-
static VALUE node_argc(VALUE self)
|
2008
|
-
{
|
2009
|
-
NODE * n;
|
2010
|
-
Data_Get_Struct(self, NODE, n);
|
2011
|
-
return LONG2NUM(n->nd_argc);
|
2012
|
-
}
|
2013
2018
|
/*
|
2014
2019
|
* Return the Node's _args_ member. The return type is
|
2015
2020
|
* either a Node or an Object.
|
@@ -2107,33 +2112,6 @@ static VALUE node_cfnc(VALUE self)
|
|
2107
2112
|
Data_Get_Struct(self, NODE, n);
|
2108
2113
|
return LONG2NUM((long)(n->nd_cfnc));
|
2109
2114
|
}
|
2110
|
-
/*
|
2111
|
-
* Return the Node's _clss_ member. The return type is
|
2112
|
-
* either a Node or an Object.
|
2113
|
-
*/
|
2114
|
-
static VALUE node_clss(VALUE self)
|
2115
|
-
{
|
2116
|
-
NODE * n;
|
2117
|
-
Data_Get_Struct(self, NODE, n);
|
2118
|
-
|
2119
|
-
if(TYPE(n->nd_clss) == T_NODE)
|
2120
|
-
{
|
2121
|
-
if(0 && nd_type(n) == NODE_OP_ASGN2)
|
2122
|
-
{
|
2123
|
-
return wrap_node_as(
|
2124
|
-
(NODE *)n->nd_clss,
|
2125
|
-
rb_cNodeSubclass[NODE_OP_ASGN2_ARG]);
|
2126
|
-
}
|
2127
|
-
else
|
2128
|
-
{
|
2129
|
-
return wrap_node((NODE *)n->nd_clss);
|
2130
|
-
}
|
2131
|
-
}
|
2132
|
-
else
|
2133
|
-
{
|
2134
|
-
return (VALUE)n->nd_clss;
|
2135
|
-
}
|
2136
|
-
}
|
2137
2115
|
/*
|
2138
2116
|
* Return the Node's _cnt_ member. The return type is an
|
2139
2117
|
* Integer.
|
@@ -2499,27 +2477,6 @@ static VALUE node_nth(VALUE self)
|
|
2499
2477
|
Data_Get_Struct(self, NODE, n);
|
2500
2478
|
return LONG2NUM(n->nd_nth);
|
2501
2479
|
}
|
2502
|
-
/*
|
2503
|
-
* Return the Node's _oid_ member. The return type is a
|
2504
|
-
* Symbol.
|
2505
|
-
*/
|
2506
|
-
static VALUE node_oid(VALUE self)
|
2507
|
-
{
|
2508
|
-
NODE * n;
|
2509
|
-
Data_Get_Struct(self, NODE, n);
|
2510
|
-
if(n->nd_oid == 0)
|
2511
|
-
{
|
2512
|
-
return Qfalse;
|
2513
|
-
}
|
2514
|
-
else if(n->nd_oid == 1)
|
2515
|
-
{
|
2516
|
-
return Qtrue;
|
2517
|
-
}
|
2518
|
-
else
|
2519
|
-
{
|
2520
|
-
return ID2SYM(n->nd_oid);
|
2521
|
-
}
|
2522
|
-
}
|
2523
2480
|
/*
|
2524
2481
|
* Return the Node's _opt_ member. The return type is
|
2525
2482
|
* either a Node or an Object.
|
@@ -2921,17 +2878,17 @@ void define_node_subclass_methods()
|
|
2921
2878
|
rb_iv_set(rb_cAND, "__type__", INT2NUM(NODE_AND));
|
2922
2879
|
rb_define_singleton_method(rb_cAND, "members", node_s_members, 0);
|
2923
2880
|
|
2924
|
-
/* Document-method: first
|
2925
|
-
* the expression on the left hand side
|
2926
|
-
*/
|
2927
|
-
rb_define_method(rb_cAND, "first", node_1st, 0);
|
2928
|
-
rb_ary_push(members, rb_str_new2("first"));
|
2929
|
-
|
2930
2881
|
/* Document-method: second
|
2931
2882
|
* the expression on the right hand side
|
2932
2883
|
*/
|
2933
2884
|
rb_define_method(rb_cAND, "second", node_2nd, 0);
|
2934
2885
|
rb_ary_push(members, rb_str_new2("second"));
|
2886
|
+
|
2887
|
+
/* Document-method: first
|
2888
|
+
* the expression on the left hand side
|
2889
|
+
*/
|
2890
|
+
rb_define_method(rb_cAND, "first", node_1st, 0);
|
2891
|
+
rb_ary_push(members, rb_str_new2("first"));
|
2935
2892
|
}
|
2936
2893
|
|
2937
2894
|
/* Document-class: Node::ARGS
|
@@ -3028,14 +2985,14 @@ void define_node_subclass_methods()
|
|
3028
2985
|
rb_iv_set(rb_cARRAY, "__member__", members);
|
3029
2986
|
rb_iv_set(rb_cARRAY, "__type__", INT2NUM(NODE_ARRAY));
|
3030
2987
|
rb_define_singleton_method(rb_cARRAY, "members", node_s_members, 0);
|
2988
|
+
rb_define_method(rb_cARRAY, "alen", node_alen, 0);
|
2989
|
+
rb_ary_push(members, rb_str_new2("alen"));
|
3031
2990
|
|
3032
2991
|
/* Document-method: head
|
3033
2992
|
* the first element of the array
|
3034
2993
|
*/
|
3035
2994
|
rb_define_method(rb_cARRAY, "head", node_head, 0);
|
3036
2995
|
rb_ary_push(members, rb_str_new2("head"));
|
3037
|
-
rb_define_method(rb_cARRAY, "alen", node_alen, 0);
|
3038
|
-
rb_ary_push(members, rb_str_new2("alen"));
|
3039
2996
|
|
3040
2997
|
/* Document-method: next
|
3041
2998
|
* the tail of the array
|
@@ -3058,6 +3015,12 @@ void define_node_subclass_methods()
|
|
3058
3015
|
rb_iv_set(rb_cATTRASGN, "__type__", INT2NUM(NODE_ATTRASGN));
|
3059
3016
|
rb_define_singleton_method(rb_cATTRASGN, "members", node_s_members, 0);
|
3060
3017
|
|
3018
|
+
/* Document-method: recv
|
3019
|
+
* the receiver of the method
|
3020
|
+
*/
|
3021
|
+
rb_define_method(rb_cATTRASGN, "recv", node_recv, 0);
|
3022
|
+
rb_ary_push(members, rb_str_new2("recv"));
|
3023
|
+
|
3061
3024
|
/* Document-method: args
|
3062
3025
|
* the arguments to the method
|
3063
3026
|
*/
|
@@ -3069,33 +3032,6 @@ void define_node_subclass_methods()
|
|
3069
3032
|
*/
|
3070
3033
|
rb_define_method(rb_cATTRASGN, "mid", node_mid, 0);
|
3071
3034
|
rb_ary_push(members, rb_str_new2("mid"));
|
3072
|
-
|
3073
|
-
/* Document-method: recv
|
3074
|
-
* the receiver of the method
|
3075
|
-
*/
|
3076
|
-
rb_define_method(rb_cATTRASGN, "recv", node_recv, 0);
|
3077
|
-
rb_ary_push(members, rb_str_new2("recv"));
|
3078
|
-
}
|
3079
|
-
|
3080
|
-
/* Document-class: Node::ATTRSET
|
3081
|
-
* A placeholder for an attribute writer method, which can added to a
|
3082
|
-
* class by using attr_writer:
|
3083
|
-
* attr_writer :attribute
|
3084
|
-
* Its reader counterpart is IVAR.
|
3085
|
-
*/
|
3086
|
-
{
|
3087
|
-
VALUE rb_cATTRSET = rb_define_class_under(rb_cNode, "ATTRSET", rb_cNode);
|
3088
|
-
members = rb_ary_new();
|
3089
|
-
rb_cNodeSubclass[NODE_ATTRSET] = rb_cATTRSET;
|
3090
|
-
rb_iv_set(rb_cATTRSET, "__member__", members);
|
3091
|
-
rb_iv_set(rb_cATTRSET, "__type__", INT2NUM(NODE_ATTRSET));
|
3092
|
-
rb_define_singleton_method(rb_cATTRSET, "members", node_s_members, 0);
|
3093
|
-
|
3094
|
-
/* Document-method: vid
|
3095
|
-
* the name of the attribute, with a leading '@' sign
|
3096
|
-
*/
|
3097
|
-
rb_define_method(rb_cATTRSET, "vid", node_vid, 0);
|
3098
|
-
rb_ary_push(members, rb_str_new2("vid"));
|
3099
3035
|
}
|
3100
3036
|
|
3101
3037
|
/* Document-class: Node::BACK_REF
|
@@ -3355,22 +3291,6 @@ void define_node_subclass_methods()
|
|
3355
3291
|
rb_ary_push(members, rb_str_new2("vid"));
|
3356
3292
|
}
|
3357
3293
|
|
3358
|
-
/* Document-class: Node::CFUNC
|
3359
|
-
* A placeholder for a function implemented in C.
|
3360
|
-
*/
|
3361
|
-
{
|
3362
|
-
VALUE rb_cCFUNC = rb_define_class_under(rb_cNode, "CFUNC", rb_cNode);
|
3363
|
-
members = rb_ary_new();
|
3364
|
-
rb_cNodeSubclass[NODE_CFUNC] = rb_cCFUNC;
|
3365
|
-
rb_iv_set(rb_cCFUNC, "__member__", members);
|
3366
|
-
rb_iv_set(rb_cCFUNC, "__type__", INT2NUM(NODE_CFUNC));
|
3367
|
-
rb_define_singleton_method(rb_cCFUNC, "members", node_s_members, 0);
|
3368
|
-
rb_define_method(rb_cCFUNC, "cfnc", node_cfnc, 0);
|
3369
|
-
rb_ary_push(members, rb_str_new2("cfnc"));
|
3370
|
-
rb_define_method(rb_cCFUNC, "argc", node_argc, 0);
|
3371
|
-
rb_ary_push(members, rb_str_new2("argc"));
|
3372
|
-
}
|
3373
|
-
|
3374
3294
|
/* Document-class: Node::CLASS
|
3375
3295
|
* Represents a class definition, e.g.:
|
3376
3296
|
* class cpath
|
@@ -3395,6 +3315,13 @@ void define_node_subclass_methods()
|
|
3395
3315
|
rb_iv_set(rb_cCLASS, "__type__", INT2NUM(NODE_CLASS));
|
3396
3316
|
rb_define_singleton_method(rb_cCLASS, "members", node_s_members, 0);
|
3397
3317
|
|
3318
|
+
/* Document-method: super
|
3319
|
+
* an expression returning the base class, or false if there is no
|
3320
|
+
* base class specified
|
3321
|
+
*/
|
3322
|
+
rb_define_method(rb_cCLASS, "super", node_super, 0);
|
3323
|
+
rb_ary_push(members, rb_str_new2("super"));
|
3324
|
+
|
3398
3325
|
/* Document-method: cpath
|
3399
3326
|
* the name of the class to define
|
3400
3327
|
*/
|
@@ -3406,13 +3333,6 @@ void define_node_subclass_methods()
|
|
3406
3333
|
*/
|
3407
3334
|
rb_define_method(rb_cCLASS, "body", node_body, 0);
|
3408
3335
|
rb_ary_push(members, rb_str_new2("body"));
|
3409
|
-
|
3410
|
-
/* Document-method: super
|
3411
|
-
* an expression returning the base class, or false if there is no
|
3412
|
-
* base class specified
|
3413
|
-
*/
|
3414
|
-
rb_define_method(rb_cCLASS, "super", node_super, 0);
|
3415
|
-
rb_ary_push(members, rb_str_new2("super"));
|
3416
3336
|
}
|
3417
3337
|
|
3418
3338
|
/* Document-class: Node::COLON2
|
@@ -3681,17 +3601,17 @@ void define_node_subclass_methods()
|
|
3681
3601
|
rb_define_method(rb_cDEFS, "defn", node_defn, 0);
|
3682
3602
|
rb_ary_push(members, rb_str_new2("defn"));
|
3683
3603
|
|
3684
|
-
/* Document-method: mid
|
3685
|
-
* the name of the method* defn the body of the method
|
3686
|
-
*/
|
3687
|
-
rb_define_method(rb_cDEFS, "mid", node_mid, 0);
|
3688
|
-
rb_ary_push(members, rb_str_new2("mid"));
|
3689
|
-
|
3690
3604
|
/* Document-method: recv
|
3691
3605
|
* the object to whose singleton class the new method is to be added
|
3692
3606
|
*/
|
3693
3607
|
rb_define_method(rb_cDEFS, "recv", node_recv, 0);
|
3694
3608
|
rb_ary_push(members, rb_str_new2("recv"));
|
3609
|
+
|
3610
|
+
/* Document-method: mid
|
3611
|
+
* the name of the method* defn the body of the method
|
3612
|
+
*/
|
3613
|
+
rb_define_method(rb_cDEFS, "mid", node_mid, 0);
|
3614
|
+
rb_ary_push(members, rb_str_new2("mid"));
|
3695
3615
|
}
|
3696
3616
|
|
3697
3617
|
/* Document-class: Node::DOT2
|
@@ -3772,6 +3692,12 @@ void define_node_subclass_methods()
|
|
3772
3692
|
rb_define_method(rb_cDREGX, "lit", node_lit, 0);
|
3773
3693
|
rb_ary_push(members, rb_str_new2("lit"));
|
3774
3694
|
|
3695
|
+
/* Document-method: next
|
3696
|
+
* a list of expressions to be appended onto the string
|
3697
|
+
*/
|
3698
|
+
rb_define_method(rb_cDREGX, "next", node_next, 0);
|
3699
|
+
rb_ary_push(members, rb_str_new2("next"));
|
3700
|
+
|
3775
3701
|
/* Document-method: cflag
|
3776
3702
|
* a bitfield containing the options used in the regular
|
3777
3703
|
* expression. Valid values include:
|
@@ -3788,12 +3714,6 @@ void define_node_subclass_methods()
|
|
3788
3714
|
*/
|
3789
3715
|
rb_define_method(rb_cDREGX, "cflag", node_cflag, 0);
|
3790
3716
|
rb_ary_push(members, rb_str_new2("cflag"));
|
3791
|
-
|
3792
|
-
/* Document-method: next
|
3793
|
-
* a list of expressions to be appended onto the string
|
3794
|
-
*/
|
3795
|
-
rb_define_method(rb_cDREGX, "next", node_next, 0);
|
3796
|
-
rb_ary_push(members, rb_str_new2("next"));
|
3797
3717
|
}
|
3798
3718
|
|
3799
3719
|
/* Document-class: Node::DREGX_ONCE
|
@@ -3815,18 +3735,18 @@ void define_node_subclass_methods()
|
|
3815
3735
|
rb_define_method(rb_cDREGX_ONCE, "lit", node_lit, 0);
|
3816
3736
|
rb_ary_push(members, rb_str_new2("lit"));
|
3817
3737
|
|
3738
|
+
/* Document-method: next
|
3739
|
+
* a list of expressions to be appended onto the string
|
3740
|
+
*/
|
3741
|
+
rb_define_method(rb_cDREGX_ONCE, "next", node_next, 0);
|
3742
|
+
rb_ary_push(members, rb_str_new2("next"));
|
3743
|
+
|
3818
3744
|
/* Document-method: cflag
|
3819
3745
|
* a bitfield containing the options used in the regular
|
3820
3746
|
* expression. See DREGX for a list of valid values.
|
3821
3747
|
*/
|
3822
3748
|
rb_define_method(rb_cDREGX_ONCE, "cflag", node_cflag, 0);
|
3823
3749
|
rb_ary_push(members, rb_str_new2("cflag"));
|
3824
|
-
|
3825
|
-
/* Document-method: next
|
3826
|
-
* a list of expressions to be appended onto the string
|
3827
|
-
*/
|
3828
|
-
rb_define_method(rb_cDREGX_ONCE, "next", node_next, 0);
|
3829
|
-
rb_ary_push(members, rb_str_new2("next"));
|
3830
3750
|
}
|
3831
3751
|
|
3832
3752
|
/* Document-class: Node::DSTR
|
@@ -4003,38 +3923,6 @@ void define_node_subclass_methods()
|
|
4003
3923
|
rb_define_singleton_method(rb_cFALSE, "members", node_s_members, 0);
|
4004
3924
|
}
|
4005
3925
|
|
4006
|
-
/* Document-class: Node::FBODY
|
4007
|
-
* A placeholder for a method alias, which can be added to a class by
|
4008
|
-
* using alias or alias_method:
|
4009
|
-
* alias old new
|
4010
|
-
*/
|
4011
|
-
{
|
4012
|
-
VALUE rb_cFBODY = rb_define_class_under(rb_cNode, "FBODY", rb_cNode);
|
4013
|
-
members = rb_ary_new();
|
4014
|
-
rb_cNodeSubclass[NODE_FBODY] = rb_cFBODY;
|
4015
|
-
rb_iv_set(rb_cFBODY, "__member__", members);
|
4016
|
-
rb_iv_set(rb_cFBODY, "__type__", INT2NUM(NODE_FBODY));
|
4017
|
-
rb_define_singleton_method(rb_cFBODY, "members", node_s_members, 0);
|
4018
|
-
|
4019
|
-
/* Document-method: body
|
4020
|
-
* the method body
|
4021
|
-
*/
|
4022
|
-
rb_define_method(rb_cFBODY, "body", node_body, 0);
|
4023
|
-
rb_ary_push(members, rb_str_new2("body"));
|
4024
|
-
|
4025
|
-
/* Document-method: cnt
|
4026
|
-
* the method's flags
|
4027
|
-
*/
|
4028
|
-
rb_define_method(rb_cFBODY, "cnt", node_cnt, 0);
|
4029
|
-
rb_ary_push(members, rb_str_new2("cnt"));
|
4030
|
-
|
4031
|
-
/* Document-method: oid
|
4032
|
-
* the original name of the method
|
4033
|
-
*/
|
4034
|
-
rb_define_method(rb_cFBODY, "oid", node_oid, 0);
|
4035
|
-
rb_ary_push(members, rb_str_new2("oid"));
|
4036
|
-
}
|
4037
|
-
|
4038
3926
|
/* Document-class: Node::FCALL
|
4039
3927
|
* Represents a method call in the form:
|
4040
3928
|
* mid(args).
|
@@ -4077,6 +3965,13 @@ void define_node_subclass_methods()
|
|
4077
3965
|
rb_iv_set(rb_cFLIP2, "__type__", INT2NUM(NODE_FLIP2));
|
4078
3966
|
rb_define_singleton_method(rb_cFLIP2, "members", node_s_members, 0);
|
4079
3967
|
|
3968
|
+
/* Document-method: cnt
|
3969
|
+
* the index into the local variable table of the special variable
|
3970
|
+
* to use in the flip-flop expression (usually 2 for $_)
|
3971
|
+
*/
|
3972
|
+
rb_define_method(rb_cFLIP2, "cnt", node_cnt, 0);
|
3973
|
+
rb_ary_push(members, rb_str_new2("cnt"));
|
3974
|
+
|
4080
3975
|
/* Document-method: beg
|
4081
3976
|
* the beginning of the range
|
4082
3977
|
*/
|
@@ -4088,13 +3983,6 @@ void define_node_subclass_methods()
|
|
4088
3983
|
*/
|
4089
3984
|
rb_define_method(rb_cFLIP2, "end", node_end, 0);
|
4090
3985
|
rb_ary_push(members, rb_str_new2("end"));
|
4091
|
-
|
4092
|
-
/* Document-method: cnt
|
4093
|
-
* the index into the local variable table of the special variable
|
4094
|
-
* to use in the flip-flop expression (usually 2 for $_)
|
4095
|
-
*/
|
4096
|
-
rb_define_method(rb_cFLIP2, "cnt", node_cnt, 0);
|
4097
|
-
rb_ary_push(members, rb_str_new2("cnt"));
|
4098
3986
|
}
|
4099
3987
|
|
4100
3988
|
/* Document-class: Node::FLIP3
|
@@ -4111,6 +3999,13 @@ void define_node_subclass_methods()
|
|
4111
3999
|
rb_iv_set(rb_cFLIP3, "__type__", INT2NUM(NODE_FLIP3));
|
4112
4000
|
rb_define_singleton_method(rb_cFLIP3, "members", node_s_members, 0);
|
4113
4001
|
|
4002
|
+
/* Document-method: cnt
|
4003
|
+
* the index into the local variable table of the special variable
|
4004
|
+
* to use in the flip-flop expression (usually 2 for $_)
|
4005
|
+
*/
|
4006
|
+
rb_define_method(rb_cFLIP3, "cnt", node_cnt, 0);
|
4007
|
+
rb_ary_push(members, rb_str_new2("cnt"));
|
4008
|
+
|
4114
4009
|
/* Document-method: beg
|
4115
4010
|
* the beginning of the range
|
4116
4011
|
*/
|
@@ -4122,13 +4017,6 @@ void define_node_subclass_methods()
|
|
4122
4017
|
*/
|
4123
4018
|
rb_define_method(rb_cFLIP3, "end", node_end, 0);
|
4124
4019
|
rb_ary_push(members, rb_str_new2("end"));
|
4125
|
-
|
4126
|
-
/* Document-method: cnt
|
4127
|
-
* the index into the local variable table of the special variable
|
4128
|
-
* to use in the flip-flop expression (usually 2 for $_)
|
4129
|
-
*/
|
4130
|
-
rb_define_method(rb_cFLIP3, "cnt", node_cnt, 0);
|
4131
|
-
rb_ary_push(members, rb_str_new2("cnt"));
|
4132
4020
|
}
|
4133
4021
|
|
4134
4022
|
/* Document-class: Node::FOR
|
@@ -4563,6 +4451,13 @@ void define_node_subclass_methods()
|
|
4563
4451
|
rb_iv_set(rb_cMATCH2, "__type__", INT2NUM(NODE_MATCH2));
|
4564
4452
|
rb_define_singleton_method(rb_cMATCH2, "members", node_s_members, 0);
|
4565
4453
|
|
4454
|
+
/* Document-method: recv
|
4455
|
+
* the regular expression on the left hand side of the match
|
4456
|
+
* operator
|
4457
|
+
*/
|
4458
|
+
rb_define_method(rb_cMATCH2, "recv", node_recv, 0);
|
4459
|
+
rb_ary_push(members, rb_str_new2("recv"));
|
4460
|
+
|
4566
4461
|
/* Document-method: value
|
4567
4462
|
* the expression on the right hand side of the match operator, or
|
4568
4463
|
* an expression returning $_ if there is nothing on the right hand
|
@@ -4570,13 +4465,6 @@ void define_node_subclass_methods()
|
|
4570
4465
|
*/
|
4571
4466
|
rb_define_method(rb_cMATCH2, "value", node_value, 0);
|
4572
4467
|
rb_ary_push(members, rb_str_new2("value"));
|
4573
|
-
|
4574
|
-
/* Document-method: recv
|
4575
|
-
* the regular expression on the left hand side of the match
|
4576
|
-
* operator
|
4577
|
-
*/
|
4578
|
-
rb_define_method(rb_cMATCH2, "recv", node_recv, 0);
|
4579
|
-
rb_ary_push(members, rb_str_new2("recv"));
|
4580
4468
|
}
|
4581
4469
|
|
4582
4470
|
/* Document-class: Node::MATCH3
|
@@ -4594,17 +4482,17 @@ void define_node_subclass_methods()
|
|
4594
4482
|
rb_iv_set(rb_cMATCH3, "__type__", INT2NUM(NODE_MATCH3));
|
4595
4483
|
rb_define_singleton_method(rb_cMATCH3, "members", node_s_members, 0);
|
4596
4484
|
|
4597
|
-
/* Document-method: value
|
4598
|
-
* the right hand side of the match
|
4599
|
-
*/
|
4600
|
-
rb_define_method(rb_cMATCH3, "value", node_value, 0);
|
4601
|
-
rb_ary_push(members, rb_str_new2("value"));
|
4602
|
-
|
4603
4485
|
/* Document-method: recv
|
4604
4486
|
* the left hand side of the match
|
4605
4487
|
*/
|
4606
4488
|
rb_define_method(rb_cMATCH3, "recv", node_recv, 0);
|
4607
4489
|
rb_ary_push(members, rb_str_new2("recv"));
|
4490
|
+
|
4491
|
+
/* Document-method: value
|
4492
|
+
* the right hand side of the match
|
4493
|
+
*/
|
4494
|
+
rb_define_method(rb_cMATCH3, "value", node_value, 0);
|
4495
|
+
rb_ary_push(members, rb_str_new2("value"));
|
4608
4496
|
}
|
4609
4497
|
|
4610
4498
|
/* Document-class: Node::MEMO
|
@@ -4630,42 +4518,6 @@ void define_node_subclass_methods()
|
|
4630
4518
|
rb_define_singleton_method(rb_cMEMO, "members", node_s_members, 0);
|
4631
4519
|
}
|
4632
4520
|
|
4633
|
-
/* Document-class: Node::METHOD
|
4634
|
-
* A placeholder for a method entry in a class's method table.
|
4635
|
-
*
|
4636
|
-
* On ruby 1.9 this node type is also known as RUBY_VM_METHOD_NODE.
|
4637
|
-
* Its use differs from that of NODE_METHOD in that it is used as the
|
4638
|
-
* body of another METHOD node and is used to store the method's
|
4639
|
-
* instruction sequence.
|
4640
|
-
*/
|
4641
|
-
{
|
4642
|
-
VALUE rb_cMETHOD = rb_define_class_under(rb_cNode, "METHOD", rb_cNode);
|
4643
|
-
members = rb_ary_new();
|
4644
|
-
rb_cNodeSubclass[NODE_METHOD] = rb_cMETHOD;
|
4645
|
-
rb_iv_set(rb_cMETHOD, "__member__", members);
|
4646
|
-
rb_iv_set(rb_cMETHOD, "__type__", INT2NUM(NODE_METHOD));
|
4647
|
-
rb_define_singleton_method(rb_cMETHOD, "members", node_s_members, 0);
|
4648
|
-
|
4649
|
-
/* Document-method: body
|
4650
|
-
* the body of the method
|
4651
|
-
*/
|
4652
|
-
rb_define_method(rb_cMETHOD, "body", node_body, 0);
|
4653
|
-
rb_ary_push(members, rb_str_new2("body"));
|
4654
|
-
|
4655
|
-
/* Document-method: clss
|
4656
|
-
* the class to which the method was added or the instruction
|
4657
|
-
* sequence used to implement this method
|
4658
|
-
*/
|
4659
|
-
rb_define_method(rb_cMETHOD, "clss", node_clss, 0);
|
4660
|
-
rb_ary_push(members, rb_str_new2("clss"));
|
4661
|
-
|
4662
|
-
/* Document-method: noex
|
4663
|
-
* the method's flags
|
4664
|
-
*/
|
4665
|
-
rb_define_method(rb_cMETHOD, "noex", node_noex, 0);
|
4666
|
-
rb_ary_push(members, rb_str_new2("noex"));
|
4667
|
-
}
|
4668
|
-
|
4669
4521
|
/* Document-class: Node::MODULE
|
4670
4522
|
* Represents a module definition, e.g.:
|
4671
4523
|
* module cpath
|
@@ -4840,11 +4692,11 @@ void define_node_subclass_methods()
|
|
4840
4692
|
rb_iv_set(rb_cOP_ASGN2, "__type__", INT2NUM(NODE_OP_ASGN2));
|
4841
4693
|
rb_define_singleton_method(rb_cOP_ASGN2, "members", node_s_members, 0);
|
4842
4694
|
|
4843
|
-
/* Document-method:
|
4844
|
-
* the
|
4695
|
+
/* Document-method: recv
|
4696
|
+
* the receiver of the attribute
|
4845
4697
|
*/
|
4846
|
-
rb_define_method(rb_cOP_ASGN2, "
|
4847
|
-
rb_ary_push(members, rb_str_new2("
|
4698
|
+
rb_define_method(rb_cOP_ASGN2, "recv", node_recv, 0);
|
4699
|
+
rb_ary_push(members, rb_str_new2("recv"));
|
4848
4700
|
|
4849
4701
|
/* Document-method: next
|
4850
4702
|
* another node of type OP_ASGN2 which contains more information
|
@@ -4853,11 +4705,11 @@ void define_node_subclass_methods()
|
|
4853
4705
|
rb_define_method(rb_cOP_ASGN2, "next", node_next, 0);
|
4854
4706
|
rb_ary_push(members, rb_str_new2("next"));
|
4855
4707
|
|
4856
|
-
/* Document-method:
|
4857
|
-
* the
|
4708
|
+
/* Document-method: value
|
4709
|
+
* the value to assign to the attribute
|
4858
4710
|
*/
|
4859
|
-
rb_define_method(rb_cOP_ASGN2, "
|
4860
|
-
rb_ary_push(members, rb_str_new2("
|
4711
|
+
rb_define_method(rb_cOP_ASGN2, "value", node_value, 0);
|
4712
|
+
rb_ary_push(members, rb_str_new2("value"));
|
4861
4713
|
}
|
4862
4714
|
|
4863
4715
|
/* Document-class: Node::OP_ASGN2_ARG
|
@@ -4910,18 +4762,18 @@ void define_node_subclass_methods()
|
|
4910
4762
|
rb_iv_set(rb_cOP_ASGN_AND, "__type__", INT2NUM(NODE_OP_ASGN_AND));
|
4911
4763
|
rb_define_singleton_method(rb_cOP_ASGN_AND, "members", node_s_members, 0);
|
4912
4764
|
|
4765
|
+
/* Document-method: recv
|
4766
|
+
* an expression representing the left hand side of the assignment
|
4767
|
+
*/
|
4768
|
+
rb_define_method(rb_cOP_ASGN_AND, "recv", node_recv, 0);
|
4769
|
+
rb_ary_push(members, rb_str_new2("recv"));
|
4770
|
+
|
4913
4771
|
/* Document-method: value
|
4914
4772
|
* an expression representing the assignment that should be
|
4915
4773
|
* performed if the left hand side is true
|
4916
4774
|
*/
|
4917
4775
|
rb_define_method(rb_cOP_ASGN_AND, "value", node_value, 0);
|
4918
4776
|
rb_ary_push(members, rb_str_new2("value"));
|
4919
|
-
|
4920
|
-
/* Document-method: recv
|
4921
|
-
* an expression representing the left hand side of the assignment
|
4922
|
-
*/
|
4923
|
-
rb_define_method(rb_cOP_ASGN_AND, "recv", node_recv, 0);
|
4924
|
-
rb_ary_push(members, rb_str_new2("recv"));
|
4925
4777
|
}
|
4926
4778
|
|
4927
4779
|
/* Document-class: Node::OP_ASGN_OR
|
@@ -4976,17 +4828,17 @@ void define_node_subclass_methods()
|
|
4976
4828
|
rb_iv_set(rb_cOR, "__type__", INT2NUM(NODE_OR));
|
4977
4829
|
rb_define_singleton_method(rb_cOR, "members", node_s_members, 0);
|
4978
4830
|
|
4979
|
-
/* Document-method: first
|
4980
|
-
* the expression on the left hand side
|
4981
|
-
*/
|
4982
|
-
rb_define_method(rb_cOR, "first", node_1st, 0);
|
4983
|
-
rb_ary_push(members, rb_str_new2("first"));
|
4984
|
-
|
4985
4831
|
/* Document-method: second
|
4986
4832
|
* the expression on the right hand side
|
4987
4833
|
*/
|
4988
4834
|
rb_define_method(rb_cOR, "second", node_2nd, 0);
|
4989
4835
|
rb_ary_push(members, rb_str_new2("second"));
|
4836
|
+
|
4837
|
+
/* Document-method: first
|
4838
|
+
* the expression on the left hand side
|
4839
|
+
*/
|
4840
|
+
rb_define_method(rb_cOR, "first", node_1st, 0);
|
4841
|
+
rb_ary_push(members, rb_str_new2("first"));
|
4990
4842
|
}
|
4991
4843
|
|
4992
4844
|
/* Document-class: Node::POSTEXE
|
@@ -5044,17 +4896,17 @@ void define_node_subclass_methods()
|
|
5044
4896
|
rb_define_method(rb_cRESBODY, "head", node_head, 0);
|
5045
4897
|
rb_ary_push(members, rb_str_new2("head"));
|
5046
4898
|
|
5047
|
-
/* Document-method: args
|
5048
|
-
* the expression type to match against
|
5049
|
-
*/
|
5050
|
-
rb_define_method(rb_cRESBODY, "args", node_args, 0);
|
5051
|
-
rb_ary_push(members, rb_str_new2("args"));
|
5052
|
-
|
5053
4899
|
/* Document-method: body
|
5054
4900
|
* the expresion to evaluate if the exception type matches
|
5055
4901
|
*/
|
5056
4902
|
rb_define_method(rb_cRESBODY, "body", node_body, 0);
|
5057
4903
|
rb_ary_push(members, rb_str_new2("body"));
|
4904
|
+
|
4905
|
+
/* Document-method: args
|
4906
|
+
* the expression type to match against
|
4907
|
+
*/
|
4908
|
+
rb_define_method(rb_cRESBODY, "args", node_args, 0);
|
4909
|
+
rb_ary_push(members, rb_str_new2("args"));
|
5058
4910
|
}
|
5059
4911
|
|
5060
4912
|
/* Document-class: Node::RESCUE
|
@@ -5100,17 +4952,17 @@ void define_node_subclass_methods()
|
|
5100
4952
|
rb_define_method(rb_cRESCUE, "head", node_head, 0);
|
5101
4953
|
rb_ary_push(members, rb_str_new2("head"));
|
5102
4954
|
|
5103
|
-
/* Document-method: else
|
5104
|
-
* the expression to be evaluated if no exception is raised
|
5105
|
-
*/
|
5106
|
-
rb_define_method(rb_cRESCUE, "else", node_else, 0);
|
5107
|
-
rb_ary_push(members, rb_str_new2("else"));
|
5108
|
-
|
5109
4955
|
/* Document-method: resq
|
5110
4956
|
* the expression to be evaluated if an exception is raised
|
5111
4957
|
*/
|
5112
4958
|
rb_define_method(rb_cRESCUE, "resq", node_resq, 0);
|
5113
4959
|
rb_ary_push(members, rb_str_new2("resq"));
|
4960
|
+
|
4961
|
+
/* Document-method: else
|
4962
|
+
* the expression to be evaluated if no exception is raised
|
4963
|
+
*/
|
4964
|
+
rb_define_method(rb_cRESCUE, "else", node_else, 0);
|
4965
|
+
rb_ary_push(members, rb_str_new2("else"));
|
5114
4966
|
}
|
5115
4967
|
|
5116
4968
|
/* Document-class: Node::RETRY
|