Commit graph

2684 commits

Author SHA1 Message Date
mame
33b2ac9fb6 parse.y: Remove $<num>$ = ruby_sourceline hacks
Instead, use bison's lineno.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61676 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-01-08 06:30:53 +00:00
nobu
51e6e26016 parse.y: constified NULL_LOC
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61674 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-01-08 05:17:08 +00:00
mame
fbb5a9d967 parse.y: Factor out special handling of a short-cut operator id
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61672 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-01-08 03:22:13 +00:00
yui-knk
8ef39549c2 parse.y: Remove duplicated nd_loc set
* parse.y: nd_loc is set by NEW_CASE2/NEW_WHEN

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61671 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-01-08 02:38:21 +00:00
mame
81cc61d53e parse.y: Embed simple wrapper functions for NEW_NODEs
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61670 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-01-08 02:36:12 +00:00
yui-knk
6e6a253928 parse.y: Make NULL_LOC to be internal
* parse.y (NULL_LOC): We will create NODEs only
  inside of parse.y, so make NULL_LOC to be internal.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61669 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-01-08 02:24:18 +00:00
mame
7fdbced2b7 parse.y: Remove unneeded wrapper functions for NEW_NODEs
Just refactoring.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61668 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-01-08 02:19:47 +00:00
mame
4db3b9ebe0 parse.y: set bison's first_loc.lineno to nd_line by default
This change initializes nd_line, lineno of each node, by default, by
using the first line number of code range that bison tracks, instead of
extracting from lexer state.
The lexer state basically provides only the last line number of code
range, so many hacks are used to approximate the first line number.  The
hacks have been introduced on demand, or very ad-hocly.  I think this
change will make it possible to remove most of the hacks.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61667 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-01-08 01:49:00 +00:00
mame
413d862f23 parse.y: make all NEW_NODE macros receive location
This looks a big change, but just for refactoring.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61666 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-01-08 01:29:35 +00:00
nobu
f3aa3cd825 parse.y: do not overwrite case_body position
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61654 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-01-07 11:51:30 +00:00
nobu
e1ac09dbe9 parse.y: set case_body line position to args
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61653 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-01-07 11:51:29 +00:00
nobu
057c88bc00 parse.y: removed unused macro new_command_call
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61652 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-01-07 09:44:34 +00:00
nobu
f423f7c29f parse.y: nd_line of new_qcall
* parse.y (new_qcall): set nd_line to the method name location.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61651 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-01-07 09:36:48 +00:00
mame
1d3d8d89fc parse.y: Use nd_set_loc instead of direct modification to nd_loc
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61623 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-01-05 16:04:02 +00:00
mame
8d06762c27 parse.y: Remove unneeded code
Because block_append sets prelude->nd_loc.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61622 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-01-05 16:04:00 +00:00
mame
5fe35fee8f parse.y: make method_add_block accept location
Also, use method_add_block instead of direct modification to nd_iter.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61621 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-01-05 15:44:03 +00:00
mame
c515395561 node_h (NEW_DEFN): remove unused argument
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61619 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-01-05 15:16:42 +00:00
mame
38c62063c0 node.h: remove NODE_PRELUDE
NODE_PRELUDE contains a `BEGIN` node, a main node, and compile_option.
This node is assumed that it must be located immediately under the root
NODE_SCOPE, but this strange assumption is not so good, IMO.

This change removes the assumtion; it integrates the former two nodes by
block_append, and moves compile_option into rb_ast_body_t.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61610 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-01-05 08:59:23 +00:00
mame
503b858cef node.h: define rb_ast_body_t and restructure rb_ast_t
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61608 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-01-05 08:59:20 +00:00
mame
db81395da8 parse.y: refactor out ast generation code of two rb_parser_compile_*
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61604 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-01-05 05:27:25 +00:00
mame
0947c2ba63 node.h: add NODE_ONCE instead of reuse of NODE_SCOPE
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61597 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-01-04 12:47:22 +00:00
nobu
035db929d1 parse.y: fix typo
* parse.y (singleton): fix typo, show the expression.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61540 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-01-02 04:24:32 +00:00
nobu
6e2ceaf0ed parse.y: code end position
* parse.y (parser_yyerror): use the given location as the end of
  erred code, instead of the current position.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61538 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-01-02 03:00:13 +00:00
nobu
d4764ef6e4 parse.y: highlight yyerror
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61533 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-01-01 01:04:50 +00:00
nobu
5ceb137091 parse.y: yyerror1
* parse.y (yyerror1): pass location to parser_yyerror.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61530 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-12-31 15:05:26 +00:00
nobu
862189c79e parse.y: yylloc at yyerror
* parse.y (parser_yyerror): consider the case first_loc and
  last_loc point different lines.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61528 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-12-31 15:00:23 +00:00
nobu
457521574c parse.y: assignable_error
* parse.y (assignable_gen): should return valid NODE always even
  on errors.  [ruby-core:84565] [Bug #14261]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61523 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-12-31 11:25:38 +00:00
nobu
59845bd47a parse.y: yylloc at yyerror
* parse.y (parser_yyerror): utilize the location given by bison.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61522 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-12-31 06:53:04 +00:00
nobu
3802fb92ff parse.y: warning for locations
* parse.y (gettable_gen): warn for __FILE__/__LINE__ when eval
  with binding only.  promote use of Binding#source_location
  instead.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61483 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-12-26 10:10:41 +00:00
mame
c2f10299ac parse.y: change NODE_SCOPE's nd_loc to one of the parent NODE
This change (ad-hocly) adjusts the code range of NODE_SCOPE in
class/module definition because the same adjust is already done in
method definition.  I intend to just remove inconsistency between
class/module definition and method definition, but this kind of adjust
is dirty, so it should be fixed later (maybe in 2.6).

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61383 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-12-21 06:52:15 +00:00
nobu
032e8fdf40 parse.y: end of script at newline
* parse.y (parser_yylex): deal with end of script chars just after
  ignored newline as other places.  [ruby-core:84349] [Bug #14206]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61346 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-12-20 00:09:51 +00:00
mame
4abc1a24af node.h: add nd_last_loc and nd_set_last_loc
Just refactoring.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61227 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-12-14 08:22:22 +00:00
mame
ad12b5c285 node.[ch], parse.y, compile.c: rename nd_column to nd_first_column
nd_set_column -> nd_first_set_column
nd_lineno -> nd_first_lineno
nd_set_lineno -> nd_first_set_lineno

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61224 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-12-14 06:02:26 +00:00
mame
bf9c947dd8 parse.y: suppress "unused variable" warning of ripper.y
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61223 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-12-14 05:54:10 +00:00
yui-knk
564dd28616 parse.y: Revert r61196
* parse.y: Because top_stmts is generated from none (not "/* none */"),
  @0 is not set by YYLLOC_DEFAULT. So @0 is a meaningless location.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61198 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-12-13 01:10:27 +00:00
yui-knk
47f1d84215 parse.y: Fix the locations of an empty script
* parse.y: Fix the locations of NODE_BEGIN in
  an empty script.

  ```
  ruby --dump=p -e ''
  ```

  * Before

  ```
  NODE_BEGIN (line: 1, code_range: (1,1)-(1,1))
  ```

  * After

  ```
  NODE_BEGIN (line: 1, code_range: (1,0)-(1,0))
  ```

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61196 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-12-12 23:48:50 +00:00
yui-knk
f6a1ad41db parse.y: Change the last location of none
* parse.y: Change the last location of none to be
  equal to the first location of none.
  Sometimes none has length (`parser->tokp` does not
  match `lex_p` when none is generated).
  This leads to invalid code_ranges.

  e.g. The locations of the NODE_CALL (:sort) is fixed:

  ```
  x.sort.join(" ")
  ```

  * Before

  ```
  NODE_CALL (line: 1, code_range: (1,0)-(1,7))
  ```

  * After

  ```
  NODE_CALL (line: 1, code_range: (1,0)-(1,6))
  ```

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61171 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-12-12 14:47:34 +00:00
yui-knk
3d6d615175 parse.y: Set locations of nd_body in NODE_ITER explicitly
* parse.y: Same as r61168, but for brace_block.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61170 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-12-12 14:21:20 +00:00
yui-knk
46e8a8ae37 parse.y: Set locations of nd_body in NODE_ITER explicitly
* parse.y: Currently the location of do_body is set
  by new_do_body. Sometimes the last part of do_body is
  none, because bodystmt ends with opt_ensure.
  Token keyword_end has been looked ahead when a tokenizer
  generates none, so the last location of opt_ensure matches
  the last location of `end`. But this relation will be
  broken when we change the last location of none to be equal to
  the first location of none. So set locations of nd_body in
  NODE_ITER explicitly.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61168 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-12-12 14:10:23 +00:00
yui-knk
79c2e6eccf parse.y: Fix the locations of NODE_ITER (cmd_brace_block)
* parse.y: Update the locations of NODE_ITER
  when nd_iter is determined.

  ```
  a (1) {|i|}
  ```

  * Before

  ```
  NODE_ITER (line: 1, code_range: (1,6)-(1,10))
  ```

  * After

  ```
  NODE_ITER (line: 1, code_range: (1,0)-(1,11))
  ```

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61142 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-12-12 08:54:34 +00:00
yui-knk
f1c3395099 parse.y: Fix locations of NODE_ARRAY of mlhs_head
* parse.y: Fix to only include a range of mlhs_item
  (exclude ',' form range).

  e.g. The locations of the NODE_ARRAY is fixed:

  ```
  (a,) = 1,2
  ```

  * Before

  ```
  NODE_ARRAY (line: 1, code_range: (1,1)-(1,3))
  ```

  * After

  ```
  NODE_ARRAY (line: 1, code_range: (1,1)-(1,2))
  ```

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61133 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-12-12 01:13:56 +00:00
yui-knk
0b31ce0047 parse.y: Fix locations of NODE_ARRAY in NODE_CALL(:=~)
* parse.y (match_op_gen): Fix to only include a range of node2.

  e.g. The locations of the NODE_ARRAY is fixed:

  ```
  re =~ s1
  ```

  * Before

  ```
  NODE_ARRAY (line: 1, code_range: (1,0)-(1,8))
  ```

  * After

  ```
  NODE_ARRAY (line: 1, code_range: (1,6)-(1,8))
  ```

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61130 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-12-12 00:28:29 +00:00
yui-knk
e44f2b7d10 parse.y: Fix locations of NODE_ARRAY of opt_call_args
* parse.y: Fix to only include a range of assocs
  (exclude ',' form range).

  e.g. The locations of the NODE_ARRAY is fixed:

  ```
  m1(str: "bar",)
  ```

  * Before

  ```
  NODE_ARRAY (line: 1, code_range: (1,3)-(1,14))
  ```

  * After

  ```
  NODE_ARRAY (line: 1, code_range: (1,3)-(1,13))
  ```

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61128 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-12-12 00:12:43 +00:00
yui-knk
f9d8003c94 parse.y: Fix locations of NODE_ARRAY in NODE_BLOCK_PASS
* parse.y: Fix to only include a range of assocs.

  e.g. The locations of the NODE_ARRAY is fixed:

  ```
  m1(str: "bar", &blk)
  ```

  * Before

  ```
  NODE_ARRAY (line: 1, code_range: (1,3)-(1,19))
  ```

  * After

  ```
  NODE_ARRAY (line: 1, code_range: (1,3)-(1,13))
  ```

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61126 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-12-11 23:38:00 +00:00
yui-knk
2d719aef2b parse.y: Change locations of NODE_DVAR in NODE_MASGN
* parse.y: Change the last location of NODE_DVAR to
  be equal to the first location of NODE_DVAR.
  NODE_DVAR of NODE_MASGN (nd_value) is an internal variable,
  so it has no length.

  e.g. The locations of the NODE_DVAR is changed:

  ```
  a.b {|(c,d)| e}
  ```

  * Before

  ```
  NODE_DVAR (line: 1, code_range: (1,7)-(1,10))
  ```

  * After

  ```
  NODE_DVAR (line: 1, code_range: (1,7)-(1,7))
  ```

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61124 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-12-11 23:13:47 +00:00
yui-knk
aaf309972e parse.y: Fix locations of NODE_DSTR generated by evstr2dstr_gen
* parse.y (evstr2dstr_gen): Fix to only include a range of node.

  e.g. The locations of the NODE_DSTR is fixed:

  ```
  %W[a #{b} c]
  ```

  * Before

  ```
  NODE_DSTR (line: 1, code_range: (1,3)-(1,9))
  ```

  * After

  ```
  NODE_DSTR (line: 1, code_range: (1,5)-(1,9))
  ```

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61106 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-12-11 02:19:43 +00:00
yui-knk
ec073534ec parse.y: Remove not used argument
* parse.y (list_append_gen): location is not used.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61103 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-12-11 00:28:27 +00:00
yui-knk
14b6dc4c80 parse.y: Fix locations of NODE_SCOPE in NODE_MODULE
* parse.y: Fix to only include a range of bodystmt.

  e.g. The locations of the NODE_SCOPE is fixed:

  ```
  module M
    def m
    end
  end
  ```

  * Before

  ```
  NODE_SCOPE (line: 4, code_range: (1,0)-(4,3))
  ```

  * After

  ```
  NODE_SCOPE (line: 4, code_range: (1,8)-(4,3))
  ```

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61102 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-12-11 00:06:11 +00:00
yui-knk
e038b794fe parse.y: Fix the last location of NODE_COLON2
* parse.y: Fix to only include a range from primary_value to tCONSTANT.

  e.g. The locations of the NODE_COLON2 is fixed:

  ```
  A::B ||= 1
  ```

  * Before

  ```
  NODE_COLON2 (line: 1, code_range: (1,0)-(1,10))
  ```

  * After

  ```
  NODE_COLON2 (line: 1, code_range: (1,0)-(1,4))
  ```

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61101 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-12-10 23:44:22 +00:00
yui-knk
ad321cdea5 parse.y: Change the first location of NODE_ARRAY in NODE_DSTR (nd_next->nd_next)
* parse.y (list_append_gen): Change the first location to
  start with the location of item if new list is generated.

  e.g. The locations of the NODE_ARRAY is changed:

  ```
  "#{a}.#{b}"
  ```

  * Before

  ```
  NODE_ARRAY (line: 1, code_range: (1,0)-(1,6))
  ```

  * After

  ```
  NODE_ARRAY (line: 1, code_range: (1,5)-(1,6))
  ```

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61099 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-12-10 23:27:58 +00:00