sydparse 1.0.0 → 1.2.0
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.
- data/Manifest.txt +1 -0
- data/Rakefile +1 -1
- data/bin/syd_pt_show +9 -1
- data/lib/sydparse.rb +1 -1
- data/node.h +5 -3
- data/pstate.h +76 -0
- data/runtime.c +56 -9
- data/runtime.h +1 -66
- data/sydparse.c +112 -91
- data/sydparse.y +118 -96
- metadata +3 -2
data/Manifest.txt
CHANGED
data/Rakefile
CHANGED
data/bin/syd_pt_show
CHANGED
@@ -10,6 +10,9 @@ if ARGV.first == "-l"
|
|
10
10
|
elsif ARGV.first == "-u"
|
11
11
|
unified = true
|
12
12
|
ARGV.shift
|
13
|
+
elsif ARGV.first == "-s"
|
14
|
+
simple = true
|
15
|
+
ARGV.shift
|
13
16
|
end
|
14
17
|
|
15
18
|
name = ARGV.shift
|
@@ -18,6 +21,11 @@ File.open(name, "r") do |fd|
|
|
18
21
|
pp SydneyParser.unified_sexp(fd)
|
19
22
|
else
|
20
23
|
syd = SydneyParser.load_file fd
|
21
|
-
|
24
|
+
out = syd.sexp(false, newlines)
|
25
|
+
if simple
|
26
|
+
p out
|
27
|
+
else
|
28
|
+
pp out
|
29
|
+
end
|
22
30
|
end
|
23
31
|
end
|
data/lib/sydparse.rb
CHANGED
data/node.h
CHANGED
@@ -153,6 +153,8 @@ typedef struct RNode {
|
|
153
153
|
} u3;
|
154
154
|
} NODE;
|
155
155
|
|
156
|
+
#include "pstate.h"
|
157
|
+
|
156
158
|
#define RNODE(obj) (R_CAST(RNode)(obj))
|
157
159
|
|
158
160
|
#define nd_type(n) ((int)(((RNODE(n))->flags>>FL_USHIFT)&0xff))
|
@@ -233,7 +235,7 @@ typedef struct RNode {
|
|
233
235
|
#define nd_tag u1.id
|
234
236
|
#define nd_tval u2.value
|
235
237
|
|
236
|
-
#define NEW_NODE(t,a0,a1,a2) syd_node_newnode((t),(VALUE)(a0),(VALUE)(a1),(VALUE)(a2))
|
238
|
+
#define NEW_NODE(t,a0,a1,a2) syd_node_newnode(parse_state, (t),(VALUE)(a0),(VALUE)(a1),(VALUE)(a2))
|
237
239
|
|
238
240
|
#define NEW_METHOD(n,x) NEW_NODE(NODE_METHOD,x,n,0)
|
239
241
|
#define NEW_FBODY(n,i,o) NEW_NODE(NODE_FBODY,n,i,o)
|
@@ -241,7 +243,7 @@ typedef struct RNode {
|
|
241
243
|
#define NEW_DEFS(r,i,a,d) NEW_NODE(NODE_DEFS,r,i,NEW_RFUNC(a,d))
|
242
244
|
#define NEW_CFUNC(f,c) NEW_NODE(NODE_CFUNC,f,c,0)
|
243
245
|
#define NEW_IFUNC(f,c) NEW_NODE(NODE_IFUNC,f,c,0)
|
244
|
-
#define NEW_RFUNC(b1,b2) NEW_SCOPE(block_append(b1,b2))
|
246
|
+
#define NEW_RFUNC(b1,b2) NEW_SCOPE(block_append(vps, b1,b2))
|
245
247
|
#define NEW_SCOPE(b) NEW_NODE(NODE_SCOPE,syd_local_tbl(vps),0,(b))
|
246
248
|
#define NEW_BLOCK(a) NEW_NODE(NODE_BLOCK,a,0,0)
|
247
249
|
#define NEW_IF(c,t,e) NEW_NODE(NODE_IF,c,t,e)
|
@@ -349,7 +351,7 @@ typedef struct RNode {
|
|
349
351
|
NODE *rb_compile_cstr _((const char*, const char*, int, int));
|
350
352
|
|
351
353
|
void rb_add_method _((VALUE, ID, NODE *, int));
|
352
|
-
NODE *syd_node_newnode _((enum node_type,VALUE,VALUE,VALUE));
|
354
|
+
NODE *syd_node_newnode _((rb_parse_state*, enum node_type,VALUE,VALUE,VALUE));
|
353
355
|
|
354
356
|
NODE* rb_method_node _((VALUE klass, ID id));
|
355
357
|
|
data/pstate.h
ADDED
@@ -0,0 +1,76 @@
|
|
1
|
+
#ifndef __SYD_PSTATE__
|
2
|
+
#define __SYD_PSTATE__ 1
|
3
|
+
|
4
|
+
enum lex_state {
|
5
|
+
EXPR_BEG, /* ignore newline, +/- is a sign. */
|
6
|
+
EXPR_END, /* newline significant, +/- is a operator. */
|
7
|
+
EXPR_ARG, /* newline significant, +/- is a operator. */
|
8
|
+
EXPR_CMDARG, /* newline significant, +/- is a operator. */
|
9
|
+
EXPR_ENDARG, /* newline significant, +/- is a operator. */
|
10
|
+
EXPR_MID, /* newline significant, +/- is a operator. */
|
11
|
+
EXPR_FNAME, /* ignore newline, no reserved words. */
|
12
|
+
EXPR_DOT, /* right after `.' or `::', no reserved words. */
|
13
|
+
EXPR_CLASS, /* immediate after `class', no here document. */
|
14
|
+
};
|
15
|
+
|
16
|
+
struct METHOD {
|
17
|
+
VALUE klass, rklass;
|
18
|
+
VALUE recv;
|
19
|
+
ID id, oid;
|
20
|
+
NODE *body;
|
21
|
+
};
|
22
|
+
|
23
|
+
#ifdef HAVE_LONG_LONG
|
24
|
+
typedef unsigned LONG_LONG stack_type;
|
25
|
+
#else
|
26
|
+
typedef unsigned long stack_type;
|
27
|
+
#endif
|
28
|
+
|
29
|
+
typedef struct rb_parse_state {
|
30
|
+
int end_seen;
|
31
|
+
VALUE debug_lines;
|
32
|
+
int heredoc_end;
|
33
|
+
int command_start;
|
34
|
+
NODE *lex_strterm;
|
35
|
+
int class_nest;
|
36
|
+
int in_single;
|
37
|
+
int in_def;
|
38
|
+
int compile_for_eval;
|
39
|
+
ID cur_mid;
|
40
|
+
char *token_buffer;
|
41
|
+
int tokidx;
|
42
|
+
int toksiz;
|
43
|
+
|
44
|
+
VALUE (*lex_gets)(); /* gets function */
|
45
|
+
VALUE lex_input; /* non-nil if File */
|
46
|
+
VALUE lex_lastline; /* gc protect */
|
47
|
+
char *lex_pbeg;
|
48
|
+
char *lex_p;
|
49
|
+
char *lex_pend;
|
50
|
+
int lex_gets_ptr;
|
51
|
+
|
52
|
+
enum lex_state lex_state;
|
53
|
+
int in_defined;
|
54
|
+
stack_type cond_stack;
|
55
|
+
stack_type cmdarg_stack;
|
56
|
+
|
57
|
+
void *lval; /* the parser's yylval */
|
58
|
+
|
59
|
+
VALUE comments;
|
60
|
+
int column;
|
61
|
+
NODE *top;
|
62
|
+
ID *locals;
|
63
|
+
|
64
|
+
VALUE self;
|
65
|
+
|
66
|
+
int ternary_colon;
|
67
|
+
|
68
|
+
void **memory_pools;
|
69
|
+
int pool_size, current_pool;
|
70
|
+
char *memory_cur;
|
71
|
+
char *memory_last_addr;
|
72
|
+
int memory_size;
|
73
|
+
|
74
|
+
} rb_parse_state;
|
75
|
+
|
76
|
+
#endif
|
data/runtime.c
CHANGED
@@ -17,6 +17,12 @@ rb_parse_state *alloc_parse_state() {
|
|
17
17
|
st->tokidx = 0;
|
18
18
|
st->toksiz = 0;
|
19
19
|
st->comments = 0;
|
20
|
+
st->memory_cur = NULL;
|
21
|
+
st->memory_last_addr = NULL;
|
22
|
+
st->current_pool = 0;
|
23
|
+
st->pool_size = 0;
|
24
|
+
st->memory_size = 204800;
|
25
|
+
st->memory_pools = NULL;
|
20
26
|
|
21
27
|
return st;
|
22
28
|
}
|
@@ -24,21 +30,21 @@ rb_parse_state *alloc_parse_state() {
|
|
24
30
|
void *rb_pt_mark(void *vps) {
|
25
31
|
rb_parse_state *parse_state = (rb_parse_state*)vps;
|
26
32
|
|
27
|
-
// rb_gc_mark_maybe((VALUE)(parse_state->lval->node));
|
28
33
|
rb_gc_mark(parse_state->lex_lastline);
|
29
34
|
rb_gc_mark(parse_state->lex_input);
|
30
35
|
rb_gc_mark(parse_state->self);
|
31
|
-
rb_gc_mark((VALUE)parse_state->top);
|
32
36
|
return NULL;
|
33
37
|
}
|
34
38
|
|
39
|
+
void pt_free();
|
40
|
+
|
35
41
|
VALUE rb_cSydParser;
|
36
42
|
|
37
43
|
VALUE rb_pt_create() {
|
38
44
|
VALUE obj;
|
39
45
|
rb_parse_state *st;
|
40
46
|
st = alloc_parse_state();
|
41
|
-
obj = Data_Wrap_Struct(rb_cSydParser, rb_pt_mark,
|
47
|
+
obj = Data_Wrap_Struct(rb_cSydParser, rb_pt_mark, pt_free, st);
|
42
48
|
st->self = obj;
|
43
49
|
return obj;
|
44
50
|
}
|
@@ -205,7 +211,43 @@ NODE *rb_pt_top(VALUE self) {
|
|
205
211
|
Data_Get_Struct(self, rb_parse_state, st);
|
206
212
|
return st->top;
|
207
213
|
}
|
208
|
-
|
214
|
+
|
215
|
+
void *pt_allocate(rb_parse_state *st, int size) {
|
216
|
+
void *ptr;
|
217
|
+
void *cur;
|
218
|
+
|
219
|
+
if(!st->memory_cur || ((st->memory_cur + size) >= st->memory_last_addr)) {
|
220
|
+
if(st->memory_cur) st->current_pool++;
|
221
|
+
|
222
|
+
if(st->current_pool == st->pool_size) {
|
223
|
+
st->pool_size += 10;
|
224
|
+
if(st->memory_pools) {
|
225
|
+
st->memory_pools = (void**)realloc(st->memory_pools, sizeof(void*) * st->pool_size);
|
226
|
+
} else {
|
227
|
+
st->memory_pools = (void**)malloc(sizeof(void*) * st->pool_size);
|
228
|
+
}
|
229
|
+
}
|
230
|
+
st->memory_pools[st->current_pool] = malloc(st->memory_size);
|
231
|
+
st->memory_cur = st->memory_pools[st->current_pool];
|
232
|
+
memset(st->memory_cur, 0, st->memory_size);
|
233
|
+
st->memory_last_addr = st->memory_cur + st->memory_size - 1;
|
234
|
+
}
|
235
|
+
|
236
|
+
cur = (void*)st->memory_cur;
|
237
|
+
st->memory_cur = st->memory_cur + size;
|
238
|
+
|
239
|
+
return cur;
|
240
|
+
}
|
241
|
+
|
242
|
+
void pt_free(rb_parse_state *st) {
|
243
|
+
int i;
|
244
|
+
if(!st->memory_pools) return;
|
245
|
+
|
246
|
+
for(i = 0; i <= st->current_pool; i++) {
|
247
|
+
free(st->memory_pools[i]);
|
248
|
+
}
|
249
|
+
free(st->memory_pools);
|
250
|
+
}
|
209
251
|
|
210
252
|
/*
|
211
253
|
*
|
@@ -676,7 +718,7 @@ again_no_block:
|
|
676
718
|
rb_ary_push(current, ID2SYM(rb_intern("xstr_custom")));
|
677
719
|
rb_ary_push(current, ID2SYM(node->u2.id));
|
678
720
|
}
|
679
|
-
rb_ary_push(current,
|
721
|
+
rb_ary_push(current, rb_str_new4(node->nd_lit));
|
680
722
|
while (list) {
|
681
723
|
if (list->nd_head) {
|
682
724
|
switch (nd_type(list->nd_head)) {
|
@@ -803,11 +845,14 @@ again_no_block:
|
|
803
845
|
|
804
846
|
case NODE_XSTR: /* u1 (%x{ls}) */
|
805
847
|
case NODE_STR: /* u1 */
|
806
|
-
|
848
|
+
rb_ary_push(current, rb_str_dup(node->nd_lit));
|
849
|
+
break;
|
807
850
|
case NODE_MATCH:
|
851
|
+
rb_ary_push(current, rb_obj_dup(node->nd_lit));
|
852
|
+
break;
|
853
|
+
case NODE_LIT:
|
808
854
|
rb_ary_push(current, node->nd_lit);
|
809
855
|
break;
|
810
|
-
|
811
856
|
case NODE_NEWLINE:
|
812
857
|
ADD_LINE;
|
813
858
|
|
@@ -858,7 +903,8 @@ again_no_block:
|
|
858
903
|
case NODE_ATTRASGN: /* literal.meth = y u1 u2 u3 */
|
859
904
|
/* node id node */
|
860
905
|
if (node->nd_1st == RNODE(1)) {
|
861
|
-
|
906
|
+
rb_ary_push(current, rb_ary_new3(1, ID2SYM(rb_intern("self"))));
|
907
|
+
// add_to_parse_tree(current, Qnil, newlines, locals, line_numbers);
|
862
908
|
} else {
|
863
909
|
add_to_parse_tree(current, node->nd_1st, newlines, locals, line_numbers);
|
864
910
|
}
|
@@ -915,6 +961,8 @@ again_no_block:
|
|
915
961
|
}
|
916
962
|
}
|
917
963
|
|
964
|
+
void rb_add_to_parse_tree(VALUE, NODE*, int, void*);
|
965
|
+
|
918
966
|
VALUE rb_pt_sexp(int argc, VALUE *argv, VALUE self) {
|
919
967
|
rb_parse_state *st;
|
920
968
|
VALUE result;
|
@@ -949,7 +997,6 @@ VALUE rb_pt_comments(VALUE self) {
|
|
949
997
|
}
|
950
998
|
}
|
951
999
|
|
952
|
-
|
953
1000
|
void Init_sydney_parser() {
|
954
1001
|
VALUE cParser;
|
955
1002
|
setup_parser();
|
data/runtime.h
CHANGED
@@ -1,69 +1,5 @@
|
|
1
1
|
|
2
|
-
|
3
|
-
VALUE klass, rklass;
|
4
|
-
VALUE recv;
|
5
|
-
ID id, oid;
|
6
|
-
NODE *body;
|
7
|
-
};
|
8
|
-
|
9
|
-
enum lex_state {
|
10
|
-
EXPR_BEG, /* ignore newline, +/- is a sign. */
|
11
|
-
EXPR_END, /* newline significant, +/- is a operator. */
|
12
|
-
EXPR_ARG, /* newline significant, +/- is a operator. */
|
13
|
-
EXPR_CMDARG, /* newline significant, +/- is a operator. */
|
14
|
-
EXPR_ENDARG, /* newline significant, +/- is a operator. */
|
15
|
-
EXPR_MID, /* newline significant, +/- is a operator. */
|
16
|
-
EXPR_FNAME, /* ignore newline, no reserved words. */
|
17
|
-
EXPR_DOT, /* right after `.' or `::', no reserved words. */
|
18
|
-
EXPR_CLASS, /* immediate after `class', no here document. */
|
19
|
-
};
|
20
|
-
|
21
|
-
#ifdef HAVE_LONG_LONG
|
22
|
-
typedef unsigned LONG_LONG stack_type;
|
23
|
-
#else
|
24
|
-
typedef unsigned long stack_type;
|
25
|
-
#endif
|
26
|
-
|
27
|
-
typedef struct rb_parse_state {
|
28
|
-
int end_seen;
|
29
|
-
VALUE debug_lines;
|
30
|
-
int heredoc_end;
|
31
|
-
int command_start;
|
32
|
-
NODE *lex_strterm;
|
33
|
-
int class_nest;
|
34
|
-
int in_single;
|
35
|
-
int in_def;
|
36
|
-
int compile_for_eval;
|
37
|
-
ID cur_mid;
|
38
|
-
char *token_buffer;
|
39
|
-
int tokidx;
|
40
|
-
int toksiz;
|
41
|
-
|
42
|
-
VALUE (*lex_gets)(); /* gets function */
|
43
|
-
VALUE lex_input; /* non-nil if File */
|
44
|
-
VALUE lex_lastline; /* gc protect */
|
45
|
-
char *lex_pbeg;
|
46
|
-
char *lex_p;
|
47
|
-
char *lex_pend;
|
48
|
-
int lex_gets_ptr;
|
49
|
-
|
50
|
-
enum lex_state lex_state;
|
51
|
-
int in_defined;
|
52
|
-
stack_type cond_stack;
|
53
|
-
stack_type cmdarg_stack;
|
54
|
-
|
55
|
-
void *lval; /* the parser's yylval */
|
56
|
-
|
57
|
-
VALUE comments;
|
58
|
-
int column;
|
59
|
-
NODE *top;
|
60
|
-
ID *locals;
|
61
|
-
|
62
|
-
VALUE self;
|
63
|
-
|
64
|
-
int ternary_colon;
|
65
|
-
|
66
|
-
} rb_parse_state;
|
2
|
+
#include "pstate.h"
|
67
3
|
|
68
4
|
rb_parse_state *alloc_parse_state();
|
69
5
|
|
@@ -192,4 +128,3 @@ VALUE rb_yield_0 _((VALUE, VALUE, VALUE, int, int));
|
|
192
128
|
|
193
129
|
#define PUSH_CREF(c) ruby_cref = NEW_NODE(NODE_CREF,(c),0,ruby_cref)
|
194
130
|
#define POP_CREF() ruby_cref = ruby_cref->nd_next
|
195
|
-
|
data/sydparse.c
CHANGED
@@ -3602,7 +3602,7 @@ case 2:
|
|
3602
3602
|
void_expr(node->nd_head);
|
3603
3603
|
}
|
3604
3604
|
}
|
3605
|
-
vps->top = block_append(vps->top, yyvsp[0].node);
|
3605
|
+
vps->top = block_append(parse_state, vps->top, yyvsp[0].node);
|
3606
3606
|
//vps->top = NEW_SCOPE(block_append(vps->top, $2));
|
3607
3607
|
rb_funcall(vps->self, rb_intern("local_finish"), 0);
|
3608
3608
|
|
@@ -3619,7 +3619,7 @@ case 3:
|
|
3619
3619
|
}
|
3620
3620
|
else if (yyvsp[-1].node) {
|
3621
3621
|
rb_warn("else without rescue is useless");
|
3622
|
-
yyval.node = block_append(yyval.node, yyvsp[-1].node);
|
3622
|
+
yyval.node = block_append(parse_state, yyval.node, yyvsp[-1].node);
|
3623
3623
|
}
|
3624
3624
|
if (yyvsp[0].node) {
|
3625
3625
|
yyval.node = NEW_ENSURE(yyval.node, yyvsp[0].node);
|
@@ -3637,13 +3637,13 @@ case 4:
|
|
3637
3637
|
case 6:
|
3638
3638
|
#line 418 "sydparse.y"
|
3639
3639
|
{
|
3640
|
-
yyval.node = newline_node(yyvsp[0].node);
|
3640
|
+
yyval.node = newline_node(parse_state, yyvsp[0].node);
|
3641
3641
|
;
|
3642
3642
|
break;}
|
3643
3643
|
case 7:
|
3644
3644
|
#line 422 "sydparse.y"
|
3645
3645
|
{
|
3646
|
-
yyval.node = block_append(yyvsp[-2].node, newline_node(yyvsp[0].node));
|
3646
|
+
yyval.node = block_append(parse_state, yyvsp[-2].node, newline_node(parse_state, yyvsp[0].node));
|
3647
3647
|
;
|
3648
3648
|
break;}
|
3649
3649
|
case 8:
|
@@ -3826,7 +3826,7 @@ case 26:
|
|
3826
3826
|
args = NEW_LIST(yyvsp[0].node);
|
3827
3827
|
if (yyvsp[-3].node && nd_type(yyvsp[-3].node) != NODE_ARRAY)
|
3828
3828
|
yyvsp[-3].node = NEW_LIST(yyvsp[-3].node);
|
3829
|
-
yyvsp[-3].node = list_append(yyvsp[-3].node, NEW_NIL());
|
3829
|
+
yyvsp[-3].node = list_append(parse_state, yyvsp[-3].node, NEW_NIL());
|
3830
3830
|
list_concat(args, yyvsp[-3].node);
|
3831
3831
|
if (yyvsp[-1].id == tOROP) {
|
3832
3832
|
yyvsp[-1].id = 0;
|
@@ -3959,13 +3959,13 @@ case 46:
|
|
3959
3959
|
case 48:
|
3960
3960
|
#line 682 "sydparse.y"
|
3961
3961
|
{
|
3962
|
-
yyval.node = new_call(yyvsp[-3].node, yyvsp[-1].id, yyvsp[0].node);
|
3962
|
+
yyval.node = new_call(parse_state, yyvsp[-3].node, yyvsp[-1].id, yyvsp[0].node);
|
3963
3963
|
;
|
3964
3964
|
break;}
|
3965
3965
|
case 49:
|
3966
3966
|
#line 686 "sydparse.y"
|
3967
3967
|
{
|
3968
|
-
yyval.node = new_call(yyvsp[-3].node, yyvsp[-1].id, yyvsp[0].node);
|
3968
|
+
yyval.node = new_call(parse_state, yyvsp[-3].node, yyvsp[-1].id, yyvsp[0].node);
|
3969
3969
|
;
|
3970
3970
|
break;}
|
3971
3971
|
case 50:
|
@@ -3990,14 +3990,14 @@ case 52:
|
|
3990
3990
|
case 53:
|
3991
3991
|
#line 707 "sydparse.y"
|
3992
3992
|
{
|
3993
|
-
yyval.node = new_fcall(yyvsp[-1].id, yyvsp[0].node);
|
3993
|
+
yyval.node = new_fcall(parse_state, yyvsp[-1].id, yyvsp[0].node);
|
3994
3994
|
fixpos(yyval.node, yyvsp[0].node);
|
3995
3995
|
;
|
3996
3996
|
break;}
|
3997
3997
|
case 54:
|
3998
3998
|
#line 712 "sydparse.y"
|
3999
3999
|
{
|
4000
|
-
yyval.node = new_fcall(yyvsp[-2].id, yyvsp[-1].node);
|
4000
|
+
yyval.node = new_fcall(parse_state, yyvsp[-2].id, yyvsp[-1].node);
|
4001
4001
|
if (yyvsp[0].node) {
|
4002
4002
|
if (nd_type(yyval.node) == NODE_BLOCK_PASS) {
|
4003
4003
|
rb_compile_error("both block arg and actual block given");
|
@@ -4011,14 +4011,14 @@ case 54:
|
|
4011
4011
|
case 55:
|
4012
4012
|
#line 724 "sydparse.y"
|
4013
4013
|
{
|
4014
|
-
yyval.node = new_call(yyvsp[-3].node, yyvsp[-1].id, yyvsp[0].node);
|
4014
|
+
yyval.node = new_call(parse_state, yyvsp[-3].node, yyvsp[-1].id, yyvsp[0].node);
|
4015
4015
|
fixpos(yyval.node, yyvsp[-3].node);
|
4016
4016
|
;
|
4017
4017
|
break;}
|
4018
4018
|
case 56:
|
4019
4019
|
#line 729 "sydparse.y"
|
4020
4020
|
{
|
4021
|
-
yyval.node = new_call(yyvsp[-4].node, yyvsp[-2].id, yyvsp[-1].node);
|
4021
|
+
yyval.node = new_call(parse_state, yyvsp[-4].node, yyvsp[-2].id, yyvsp[-1].node);
|
4022
4022
|
if (yyvsp[0].node) {
|
4023
4023
|
if (nd_type(yyval.node) == NODE_BLOCK_PASS) {
|
4024
4024
|
rb_compile_error("both block arg and actual block given");
|
@@ -4032,14 +4032,14 @@ case 56:
|
|
4032
4032
|
case 57:
|
4033
4033
|
#line 741 "sydparse.y"
|
4034
4034
|
{
|
4035
|
-
yyval.node = new_call(yyvsp[-3].node, yyvsp[-1].id, yyvsp[0].node);
|
4035
|
+
yyval.node = new_call(parse_state, yyvsp[-3].node, yyvsp[-1].id, yyvsp[0].node);
|
4036
4036
|
fixpos(yyval.node, yyvsp[-3].node);
|
4037
4037
|
;
|
4038
4038
|
break;}
|
4039
4039
|
case 58:
|
4040
4040
|
#line 746 "sydparse.y"
|
4041
4041
|
{
|
4042
|
-
yyval.node = new_call(yyvsp[-4].node, yyvsp[-2].id, yyvsp[-1].node);
|
4042
|
+
yyval.node = new_call(parse_state, yyvsp[-4].node, yyvsp[-2].id, yyvsp[-1].node);
|
4043
4043
|
if (yyvsp[0].node) {
|
4044
4044
|
if (nd_type(yyval.node) == NODE_BLOCK_PASS) {
|
4045
4045
|
rb_compile_error("both block arg and actual block given");
|
@@ -4053,14 +4053,14 @@ case 58:
|
|
4053
4053
|
case 59:
|
4054
4054
|
#line 758 "sydparse.y"
|
4055
4055
|
{
|
4056
|
-
yyval.node = new_super(yyvsp[0].node);
|
4056
|
+
yyval.node = new_super(parse_state, yyvsp[0].node);
|
4057
4057
|
fixpos(yyval.node, yyvsp[0].node);
|
4058
4058
|
;
|
4059
4059
|
break;}
|
4060
4060
|
case 60:
|
4061
4061
|
#line 763 "sydparse.y"
|
4062
4062
|
{
|
4063
|
-
yyval.node = new_yield(yyvsp[0].node);
|
4063
|
+
yyval.node = new_yield(parse_state, yyvsp[0].node);
|
4064
4064
|
fixpos(yyval.node, yyvsp[0].node);
|
4065
4065
|
;
|
4066
4066
|
break;}
|
@@ -4085,7 +4085,7 @@ case 65:
|
|
4085
4085
|
case 66:
|
4086
4086
|
#line 788 "sydparse.y"
|
4087
4087
|
{
|
4088
|
-
yyval.node = NEW_MASGN(list_append(yyvsp[-1].node,yyvsp[0].node), 0);
|
4088
|
+
yyval.node = NEW_MASGN(list_append(parse_state, yyvsp[-1].node,yyvsp[0].node), 0);
|
4089
4089
|
;
|
4090
4090
|
break;}
|
4091
4091
|
case 67:
|
@@ -4127,7 +4127,7 @@ case 73:
|
|
4127
4127
|
case 74:
|
4128
4128
|
#line 821 "sydparse.y"
|
4129
4129
|
{
|
4130
|
-
yyval.node = list_append(yyvsp[-2].node, yyvsp[-1].node);
|
4130
|
+
yyval.node = list_append(parse_state, yyvsp[-2].node, yyvsp[-1].node);
|
4131
4131
|
;
|
4132
4132
|
break;}
|
4133
4133
|
case 75:
|
@@ -4287,7 +4287,7 @@ case 104:
|
|
4287
4287
|
case 105:
|
4288
4288
|
#line 949 "sydparse.y"
|
4289
4289
|
{
|
4290
|
-
yyval.node = block_append(yyvsp[-3].node, NEW_UNDEF(yyvsp[0].id));
|
4290
|
+
yyval.node = block_append(parse_state, yyvsp[-3].node, NEW_UNDEF(yyvsp[0].id));
|
4291
4291
|
;
|
4292
4292
|
break;}
|
4293
4293
|
case 106:
|
@@ -4442,7 +4442,7 @@ case 176:
|
|
4442
4442
|
args = NEW_LIST(yyvsp[0].node);
|
4443
4443
|
if (yyvsp[-3].node && nd_type(yyvsp[-3].node) != NODE_ARRAY)
|
4444
4444
|
yyvsp[-3].node = NEW_LIST(yyvsp[-3].node);
|
4445
|
-
yyvsp[-3].node = list_append(yyvsp[-3].node, NEW_NIL());
|
4445
|
+
yyvsp[-3].node = list_append(parse_state, yyvsp[-3].node, NEW_NIL());
|
4446
4446
|
list_concat(args, yyvsp[-3].node);
|
4447
4447
|
if (yyvsp[-1].id == tOROP) {
|
4448
4448
|
yyvsp[-1].id = 0;
|
@@ -4765,7 +4765,7 @@ case 223:
|
|
4765
4765
|
#line 1262 "sydparse.y"
|
4766
4766
|
{
|
4767
4767
|
value_expr(yyvsp[-1].node);
|
4768
|
-
yyval.node = arg_concat(yyvsp[-4].node, yyvsp[-1].node);
|
4768
|
+
yyval.node = arg_concat(parse_state, yyvsp[-4].node, yyvsp[-1].node);
|
4769
4769
|
;
|
4770
4770
|
break;}
|
4771
4771
|
case 224:
|
@@ -4804,7 +4804,7 @@ case 229:
|
|
4804
4804
|
#line 1291 "sydparse.y"
|
4805
4805
|
{
|
4806
4806
|
rb_warn("parenthesize argument for future version");
|
4807
|
-
yyval.node = list_append(yyvsp[-4].node, yyvsp[-2].node);
|
4807
|
+
yyval.node = list_append(parse_state, yyvsp[-4].node, yyvsp[-2].node);
|
4808
4808
|
;
|
4809
4809
|
break;}
|
4810
4810
|
case 232:
|
@@ -4823,7 +4823,7 @@ case 233:
|
|
4823
4823
|
case 234:
|
4824
4824
|
#line 1311 "sydparse.y"
|
4825
4825
|
{
|
4826
|
-
yyval.node = arg_concat(yyvsp[-4].node, yyvsp[-1].node);
|
4826
|
+
yyval.node = arg_concat(parse_state, yyvsp[-4].node, yyvsp[-1].node);
|
4827
4827
|
yyval.node = arg_blk_pass(yyval.node, yyvsp[0].node);
|
4828
4828
|
;
|
4829
4829
|
break;}
|
@@ -4837,14 +4837,14 @@ case 235:
|
|
4837
4837
|
case 236:
|
4838
4838
|
#line 1321 "sydparse.y"
|
4839
4839
|
{
|
4840
|
-
yyval.node = arg_concat(NEW_LIST(NEW_POSITIONAL(yyvsp[-4].node)), yyvsp[-1].node);
|
4840
|
+
yyval.node = arg_concat(parse_state, NEW_LIST(NEW_POSITIONAL(yyvsp[-4].node)), yyvsp[-1].node);
|
4841
4841
|
yyval.node = arg_blk_pass(yyval.node, yyvsp[0].node);
|
4842
4842
|
;
|
4843
4843
|
break;}
|
4844
4844
|
case 237:
|
4845
4845
|
#line 1326 "sydparse.y"
|
4846
4846
|
{
|
4847
|
-
yyval.node = list_append(yyvsp[-3].node, NEW_POSITIONAL(yyvsp[-1].node));
|
4847
|
+
yyval.node = list_append(parse_state, yyvsp[-3].node, NEW_POSITIONAL(yyvsp[-1].node));
|
4848
4848
|
yyval.node = arg_blk_pass(yyval.node, yyvsp[0].node);
|
4849
4849
|
;
|
4850
4850
|
break;}
|
@@ -4852,7 +4852,7 @@ case 238:
|
|
4852
4852
|
#line 1331 "sydparse.y"
|
4853
4853
|
{
|
4854
4854
|
value_expr(yyvsp[-1].node);
|
4855
|
-
yyval.node = arg_concat(list_append(yyvsp[-6].node, NEW_POSITIONAL(yyvsp[-4].node)), yyvsp[-1].node);
|
4855
|
+
yyval.node = arg_concat(parse_state, list_append(parse_state, yyvsp[-6].node, NEW_POSITIONAL(yyvsp[-4].node)), yyvsp[-1].node);
|
4856
4856
|
yyval.node = arg_blk_pass(yyval.node, yyvsp[0].node);
|
4857
4857
|
;
|
4858
4858
|
break;}
|
@@ -4877,14 +4877,14 @@ case 242:
|
|
4877
4877
|
case 243:
|
4878
4878
|
#line 1352 "sydparse.y"
|
4879
4879
|
{
|
4880
|
-
yyval.node = arg_concat(NEW_LIST(yyvsp[-4].node), yyvsp[-1].node);
|
4880
|
+
yyval.node = arg_concat(parse_state, NEW_LIST(yyvsp[-4].node), yyvsp[-1].node);
|
4881
4881
|
yyval.node = arg_blk_pass(yyval.node, yyvsp[0].node);
|
4882
4882
|
;
|
4883
4883
|
break;}
|
4884
4884
|
case 244:
|
4885
4885
|
#line 1357 "sydparse.y"
|
4886
4886
|
{
|
4887
|
-
yyval.node = arg_concat(list_concat(NEW_LIST(yyvsp[-6].node),yyvsp[-4].node), yyvsp[-1].node);
|
4887
|
+
yyval.node = arg_concat(parse_state, list_concat(NEW_LIST(yyvsp[-6].node),yyvsp[-4].node), yyvsp[-1].node);
|
4888
4888
|
yyval.node = arg_blk_pass(yyval.node, yyvsp[0].node);
|
4889
4889
|
;
|
4890
4890
|
break;}
|
@@ -4898,35 +4898,35 @@ case 245:
|
|
4898
4898
|
case 246:
|
4899
4899
|
#line 1367 "sydparse.y"
|
4900
4900
|
{
|
4901
|
-
yyval.node = arg_concat(NEW_LIST(NEW_POSITIONAL(yyvsp[-4].node)), yyvsp[-1].node);
|
4901
|
+
yyval.node = arg_concat(parse_state, NEW_LIST(NEW_POSITIONAL(yyvsp[-4].node)), yyvsp[-1].node);
|
4902
4902
|
yyval.node = arg_blk_pass(yyval.node, yyvsp[0].node);
|
4903
4903
|
;
|
4904
4904
|
break;}
|
4905
4905
|
case 247:
|
4906
4906
|
#line 1372 "sydparse.y"
|
4907
4907
|
{
|
4908
|
-
yyval.node = list_append(NEW_LIST(yyvsp[-3].node), NEW_POSITIONAL(yyvsp[-1].node));
|
4908
|
+
yyval.node = list_append(parse_state, NEW_LIST(yyvsp[-3].node), NEW_POSITIONAL(yyvsp[-1].node));
|
4909
4909
|
yyval.node = arg_blk_pass(yyval.node, yyvsp[0].node);
|
4910
4910
|
;
|
4911
4911
|
break;}
|
4912
4912
|
case 248:
|
4913
4913
|
#line 1377 "sydparse.y"
|
4914
4914
|
{
|
4915
|
-
yyval.node = list_append(list_concat(NEW_LIST(yyvsp[-5].node),yyvsp[-3].node), NEW_POSITIONAL(yyvsp[-1].node));
|
4915
|
+
yyval.node = list_append(parse_state, list_concat(NEW_LIST(yyvsp[-5].node),yyvsp[-3].node), NEW_POSITIONAL(yyvsp[-1].node));
|
4916
4916
|
yyval.node = arg_blk_pass(yyval.node, yyvsp[0].node);
|
4917
4917
|
;
|
4918
4918
|
break;}
|
4919
4919
|
case 249:
|
4920
4920
|
#line 1382 "sydparse.y"
|
4921
4921
|
{
|
4922
|
-
yyval.node = arg_concat(list_append(NEW_LIST(yyvsp[-6].node), NEW_POSITIONAL(yyvsp[-4].node)), yyvsp[-1].node);
|
4922
|
+
yyval.node = arg_concat(parse_state, list_append(parse_state, NEW_LIST(yyvsp[-6].node), NEW_POSITIONAL(yyvsp[-4].node)), yyvsp[-1].node);
|
4923
4923
|
yyval.node = arg_blk_pass(yyval.node, yyvsp[0].node);
|
4924
4924
|
;
|
4925
4925
|
break;}
|
4926
4926
|
case 250:
|
4927
4927
|
#line 1387 "sydparse.y"
|
4928
4928
|
{
|
4929
|
-
yyval.node = arg_concat(list_append(list_concat(NEW_LIST(yyvsp[-8].node), yyvsp[-6].node), NEW_POSITIONAL(yyvsp[-4].node)), yyvsp[-1].node);
|
4929
|
+
yyval.node = arg_concat(parse_state, list_append(parse_state, list_concat(NEW_LIST(yyvsp[-8].node), yyvsp[-6].node), NEW_POSITIONAL(yyvsp[-4].node)), yyvsp[-1].node);
|
4930
4930
|
yyval.node = arg_blk_pass(yyval.node, yyvsp[0].node);
|
4931
4931
|
;
|
4932
4932
|
break;}
|
@@ -4994,19 +4994,19 @@ case 263:
|
|
4994
4994
|
case 264:
|
4995
4995
|
#line 1441 "sydparse.y"
|
4996
4996
|
{
|
4997
|
-
yyval.node = list_append(yyvsp[-2].node, yyvsp[0].node);
|
4997
|
+
yyval.node = list_append(parse_state, yyvsp[-2].node, yyvsp[0].node);
|
4998
4998
|
;
|
4999
4999
|
break;}
|
5000
5000
|
case 265:
|
5001
5001
|
#line 1447 "sydparse.y"
|
5002
5002
|
{
|
5003
|
-
yyval.node = list_append(yyvsp[-2].node, yyvsp[0].node);
|
5003
|
+
yyval.node = list_append(parse_state, yyvsp[-2].node, yyvsp[0].node);
|
5004
5004
|
;
|
5005
5005
|
break;}
|
5006
5006
|
case 266:
|
5007
5007
|
#line 1451 "sydparse.y"
|
5008
5008
|
{
|
5009
|
-
yyval.node = arg_concat(yyvsp[-3].node, yyvsp[0].node);
|
5009
|
+
yyval.node = arg_concat(parse_state, yyvsp[-3].node, yyvsp[0].node);
|
5010
5010
|
;
|
5011
5011
|
break;}
|
5012
5012
|
case 267:
|
@@ -5103,7 +5103,7 @@ case 287:
|
|
5103
5103
|
case 288:
|
5104
5104
|
#line 1529 "sydparse.y"
|
5105
5105
|
{
|
5106
|
-
yyval.node = new_yield(yyvsp[-1].node);
|
5106
|
+
yyval.node = new_yield(parse_state, yyvsp[-1].node);
|
5107
5107
|
;
|
5108
5108
|
break;}
|
5109
5109
|
case 289:
|
@@ -5443,40 +5443,40 @@ case 347:
|
|
5443
5443
|
case 348:
|
5444
5444
|
#line 1813 "sydparse.y"
|
5445
5445
|
{
|
5446
|
-
yyval.node = new_call(yyvsp[-3].node, yyvsp[-1].id, yyvsp[0].node);
|
5446
|
+
yyval.node = new_call(parse_state, yyvsp[-3].node, yyvsp[-1].id, yyvsp[0].node);
|
5447
5447
|
;
|
5448
5448
|
break;}
|
5449
5449
|
case 349:
|
5450
5450
|
#line 1817 "sydparse.y"
|
5451
5451
|
{
|
5452
|
-
yyval.node = new_call(yyvsp[-3].node, yyvsp[-1].id, yyvsp[0].node);
|
5452
|
+
yyval.node = new_call(parse_state, yyvsp[-3].node, yyvsp[-1].id, yyvsp[0].node);
|
5453
5453
|
;
|
5454
5454
|
break;}
|
5455
5455
|
case 350:
|
5456
5456
|
#line 1823 "sydparse.y"
|
5457
5457
|
{
|
5458
|
-
yyval.node = new_fcall(yyvsp[-1].id, yyvsp[0].node);
|
5458
|
+
yyval.node = new_fcall(parse_state, yyvsp[-1].id, yyvsp[0].node);
|
5459
5459
|
fixpos(yyval.node, yyvsp[0].node);
|
5460
5460
|
;
|
5461
5461
|
break;}
|
5462
5462
|
case 351:
|
5463
5463
|
#line 1828 "sydparse.y"
|
5464
5464
|
{
|
5465
|
-
yyval.node = new_call(yyvsp[-3].node, yyvsp[-1].id, yyvsp[0].node);
|
5465
|
+
yyval.node = new_call(parse_state, yyvsp[-3].node, yyvsp[-1].id, yyvsp[0].node);
|
5466
5466
|
fixpos(yyval.node, yyvsp[-3].node);
|
5467
5467
|
;
|
5468
5468
|
break;}
|
5469
5469
|
case 352:
|
5470
5470
|
#line 1833 "sydparse.y"
|
5471
5471
|
{
|
5472
|
-
yyval.node = new_call(yyvsp[-3].node, yyvsp[-1].id, yyvsp[0].node);
|
5472
|
+
yyval.node = new_call(parse_state, yyvsp[-3].node, yyvsp[-1].id, yyvsp[0].node);
|
5473
5473
|
fixpos(yyval.node, yyvsp[-3].node);
|
5474
5474
|
;
|
5475
5475
|
break;}
|
5476
5476
|
case 353:
|
5477
5477
|
#line 1838 "sydparse.y"
|
5478
5478
|
{
|
5479
|
-
yyval.node = new_call(yyvsp[-2].node, yyvsp[0].id, 0);
|
5479
|
+
yyval.node = new_call(parse_state, yyvsp[-2].node, yyvsp[0].id, 0);
|
5480
5480
|
;
|
5481
5481
|
break;}
|
5482
5482
|
case 354:
|
@@ -5494,7 +5494,7 @@ case 355:
|
|
5494
5494
|
case 356:
|
5495
5495
|
#line 1850 "sydparse.y"
|
5496
5496
|
{
|
5497
|
-
yyval.node = new_super(yyvsp[0].node);
|
5497
|
+
yyval.node = new_super(parse_state, yyvsp[0].node);
|
5498
5498
|
;
|
5499
5499
|
break;}
|
5500
5500
|
case 357:
|
@@ -5550,7 +5550,7 @@ case 364:
|
|
5550
5550
|
case 366:
|
5551
5551
|
#line 1894 "sydparse.y"
|
5552
5552
|
{
|
5553
|
-
yyval.node = list_append(yyvsp[-3].node, NEW_WHEN(yyvsp[0].node, 0, 0));
|
5553
|
+
yyval.node = list_append(parse_state, yyvsp[-3].node, NEW_WHEN(yyvsp[0].node, 0, 0));
|
5554
5554
|
;
|
5555
5555
|
break;}
|
5556
5556
|
case 367:
|
@@ -5564,7 +5564,7 @@ case 370:
|
|
5564
5564
|
{
|
5565
5565
|
if (yyvsp[-3].node) {
|
5566
5566
|
yyvsp[-3].node = node_assign(yyvsp[-3].node, NEW_GVAR(rb_intern("$!")), parse_state);
|
5567
|
-
yyvsp[-1].node = block_append(yyvsp[-3].node, yyvsp[-1].node);
|
5567
|
+
yyvsp[-1].node = block_append(parse_state, yyvsp[-3].node, yyvsp[-1].node);
|
5568
5568
|
}
|
5569
5569
|
yyval.node = NEW_RESBODY(yyvsp[-4].node, yyvsp[-1].node, yyvsp[0].node);
|
5570
5570
|
fixpos(yyval.node, yyvsp[-4].node?yyvsp[-4].node:yyvsp[-1].node);
|
@@ -5606,7 +5606,7 @@ case 382:
|
|
5606
5606
|
node = NEW_STR(rb_str_new(0, 0));
|
5607
5607
|
}
|
5608
5608
|
else {
|
5609
|
-
node = evstr2dstr(node);
|
5609
|
+
node = evstr2dstr(parse_state, node);
|
5610
5610
|
}
|
5611
5611
|
yyval.node = node;
|
5612
5612
|
;
|
@@ -5614,7 +5614,7 @@ case 382:
|
|
5614
5614
|
case 384:
|
5615
5615
|
#line 1970 "sydparse.y"
|
5616
5616
|
{
|
5617
|
-
yyval.node = literal_concat(yyvsp[-1].node, yyvsp[0].node);
|
5617
|
+
yyval.node = literal_concat(parse_state, yyvsp[-1].node, yyvsp[0].node);
|
5618
5618
|
;
|
5619
5619
|
break;}
|
5620
5620
|
case 385:
|
@@ -5706,13 +5706,13 @@ case 390:
|
|
5706
5706
|
case 391:
|
5707
5707
|
#line 2058 "sydparse.y"
|
5708
5708
|
{
|
5709
|
-
yyval.node = list_append(yyvsp[-2].node, evstr2dstr(yyvsp[-1].node));
|
5709
|
+
yyval.node = list_append(parse_state, yyvsp[-2].node, evstr2dstr(parse_state, yyvsp[-1].node));
|
5710
5710
|
;
|
5711
5711
|
break;}
|
5712
5712
|
case 393:
|
5713
5713
|
#line 2065 "sydparse.y"
|
5714
5714
|
{
|
5715
|
-
yyval.node = literal_concat(yyvsp[-1].node, yyvsp[0].node);
|
5715
|
+
yyval.node = literal_concat(parse_state, yyvsp[-1].node, yyvsp[0].node);
|
5716
5716
|
;
|
5717
5717
|
break;}
|
5718
5718
|
case 394:
|
@@ -5736,7 +5736,7 @@ case 396:
|
|
5736
5736
|
case 397:
|
5737
5737
|
#line 2085 "sydparse.y"
|
5738
5738
|
{
|
5739
|
-
yyval.node = list_append(yyvsp[-2].node, yyvsp[-1].node);
|
5739
|
+
yyval.node = list_append(parse_state, yyvsp[-2].node, yyvsp[-1].node);
|
5740
5740
|
;
|
5741
5741
|
break;}
|
5742
5742
|
case 398:
|
@@ -5748,7 +5748,7 @@ case 398:
|
|
5748
5748
|
case 399:
|
5749
5749
|
#line 2095 "sydparse.y"
|
5750
5750
|
{
|
5751
|
-
yyval.node = literal_concat(yyvsp[-1].node, yyvsp[0].node);
|
5751
|
+
yyval.node = literal_concat(parse_state, yyvsp[-1].node, yyvsp[0].node);
|
5752
5752
|
;
|
5753
5753
|
break;}
|
5754
5754
|
case 400:
|
@@ -5760,7 +5760,7 @@ case 400:
|
|
5760
5760
|
case 401:
|
5761
5761
|
#line 2105 "sydparse.y"
|
5762
5762
|
{
|
5763
|
-
yyval.node = literal_concat(yyvsp[-1].node, yyvsp[0].node);
|
5763
|
+
yyval.node = literal_concat(parse_state, yyvsp[-1].node, yyvsp[0].node);
|
5764
5764
|
;
|
5765
5765
|
break;}
|
5766
5766
|
case 403:
|
@@ -5798,7 +5798,7 @@ case 406:
|
|
5798
5798
|
yyval.node = yyval.node->nd_next;
|
5799
5799
|
rb_gc_force_recycle((VALUE)yyvsp[-1].node);
|
5800
5800
|
}
|
5801
|
-
yyval.node = new_evstr(yyval.node);
|
5801
|
+
yyval.node = new_evstr(parse_state, yyval.node);
|
5802
5802
|
;
|
5803
5803
|
break;}
|
5804
5804
|
case 407:
|
@@ -5933,52 +5933,52 @@ case 442:
|
|
5933
5933
|
#line 2256 "sydparse.y"
|
5934
5934
|
{
|
5935
5935
|
// printf("rest + all = %d\n", $5);
|
5936
|
-
yyval.node = block_append(NEW_ARGS(yyvsp[-5].num, yyvsp[-3].node, yyvsp[-1].id), yyvsp[0].node);
|
5936
|
+
yyval.node = block_append(parse_state, NEW_ARGS(yyvsp[-5].num, yyvsp[-3].node, yyvsp[-1].id), yyvsp[0].node);
|
5937
5937
|
;
|
5938
5938
|
break;}
|
5939
5939
|
case 443:
|
5940
5940
|
#line 2261 "sydparse.y"
|
5941
5941
|
{
|
5942
|
-
yyval.node = block_append(NEW_ARGS(yyvsp[-3].num, yyvsp[-1].node, -1), yyvsp[0].node);
|
5942
|
+
yyval.node = block_append(parse_state, NEW_ARGS(yyvsp[-3].num, yyvsp[-1].node, -1), yyvsp[0].node);
|
5943
5943
|
;
|
5944
5944
|
break;}
|
5945
5945
|
case 444:
|
5946
5946
|
#line 2265 "sydparse.y"
|
5947
5947
|
{
|
5948
5948
|
// printf("arg + rest = %d\n", $3);
|
5949
|
-
yyval.node = block_append(NEW_ARGS(yyvsp[-3].num, 0, yyvsp[-1].id), yyvsp[0].node);
|
5949
|
+
yyval.node = block_append(parse_state, NEW_ARGS(yyvsp[-3].num, 0, yyvsp[-1].id), yyvsp[0].node);
|
5950
5950
|
;
|
5951
5951
|
break;}
|
5952
5952
|
case 445:
|
5953
5953
|
#line 2270 "sydparse.y"
|
5954
5954
|
{
|
5955
|
-
yyval.node = block_append(NEW_ARGS(yyvsp[-1].num, 0, -1), yyvsp[0].node);
|
5955
|
+
yyval.node = block_append(parse_state, NEW_ARGS(yyvsp[-1].num, 0, -1), yyvsp[0].node);
|
5956
5956
|
;
|
5957
5957
|
break;}
|
5958
5958
|
case 446:
|
5959
5959
|
#line 2274 "sydparse.y"
|
5960
5960
|
{
|
5961
5961
|
// printf("rest + opt = %d\n", $3);
|
5962
|
-
yyval.node = block_append(NEW_ARGS(0, yyvsp[-3].node, yyvsp[-1].id), yyvsp[0].node);
|
5962
|
+
yyval.node = block_append(parse_state, NEW_ARGS(0, yyvsp[-3].node, yyvsp[-1].id), yyvsp[0].node);
|
5963
5963
|
;
|
5964
5964
|
break;}
|
5965
5965
|
case 447:
|
5966
5966
|
#line 2279 "sydparse.y"
|
5967
5967
|
{
|
5968
|
-
yyval.node = block_append(NEW_ARGS(0, yyvsp[-1].node, -1), yyvsp[0].node);
|
5968
|
+
yyval.node = block_append(parse_state, NEW_ARGS(0, yyvsp[-1].node, -1), yyvsp[0].node);
|
5969
5969
|
;
|
5970
5970
|
break;}
|
5971
5971
|
case 448:
|
5972
5972
|
#line 2283 "sydparse.y"
|
5973
5973
|
{
|
5974
5974
|
// printf("rest only = %d\n", $1);
|
5975
|
-
yyval.node = block_append(NEW_ARGS(0, 0, yyvsp[-1].id), yyvsp[0].node);
|
5975
|
+
yyval.node = block_append(parse_state, NEW_ARGS(0, 0, yyvsp[-1].id), yyvsp[0].node);
|
5976
5976
|
;
|
5977
5977
|
break;}
|
5978
5978
|
case 449:
|
5979
5979
|
#line 2288 "sydparse.y"
|
5980
5980
|
{
|
5981
|
-
yyval.node = block_append(NEW_ARGS(0, 0, -1), yyvsp[0].node);
|
5981
|
+
yyval.node = block_append(parse_state, NEW_ARGS(0, 0, -1), yyvsp[0].node);
|
5982
5982
|
;
|
5983
5983
|
break;}
|
5984
5984
|
case 450:
|
@@ -6048,7 +6048,7 @@ case 459:
|
|
6048
6048
|
case 460:
|
6049
6049
|
#line 2347 "sydparse.y"
|
6050
6050
|
{
|
6051
|
-
yyval.node = block_append(yyvsp[-2].node, yyvsp[0].node);
|
6051
|
+
yyval.node = block_append(parse_state, yyvsp[-2].node, yyvsp[0].node);
|
6052
6052
|
;
|
6053
6053
|
break;}
|
6054
6054
|
case 463:
|
@@ -6156,13 +6156,13 @@ case 479:
|
|
6156
6156
|
case 480:
|
6157
6157
|
#line 2453 "sydparse.y"
|
6158
6158
|
{
|
6159
|
-
yyval.node = list_append(NEW_LIST(yyvsp[-2].node), yyvsp[0].node);
|
6159
|
+
yyval.node = list_append(parse_state, NEW_LIST(yyvsp[-2].node), yyvsp[0].node);
|
6160
6160
|
;
|
6161
6161
|
break;}
|
6162
6162
|
case 481:
|
6163
6163
|
#line 2458 "sydparse.y"
|
6164
6164
|
{
|
6165
|
-
yyval.node = list_append(NEW_LIST(NEW_LIT(ID2SYM(yyvsp[-1].id))), yyvsp[0].node);
|
6165
|
+
yyval.node = list_append(parse_state, NEW_LIST(NEW_LIT(ID2SYM(yyvsp[-1].id))), yyvsp[0].node);
|
6166
6166
|
;
|
6167
6167
|
break;}
|
6168
6168
|
case 501:
|
@@ -7112,7 +7112,7 @@ tokadd_string(func, term, paren, nest, parse_state)
|
|
7112
7112
|
}
|
7113
7113
|
|
7114
7114
|
#define NEW_STRTERM(func, term, paren) \
|
7115
|
-
syd_node_newnode(NODE_STRTERM, (func), (term) | ((paren) << (CHAR_BIT * 2)), 0)
|
7115
|
+
syd_node_newnode(parse_state, NODE_STRTERM, (func), (term) | ((paren) << (CHAR_BIT * 2)), 0)
|
7116
7116
|
#define pslval ((YYSTYPE *)parse_state->lval)
|
7117
7117
|
static int
|
7118
7118
|
parse_string(quote, parse_state)
|
@@ -7220,7 +7220,7 @@ heredoc_identifier(rb_parse_state *parse_state)
|
|
7220
7220
|
len = parse_state->lex_p - parse_state->lex_pbeg;
|
7221
7221
|
parse_state->lex_p = parse_state->lex_pend;
|
7222
7222
|
pslval->id = 0;
|
7223
|
-
lex_strterm = syd_node_newnode(NODE_HEREDOC,
|
7223
|
+
lex_strterm = syd_node_newnode(parse_state, NODE_HEREDOC,
|
7224
7224
|
rb_str_new(tok(), toklen()), /* nd_lit */
|
7225
7225
|
len, /* nd_nth */
|
7226
7226
|
parse_state->lex_lastline); /* nd_orig */
|
@@ -8565,12 +8565,16 @@ yylex(YYSTYPE *yylval, void *vstate)
|
|
8565
8565
|
}
|
8566
8566
|
}
|
8567
8567
|
|
8568
|
+
void *pt_allocate(rb_parse_state *st, int size);
|
8569
|
+
|
8568
8570
|
NODE*
|
8569
|
-
syd_node_newnode(type, a0, a1, a2)
|
8571
|
+
syd_node_newnode(st, type, a0, a1, a2)
|
8572
|
+
rb_parse_state *st;
|
8570
8573
|
enum node_type type;
|
8571
8574
|
VALUE a0, a1, a2;
|
8572
8575
|
{
|
8573
|
-
NODE *n = (NODE*)
|
8576
|
+
NODE *n = (NODE*)pt_allocate(st, sizeof(NODE));
|
8577
|
+
// NODE *n = (NODE*)rb_newobj();
|
8574
8578
|
|
8575
8579
|
n->flags |= T_NODE;
|
8576
8580
|
nd_set_type(n, type);
|
@@ -8602,7 +8606,8 @@ nodeline(node)
|
|
8602
8606
|
#endif
|
8603
8607
|
|
8604
8608
|
static NODE*
|
8605
|
-
newline_node(node)
|
8609
|
+
newline_node(parse_state, node)
|
8610
|
+
rb_parse_state *parse_state;
|
8606
8611
|
NODE *node;
|
8607
8612
|
{
|
8608
8613
|
NODE *nl = 0;
|
@@ -8649,7 +8654,8 @@ parser_warn(node, mesg)
|
|
8649
8654
|
}
|
8650
8655
|
|
8651
8656
|
static NODE*
|
8652
|
-
block_append(head, tail)
|
8657
|
+
block_append(parse_state, head, tail)
|
8658
|
+
rb_parse_state *parse_state;
|
8653
8659
|
NODE *head, *tail;
|
8654
8660
|
{
|
8655
8661
|
NODE *end, *h = head;
|
@@ -8709,7 +8715,8 @@ block_append(head, tail)
|
|
8709
8715
|
|
8710
8716
|
/* append item to the list */
|
8711
8717
|
static NODE*
|
8712
|
-
list_append(list, item)
|
8718
|
+
list_append(parse_state, list, item)
|
8719
|
+
rb_parse_state *parse_state;
|
8713
8720
|
NODE *list, *item;
|
8714
8721
|
{
|
8715
8722
|
NODE *last;
|
@@ -8756,7 +8763,8 @@ list_concat(head, tail)
|
|
8756
8763
|
|
8757
8764
|
/* concat two string literals */
|
8758
8765
|
static NODE *
|
8759
|
-
literal_concat(head, tail)
|
8766
|
+
literal_concat(parse_state, head, tail)
|
8767
|
+
rb_parse_state *parse_state;
|
8760
8768
|
NODE *head, *tail;
|
8761
8769
|
{
|
8762
8770
|
enum node_type htype;
|
@@ -8767,7 +8775,7 @@ literal_concat(head, tail)
|
|
8767
8775
|
htype = nd_type(head);
|
8768
8776
|
if (htype == NODE_EVSTR) {
|
8769
8777
|
NODE *node = NEW_DSTR(rb_str_new(0, 0));
|
8770
|
-
head = list_append(node, head);
|
8778
|
+
head = list_append(parse_state, node, head);
|
8771
8779
|
}
|
8772
8780
|
switch (nd_type(tail)) {
|
8773
8781
|
case NODE_STR:
|
@@ -8776,7 +8784,7 @@ literal_concat(head, tail)
|
|
8776
8784
|
rb_gc_force_recycle((VALUE)tail);
|
8777
8785
|
}
|
8778
8786
|
else {
|
8779
|
-
list_append(head, tail);
|
8787
|
+
list_append(parse_state, head, tail);
|
8780
8788
|
}
|
8781
8789
|
break;
|
8782
8790
|
|
@@ -8799,24 +8807,26 @@ literal_concat(head, tail)
|
|
8799
8807
|
nd_set_type(head, NODE_DSTR);
|
8800
8808
|
head->nd_alen = 1;
|
8801
8809
|
}
|
8802
|
-
list_append(head, tail);
|
8810
|
+
list_append(parse_state, head, tail);
|
8803
8811
|
break;
|
8804
8812
|
}
|
8805
8813
|
return head;
|
8806
8814
|
}
|
8807
8815
|
|
8808
8816
|
static NODE *
|
8809
|
-
evstr2dstr(node)
|
8817
|
+
evstr2dstr(parse_state, node)
|
8818
|
+
rb_parse_state *parse_state;
|
8810
8819
|
NODE *node;
|
8811
8820
|
{
|
8812
8821
|
if (nd_type(node) == NODE_EVSTR) {
|
8813
|
-
node = list_append(NEW_DSTR(rb_str_new(0, 0)), node);
|
8822
|
+
node = list_append(parse_state, NEW_DSTR(rb_str_new(0, 0)), node);
|
8814
8823
|
}
|
8815
8824
|
return node;
|
8816
8825
|
}
|
8817
8826
|
|
8818
8827
|
static NODE *
|
8819
|
-
new_evstr(node)
|
8828
|
+
new_evstr(parse_state, node)
|
8829
|
+
rb_parse_state *parse_state;
|
8820
8830
|
NODE *node;
|
8821
8831
|
{
|
8822
8832
|
NODE *head = node;
|
@@ -9115,7 +9125,8 @@ rb_backref_error(node)
|
|
9115
9125
|
}
|
9116
9126
|
|
9117
9127
|
static NODE *
|
9118
|
-
arg_concat(node1, node2)
|
9128
|
+
arg_concat(parse_state, node1, node2)
|
9129
|
+
rb_parse_state *parse_state;
|
9119
9130
|
NODE *node1;
|
9120
9131
|
NODE *node2;
|
9121
9132
|
{
|
@@ -9124,13 +9135,14 @@ arg_concat(node1, node2)
|
|
9124
9135
|
}
|
9125
9136
|
|
9126
9137
|
static NODE *
|
9127
|
-
arg_add(node1, node2)
|
9138
|
+
arg_add(parse_state, node1, node2)
|
9139
|
+
rb_parse_state *parse_state;
|
9128
9140
|
NODE *node1;
|
9129
9141
|
NODE *node2;
|
9130
9142
|
{
|
9131
9143
|
if (!node1) return NEW_LIST(node2);
|
9132
9144
|
if (nd_type(node1) == NODE_ARRAY) {
|
9133
|
-
return list_append(node1, node2);
|
9145
|
+
return list_append(parse_state, node1, node2);
|
9134
9146
|
}
|
9135
9147
|
else {
|
9136
9148
|
return NEW_ARGSPUSH(node1, node2);
|
@@ -9160,7 +9172,7 @@ node_assign(lhs, rhs, parse_state)
|
|
9160
9172
|
|
9161
9173
|
case NODE_ATTRASGN:
|
9162
9174
|
case NODE_CALL:
|
9163
|
-
lhs->nd_args = arg_add(lhs->nd_args, rhs);
|
9175
|
+
lhs->nd_args = arg_add(parse_state, lhs->nd_args, rhs);
|
9164
9176
|
break;
|
9165
9177
|
|
9166
9178
|
default:
|
@@ -9596,7 +9608,8 @@ no_blockarg(node)
|
|
9596
9608
|
}
|
9597
9609
|
|
9598
9610
|
static NODE *
|
9599
|
-
ret_args(node)
|
9611
|
+
ret_args(parse_state, node)
|
9612
|
+
rb_parse_state *parse_state;
|
9600
9613
|
NODE *node;
|
9601
9614
|
{
|
9602
9615
|
if (node) {
|
@@ -9612,7 +9625,8 @@ ret_args(node)
|
|
9612
9625
|
}
|
9613
9626
|
|
9614
9627
|
static NODE *
|
9615
|
-
new_yield(node)
|
9628
|
+
new_yield(parse_state, node)
|
9629
|
+
rb_parse_state *parse_state;
|
9616
9630
|
NODE *node;
|
9617
9631
|
{
|
9618
9632
|
long state = Qtrue;
|
@@ -9666,7 +9680,8 @@ arg_blk_pass(node1, node2)
|
|
9666
9680
|
}
|
9667
9681
|
|
9668
9682
|
static NODE*
|
9669
|
-
arg_prepend(node1, node2)
|
9683
|
+
arg_prepend(parse_state, node1, node2)
|
9684
|
+
rb_parse_state *parse_state;
|
9670
9685
|
NODE *node1, *node2;
|
9671
9686
|
{
|
9672
9687
|
switch (nd_type(node2)) {
|
@@ -9674,10 +9689,10 @@ arg_prepend(node1, node2)
|
|
9674
9689
|
return list_concat(NEW_LIST(node1), node2);
|
9675
9690
|
|
9676
9691
|
case NODE_SPLAT:
|
9677
|
-
return arg_concat(node1, node2->nd_head);
|
9692
|
+
return arg_concat(parse_state, node1, node2->nd_head);
|
9678
9693
|
|
9679
9694
|
case NODE_BLOCK_PASS:
|
9680
|
-
node2->nd_body = arg_prepend(node1, node2->nd_body);
|
9695
|
+
node2->nd_body = arg_prepend(parse_state, node1, node2->nd_body);
|
9681
9696
|
return node2;
|
9682
9697
|
|
9683
9698
|
default:
|
@@ -9687,7 +9702,8 @@ arg_prepend(node1, node2)
|
|
9687
9702
|
}
|
9688
9703
|
|
9689
9704
|
static NODE*
|
9690
|
-
new_call(r,m,a)
|
9705
|
+
new_call(parse_state, r,m,a)
|
9706
|
+
rb_parse_state *parse_state;
|
9691
9707
|
NODE *r;
|
9692
9708
|
ID m;
|
9693
9709
|
NODE *a;
|
@@ -9700,7 +9716,8 @@ new_call(r,m,a)
|
|
9700
9716
|
}
|
9701
9717
|
|
9702
9718
|
static NODE*
|
9703
|
-
new_fcall(m,a)
|
9719
|
+
new_fcall(parse_state, m,a)
|
9720
|
+
rb_parse_state *parse_state;
|
9704
9721
|
ID m;
|
9705
9722
|
NODE *a;
|
9706
9723
|
{
|
@@ -9712,7 +9729,8 @@ new_fcall(m,a)
|
|
9712
9729
|
}
|
9713
9730
|
|
9714
9731
|
static NODE*
|
9715
|
-
new_super(a)
|
9732
|
+
new_super(parse_state,a)
|
9733
|
+
rb_parse_state *parse_state;
|
9716
9734
|
NODE *a;
|
9717
9735
|
{
|
9718
9736
|
if (a && nd_type(a) == NODE_BLOCK_PASS) {
|
@@ -9970,10 +9988,13 @@ syd_dyna_init(st, node, pre)
|
|
9970
9988
|
VALUE pre;
|
9971
9989
|
{
|
9972
9990
|
VALUE vars;
|
9991
|
+
rb_parse_state *parse_state;
|
9973
9992
|
int i;
|
9974
9993
|
// struct RVarmap *post = ruby_dyna_vars;
|
9975
9994
|
NODE *var, *out;
|
9976
9995
|
|
9996
|
+
parse_state = st;
|
9997
|
+
|
9977
9998
|
if (!node) return node;
|
9978
9999
|
|
9979
10000
|
vars = rb_funcall(st->self, rb_intern("dyna_init"), 1, pre);
|
@@ -9989,7 +10010,7 @@ syd_dyna_init(st, node, pre)
|
|
9989
10010
|
var = NEW_DASGN_CURR(post->id, var);
|
9990
10011
|
}
|
9991
10012
|
*/
|
9992
|
-
out = block_append(var, node);
|
10013
|
+
out = block_append(st, var, node);
|
9993
10014
|
return out;
|
9994
10015
|
}
|
9995
10016
|
|