Age | Commit message (Collapse) | Author |
|
```
$ ruby -e 'h = { __ENCODING__ => 1, __ENCODING__ => 2 }'
-e:1: warning: key #<Encoding:UTF-8> is duplicated and overwritten on line 1
```
|
|
|
|
It should check the result of `rb_parser_search_nonascii`.
|
|
String nodes holds ruby string object on `VALUE nd_lit`.
This commit changes it to `struct rb_parser_string *string`
to reduce dependency on ruby object.
Sometimes these strings are concatenated with other string
therefore string concatenate functions are needed.
|
|
If the pattern matching is invalid, then the pvtbl would get leaked. For
example:
10.times do
100_000.times do
eval(<<~RUBY)
case {a: 1}
in {"a" => 1}
end
RUBY
rescue SyntaxError
end
puts `ps -o rss= -p #{$$}`
end
Before:
28096
44768
61472
78512
94992
111504
128096
144528
161008
177472
After:
14096
14112
14112
14176
14208
14240
14240
14240
14240
14240
|
|
No need to use ENC_CODERANGE to record ascii only or not.
|
|
Introduce `rb_node_const_decl_val` function to allow `rb_ary_join` and
`rb_ary_reverse` functions to be removed from Universal Parser.
|
|
|
|
|
|
|
|
|
|
|
|
`__ENCODING__ `was managed by `NODE_LIT` with Encoding object.
Introduce `NODE_ENCODING` for
1. `__ENCODING__` is detectable from AST Node.
2. Reduce dependency Ruby object for parse.y
|
|
Before this commit `ruby -y -e 'tap {|;x, y|}'` failed with SEGV.
This change fixes it.
|
|
Instead of scanning before the current comment.
|
|
This allows ... argument forwarding to benefit from Allocationless
Anonymous Splat Forwarding, allowing the `f` call below to not
allocate an array or a hash.
```ruby
a = [1]
kw = {b: 2}
def c(a, b:)
end
def f(...)
c(...)
end
f(*a, **kw)
```
This temporarily skips prism locals tests until prism is changed
to use * and ** for ..., instead of using ruby2_keywords.
Ignore failures in rbs bundled gems tests, since they fail due
to this change.
|
|
This commit changes `struct parser_params` lastline and nextline
from `VALUE` (String object) to `rb_parser_string_t *` so that
dependency on Ruby Object is reduced.
`parser_string_buffer_t string_buffer` is added to `struct parser_params`
to manage `rb_parser_string_t` pointers of each line. All allocated line
strings are freed in `rb_ruby_parser_free`.
|
|
In `args: args ',' arg_splat`, `args` is not unique name.
Currently the associated rule is interpreted as
`$$ = rest_arg_append(p, $$, $3, &@$);`.
The action works as expected because `$$` is initialized with
`$1` before each action is executed.
However it's misleading then change to use index.
|
|
|
|
Before this commit, Array is used to store token locations
which expect `end` token, e.g. `class` and `module`.
This commit introduces dedicated struct to manage them
so that dependency on Ruby Object is reduced.
|
|
|
|
It's allocated outside of parser then no need to track
reference count in rb_parser_config.
|
|
|
|
|
|
The encodings determined at runtime are affected by the runtime
environment, such as the OS and locale, while the file contents are
not.
|
|
|
|
|
|
|
|
The strterm is leaked when there is invalid syntax.
For example:
10.times do
100_000.times do
begin
RubyVM::InstructionSequence.compile('private def foo = puts "Hello"')
rescue SyntaxError
end
end
puts `ps -o rss= -p #{$$}`
end
Before:
20384
26256
32592
36720
42016
47888
53248
57456
62928
65936
After:
16720
17488
17616
17616
17616
17616
17616
17616
17616
16032
Co-Authored-By: Kevin Newton <kddnewton@gmail.com>
|
|
|
|
`:sym` was managed by `NODE_LIT` with `Symbol` object.
This commit introduces `NODE_SYM` so that
1. Symbol literal is detectable from AST Node
2. Reduce dependency on ruby object
|
|
|
|
|
|
|
|
parse.y converted NODE_STR when the string is hash key like
```
h1 = {"str1" => 1}
m1("str2" => 2)
m2({"str3" => 3})
```
This commit stop the conversion.
`static_literal_node_p` needs to know the node is for hash key or not
for the optimization.
|
|
Change the argument to align with other node value functions
like `rb_node_line_lineno_val`.
|
|
These nodes are not NOTE_LIT, so need to treat separately.
|
|
`set_yylval_node` in ripper does not use the argument at all.
|
|
|
|
|
|
When hash keys are duplicated, e.g. `h = {k: 1, l: 2, k: 3}`,
parser changes node structure for correct compilation.
This generates tricky AST. This commit removes AST manipulation
from parser to keep AST structure simple.
|
|
|
|
|
|
`__FILE__` was managed by `NODE_STR` with `String` object.
This commit introduces `NODE_FILE` and `struct rb_parser_string` so that
1. `__FILE__` is detectable from AST Node
2. Reduce dependency ruby object
|
|
Print warning for a code like
```ruby
if __LINE__
end
# => warning: literal in condition
```
|
|
`__LINE__` was managed by `NODE_LIT` with `Integer` object.
This commit introduces `NODE_LINE` so that
1. `__LINE__` is detectable from AST Node
2. Reduce dependency ruby object
|
|
|
|
|
|
|
|
|