aboutsummaryrefslogtreecommitdiffstats
path: root/parse.y
Commit message (Collapse)AuthorAgeFilesLines
* Add `rb_parser_set_pos` functionS.H2021-12-161-15/+19
| | | | Co-authored-by: Nobuyoshi Nakada <nobu@ruby-lang.org> Co-authored-by: Marivaldo Cavalheiro <marivaldo@gmail.com>
* Fix arg_forward without parentheses [Bug #18267]Nobuyoshi Nakada2021-12-151-9/+31
|
* Revert "Rename `in_kwarg` as `in_argdef` as unrelated to keywords"Nobuyoshi Nakada2021-12-151-12/+12
| | | | | This reverts commit b7f7117bdc78a4a342a57dad1a340b158492ccf3, to separate `in_argdef` from `in_kwarg`.
* Turn SET_LEX_STATE macro into an inline function callNobuyoshi Nakada2021-12-151-4/+10
|
* Fix indent [ci skip]Nobuyoshi Nakada2021-12-151-1/+1
|
* Remove `NODE_DASGN_CURR` [Feature #18406]Nobuyoshi Nakada2021-12-131-9/+3
| | | | | | | This `NODE` type was used in pre-YARV implementation, to improve the performance of assignment to dynamic local variable defined at the innermost scope. It has no longer any actual difference with `NODE_DASGN`, except for the node dump.
* Add `nd_type_p` macroS.H2021-12-041-50/+50
|
* Assign temporary ID to anonymous ID [Bug #18250]Nobuyoshi Nakada2021-11-231-4/+1
| | | | | | | | Dumped iseq binary can not have unnamed symbols/IDs, and ID 0 is stored instead. As `struct rb_id_table` disallows ID 0, also for the distinction, re-assign a new temporary ID based on the local variable table index when loading from the binary, as well as the parser.
* Refactor hacky ID tables to struct rb_ast_id_table_tYusuke Endoh2021-11-211-16/+13
| | | | | | | | | The implementation of a local variable tables was represented as `ID*`, but it was very hacky: the first element is not an ID but the size of the table, and, the last element is (sometimes) a link to the next local table only when the id tables are a linked list. This change converts the hacky implementation to a normal struct.
* Anonymous block forwarding allows a method to forward a passedJeremy Evans2021-11-181-0/+21
| | | | | | | | | | block to another method without having to provide a name for the block parameter. Implements [Feature #11256] Co-authored-by: Yusuke Endoh mame@ruby-lang.org Co-authored-by: Nobuyoshi Nakada nobu@ruby-lang.org
* parse.y: Fix memory leak at parse errorYusuke Endoh2021-11-121-0/+6
| | | | Local variable tables might leak at the parse error.
* [Feature #18290] Remove all usages of rb_gc_force_recyclePeter Zhu2021-11-081-2/+0
| | | | | This commit removes usages of rb_gc_force_recycle since it is a burden to maintain and makes changes to the GC difficult.
* Argument forwarding definition without parentheses [Bug #18267]Nobuyoshi Nakada2021-10-311-29/+20
|
* Rename `in_kwarg` as `in_argdef` as unrelated to keywordsNobuyoshi Nakada2021-10-311-12/+12
|
* Reduce parser stack usage at pattern matchingNobuyoshi Nakada2021-10-311-12/+12
|
* Make new object for negated float as `Float` is always frozen nowNobuyoshi Nakada2021-10-261-1/+1
|
* ast.c: Use kept script_lines data instead of re-opening the source file (#5019)Yusuke Endoh2021-10-261-0/+1
| | | ast.c: Use kept script_lines data instead of re-open the source file
* `RubyVM.keep_script_lines`Koichi Sasada2021-10-211-1/+2
| | | | | | | | | | | | | | `RubyVM.keep_script_lines` enables to keep script lines for each ISeq and AST. This feature is for debugger/REPL support. ```ruby RubyVM.keep_script_lines = true RubyVM::keep_script_lines = true eval("def foo = nil\ndef bar = nil") pp RubyVM::InstructionSequence.of(method(:foo)).script_lines ```
* Fix evaluation order of hash values for duplicate keysJeremy Evans2021-10-181-7/+13
| | | | | | Fixes [Bug #17719] Co-authored-by: Nobuyoshi Nakada <nobu@ruby-lang.org> Co-authored-by: Ivo Anjo <ivo@ivoanjo.me>
* Remove duplicate value checks on `mrhs` which always has the valueNobuyoshi Nakada2021-10-081-2/+3
|
* Split parser_yyerror0 from parser_yyerrorNobuyoshi Nakada2021-10-051-8/+26
| | | | | The former uses the current location, while the latter takes a non-null location.
* Show the last line at unexpected end-of-input errorNobuyoshi Nakada2021-10-051-3/+1
|
* Replace inaccurate error messagesNobuyoshi Nakada2021-10-051-0/+3
| | | | | | When Bison reports "memory exhausted", it means the parser stack depth reached the limit `YYMAXDEPTH` which is defaulted to 10_000, but not memory allocation failed.
* The same warning for static symbol literalNobuyoshi Nakada2021-10-041-0/+4
|
* Fix the warning message for dynamic symbol literal in conditionNobuyoshi Nakada2021-10-041-1/+1
|
* Use `%printer` directive for Bison 3.8Nobuyoshi Nakada2021-09-141-45/+29
|
* Hash values should be omitted in Ripper resultsShugo Maeda2021-09-111-1/+1
|
* Allow value omission in Hash literalsShugo Maeda2021-09-111-0/+9
| | | | `{x:, y:}` is a syntax sugar of `{x: x, y: y}`.
* Replace RBOOL macroS-H-GAMELINKS2021-09-051-4/+4
|
* Moved exported symbols in internal/util.h to ruby/util.hNobuyoshi Nakada2021-08-241-1/+0
| | | | [Feature #18051]
* ast.c: Rename "save_script_lines" to "keep_script_lines"Yusuke Endoh2021-08-201-4/+4
| | | | | | | ... as per ko1's preference. He is preparing to extend this feature to ISeq for his new debugger. He prefers "keep" to "save" for this wording. This API is internal and not included in any released version, so I change it in advance.
* Allow omission of parentheses in one line pattern matching [Feature #16182]Kazuki Tsujimoto2021-08-191-2/+2
|
* Extract the wrapped value when yydebug [Bug #18075]Nobuyoshi Nakada2021-08-151-1/+1
|
* Fix interpolated heredoceileencodes2021-07-211-1/+4
| | | | | | | | | | | | | | This fixes https://bugs.ruby-lang.org/issues/18038. The provided reproduction showed that this happens in heredocs with double interpolation. In this case `DSTR` was getting returned but needs to be convered to a `EVSTR` which is what is returned by the function. There may be an additional bug here that we weren't able to produce. It seems odd that `STR` returns `DSTR` while everything else should return `EVSTR` since the function is `new_evstr`. [Bug #18038][ruby-core:104597] Co-authored-by: Aaron Patterson <tenderlove@ruby-lang.org>
* One-line pattern matching is no longer experimentalKazuki Tsujimoto2021-07-171-14/+0
| | | | https://github.com/ruby/dev-meeting-log/blob/master/DevelopersMeeting20210715Japan.md#feature-17724-make-the-pin-operator-support-instanceclassglobal-variables-jeremyevans0
* Add pattern matching pin support for instance/class/global variablesJeremy Evans2021-07-151-1/+13
| | | | | | | | | | | Pin matching for local variables and constants is already supported, and it is fairly simple to add support for these variable types. Note that pin matching for method calls is still not supported without wrapping in parentheses (pin expressions). I think that's for the best as method calls are far more complex (arguments/blocks). Implements [Feature #17724]
* node.h: Reduce struct size to fit with Ruby object size (five VALUEs)Yusuke Endoh2021-06-181-1/+1
| | | | | | | | by merging `rb_ast_body_t#line_count` and `#script_lines`. Fortunately `line_count == RARRAY_LEN(script_lines)` was always satisfied. When script_lines is saved, it has an array of lines, and when not saved, it has a Fixnum that represents the old line_count.
* ast.rb: RubyVM::AST.parse and .of accepts `save_script_lines: true`Yusuke Endoh2021-06-181-0/+17
| | | | | | | This option makes the parser keep the original source as an array of the original code lines. This feature exploits the mechanism of `SCRIPT_LINES__` but records only the specified code that is passed to RubyVM::AST.of or .parse, instead of recording all parsed program texts.
* Adjust styles [ci skip]Nobuyoshi Nakada2021-06-171-1/+1
| | | | | | | | | * --braces-after-func-def-line * --dont-cuddle-else * --procnames-start-lines * --space-after-for * --space-after-if * --space-after-while
* parse.y: Fix the location of a target constant of OP_CDECLYusuke Endoh2021-06-141-1/+2
| | | | | | | | ``` p RubyVM::AbstractSyntaxTree.parse("::Foo += 1").children #=> before: [[], nil, (OP_CDECL@1:0-1:10 (COLON3@1:0-1:10 :Foo) :+ (LIT@1:9-1:10 1))] #=> after: [[], nil, (OP_CDECL@1:0-1:10 (COLON3@1:0-1:5 :Foo) :+ (LIT@1:9-1:10 1))] ```
* Warn more duplicate literal hash keysNobuyoshi Nakada2021-06-031-1/+0
| | | | | Following non-special_const literals: * T_REGEXP
* Warn more duplicate literal hash keysNobuyoshi Nakada2021-06-031-1/+33
| | | | | | | | Following non-special_const literals: * T_BIGNUM * T_FLOAT (non-flonum) * T_RATIONAL * T_COMPLEX
* ripper: wrap endless method in bodystmt [Bug #17869]Nobuyoshi Nakada2021-05-211-4/+12
|
* Also `\U` after control/meta is invalid [Bug #17861]Nobuyoshi Nakada2021-05-131-2/+10
| | | | | As well as `\u`, `\U` should be invalid there too. And highlight including `u`/`U` not only the backslash before it.
* Fix handling of control/meta escapes in literal regexpsJeremy Evans2021-05-121-33/+17
| | | | | | | | | | | | | | | | | | | Ruby uses a recursive algorithm for handling control/meta escapes in strings (read_escape). However, the equivalent code for regexps (tokadd_escape) in did not use a recursive algorithm. Due to this, Handling of control/meta escapes in regexp did not have the same behavior as in strings, leading to behavior such as the following returning nil: ```ruby /\c\xFF/ =~ "\c\xFF" ``` Switch the code for handling \c, \C and \M in literal regexps to use the same code as for strings (read_escape), to keep behavior consistent between the two. Fixes [Bug #14367]
* parse.y: Allow "command" syntax in endless method definitionYusuke Endoh2021-05-131-0/+46
| | | | | | | | | This change allows `def hello = puts "Hello"` without parentheses. Note that `private def hello = puts "Hello"` does not parse for technical reason. [Feature #17398]
* Make imemo_ast WB-protected againYusuke Endoh2021-04-271-1/+5
| | | | | | by firing the write barrier of imemo_ast after nd_lit is modified. This will fix the issue of https://github.com/ruby/ruby/pull/4416 more gracefully.
* Ignore useless separators preceding a file encoding commentNobuyoshi Nakada2021-03-231-0/+1
|
* Pattern matching pin operator against expression [Feature #17411]Kazuki Tsujimoto2021-03-211-4/+14
| | | | This commit is based on the patch by @nobu.
* Add a missing semicolon.Takashi Tamura2021-02-151-1/+1
|