summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--node.h190
-rw-r--r--parse.y482
2 files changed, 304 insertions, 368 deletions
diff --git a/node.h b/node.h
index 88816fa969..488a8ce2ef 100644
--- a/node.h
+++ b/node.h
@@ -361,101 +361,101 @@ typedef struct RNode {
#define nd_compile_option u3.value
-#define NEW_NODE(t,a0,a1,a2) rb_node_newnode((t),(VALUE)(a0),(VALUE)(a1),(VALUE)(a2))
-
-#define NEW_DEFN(i,a,d) NEW_NODE(NODE_DEFN,0,i,NEW_SCOPE(a,d))
-#define NEW_DEFS(r,i,a,d) NEW_NODE(NODE_DEFS,r,i,NEW_SCOPE(a,d))
-#define NEW_SCOPE(a,b) NEW_NODE(NODE_SCOPE,local_tbl(),b,a)
-#define NEW_BLOCK(a) NEW_NODE(NODE_BLOCK,a,0,0)
-#define NEW_IF(c,t,e) NEW_NODE(NODE_IF,c,t,e)
-#define NEW_UNLESS(c,t,e) NEW_NODE(NODE_UNLESS,c,t,e)
-#define NEW_CASE(h,b) NEW_NODE(NODE_CASE,h,b,0)
-#define NEW_CASE2(b) NEW_NODE(NODE_CASE2,0,b,0)
-#define NEW_WHEN(c,t,e) NEW_NODE(NODE_WHEN,c,t,e)
-#define NEW_WHILE(c,b,n) NEW_NODE(NODE_WHILE,c,b,n)
-#define NEW_UNTIL(c,b,n) NEW_NODE(NODE_UNTIL,c,b,n)
-#define NEW_FOR(v,i,b) NEW_NODE(NODE_FOR,v,b,i)
-#define NEW_ITER(a,b) NEW_NODE(NODE_ITER,0,NEW_SCOPE(a,b),0)
-#define NEW_LAMBDA(a,b) NEW_NODE(NODE_LAMBDA,0,NEW_SCOPE(a,b),0)
-#define NEW_BREAK(s) NEW_NODE(NODE_BREAK,s,0,0)
-#define NEW_NEXT(s) NEW_NODE(NODE_NEXT,s,0,0)
-#define NEW_REDO() NEW_NODE(NODE_REDO,0,0,0)
-#define NEW_RETRY() NEW_NODE(NODE_RETRY,0,0,0)
-#define NEW_BEGIN(b) NEW_NODE(NODE_BEGIN,0,b,0)
-#define NEW_RESCUE(b,res,e) NEW_NODE(NODE_RESCUE,b,res,e)
-#define NEW_RESBODY(a,ex,n) NEW_NODE(NODE_RESBODY,n,ex,a)
-#define NEW_ENSURE(b,en) NEW_NODE(NODE_ENSURE,b,0,en)
-#define NEW_RETURN(s) NEW_NODE(NODE_RETURN,s,0,0)
-#define NEW_YIELD(a) NEW_NODE(NODE_YIELD,a,0,0)
-#define NEW_LIST(a) NEW_ARRAY(a)
-#define NEW_ARRAY(a) NEW_NODE(NODE_ARRAY,a,1,0)
-#define NEW_ZARRAY() NEW_NODE(NODE_ZARRAY,0,0,0)
-#define NEW_HASH(a) NEW_NODE(NODE_HASH,a,0,0)
-#define NEW_MASGN(l,r) NEW_NODE(NODE_MASGN,l,0,r)
-#define NEW_GASGN(v,val) NEW_NODE(NODE_GASGN,v,val,rb_global_entry(v))
-#define NEW_LASGN(v,val) NEW_NODE(NODE_LASGN,v,val,0)
-#define NEW_DASGN(v,val) NEW_NODE(NODE_DASGN,v,val,0)
-#define NEW_DASGN_CURR(v,val) NEW_NODE(NODE_DASGN_CURR,v,val,0)
-#define NEW_IASGN(v,val) NEW_NODE(NODE_IASGN,v,val,0)
-#define NEW_CDECL(v,val,path) NEW_NODE(NODE_CDECL,v,val,path)
-#define NEW_CVASGN(v,val) NEW_NODE(NODE_CVASGN,v,val,0)
-#define NEW_OP_ASGN1(p,id,a) NEW_NODE(NODE_OP_ASGN1,p,id,a)
-#define NEW_OP_ASGN2(r,t,i,o,val) NEW_NODE(NODE_OP_ASGN2,r,val,NEW_OP_ASGN22(i,o,t))
-#define NEW_OP_ASGN22(i,o,t) NEW_NODE(NODE_OP_ASGN2,i,o,t)
-#define NEW_OP_ASGN_OR(i,val) NEW_NODE(NODE_OP_ASGN_OR,i,val,0)
-#define NEW_OP_ASGN_AND(i,val) NEW_NODE(NODE_OP_ASGN_AND,i,val,0)
-#define NEW_OP_CDECL(v,op,val) NEW_NODE(NODE_OP_CDECL,v,val,op)
-#define NEW_GVAR(v) NEW_NODE(NODE_GVAR,v,0,rb_global_entry(v))
-#define NEW_LVAR(v) NEW_NODE(NODE_LVAR,v,0,0)
-#define NEW_DVAR(v) NEW_NODE(NODE_DVAR,v,0,0)
-#define NEW_IVAR(v) NEW_NODE(NODE_IVAR,v,0,0)
-#define NEW_CONST(v) NEW_NODE(NODE_CONST,v,0,0)
-#define NEW_CVAR(v) NEW_NODE(NODE_CVAR,v,0,0)
-#define NEW_NTH_REF(n) NEW_NODE(NODE_NTH_REF,0,n,0)
-#define NEW_BACK_REF(n) NEW_NODE(NODE_BACK_REF,0,n,0)
-#define NEW_MATCH(c) NEW_NODE(NODE_MATCH,c,0,0)
-#define NEW_MATCH2(n1,n2) NEW_NODE(NODE_MATCH2,n1,n2,0)
-#define NEW_MATCH3(r,n2) NEW_NODE(NODE_MATCH3,r,n2,0)
-#define NEW_LIT(l) NEW_NODE(NODE_LIT,l,0,0)
-#define NEW_STR(s) NEW_NODE(NODE_STR,s,0,0)
-#define NEW_DSTR(s) NEW_NODE(NODE_DSTR,s,1,0)
-#define NEW_XSTR(s) NEW_NODE(NODE_XSTR,s,0,0)
-#define NEW_DXSTR(s) NEW_NODE(NODE_DXSTR,s,0,0)
-#define NEW_DSYM(s) NEW_NODE(NODE_DSYM,s,0,0)
-#define NEW_EVSTR(n) NEW_NODE(NODE_EVSTR,0,(n),0)
-#define NEW_CALL(r,m,a) NEW_NODE(NODE_CALL,r,m,a)
-#define NEW_OPCALL(r,m,a) NEW_NODE(NODE_OPCALL,r,m,a)
-#define NEW_FCALL(m,a) NEW_NODE(NODE_FCALL,0,m,a)
-#define NEW_VCALL(m) NEW_NODE(NODE_VCALL,0,m,0)
-#define NEW_SUPER(a) NEW_NODE(NODE_SUPER,0,0,a)
-#define NEW_ZSUPER() NEW_NODE(NODE_ZSUPER,0,0,0)
-#define NEW_ARGS_AUX(r,b) NEW_NODE(NODE_ARGS_AUX,r,b,0)
-#define NEW_OPT_ARG(i,v) NEW_NODE(NODE_OPT_ARG,i,v,0)
-#define NEW_KW_ARG(i,v) NEW_NODE(NODE_KW_ARG,i,v,0)
-#define NEW_POSTARG(i,v) NEW_NODE(NODE_POSTARG,i,v,0)
-#define NEW_ARGSCAT(a,b) NEW_NODE(NODE_ARGSCAT,a,b,0)
-#define NEW_ARGSPUSH(a,b) NEW_NODE(NODE_ARGSPUSH,a,b,0)
-#define NEW_SPLAT(a) NEW_NODE(NODE_SPLAT,a,0,0)
-#define NEW_BLOCK_PASS(b) NEW_NODE(NODE_BLOCK_PASS,0,b,0)
-#define NEW_ALIAS(n,o) NEW_NODE(NODE_ALIAS,n,o,0)
-#define NEW_VALIAS(n,o) NEW_NODE(NODE_VALIAS,n,o,0)
-#define NEW_UNDEF(i) NEW_NODE(NODE_UNDEF,0,i,0)
-#define NEW_CLASS(n,b,s) NEW_NODE(NODE_CLASS,n,NEW_SCOPE(0,b),(s))
-#define NEW_SCLASS(r,b) NEW_NODE(NODE_SCLASS,r,NEW_SCOPE(0,b),0)
-#define NEW_MODULE(n,b) NEW_NODE(NODE_MODULE,n,NEW_SCOPE(0,b),0)
-#define NEW_COLON2(c,i) NEW_NODE(NODE_COLON2,c,i,0)
-#define NEW_COLON3(i) NEW_NODE(NODE_COLON3,0,i,0)
-#define NEW_DOT2(b,e) NEW_NODE(NODE_DOT2,b,e,0)
-#define NEW_DOT3(b,e) NEW_NODE(NODE_DOT3,b,e,0)
-#define NEW_SELF() NEW_NODE(NODE_SELF,0,0,0)
-#define NEW_NIL() NEW_NODE(NODE_NIL,0,0,0)
-#define NEW_TRUE() NEW_NODE(NODE_TRUE,0,0,0)
-#define NEW_FALSE() NEW_NODE(NODE_FALSE,0,0,0)
-#define NEW_ERRINFO() NEW_NODE(NODE_ERRINFO,0,0,0)
-#define NEW_DEFINED(e) NEW_NODE(NODE_DEFINED,e,0,0)
-#define NEW_PREEXE(b) NEW_SCOPE(b)
-#define NEW_POSTEXE(b) NEW_NODE(NODE_POSTEXE,0,b,0)
-#define NEW_ATTRASGN(r,m,a) NEW_NODE(NODE_ATTRASGN,r,m,a)
+#define NEW_NODE(t,a0,a1,a2,loc) rb_node_newnode((t),(VALUE)(a0),(VALUE)(a1),(VALUE)(a2),loc)
+
+#define NEW_DEFN(i,a,d,loc) NEW_NODE(NODE_DEFN,0,i,NEW_SCOPE(a,d,loc),loc)
+#define NEW_DEFS(r,i,a,d,loc) NEW_NODE(NODE_DEFS,r,i,NEW_SCOPE(a,d,loc),loc)
+#define NEW_SCOPE(a,b,loc) NEW_NODE(NODE_SCOPE,local_tbl(),b,a,loc)
+#define NEW_BLOCK(a,loc) NEW_NODE(NODE_BLOCK,a,0,0,loc)
+#define NEW_IF(c,t,e,loc) NEW_NODE(NODE_IF,c,t,e,loc)
+#define NEW_UNLESS(c,t,e,loc) NEW_NODE(NODE_UNLESS,c,t,e,loc)
+#define NEW_CASE(h,b,loc) NEW_NODE(NODE_CASE,h,b,0,loc)
+#define NEW_CASE2(b,loc) NEW_NODE(NODE_CASE2,0,b,0,loc)
+#define NEW_WHEN(c,t,e,loc) NEW_NODE(NODE_WHEN,c,t,e,loc)
+#define NEW_WHILE(c,b,n,loc) NEW_NODE(NODE_WHILE,c,b,n,loc)
+#define NEW_UNTIL(c,b,n,loc) NEW_NODE(NODE_UNTIL,c,b,n,loc)
+#define NEW_FOR(v,i,b,loc) NEW_NODE(NODE_FOR,v,b,i,loc)
+#define NEW_ITER(a,b,loc) NEW_NODE(NODE_ITER,0,NEW_SCOPE(a,b,loc),0,loc)
+#define NEW_LAMBDA(a,b,loc) NEW_NODE(NODE_LAMBDA,0,NEW_SCOPE(a,b,loc),0,loc)
+#define NEW_BREAK(s,loc) NEW_NODE(NODE_BREAK,s,0,0,loc)
+#define NEW_NEXT(s,loc) NEW_NODE(NODE_NEXT,s,0,0,loc)
+#define NEW_REDO(loc) NEW_NODE(NODE_REDO,0,0,0,loc)
+#define NEW_RETRY(loc) NEW_NODE(NODE_RETRY,0,0,0,loc)
+#define NEW_BEGIN(b,loc) NEW_NODE(NODE_BEGIN,0,b,0,loc)
+#define NEW_RESCUE(b,res,e,loc) NEW_NODE(NODE_RESCUE,b,res,e,loc)
+#define NEW_RESBODY(a,ex,n,loc) NEW_NODE(NODE_RESBODY,n,ex,a,loc)
+#define NEW_ENSURE(b,en,loc) NEW_NODE(NODE_ENSURE,b,0,en,loc)
+#define NEW_RETURN(s,loc) NEW_NODE(NODE_RETURN,s,0,0,loc)
+#define NEW_YIELD(a,loc) NEW_NODE(NODE_YIELD,a,0,0,loc)
+#define NEW_LIST(a,loc) NEW_ARRAY(a,loc)
+#define NEW_ARRAY(a,loc) NEW_NODE(NODE_ARRAY,a,1,0,loc)
+#define NEW_ZARRAY(loc) NEW_NODE(NODE_ZARRAY,0,0,0,loc)
+#define NEW_HASH(a,loc) NEW_NODE(NODE_HASH,a,0,0,loc)
+#define NEW_MASGN(l,r,loc) NEW_NODE(NODE_MASGN,l,0,r,loc)
+#define NEW_GASGN(v,val,loc) NEW_NODE(NODE_GASGN,v,val,rb_global_entry(v),loc)
+#define NEW_LASGN(v,val,loc) NEW_NODE(NODE_LASGN,v,val,0,loc)
+#define NEW_DASGN(v,val,loc) NEW_NODE(NODE_DASGN,v,val,0,loc)
+#define NEW_DASGN_CURR(v,val,loc) NEW_NODE(NODE_DASGN_CURR,v,val,0,loc)
+#define NEW_IASGN(v,val,loc) NEW_NODE(NODE_IASGN,v,val,0,loc)
+#define NEW_CDECL(v,val,path,loc) NEW_NODE(NODE_CDECL,v,val,path,loc)
+#define NEW_CVASGN(v,val,loc) NEW_NODE(NODE_CVASGN,v,val,0,loc)
+#define NEW_OP_ASGN1(p,id,a,loc) NEW_NODE(NODE_OP_ASGN1,p,id,a,loc)
+#define NEW_OP_ASGN2(r,t,i,o,val,loc) NEW_NODE(NODE_OP_ASGN2,r,val,NEW_OP_ASGN22(i,o,t,loc),loc)
+#define NEW_OP_ASGN22(i,o,t,loc) NEW_NODE(NODE_OP_ASGN2,i,o,t,loc)
+#define NEW_OP_ASGN_OR(i,val,loc) NEW_NODE(NODE_OP_ASGN_OR,i,val,0,loc)
+#define NEW_OP_ASGN_AND(i,val,loc) NEW_NODE(NODE_OP_ASGN_AND,i,val,0,loc)
+#define NEW_OP_CDECL(v,op,val,loc) NEW_NODE(NODE_OP_CDECL,v,val,op,loc)
+#define NEW_GVAR(v,loc) NEW_NODE(NODE_GVAR,v,0,rb_global_entry(v),loc)
+#define NEW_LVAR(v,loc) NEW_NODE(NODE_LVAR,v,0,0,loc)
+#define NEW_DVAR(v,loc) NEW_NODE(NODE_DVAR,v,0,0,loc)
+#define NEW_IVAR(v,loc) NEW_NODE(NODE_IVAR,v,0,0,loc)
+#define NEW_CONST(v,loc) NEW_NODE(NODE_CONST,v,0,0,loc)
+#define NEW_CVAR(v,loc) NEW_NODE(NODE_CVAR,v,0,0,loc)
+#define NEW_NTH_REF(n,loc) NEW_NODE(NODE_NTH_REF,0,n,0,loc)
+#define NEW_BACK_REF(n,loc) NEW_NODE(NODE_BACK_REF,0,n,0,loc)
+#define NEW_MATCH(c,loc) NEW_NODE(NODE_MATCH,c,0,0,loc)
+#define NEW_MATCH2(n1,n2,loc) NEW_NODE(NODE_MATCH2,n1,n2,0,loc)
+#define NEW_MATCH3(r,n2,loc) NEW_NODE(NODE_MATCH3,r,n2,0,loc)
+#define NEW_LIT(l,loc) NEW_NODE(NODE_LIT,l,0,0,loc)
+#define NEW_STR(s,loc) NEW_NODE(NODE_STR,s,0,0,loc)
+#define NEW_DSTR(s,loc) NEW_NODE(NODE_DSTR,s,1,0,loc)
+#define NEW_XSTR(s,loc) NEW_NODE(NODE_XSTR,s,0,0,loc)
+#define NEW_DXSTR(s,loc) NEW_NODE(NODE_DXSTR,s,0,0,loc)
+#define NEW_DSYM(s,loc) NEW_NODE(NODE_DSYM,s,0,0,loc)
+#define NEW_EVSTR(n,loc) NEW_NODE(NODE_EVSTR,0,(n),0,loc)
+#define NEW_CALL(r,m,a,loc) NEW_NODE(NODE_CALL,r,m,a,loc)
+#define NEW_OPCALL(r,m,a,loc) NEW_NODE(NODE_OPCALL,r,m,a,loc)
+#define NEW_FCALL(m,a,loc) NEW_NODE(NODE_FCALL,0,m,a,loc)
+#define NEW_VCALL(m,loc) NEW_NODE(NODE_VCALL,0,m,0,loc)
+#define NEW_SUPER(a,loc) NEW_NODE(NODE_SUPER,0,0,a,loc)
+#define NEW_ZSUPER(loc) NEW_NODE(NODE_ZSUPER,0,0,0,loc)
+#define NEW_ARGS_AUX(r,b,loc) NEW_NODE(NODE_ARGS_AUX,r,b,0,loc)
+#define NEW_OPT_ARG(i,v,loc) NEW_NODE(NODE_OPT_ARG,i,v,0,loc)
+#define NEW_KW_ARG(i,v,loc) NEW_NODE(NODE_KW_ARG,i,v,0,loc)
+#define NEW_POSTARG(i,v,loc) NEW_NODE(NODE_POSTARG,i,v,0,loc)
+#define NEW_ARGSCAT(a,b,loc) NEW_NODE(NODE_ARGSCAT,a,b,0,loc)
+#define NEW_ARGSPUSH(a,b,loc) NEW_NODE(NODE_ARGSPUSH,a,b,0,loc)
+#define NEW_SPLAT(a,loc) NEW_NODE(NODE_SPLAT,a,0,0,loc)
+#define NEW_BLOCK_PASS(b,loc) NEW_NODE(NODE_BLOCK_PASS,0,b,0,loc)
+#define NEW_ALIAS(n,o,loc) NEW_NODE(NODE_ALIAS,n,o,0,loc)
+#define NEW_VALIAS(n,o,loc) NEW_NODE(NODE_VALIAS,n,o,0,loc)
+#define NEW_UNDEF(i,loc) NEW_NODE(NODE_UNDEF,0,i,0,loc)
+#define NEW_CLASS(n,b,s,loc) NEW_NODE(NODE_CLASS,n,NEW_SCOPE(0,b,loc),(s),loc)
+#define NEW_SCLASS(r,b,loc) NEW_NODE(NODE_SCLASS,r,NEW_SCOPE(0,b,loc),0,loc)
+#define NEW_MODULE(n,b,loc) NEW_NODE(NODE_MODULE,n,NEW_SCOPE(0,b,loc),0,loc)
+#define NEW_COLON2(c,i,loc) NEW_NODE(NODE_COLON2,c,i,0,loc)
+#define NEW_COLON3(i,loc) NEW_NODE(NODE_COLON3,0,i,0,loc)
+#define NEW_DOT2(b,e,loc) NEW_NODE(NODE_DOT2,b,e,0,loc)
+#define NEW_DOT3(b,e,loc) NEW_NODE(NODE_DOT3,b,e,0,loc)
+#define NEW_SELF(loc) NEW_NODE(NODE_SELF,0,0,0,loc)
+#define NEW_NIL(loc) NEW_NODE(NODE_NIL,0,0,0,loc)
+#define NEW_TRUE(loc) NEW_NODE(NODE_TRUE,0,0,0,loc)
+#define NEW_FALSE(loc) NEW_NODE(NODE_FALSE,0,0,0,loc)
+#define NEW_ERRINFO(loc) NEW_NODE(NODE_ERRINFO,0,0,0,loc)
+#define NEW_DEFINED(e,loc) NEW_NODE(NODE_DEFINED,e,0,0,loc)
+#define NEW_PREEXE(b,loc) NEW_SCOPE(b,loc)
+#define NEW_POSTEXE(b,loc) NEW_NODE(NODE_POSTEXE,0,b,0,loc)
+#define NEW_ATTRASGN(r,m,a,loc) NEW_NODE(NODE_ATTRASGN,r,m,a,loc)
#define NODE_SPECIAL_REQUIRED_KEYWORD ((NODE *)-1)
#define NODE_SPECIAL_NO_NAME_REST ((NODE *)-1)
diff --git a/parse.y b/parse.y
index 1e6fbf46e0..cb03b171e7 100644
--- a/parse.y
+++ b/parse.y
@@ -128,6 +128,8 @@ enum lex_state_e {
typedef VALUE stack_type;
+rb_code_range_t NULL_LOC = { {0, -1}, {0, -1} };
+
# define SHOW_BITSTACK(stack, name) (yydebug ? rb_parser_show_bitstack(parser, stack, name, __LINE__) : (void)0)
# define BITSTACK_PUSH(stack, n) (((stack) = ((stack)<<1)|((n)&1)), SHOW_BITSTACK(stack, #stack"(push)"))
# define BITSTACK_POP(stack) (((stack) = (stack) >> 1), SHOW_BITSTACK(stack, #stack"(pop)"))
@@ -347,7 +349,7 @@ static int parser_yyerror(struct parser_params*, const YYLTYPE *yylloc, const ch
#define CALL_Q_P(q) ((q) == TOKEN2VAL(tANDDOT))
#define NODE_CALL_Q(q) (CALL_Q_P(q) ? NODE_QCALL : NODE_CALL)
-#define NEW_QCALL(q,r,m,a) NEW_NODE(NODE_CALL_Q(q),r,m,a)
+#define NEW_QCALL(q,r,m,a,loc) NEW_NODE(NODE_CALL_Q(q),r,m,a,loc)
#define lambda_beginning_p() (lpar_beg && lpar_beg == paren_nest)
@@ -375,8 +377,8 @@ add_mark_object_gen(struct parser_params *parser, VALUE obj)
}
#define add_mark_object(obj) add_mark_object_gen(parser, (obj))
-static NODE* node_newnode(struct parser_params *, enum node_type, VALUE, VALUE, VALUE);
-#define rb_node_newnode(type, a1, a2, a3) node_newnode(parser, (type), (a1), (a2), (a3))
+static NODE* node_newnode(struct parser_params *, enum node_type, VALUE, VALUE, VALUE, const rb_code_range_t*);
+#define rb_node_newnode(type, a1, a2, a3, loc) node_newnode(parser, (type), (a1), (a2), (a3), (loc))
#ifndef RIPPER
static inline void
@@ -494,7 +496,7 @@ static NODE *new_const_op_assign_gen(struct parser_params *parser, NODE *lhs, ID
static NODE *const_path_field_gen(struct parser_params *parser, NODE *head, ID mid, const YYLTYPE *location);
#define const_path_field(w, n, location) const_path_field_gen(parser, w, n, location)
-#define top_const_field(n) NEW_COLON3(n)
+#define top_const_field(n,loc) NEW_COLON3(n,loc)
static NODE *const_decl_gen(struct parser_params *parser, NODE* path, const YYLTYPE *location);
#define const_decl(path, location) const_decl_gen(parser, path, location)
@@ -614,7 +616,7 @@ ripper_new_yylval_gen(struct parser_params *parser, ID a, VALUE b, VALUE c)
{
add_mark_object(b);
add_mark_object(c);
- return (VALUE)NEW_CDECL(a, b, c);
+ return (VALUE)NEW_CDECL(a, b, c, &NULL_LOC);
}
#define ripper_new_yylval(a, b, c) ripper_new_yylval_gen(parser, a, b, c)
@@ -666,7 +668,7 @@ static VALUE new_xstring_gen(struct parser_params *, VALUE);
#define new_do_body(param, stmt, location) dispatch2(do_block, escape_Qundef(param), stmt)
#define const_path_field(w, n, location) dispatch2(const_path_field, (w), (n))
-#define top_const_field(n) dispatch1(top_const_field, (n))
+#define top_const_field(n,loc) dispatch1(top_const_field, (n))
static VALUE const_decl_gen(struct parser_params *parser, VALUE path);
#define const_decl(path, location) const_decl_gen(parser, path)
@@ -888,7 +890,7 @@ new_args_gen(struct parser_params *parser, VALUE f, VALUE o, VALUE r, VALUE p, V
static inline VALUE
new_args_tail_gen(struct parser_params *parser, VALUE k, VALUE kr, VALUE b)
{
- NODE *t = rb_node_newnode(NODE_ARGS_AUX, k, kr, b);
+ NODE *t = rb_node_newnode(NODE_ARGS_AUX, k, kr, b, &NULL_LOC);
add_mark_object(k);
add_mark_object(kr);
add_mark_object(b);
@@ -1272,12 +1274,10 @@ bodystmt : compstmt
}
if ($4) {
if ($$) {
- $$ = NEW_ENSURE($$, $4);
- $$->nd_loc = @$;
+ $$ = NEW_ENSURE($$, $4, &@$);
}
else {
- NODE *nil = NEW_NIL();
- nil->nd_loc = @$;
+ NODE *nil = NEW_NIL(&@$);
$$ = block_append($4, nil, &@$);
}
}
@@ -1362,8 +1362,7 @@ stmt_or_begin : stmt
stmt : keyword_alias fitem {SET_LEX_STATE(EXPR_FNAME|EXPR_FITEM);} fitem
{
/*%%%*/
- $$ = NEW_ALIAS($2, $4);
- $$->nd_loc = @$;
+ $$ = NEW_ALIAS($2, $4, &@$);
/*%
$$ = dispatch2(alias, $2, $4);
%*/
@@ -1371,8 +1370,7 @@ stmt : keyword_alias fitem {SET_LEX_STATE(EXPR_FNAME|EXPR_FITEM);} fitem
| keyword_alias tGVAR tGVAR
{
/*%%%*/
- $$ = NEW_VALIAS($2, $3);
- $$->nd_loc = @$;
+ $$ = NEW_VALIAS($2, $3, &@$);
/*%
$$ = dispatch2(var_alias, $2, $3);
%*/
@@ -1383,8 +1381,7 @@ stmt : keyword_alias fitem {SET_LEX_STATE(EXPR_FNAME|EXPR_FITEM);} fitem
char buf[2];
buf[0] = '$';
buf[1] = (char)$3->nd_nth;
- $$ = NEW_VALIAS($2, rb_intern2(buf, 2));
- $$->nd_loc = @$;
+ $$ = NEW_VALIAS($2, rb_intern2(buf, 2), &@$);
/*%
$$ = dispatch2(var_alias, $2, $3);
%*/
@@ -1430,12 +1427,11 @@ stmt : keyword_alias fitem {SET_LEX_STATE(EXPR_FNAME|EXPR_FITEM);} fitem
{
/*%%%*/
if ($1 && nd_type($1) == NODE_BEGIN) {
- $$ = NEW_WHILE(cond($3, &@3), $1->nd_body, 0);
+ $$ = NEW_WHILE(cond($3, &@3), $1->nd_body, 0, &@$);
}
else {
- $$ = NEW_WHILE(cond($3, &@3), $1, 1);
+ $$ = NEW_WHILE(cond($3, &@3), $1, 1, &@$);
}
- $$->nd_loc = @$;
/*%
$$ = dispatch2(while_mod, $3, $1);
%*/
@@ -1444,12 +1440,11 @@ stmt : keyword_alias fitem {SET_LEX_STATE(EXPR_FNAME|EXPR_FITEM);} fitem
{
/*%%%*/
if ($1 && nd_type($1) == NODE_BEGIN) {
- $$ = NEW_UNTIL(cond($3, &@3), $1->nd_body, 0);
+ $$ = NEW_UNTIL(cond($3, &@3), $1->nd_body, 0, &@$);
}
else {
- $$ = NEW_UNTIL(cond($3, &@3), $1, 1);
+ $$ = NEW_UNTIL(cond($3, &@3), $1, 1, &@$);
}
- $$->nd_loc = @$;
/*%
$$ = dispatch2(until_mod, $3, $1);
%*/
@@ -1475,10 +1470,8 @@ stmt : keyword_alias fitem {SET_LEX_STATE(EXPR_FNAME|EXPR_FITEM);} fitem
/*%%%*/
{
NODE *scope = NEW_NODE(
- NODE_SCOPE, 0 /* tbl */, $3 /* body */, 0 /* args */);
- $$ = NEW_POSTEXE(scope);
- scope->nd_loc = @$;
- $$->nd_loc = @$;
+ NODE_SCOPE, 0 /* tbl */, $3 /* body */, 0 /* args */, &@$);
+ $$ = NEW_POSTEXE(scope, &@$);
}
/*%
$$ = dispatch1(END, $3);
@@ -1534,9 +1527,8 @@ command_asgn : lhs '=' command_rhs
else if ($5 == tANDOP) {
$5 = 1;
}
- $$ = NEW_OP_ASGN1($1, $5, args);
+ $$ = NEW_OP_ASGN1($1, $5, args, &@$);
fixpos($$, $1);
- $$->nd_loc = @$;
/*%
$$ = dispatch2(aref_field, $1, escape_Qundef($3));
$$ = dispatch3(opassign, $$, $5, $6);
@@ -1623,7 +1615,7 @@ expr_value : expr
/*%%%*/
value_expr($1);
$$ = $1;
- if (!$$) $$ = NEW_NIL();
+ if (!$$) $$ = NEW_NIL(&@$);
/*%
$$ = $1;
%*/
@@ -1717,9 +1709,8 @@ command : fcall command_args %prec tLOWEST
| keyword_super command_args
{
/*%%%*/
- $$ = NEW_SUPER($2);
+ $$ = NEW_SUPER($2, &@$);
fixpos($$, $2);
- $$->nd_loc = @$;
/*%
$$ = dispatch1(super, $2);
%*/
@@ -1736,8 +1727,7 @@ command : fcall command_args %prec tLOWEST
| k_return call_args
{
/*%%%*/
- $$ = NEW_RETURN(ret_args($2));
- $$->nd_loc = @$;
+ $$ = NEW_RETURN(ret_args($2), &@$);
/*%
$$ = dispatch1(return, $2);
%*/
@@ -1745,8 +1735,7 @@ command : fcall command_args %prec tLOWEST
| keyword_break call_args
{
/*%%%*/
- $$ = NEW_BREAK(ret_args($2));
- $$->nd_loc = @$;
+ $$ = NEW_BREAK(ret_args($2), &@$);
/*%
$$ = dispatch1(break, $2);
%*/
@@ -1754,8 +1743,7 @@ command : fcall command_args %prec tLOWEST
| keyword_next call_args
{
/*%%%*/
- $$ = NEW_NEXT(ret_args($2));
- $$->nd_loc = @$;
+ $$ = NEW_NEXT(ret_args($2), &@$);
/*%
$$ = dispatch1(next, $2);
%*/
@@ -1963,7 +1951,7 @@ mlhs_node : user_variable
}
| tCOLON3 tCONSTANT
{
- $$ = const_decl(top_const_field($2), &@$);
+ $$ = const_decl(top_const_field($2, &@$), &@$);
}
| backref
{
@@ -2018,7 +2006,7 @@ lhs : user_variable
}
| tCOLON3 tCONSTANT
{
- $$ = const_decl(top_const_field($2), &@$);
+ $$ = const_decl(top_const_field($2, &@$), &@$);
}
| backref
{
@@ -2042,8 +2030,7 @@ cname : tIDENTIFIER
cpath : tCOLON3 cname
{
/*%%%*/
- $$ = NEW_COLON3($2);
- $$->nd_loc = @$;
+ $$ = NEW_COLON3($2, &@$);
/*%
$$ = dispatch1(top_const_ref, $2);
%*/
@@ -2051,8 +2038,7 @@ cpath : tCOLON3 cname
| cname
{
/*%%%*/
- $$ = NEW_COLON2(0, $$);
- $$->nd_loc = @$;
+ $$ = NEW_COLON2(0, $$, &@$);
/*%
$$ = dispatch1(const_ref, $1);
%*/
@@ -2060,8 +2046,7 @@ cpath : tCOLON3 cname
| primary_value tCOLON2 cname
{
/*%%%*/
- $$ = NEW_COLON2($1, $3);
- $$->nd_loc = @$;
+ $$ = NEW_COLON2($1, $3, &@$);
/*%
$$ = dispatch2(const_path_ref, $1, $3);
%*/
@@ -2179,8 +2164,7 @@ arg : lhs '=' arg_rhs
value_expr($6);
$3 = make_array($3, &@3);
if (nd_type($3) == NODE_BLOCK_PASS) {
- args = NEW_ARGSCAT($3, $6);
- args->nd_loc = @$;
+ args = NEW_ARGSCAT($3, $6, &@$);
}
else {
args = arg_concat($3, $6, &@$);
@@ -2191,9 +2175,8 @@ arg : lhs '=' arg_rhs
else if ($5 == tANDOP) {
$5 = 1;
}
- $$ = NEW_OP_ASGN1($1, $5, args);
+ $$ = NEW_OP_ASGN1($1, $5, args, &@$);
fixpos($$, $1);
- $$->nd_loc = @$;
/*%
$1 = dispatch2(aref_field, $1, escape_Qundef($3));
$$ = dispatch3(opassign, $1, $5, $6);
@@ -2227,7 +2210,7 @@ arg : lhs '=' arg_rhs
}
| tCOLON3 tCONSTANT tOP_ASGN arg_rhs
{
- $$ = top_const_field($2);
+ $$ = top_const_field($2, &@$);
$$ = new_const_op_assign($$, $3, $4, &@$);
}
| backref tOP_ASGN arg_rhs
@@ -2240,8 +2223,7 @@ arg : lhs '=' arg_rhs
/*%%%*/
value_expr($1);
value_expr($3);
- $$ = NEW_DOT2($1, $3);
- $$->nd_loc = @$;
+ $$ = NEW_DOT2($1, $3, &@$);
/*%
$$ = dispatch2(dot2, $1, $3);
%*/
@@ -2251,8 +2233,7 @@ arg : lhs '=' arg_rhs
/*%%%*/
value_expr($1);
value_expr($3);
- $$ = NEW_DOT3($1, $3);
- $$->nd_loc = @$;
+ $$ = NEW_DOT3($1, $3, &@$);
/*%
$$ = dispatch2(dot3, $1, $3);
%*/
@@ -2397,7 +2378,7 @@ arg_value : arg
/*%%%*/
value_expr($1);
$$ = $1;
- if (!$$) $$ = NEW_NIL();
+ if (!$$) $$ = NEW_NIL(&@$);
/*%
$$ = $1;
%*/
@@ -2547,8 +2528,7 @@ command_args : {
block_arg : tAMPER arg_value
{
/*%%%*/
- $$ = NEW_BLOCK_PASS($2);
- $$->nd_loc = @$;
+ $$ = NEW_BLOCK_PASS($2, &@$);
/*%
$$ = $2;
%*/
@@ -2576,8 +2556,7 @@ args : arg_value
| tSTAR arg_value
{
/*%%%*/
- $$ = NEW_SPLAT($2);
- $$->nd_loc = @$;
+ $$ = NEW_SPLAT($2, &@$);
/*%
$$ = arg_add_star(arg_new(), $2);
%*/
@@ -2648,8 +2627,7 @@ mrhs : args ',' arg_value
| tSTAR arg_value
{
/*%%%*/
- $$ = NEW_SPLAT($2);
- $$->nd_loc = @$;
+ $$ = NEW_SPLAT($2, &@$);
/*%
$$ = mrhs_add_star(mrhs_new(), $2);
%*/
@@ -2689,8 +2667,7 @@ primary : literal
CMDARG_SET($<val>1);
/*%%%*/
if ($3 == NULL) {
- $$ = NEW_NIL();
- $$->nd_loc = @$;
+ $$ = NEW_NIL(&@$);
}
else {
set_line_body($3, $<num>2);
@@ -2734,8 +2711,7 @@ primary : literal
| primary_value tCOLON2 tCONSTANT
{
/*%%%*/
- $$ = NEW_COLON2($1, $3);
- $$->nd_loc = @$;
+ $$ = NEW_COLON2($1, $3, &@$);
/*%
$$ = dispatch2(const_path_ref, $1, $3);
%*/
@@ -2743,8 +2719,7 @@ primary : literal
| tCOLON3 tCONSTANT
{
/*%%%*/
- $$ = NEW_COLON3($2);
- $$->nd_loc = @$;
+ $$ = NEW_COLON3($2, &@$);
/*%
$$ = dispatch1(top_const_ref, $2);
%*/
@@ -2769,8 +2744,7 @@ primary : literal
| k_return
{
/*%%%*/
- $$ = NEW_RETURN(0);
- $$->nd_loc = @$;
+ $$ = NEW_RETURN(0, &@$);
/*%
$$ = dispatch0(return0);
%*/
@@ -2786,8 +2760,7 @@ primary : literal
| keyword_yield '(' rparen
{
/*%%%*/
- $$ = NEW_YIELD(0);
- $$->nd_loc = @$;
+ $$ = NEW_YIELD(0, &@$);
/*%
$$ = dispatch1(yield, dispatch1(paren, arg_new()));
%*/
@@ -2795,8 +2768,7 @@ primary : literal
| keyword_yield
{
/*%%%*/
- $$ = NEW_YIELD(0);
- $$->nd_loc = @$;
+ $$ = NEW_YIELD(0, &@$);
/*%
$$ = dispatch0(yield0);
%*/
@@ -2866,9 +2838,8 @@ primary : literal
k_end
{
/*%%%*/
- $$ = NEW_WHILE(cond($3, &@3), $6, 1);
+ $$ = NEW_WHILE(cond($3, &@3), $6, 1, &@$);
fixpos($$, $3);
- $$->nd_loc = @$;
/*%
$$ = dispatch2(while, $3, $6);
%*/
@@ -2878,9 +2849,8 @@ primary : literal
k_end
{
/*%%%*/
- $$ = NEW_UNTIL(cond($3, &@3), $6, 1);
+ $$ = NEW_UNTIL(cond($3, &@3), $6, 1, &@$);
fixpos($$, $3);
- $$->nd_loc = @$;
/*%
$$ = dispatch2(until, $3, $6);
%*/
@@ -2890,9 +2860,8 @@ primary : literal
k_end
{
/*%%%*/
- $$ = NEW_CASE($2, $4);
+ $$ = NEW_CASE($2, $4, &@$);
fixpos($$, $2);
- $$->nd_loc = @$;
/*%
$$ = dispatch2(case, $2, $4);
%*/
@@ -2900,7 +2869,7 @@ primary : literal
| k_case opt_terms case_body k_end
{
/*%%%*/
- $$ = NEW_CASE2($3);
+ $$ = NEW_CASE2($3, &@$);
nd_set_line($$, $<num>1);
$$->nd_loc = @$;
/*%
@@ -2926,7 +2895,7 @@ primary : literal
*/
ID id = internal_id();
ID *tbl = ALLOC_N(ID, 2);
- NODE *m = NEW_ARGS_AUX(0, 0);
+ NODE *m = NEW_ARGS_AUX(0, 0, &NULL_LOC);
NODE *args, *scope;
switch (nd_type($2)) {
@@ -2951,8 +2920,7 @@ primary : literal
}
}
add_mark_object((VALUE)rb_imemo_alloc_new((VALUE)tbl, 0, 0, 0));
- scope = NEW_NODE(NODE_SCOPE, tbl, $8, args);
- scope->nd_loc = @$;
+ scope = NEW_NODE(NODE_SCOPE, tbl, $8, args, &@$);
tbl[0] = 1; tbl[1] = id;
$$ = new_for(0, $5, scope, &@$);
fixpos($$, $2);
@@ -2980,11 +2948,10 @@ primary : literal
k_end
{
/*%%%*/
- $$ = NEW_CLASS($2, $5, $3);
+ $$ = NEW_CLASS($2, $5, $3, &@$);
$$->nd_body->nd_loc = @$;
set_line_body($5, $<num>4);
nd_set_line($$, $<num>4);
- $$->nd_loc = @$;
/*%
$$ = dispatch3(class, $2, $3, $5);
%*/
@@ -3003,11 +2970,10 @@ primary : literal
k_end
{
/*%%%*/
- $$ = NEW_SCLASS($3, $6);
+ $$ = NEW_SCLASS($3, $6, &@$);
$$->nd_body->nd_loc = @$;
set_line_body($6, nd_line($3));
fixpos($$, $3);
- $$->nd_loc = @$;
/*%
$$ = dispatch2(sclass, $3, $6);
%*/
@@ -3035,11 +3001,10 @@ primary : literal
k_end
{
/*%%%*/
- $$ = NEW_MODULE($2, $4);
+ $$ = NEW_MODULE($2, $4, &@$);
$$->nd_body->nd_loc = @$;
set_line_body($4, $<num>3);
nd_set_line($$, $<num>3);
- $$->nd_loc = @$;
/*%
$$ = dispatch2(module, $2, $4);
%*/
@@ -3063,11 +3028,10 @@ primary : literal
/*%%%*/
NODE *body = remove_begin($6);
reduce_nodes(&body);
- $$ = NEW_DEFN($2, $5, body);
+ $$ = NEW_DEFN($2, $5, body, &@$);
$$->nd_defn->nd_loc = @$;
set_line_body(body, $<num>1);
nd_set_line($$, $<num>1);
- $$->nd_loc = @$;
/*%
$$ = dispatch3(def, $2, $5, $6);
%*/
@@ -3091,11 +3055,10 @@ primary : literal
/*%%%*/
NODE *body = remove_begin($8);
reduce_nodes(&body);
- $$ = NEW_DEFS($2, $5, $7, body);
+ $$ = NEW_DEFS($2, $5, $7, body, &@$);
$$->nd_defn->nd_loc = @$;
set_line_body(body, $<num>1);
nd_set_line($$, $<num>1);
- $$->nd_loc = @$;
/*%
$$ = dispatch5(defs, $2, $<val>3, $5, $7, $8);
%*/
@@ -3106,8 +3069,7 @@ primary : literal
| keyword_break
{
/*%%%*/
- $$ = NEW_BREAK(0);
- $$->nd_loc = @$;
+ $$ = NEW_BREAK(0, &@$);
/*%
$$ = dispatch1(break, arg_new());
%*/
@@ -3115,8 +3077,7 @@ primary : literal
| keyword_next
{
/*%%%*/
- $$ = NEW_NEXT(0);
- $$->nd_loc = @$;
+ $$ = NEW_NEXT(0, &@$);
/*%
$$ = dispatch1(next, arg_new());
%*/
@@ -3124,8 +3085,7 @@ primary : literal
| keyword_redo
{
/*%%%*/
- $$ = NEW_REDO();
- $$->nd_loc = @$;
+ $$ = NEW_REDO(&@$);
/*%
$$ = dispatch0(redo);
%*/
@@ -3133,8 +3093,7 @@ primary : literal
| keyword_retry
{
/*%%%*/
- $$ = NEW_RETRY();
- $$->nd_loc = @$;
+ $$ = NEW_RETRY(&@$);
/*%
$$ = dispatch0(retry);
%*/
@@ -3146,7 +3105,7 @@ primary_value : primary
/*%%%*/
value_expr($1);
$$ = $1;
- if (!$$) $$ = NEW_NIL();
+ if (!$$) $$ = NEW_NIL(&@$);
/*%
$$ = $1;
%*/
@@ -3599,9 +3558,8 @@ lambda : {
CMDARG_SET($<val>5);
CMDARG_LEXPOP();
/*%%%*/
- $$ = NEW_LAMBDA($3, $6);
+ $$ = NEW_LAMBDA($3, $6, &@$);
nd_set_line($$, $<num>4);
- $$->nd_loc = @$;
$$->nd_body->nd_loc = @$;
/*%
$$ = dispatch2(lambda, $3, $6);
@@ -3758,8 +3716,7 @@ method_call : fcall paren_args
| keyword_super paren_args
{
/*%%%*/
- $$ = NEW_SUPER($2);
- $$->nd_loc = @$;
+ $$ = NEW_SUPER($2, &@$);
/*%
$$ = dispatch1(super, $2);
%*/
@@ -3767,8 +3724,7 @@ method_call : fcall paren_args
| keyword_super
{
/*%%%*/
- $$ = NEW_ZSUPER();
- $$->nd_loc = @$;
+ $$ = NEW_ZSUPER(&@$);
/*%
$$ = dispatch0(zsuper);
%*/
@@ -3844,7 +3800,7 @@ case_body : keyword_when args then
cases
{
/*%%%*/
- $$ = NEW_WHEN($2, $4, $5);
+ $$ = NEW_WHEN($2, $4, $5, &@$);
fixpos($$, $2);
$$->nd_loc = @$;
/*%
@@ -4235,8 +4191,7 @@ string_content : tSTRING_CONTENT
{
lex_strterm = $<strterm>2;
/*%%%*/
- $$ = NEW_EVSTR($3);
- $$->nd_loc = @$;
+ $$ = NEW_EVSTR($3, &@$);
/*%
$$ = dispatch1(string_dvar, $3);
%*/
@@ -4302,8 +4257,7 @@ string_dvar : tGVAR
| tCVAR
{
/*%%%*/
- $$ = NEW_CVAR($1);
- $$->nd_loc = @$;
+ $$ = NEW_CVAR($1, &@$);
/*%
$$ = dispatch1(var_ref, $1);
%*/
@@ -4643,7 +4597,7 @@ f_arg_item : f_arg_asgn
{
current_arg = 0;
/*%%%*/
- $$ = NEW_ARGS_AUX($1, 1);
+ $$ = NEW_ARGS_AUX($1, 1, &NULL_LOC);
/*%
$$ = get_value($1);
%*/
@@ -4665,7 +4619,7 @@ f_arg_item : f_arg_asgn
else {
$2->nd_value = new_lvar(tid, &location);
}
- $$ = NEW_ARGS_AUX(tid, 1);
+ $$ = NEW_ARGS_AUX(tid, 1, &NULL_LOC);
$$->nd_next = $2;
/*%
$$ = dispatch1(mlhs_paren, $2);
@@ -4811,8 +4765,7 @@ f_opt : f_arg_asgn '=' arg_value
current_arg = 0;
$$ = assignable($1, $3, &@$);
/*%%%*/
- $$ = NEW_OPT_ARG(0, $$);
- $$->nd_loc = @$;
+ $$ = NEW_OPT_ARG(0, $$, &@$);
/*%
$$ = rb_assoc_new(get_value($$), get_value($3));
%*/
@@ -4824,8 +4777,7 @@ f_block_opt : f_arg_asgn '=' primary_value
current_arg = 0;
$$ = assignable($1, $3, &@$);
/*%%%*/
- $$ = NEW_OPT_ARG(0, $$);
- $$->nd_loc = @$;
+ $$ = NEW_OPT_ARG(0, $$, &@$);
/*%
$$ = rb_assoc_new(get_value($$), get_value($3));
%*/
@@ -4936,7 +4888,7 @@ singleton : var_ref
/*%%%*/
value_expr($1);
$$ = $1;
- if (!$$) $$ = NEW_NIL();
+ if (!$$) $$ = NEW_NIL(&@$);
/*%
$$ = $1;
%*/
@@ -5161,11 +5113,11 @@ static enum yytokentype parser_here_document(struct parser_params*,rb_strterm_he
# define set_integer_literal(v, f) parser_set_integer_literal(parser, (v), (f))
#ifndef RIPPER
-# define set_yylval_str(x) (yylval.node = NEW_STR(x))
+# define set_yylval_str(x) (yylval.node = NEW_STR(x, &NULL_LOC))
# define set_yylval_num(x) (yylval.num = (x))
# define set_yylval_id(x) (yylval.id = (x))
# define set_yylval_name(x) (yylval.id = (x))
-# define set_yylval_literal(x) (yylval.node = NEW_LIT(x))
+# define set_yylval_literal(x) (yylval.node = NEW_LIT(x, &NULL_LOC))
# define set_yylval_node(x) (yylval.node = (x))
# define yylval_id() (yylval.id)
#else
@@ -5633,7 +5585,7 @@ yycompile0(VALUE arg)
}
tree = ruby_eval_tree;
if (!tree) {
- tree = NEW_NIL();
+ tree = NEW_NIL(&NULL_LOC);
}
else {
VALUE opt = parser->compile_option;
@@ -8102,7 +8054,7 @@ parse_gvar(struct parser_params *parser, const enum lex_state_e last_state)
tokadd(c);
goto gvar;
}
- set_yylval_node(NEW_BACK_REF(c));
+ set_yylval_node(NEW_BACK_REF(c, &NULL_LOC));
return tBACK_REF;
case '1': case '2': case '3':
@@ -8116,7 +8068,7 @@ parse_gvar(struct parser_params *parser, const enum lex_state_e last_state)
pushback(c);
if (IS_lex_state_for(last_state, EXPR_FNAME)) goto gvar;
tokfix();
- set_yylval_node(NEW_NTH_REF(parse_numvar(parser)));
+ set_yylval_node(NEW_NTH_REF(parse_numvar(parser), &NULL_LOC));
return tNTH_REF;
default:
@@ -8962,18 +8914,14 @@ yylex(YYSTYPE *lval, YYLTYPE *yylloc, struct parser_params *parser)
#define LVAR_USED ((ID)1 << (sizeof(ID) * CHAR_BIT - 1))
static NODE*
-node_newnode(struct parser_params *parser, enum node_type type, VALUE a0, VALUE a1, VALUE a2)
+node_newnode(struct parser_params *parser, enum node_type type, VALUE a0, VALUE a1, VALUE a2, const rb_code_range_t *loc)
{
NODE *n = rb_ast_newnode(parser->ast);
rb_node_init(n, type, a0, a1, a2);
nd_set_line(n, ruby_sourceline);
- /* mark not cared lineno to 0 and column to -1 */
- nd_set_first_lineno(n, 0);
- nd_set_first_column(n, -1);
- nd_set_last_lineno(n, 0);
- nd_set_last_column(n, -1);
+ n->nd_loc = *loc;
return n;
}
@@ -9048,9 +8996,9 @@ block_append_gen(struct parser_params *parser, NODE *head, NODE *tail, const YYL
parser_warning(h, "unused literal ignored");
return tail;
default:
- h = end = NEW_BLOCK(head);
+ h = end = NEW_BLOCK(head, location);
end->nd_end = end;
- nd_set_loc(end, location);
+ nd_set_line(end, location->first_loc.lineno);
head = end;
break;
case NODE_BLOCK:
@@ -9075,8 +9023,8 @@ block_append_gen(struct parser_params *parser, NODE *head, NODE *tail, const YYL
}
if (nd_type(tail) != NODE_BLOCK) {
- tail = NEW_BLOCK(tail);
- nd_set_loc(tail, location);
+ tail = NEW_BLOCK(tail, location);
+ nd_set_line(tail, location->first_loc.lineno);
tail->nd_end = tail;
}
end->nd_next = tail;
@@ -9264,8 +9212,8 @@ new_evstr_gen(struct parser_params *parser, NODE *node, const YYLTYPE *location)
return node;
}
}
- evstr = NEW_EVSTR(head);
- nd_set_loc(evstr, location);
+ evstr = NEW_EVSTR(head, location);
+ nd_set_line(evstr, location->first_loc.lineno);
return evstr;
}
@@ -9276,9 +9224,8 @@ call_bin_op_gen(struct parser_params *parser, NODE *recv, ID id, NODE *arg1,
NODE *expr;
value_expr(recv);
value_expr(arg1);
- expr = NEW_OPCALL(recv, id, new_list(arg1, &arg1->nd_loc));
+ expr = NEW_OPCALL(recv, id, new_list(arg1, &arg1->nd_loc), location);
nd_set_line(expr, op_loc->first_loc.lineno);
- expr->nd_loc = *location;
return expr;
}
@@ -9287,8 +9234,7 @@ call_uni_op_gen(struct parser_params *parser, NODE *recv, ID id, const YYLTYPE *
{
NODE *opcall;
value_expr(recv);
- opcall = NEW_OPCALL(recv, id, 0);
- opcall->nd_loc = *location;
+ opcall = NEW_OPCALL(recv, id, 0, location);
nd_set_line(opcall, op_loc->first_loc.lineno);
return opcall;
}
@@ -9296,8 +9242,7 @@ call_uni_op_gen(struct parser_params *parser, NODE *recv, ID id, const YYLTYPE *
static NODE *
new_qcall_gen(struct parser_params* parser, ID atype, NODE *recv, ID mid, NODE *args, const YYLTYPE *op_loc, const YYLTYPE *location)
{
- NODE *qcall = NEW_QCALL(atype, recv, mid, args);
- qcall->nd_loc = *location;
+ NODE *qcall = NEW_QCALL(atype, recv, mid, args, location);
nd_set_line(qcall, op_loc->first_loc.lineno);
return qcall;
}
@@ -9315,8 +9260,7 @@ match_op_gen(struct parser_params *parser, NODE *node1, NODE *node2, const YYLTY
switch (nd_type(n)) {
case NODE_DREGX:
{
- NODE *match = NEW_MATCH2(node1, node2);
- match->nd_loc = *location;
+ NODE *match = NEW_MATCH2(node1, node2, location);
nd_set_line(match, line);
return match;
}
@@ -9324,9 +9268,8 @@ match_op_gen(struct parser_params *parser, NODE *node1, NODE *node2, const YYLTY
case NODE_LIT:
if (RB_TYPE_P(n->nd_lit, T_REGEXP)) {
const VALUE lit = n->nd_lit;
- NODE *match = NEW_MATCH2(node1, node2);
+ NODE *match = NEW_MATCH2(node1, node2, location);
match->nd_args = reg_named_capture_assign(lit, location);
- match->nd_loc = *location;
nd_set_line(match, line);
return match;
}
@@ -9341,8 +9284,7 @@ match_op_gen(struct parser_params *parser, NODE *node1, NODE *node2, const YYLTY
if (!RB_TYPE_P(n->nd_lit, T_REGEXP)) break;
/* fallthru */
case NODE_DREGX:
- match3 = NEW_MATCH3(node2, node1);
- match3->nd_loc = *location;
+ match3 = NEW_MATCH3(node2, node1, location);
nd_set_line(match3, line);
return match3;
}
@@ -9380,20 +9322,20 @@ gettable_gen(struct parser_params *parser, ID id, const YYLTYPE *location)
NODE *node;
switch (id) {
case keyword_self:
- node = NEW_SELF();
- nd_set_loc(node, location);
+ node = NEW_SELF(location);
+ nd_set_line(node, location->first_loc.lineno);
return node;
case keyword_nil:
- node = NEW_NIL();
- nd_set_loc(node, location);
+ node = NEW_NIL(location);
+ nd_set_line(node, location->first_loc.lineno);
return node;
case keyword_true:
- node = NEW_TRUE();
- nd_set_loc(node, location);
+ node = NEW_TRUE(location);
+ nd_set_line(node, location->first_loc.lineno);
return node;
case keyword_false:
- node = NEW_FALSE();
- nd_set_loc(node, location);
+ node = NEW_FALSE(location);
+ nd_set_line(node, location->first_loc.lineno);
return node;
case keyword__FILE__:
WARN_LOCATION("__FILE__");
@@ -9429,8 +9371,8 @@ gettable_gen(struct parser_params *parser, ID id, const YYLTYPE *location)
}
# endif
/* method call without arguments */
- node = NEW_VCALL(id);
- nd_set_loc(node, location);
+ node = NEW_VCALL(id, location);
+ nd_set_line(node, location->first_loc.lineno);
return node;
case ID_GLOBAL:
node = new_gvar(id, location);
@@ -9439,12 +9381,12 @@ gettable_gen(struct parser_params *parser, ID id, const YYLTYPE *location)
node = new_ivar(id, location);
return node;
case ID_CONST:
- node = NEW_CONST(id);
- nd_set_loc(node, location);
+ node = NEW_CONST(id, location);
+ nd_set_line(node, location->first_loc.lineno);
return node;
case ID_CLASS:
- node = NEW_CVAR(id);
- nd_set_loc(node, location);
+ node = NEW_CVAR(id, location);
+ nd_set_line(node, location->first_loc.lineno);
return node;
}
compile_error(PARSER_ARG "identifier %"PRIsVALUE" is not valid to get", rb_id2str(id));
@@ -9484,8 +9426,8 @@ kwd_append(NODE *kwlist, NODE *kw)
static NODE *
new_defined_gen(struct parser_params *parser, NODE *expr, const YYLTYPE *location)
{
- NODE *defined = NEW_DEFINED(remove_begin_all(expr));
- nd_set_loc(defined, location);
+ NODE *defined = NEW_DEFINED(remove_begin_all(expr),location);
+ nd_set_line(defined, location->first_loc.lineno);
return defined;
}
@@ -9509,7 +9451,7 @@ new_regexp_gen(struct parser_params *parser, NODE *node, int options, const YYLT
break;
default:
add_mark_object(lit = STR_NEW0());
- node = NEW_NODE(NODE_DSTR, lit, 1, new_list(node, location));
+ node = NEW_NODE(NODE_DSTR, lit, 1, new_list(node, location), location);
case NODE_DSTR:
nd_set_type(node, NODE_DREGX);
nd_set_loc(node, location);
@@ -9544,8 +9486,8 @@ new_regexp_gen(struct parser_params *parser, NODE *node, int options, const YYLT
add_mark_object(node->nd_lit = reg_compile(src, options));
}
if (options & RE_OPTION_ONCE) {
- node = NEW_NODE(NODE_ONCE, 0, node, 0);
- nd_set_loc(node, location);
+ node = NEW_NODE(NODE_ONCE, 0, node, 0, location);
+ nd_set_line(node, location->first_loc.lineno);
}
break;
}
@@ -9555,171 +9497,171 @@ new_regexp_gen(struct parser_params *parser, NODE *node, int options, const YYLT
static NODE *
new_lit_gen(struct parser_params *parser, VALUE sym, const YYLTYPE *location)
{
- NODE *lit = NEW_LIT(sym);
+ NODE *lit = NEW_LIT(sym, location);
add_mark_object(sym);
- nd_set_loc(lit, location);
+ nd_set_line(lit, location->first_loc.lineno);
return lit;
}
static NODE *
new_list_gen(struct parser_params *parser, NODE *item, const YYLTYPE *location)
{
- NODE *list = NEW_LIST(item);
- nd_set_loc(list, location);
+ NODE *list = NEW_LIST(item, location);
+ nd_set_line(list, location->first_loc.lineno);
return list;
}
static NODE *
new_str_gen(struct parser_params *parser, VALUE str, const YYLTYPE *location)
{
- NODE *nd_str = NEW_STR(str);
+ NODE *nd_str = NEW_STR(str, location);
add_mark_object(str);
- nd_set_loc(nd_str, location);
+ nd_set_line(nd_str, location->first_loc.lineno);
return nd_str;
}
static NODE *
new_dvar_gen(struct parser_params *parser, ID id, const YYLTYPE *location)
{
- NODE *dvar = NEW_DVAR(id);
- nd_set_loc(dvar, location);
+ NODE *dvar = NEW_DVAR(id, location);
+ nd_set_line(dvar, location->first_loc.lineno);
return dvar;
}
static NODE *
new_resbody_gen(struct parser_params *parser, NODE *exc_list, NODE *stmt, NODE *rescue, const YYLTYPE *location)
{
- NODE *resbody = NEW_RESBODY(exc_list, stmt, rescue);
- nd_set_loc(resbody, location);
+ NODE *resbody = NEW_RESBODY(exc_list, stmt, rescue, location);
+ nd_set_line(resbody, location->first_loc.lineno);
return resbody;
}
static NODE *
new_errinfo_gen(struct parser_params *parser, const YYLTYPE *location)
{
- NODE *errinfo = NEW_ERRINFO();
- nd_set_loc(errinfo, location);
+ NODE *errinfo = NEW_ERRINFO(location);
+ nd_set_line(errinfo, location->first_loc.lineno);
return errinfo;
}
static NODE *
new_call_gen(struct parser_params *parser, NODE *recv, ID mid, NODE *args, const YYLTYPE *location)
{
- NODE *call = NEW_CALL(recv, mid, args);
- nd_set_loc(call, location);
+ NODE *call = NEW_CALL(recv, mid, args, location);
+ nd_set_line(call, location->first_loc.lineno);
return call;
}
static NODE *
new_fcall_gen(struct parser_params *parser, ID mid, NODE *args, const YYLTYPE *location)
{
- NODE *fcall = NEW_FCALL(mid, args);
- nd_set_loc(fcall, location);
+ NODE *fcall = NEW_FCALL(mid, args, location);
+ nd_set_line(fcall, location->first_loc.lineno);
return fcall;
}
static NODE *
new_for_gen(struct parser_params *parser, NODE *var, NODE *iter, NODE *body, const YYLTYPE *location)
{
- NODE *nd_for = NEW_FOR(var, iter, body);
- nd_set_loc(nd_for, location);
+ NODE *nd_for = NEW_FOR(var, iter, body, location);
+ nd_set_line(nd_for, location->first_loc.lineno);
return nd_for;
}
static NODE *
new_gvar_gen(struct parser_params *parser, ID id, const YYLTYPE *location)
{
- NODE *gvar = NEW_GVAR(id);
- nd_set_loc(gvar, location);
+ NODE *gvar = NEW_GVAR(id, location);
+ nd_set_line(gvar, location->first_loc.lineno);
return gvar;
}
static NODE *
new_lvar_gen(struct parser_params *parser, ID id, const YYLTYPE *location)
{
- NODE *lvar = NEW_LVAR(id);
- nd_set_loc(lvar, location);
+ NODE *lvar = NEW_LVAR(id, location);
+ nd_set_line(lvar, location->first_loc.lineno);
return lvar;
}
static NODE *
new_dstr_gen(struct parser_params *parser, VALUE str, const YYLTYPE *location)
{
- NODE *dstr = NEW_DSTR(str);
+ NODE *dstr = NEW_DSTR(str, location);
add_mark_object(str);
- nd_set_loc(dstr, location);
+ nd_set_line(dstr, location->first_loc.lineno);
return dstr;
}
static NODE *
new_rescue_gen(struct parser_params *parser, NODE *b, NODE *res, NODE *e, const YYLTYPE *location)
{
- NODE *rescue = NEW_RESCUE(b, res, e);
- nd_set_loc(rescue, location);
+ NODE *rescue = NEW_RESCUE(b, res, e, location);
+ nd_set_line(rescue, location->first_loc.lineno);
return rescue;
}
static NODE *
new_undef_gen(struct parser_params *parser, NODE *i, const YYLTYPE *location)
{
- NODE *undef = NEW_UNDEF(i);
- nd_set_loc(undef, location);
+ NODE *undef = NEW_UNDEF(i, location);
+ nd_set_line(undef, location->first_loc.lineno);
return undef;
}
static NODE *
new_zarray_gen(struct parser_params *parser, const YYLTYPE *location)
{
- NODE *zarray = NEW_ZARRAY();
- nd_set_loc(zarray, location);
+ NODE *zarray = NEW_ZARRAY(location);
+ nd_set_line(zarray, location->first_loc.lineno);
return zarray;
}
static NODE *
new_ivar_gen(struct parser_params *parser, ID id, const YYLTYPE *location)
{
- NODE *ivar = NEW_IVAR(id);
- nd_set_loc(ivar, location);
+ NODE *ivar = NEW_IVAR(id, location);
+ nd_set_line(ivar, location->first_loc.lineno);
return ivar;
}
static NODE *
new_postarg_gen(struct parser_params *parser, NODE *i, NODE *v, const YYLTYPE *location)
{
- NODE *postarg = NEW_POSTARG(i, v);
- nd_set_loc(postarg, location);
+ NODE *postarg = NEW_POSTARG(i, v, location);
+ nd_set_line(postarg, location->first_loc.lineno);
return postarg;
}
static NODE *
new_cdecl_gen(struct parser_params *parser, ID v, NODE *val, NODE *path, const YYLTYPE *location)
{
- NODE *nd_cdecl = NEW_CDECL(v, val, path);
- nd_set_loc(nd_cdecl, location);
+ NODE *nd_cdecl = NEW_CDECL(v, val, path, location);
+ nd_set_line(nd_cdecl, location->first_loc.lineno);
return nd_cdecl;
}
static NODE *
new_scope_gen(struct parser_params *parser, NODE *a, NODE *b, const YYLTYPE *location)
{
- NODE *scope = NEW_SCOPE(a, b);
- nd_set_loc(scope, location);
+ NODE *scope = NEW_SCOPE(a, b, location);
+ nd_set_line(scope, location->first_loc.lineno);
return scope;
}
static NODE *
new_begin_gen(struct parser_params *parser, NODE *b, const YYLTYPE *location)
{
- NODE *begin = NEW_BEGIN(b);
- nd_set_loc(begin, location);
+ NODE *begin = NEW_BEGIN(b, location);
+ nd_set_line(begin, location->first_loc.lineno);
return begin;
}
static NODE *
new_masgn_gen(struct parser_params *parser, NODE *l, NODE *r, const YYLTYPE *location)
{
- NODE *masgn = NEW_MASGN(l, r);
- nd_set_loc(masgn, location);
+ NODE *masgn = NEW_MASGN(l, r, location);
+ nd_set_line(masgn, location->first_loc.lineno);
return masgn;
}
@@ -9729,8 +9671,8 @@ new_kw_arg_gen(struct parser_params *parser, NODE *k, const YYLTYPE *location)
{
NODE *kw_arg;
if (!k) return 0;
- kw_arg = NEW_KW_ARG(0, (k));
- nd_set_loc(kw_arg, location);
+ kw_arg = NEW_KW_ARG(0, (k), location);
+ nd_set_line(kw_arg, location->first_loc.lineno);
return kw_arg;
}
@@ -9739,9 +9681,8 @@ new_xstring_gen(struct parser_params *parser, NODE *node, const YYLTYPE *locatio
{
if (!node) {
VALUE lit = STR_NEW0();
- NODE *xstr = NEW_XSTR(lit);
+ NODE *xstr = NEW_XSTR(lit, location);
add_mark_object(lit);
- xstr->nd_loc = *location;
return xstr;
}
switch (nd_type(node)) {
@@ -9754,8 +9695,8 @@ new_xstring_gen(struct parser_params *parser, NODE *node, const YYLTYPE *locatio
nd_set_loc(node, location);
break;
default:
- node = NEW_NODE(NODE_DXSTR, Qnil, 1, new_list(node, location));
- nd_set_loc(node, location);
+ node = NEW_NODE(NODE_DXSTR, Qnil, 1, new_list(node, location), location);
+ nd_set_line(node, location->first_loc.lineno);
break;
}
return node;
@@ -9764,11 +9705,10 @@ new_xstring_gen(struct parser_params *parser, NODE *node, const YYLTYPE *locatio
static NODE *
new_body_gen(struct parser_params *parser, NODE *param, NODE *stmt, const YYLTYPE *location)
{
- NODE *iter = NEW_ITER(param, stmt);
- nd_set_loc(iter->nd_body, location);
- nd_set_loc(iter, location);
+ NODE *iter = NEW_ITER(param, stmt, location);
+ nd_set_line(iter->nd_body, location->first_loc.lineno);
+ nd_set_line(iter, location->first_loc.lineno);
return iter;
-
}
#else /* !RIPPER */
static int
@@ -9968,7 +9908,7 @@ static NODE*
assignable_result0(NODE *node, const YYLTYPE *location)
{
if (node) {
- nd_set_loc(node, location);
+ nd_set_line(node, location->first_loc.lineno);
}
return node;
}
@@ -10019,37 +9959,37 @@ assignable_gen(struct parser_params *parser, ID id, NODE *val, const YYLTYPE *lo
case ID_LOCAL:
if (dyna_in_block()) {
if (dvar_curr(id)) {
- return assignable_result(NEW_DASGN_CURR(id, val));
+ return assignable_result(NEW_DASGN_CURR(id, val, location));
}
else if (dvar_defined(id)) {
- return assignable_result(NEW_DASGN(id, val));
+ return assignable_result(NEW_DASGN(id, val, location));
}
else if (local_id(id)) {
- return assignable_result(NEW_LASGN(id, val));
+ return assignable_result(NEW_LASGN(id, val, location));
}
else {
dyna_var(id);
- return assignable_result(NEW_DASGN_CURR(id, val));
+ return assignable_result(NEW_DASGN_CURR(id, val, location));
}
}
else {
if (!local_id(id)) {
local_var(id);
}
- return assignable_result(NEW_LASGN(id, val));
+ return assignable_result(NEW_LASGN(id, val, location));
}
break;
case ID_GLOBAL:
- return assignable_result(NEW_GASGN(id, val));
+ return assignable_result(NEW_GASGN(id, val, location));
case ID_INSTANCE:
- return assignable_result(NEW_IASGN(id, val));
+ return assignable_result(NEW_IASGN(id, val, location));
case ID_CONST:
if (!in_def)
return assignable_result(new_cdecl(id, val, 0, location));
yyerror1(location, "dynamic constant assignment");
break;
case ID_CLASS:
- return assignable_result(NEW_CVASGN(id, val));
+ return assignable_result(NEW_CVASGN(id, val, location));
default:
compile_error(PARSER_ARG "identifier %"PRIsVALUE" is not valid to set", rb_id2str(id));
}
@@ -10119,8 +10059,8 @@ new_bv_gen(struct parser_params *parser, ID name)
static NODE *
aryset_gen(struct parser_params *parser, NODE *recv, NODE *idx, const YYLTYPE *location)
{
- NODE *attrasgn = NEW_ATTRASGN(recv, tASET, idx);
- nd_set_loc(attrasgn, location);
+ NODE *attrasgn = NEW_ATTRASGN(recv, tASET, idx, location);
+ nd_set_line(attrasgn, location->first_loc.lineno);
return attrasgn;
}
@@ -10135,11 +10075,8 @@ block_dup_check_gen(struct parser_params *parser, NODE *node1, NODE *node2)
static NODE *
attrset_gen(struct parser_params *parser, NODE *recv, ID atype, ID id, const YYLTYPE *location)
{
- NODE *attrasgn;
if (!CALL_Q_P(atype)) id = rb_id_attrset(id);
- attrasgn = NEW_ATTRASGN(recv, id, 0);
- nd_set_loc(attrasgn, location);
- return attrasgn;
+ return NEW_ATTRASGN(recv, id, 0, location);
}
static void
@@ -10179,8 +10116,8 @@ arg_concat_gen(struct parser_params *parser, NODE *node1, NODE *node2, const YYL
node1->nd_body = list_concat(node1->nd_body, node2);
return node1;
}
- argscat = NEW_ARGSCAT(node1, node2);
- nd_set_loc(argscat, location);
+ argscat = NEW_ARGSCAT(node1, node2, location);
+ nd_set_line(argscat, location->first_loc.lineno);
return argscat;
}
@@ -10203,8 +10140,8 @@ arg_append_gen(struct parser_params *parser, NODE *node1, NODE *node2, const YYL
nd_set_type(node1, NODE_ARGSCAT);
return node1;
}
- argspush = NEW_ARGSPUSH(node1, node2);
- nd_set_loc(argspush, location);
+ argspush = NEW_ARGSPUSH(node1, node2, location);
+ nd_set_line(argspush, location->first_loc.lineno);
return argspush;
}
@@ -10463,7 +10400,7 @@ reduce_nodes_gen(struct parser_params *parser, NODE **body)
NODE *node = *body;
if (!node) {
- *body = NEW_NIL();
+ *body = NEW_NIL(&NULL_LOC);
return;
}
#define subnodes(n1, n2) \
@@ -10638,8 +10575,8 @@ cond0(struct parser_params *parser, NODE *node, int method_op, const YYLTYPE *lo
if (!method_op)
warning_unless_e_option(parser, node, "regex literal in condition");
- match = NEW_MATCH2(node, new_gvar(idLASTLINE, location));
- nd_set_loc(match, location);
+ match = NEW_MATCH2(node, new_gvar(idLASTLINE, location), location);
+ nd_set_line(match, location->first_loc.lineno);
return match;
}
@@ -10694,8 +10631,8 @@ cond_gen(struct parser_params *parser, NODE *node, int method_op, const YYLTYPE
static NODE*
new_nil_gen(struct parser_params *parser, const YYLTYPE *location)
{
- NODE *node_nil = NEW_NIL();
- nd_set_loc(node_nil, location);
+ NODE *node_nil = NEW_NIL(location);
+ nd_set_line(node_nil, location->first_loc.lineno);
return node_nil;
}
@@ -10706,8 +10643,8 @@ new_if_gen(struct parser_params *parser, NODE *cc, NODE *left, NODE *right, cons
if (!cc) return right;
cc = cond0(parser, cc, FALSE, location);
- node_if = NEW_IF(cc, left, right);
- nd_set_loc(node_if, location);
+ node_if = NEW_IF(cc, left, right, location);
+ nd_set_line(node_if, location->first_loc.lineno);
return newline_node(node_if);
}
@@ -10718,8 +10655,8 @@ new_unless_gen(struct parser_params *parser, NODE *cc, NODE *left, NODE *right,
if (!cc) return right;
cc = cond0(parser, cc, FALSE, location);
- node_unless = NEW_UNLESS(cc, left, right);
- nd_set_loc(node_unless, location);
+ node_unless = NEW_UNLESS(cc, left, right, location);
+ nd_set_line(node_unless, location->first_loc.lineno);
return newline_node(node_unless);
}
@@ -10734,14 +10671,12 @@ logop_gen(struct parser_params *parser, enum node_type type, NODE *left, NODE *r
while ((second = node->nd_2nd) != 0 && (enum node_type)nd_type(second) == type) {
node = second;
}
- node->nd_2nd = NEW_NODE(type, second, right, 0);
- node->nd_2nd->nd_loc = *location;
+ node->nd_2nd = NEW_NODE(type, second, right, 0, location);
nd_set_line(node->nd_2nd, op_loc->first_loc.lineno);
left->nd_loc.last_loc = location->last_loc;
return left;
}
- op = NEW_NODE(type, left, right, 0);
- op->nd_loc = *location;
+ op = NEW_NODE(type, left, right, 0, location);
nd_set_line(op, op_loc->first_loc.lineno);
return op;
}
@@ -10777,8 +10712,8 @@ new_yield_gen(struct parser_params *parser, NODE *node, const YYLTYPE *location)
NODE *yield;
if (node) no_blockarg(parser, node);
- yield = NEW_YIELD(node);
- nd_set_loc(yield, location);
+ yield = NEW_YIELD(node, location);
+ nd_set_line(yield, location->first_loc.lineno);
return yield;
}
@@ -10862,7 +10797,7 @@ new_args_tail_gen(struct parser_params *parser, NODE *k, ID kr, ID b, const YYLT
args = ZALLOC(struct rb_args_info);
add_mark_object((VALUE)rb_imemo_alloc_new((VALUE)args, 0, 0, 0));
- node = NEW_NODE(NODE_ARGS, 0, 0, args);
+ node = NEW_NODE(NODE_ARGS, 0, 0, args, &NULL_LOC);
if (parser->error_p) return node;
args->block_arg = b;
@@ -10943,8 +10878,8 @@ dsym_node_gen(struct parser_params *parser, NODE *node, const YYLTYPE *location)
nd_set_loc(node, location);
break;
default:
- node = NEW_NODE(NODE_DSYM, Qnil, 1, new_list(node, location));
- nd_set_loc(node, location);
+ node = NEW_NODE(NODE_DSYM, Qnil, 1, new_list(node, location), location);
+ nd_set_line(node, location->first_loc.lineno);
break;
}
return node;
@@ -11003,8 +10938,8 @@ new_hash_gen(struct parser_params *parser, NODE *hash, const YYLTYPE *location)
{
NODE *nd_hash;
if (hash) hash = remove_duplicate_keys(parser, hash, location);
- nd_hash = NEW_HASH(hash);
- nd_set_loc(nd_hash, location);
+ nd_hash = NEW_HASH(hash, location);
+ nd_set_line(nd_hash, location->first_loc.lineno);
return nd_hash;
}
#endif /* !RIPPER */
@@ -11021,8 +10956,8 @@ new_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rhs, con
if (op == tOROP) {
lhs->nd_value = rhs;
nd_set_loc(lhs, location);
- asgn = NEW_OP_ASGN_OR(gettable(vid, &lhs_location), lhs);
- nd_set_loc(asgn, location);
+ asgn = NEW_OP_ASGN_OR(gettable(vid, &lhs_location), lhs, location);
+ nd_set_line(asgn, location->first_loc.lineno);
if (is_notop_id(vid)) {
switch (id_type(vid)) {
case ID_GLOBAL:
@@ -11035,8 +10970,8 @@ new_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rhs, con
else if (op == tANDOP) {
lhs->nd_value = rhs;
nd_set_loc(lhs, location);
- asgn = NEW_OP_ASGN_AND(gettable(vid, &lhs_location), lhs);
- nd_set_loc(asgn, location);
+ asgn = NEW_OP_ASGN_AND(gettable(vid, &lhs_location), lhs, location);
+ nd_set_line(asgn, location->first_loc.lineno);
}
else {
asgn = lhs;
@@ -11062,8 +10997,8 @@ new_attr_op_assign_gen(struct parser_params *parser, NODE *lhs,
else if (op == tANDOP) {
op = 1;
}
- asgn = NEW_OP_ASGN2(lhs, CALL_Q_P(atype), attr, op, rhs);
- nd_set_loc(asgn, location);
+ asgn = NEW_OP_ASGN2(lhs, CALL_Q_P(atype), attr, op, rhs, location);
+ nd_set_line(asgn, location->first_loc.lineno);
fixpos(asgn, lhs);
return asgn;
}
@@ -11080,21 +11015,21 @@ new_const_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rh
op = 1;
}
if (lhs) {
- asgn = NEW_OP_CDECL(lhs, op, rhs);
+ asgn = NEW_OP_CDECL(lhs, op, rhs, location);
}
else {
asgn = new_begin(0, location);
}
fixpos(asgn, lhs);
- nd_set_loc(asgn, location);
+ nd_set_line(lhs, location->first_loc.lineno);
return asgn;
}
static NODE *
const_path_field_gen(struct parser_params *parser, NODE *head, ID mid, const YYLTYPE *location)
{
- NODE *colon2 = NEW_COLON2(head, mid);
- nd_set_loc(colon2, location);
+ NODE *colon2 = NEW_COLON2(head, mid, location);
+ nd_set_line(colon2, location->first_loc.lineno);
return colon2;
}
@@ -11573,7 +11508,7 @@ parser_append_options(struct parser_params *parser, NODE *node)
if (parser->do_print) {
node = block_append(node,
new_fcall(rb_intern("print"),
- NEW_ARRAY(new_gvar(idLASTLINE, &default_location)), &default_location),
+ NEW_ARRAY(new_gvar(idLASTLINE, &default_location), &NULL_LOC), &default_location),
&default_location);
}
@@ -11581,7 +11516,8 @@ parser_append_options(struct parser_params *parser, NODE *node)
if (parser->do_split) {
node = block_append(NEW_GASGN(rb_intern("$F"),
new_call(new_gvar(idLASTLINE, &default_location),
- rb_intern("split"), 0, &default_location)),
+ rb_intern("split"), 0, &default_location),
+ &NULL_LOC),
node, &default_location);
}
if (parser->do_chomp) {
@@ -11589,7 +11525,7 @@ parser_append_options(struct parser_params *parser, NODE *node)
rb_intern("chomp!"), 0, &default_location), node, &default_location);
}
- node = NEW_WHILE(NEW_VCALL(idGets), node, 1);
+ node = NEW_WHILE(NEW_VCALL(idGets, &NULL_LOC), node, 1, &NULL_LOC);
}
return node;