diff options
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | defs/id.def | 5 | ||||
-rw-r--r-- | parse.y | 14 |
3 files changed, 18 insertions, 8 deletions
@@ -1,3 +1,10 @@ +Wed Feb 17 21:41:29 2016 Nobuyoshi Nakada <nobu@ruby-lang.org> + + * defs/id.def (predefined): add idLASTLINE and idBACKREF for $~ + and $_ respectively. + + * parse.y: use idLASTLINE and idBACKREF instead of rb_intern. + Wed Feb 17 20:23:38 2016 Nobuyoshi Nakada <nobu@ruby-lang.org> * string.c (rb_str_init): fix segfault and memory leak, consider diff --git a/defs/id.def b/defs/id.def index 1ff0d9aa3d..e186725770 100644 --- a/defs/id.def +++ b/defs/id.def @@ -62,6 +62,9 @@ firstline, predefined = __LINE__+1, %[\ core#hash_merge_kwd - debug#created_info + + $_ LASTLINE + $~ BACKREF ] # VM ID OP Parser Token @@ -145,7 +148,7 @@ predefined.split(/^/).each_with_index do |line, num| case name when /\A[A-Z]\w*\z/; const_ids when /\A(?!\d)\w+\z/; local_ids - when /\A\$(?:\d+|(?!\d)\w+)\z/; global_ids + when /\A\$(?:\d+|(?!\d)\w+|\W)\z/; global_ids when /\A@@(?!\d)\w+\z/; class_ids when /\A@(?!\d)\w+\z/; instance_ids when /\A((?!\d)\w+)=\z/; attrset_ids @@ -9887,7 +9887,7 @@ cond0(struct parser_params *parser, NODE *node) case NODE_DREGX: case NODE_DREGX_ONCE: warning_unless_e_option(parser, node, "regex literal in condition"); - return NEW_MATCH2(node, NEW_GVAR(rb_intern("$_"))); + return NEW_MATCH2(node, NEW_GVAR(idLASTLINE)); case NODE_AND: case NODE_OR: @@ -10610,7 +10610,7 @@ reg_named_capture_assign_iter(const OnigUChar *name, const OnigUChar *name_end, arg->succ_block = block_append(arg->succ_block, newline_node(node_assign(assignable(var,0), NEW_CALL( - gettable(rb_intern("$~")), + gettable(idBACKREF), idAREF, NEW_LIST(NEW_LIT(ID2SYM(var)))) ))); @@ -10637,12 +10637,12 @@ reg_named_capture_assign_gen(struct parser_params* parser, VALUE regexp, NODE *m return block_append( newline_node(match), - NEW_IF(gettable(rb_intern("$~")), + NEW_IF(gettable(idBACKREF), block_append( newline_node(arg.succ_block), newline_node( NEW_CALL( - gettable(rb_intern("$~")), + gettable(idBACKREF), rb_intern("begin"), NEW_LIST(NEW_LIT(INT2FIX(0)))))), block_append( @@ -10712,7 +10712,7 @@ rb_parser_append_print(VALUE vparser, NODE *node) node = block_append(node, NEW_FCALL(rb_intern("print"), - NEW_ARRAY(NEW_GVAR(rb_intern("$_"))))); + NEW_ARRAY(NEW_GVAR(idLASTLINE)))); if (prelude) { prelude->nd_body = node; scope->nd_body = prelude; @@ -10743,12 +10743,12 @@ rb_parser_while_loop(VALUE vparser, NODE *node, int chop, int split) } if (split) { node = block_append(NEW_GASGN(rb_intern("$F"), - NEW_CALL(NEW_GVAR(rb_intern("$_")), + NEW_CALL(NEW_GVAR(idLASTLINE), rb_intern("split"), 0)), node); } if (chop) { - node = block_append(NEW_CALL(NEW_GVAR(rb_intern("$_")), + node = block_append(NEW_CALL(NEW_GVAR(idLASTLINE), rb_intern("chop!"), 0), node); } |