Age | Commit message (Collapse) | Author | |
---|---|---|---|
2025-05-11 | namespace on read | Satoshi Tagomori | |
2025-04-27 | Use a `set_table` for `rb_vm_struct.unused_block_warning_table` | Jean Boussier | |
Now that we have a hash-set implementation we can use that instead of a hash-table with a static value. | |||
2025-01-14 | Use LRAMA instead of BISON | ydah | |
Notes: Merged: https://github.com/ruby/ruby/pull/12556 | |||
2025-01-13 | Stop passing `-t` and `-v` on ripper build | yui-knk | |
Both of them are debug option. Let's use `YFLAGS` for parse.y build if needed. Notes: Merged: https://github.com/ruby/ruby/pull/12555 | |||
2025-01-07 | Remove unused token definitions for `tRPAREN` in Ripper and parser files | ydah | |
Notes: Merged: https://github.com/ruby/ruby/pull/12488 | |||
2024-12-25 | [DOC] Stop document Ripper::Lexer | Nobuyoshi Nakada | |
`:nodoc:` seems not working for inner classes. | |||
2024-09-25 | Fix memory leak in Ripper for indented heredocs | Peter Zhu | |
The allocated parser string is never freed, which causes a memory leak. The following code leaks memory: Ripper.sexp_raw(DATA.read) __END__ <<~EOF a #{1} a EOF Notes: Merged: https://github.com/ruby/ruby/pull/11669 | |||
2024-09-22 | Reuse dedent_string function in rb_ruby_ripper_dedent_string function | S-H-GAMELINKS | |
This change is reduce Ruby C API dependency for Universal Parser. Reuse dedent_string functions in rb_ruby_ripper_dedent_string functions and remove dependencies on rb_str_modify and rb_str_set_len from the parser. Notes: Merged: https://github.com/ruby/ruby/pull/11658 | |||
2024-07-24 | [Bug #20649] Allow `nil` as 2nd argument of `assign_error` | Nobuyoshi Nakada | |
Fallback to the last token element in that case, for the backward compatibilities. Notes: Merged: https://github.com/ruby/ruby/pull/11235 | |||
2024-06-08 | ripper: Introduce `RIPPER_ID` macro instead of `ripper_id_` macros | Nobuyoshi Nakada | |
2024-05-21 | ripper: Extend to represent array access and splat | Nobuyoshi Nakada | |
2024-05-21 | ripper: Allow parenthesized comma in options | Nobuyoshi Nakada | |
2024-05-21 | ripper: Preserve indentation | Nobuyoshi Nakada | |
2024-05-21 | ripper: Remove rb_ripper_none | Nobuyoshi Nakada | |
Now it is used only for wheter `opt_paren_args` is `none`. Introduce a new special node to distinguish an empty parentheses from it . | |||
2024-05-21 | ripper: Short hand for `rb_ary_new_from_args` | Nobuyoshi Nakada | |
2024-05-21 | ripper: Make `$:n` to refer each grammar values | Nobuyoshi Nakada | |
Ripper DSL uses these values for callbacks, but does not need indexes. | |||
2024-05-04 | Change return value of `gets` function to be `rb_parser_string_t *` instead ↵ | yui-knk | |
of `VALUE` This change reduces parser's dependency on ruby object. | |||
2024-04-29 | ripper: Move DSL line pattern | Nobuyoshi Nakada | |
2024-04-29 | Use user defined parameterizing rules | ydah | |
2024-04-27 | ruby tool/update-deps --fix | 卜部昌平 | |
2024-04-23 | Move encoding object conversion outside of parser | yui-knk | |
Reduce the parser's dependence on `VALUE` and `rb_enc_from_encoding`. | |||
2024-04-23 | Adjust indent [ci skip] | Nobuyoshi Nakada | |
2024-04-23 | Refactor parser compile functions | yui-knk | |
Refactor parser compile functions to reduce the dependence on ruby functions. This commit includes these changes 1. Refactor `gets`, `input` and `gets_` of `parser_params` Parser needs two different data structure to get next line, function (`gets`) and input data (`input`). However `gets_` is used for both function (`call`) and input data (`ptr`). `call` is used for managing general callback function when `rb_ruby_parser_compile_generic` is used. `ptr` is used for managing the current pointer on String when `parser_compile_string` is used. This commit changes parser to used only `gets` and `input` then removes `gets_`. 2. Move parser_compile functions and `gets` functions from parse.y to ruby_parser.c This change reduces the dependence on ruby functions from parser. 3. Change ruby_parser and ripper to take care of `VALUE input` GC mark Move the responsibility of calling `rb_gc_mark` for `VALUE input` from parser to ruby_parser and ripper. `input` is arbitrary data pointer from the viewpoint of parser. 4. Introduce rb_parser_compile_array function Caller of `rb_parser_compile_generic` needs to take care about GC because ruby_parser doesn’t know about the detail of `lex_gets` and `input`. Introduce `rb_parser_compile_array` to reduce the complexity of ast.c. | |||
2024-04-14 | Remove undefined function's prototype declaration | yui-knk | |
89cfc152071 removed the definition of these functions. | |||
2024-04-02 | Remove `rb_imemo_tmpbuf_t` from parser | yui-knk | |
No parser semantic value types are `VALUE` then no need to use imemo for managing semantic value stack anymore. | |||
2024-04-02 | [Feature #20331] Simplify parser warnings for hash keys duplication and when ↵ | yui-knk | |
clause duplication This commit simplifies warnings for hash keys duplication and when clause duplication, based on the discussion of https://bugs.ruby-lang.org/issues/20331. Warnings are reported only when strings are same to ohters. | |||
2024-03-21 | Fix Ripper memory allocation size when enabled Universal Parser | S-H-GAMELINKS | |
The size of `struct parser_params` is 8 bytes difference in `ripper_s_allocate` and `rb_ruby_parser_allocate` when the universal parser is enabled. This causes a situation where `*r->p` is not fully initialized in `ripper_s_allocate` as shown below. ```console (gdb) p *r->p $2 = {heap = 0x0, lval = 0x0, yylloc = 0x0, lex = {strterm = 0x0, gets = 0x0, input = 0, string_buffer = {head = 0x0, last = 0x0}, lastlin e = 0x0, nextline = 0x0, pbeg = 0x0, pcur = 0x0, pend = 0x0, ptok = 0x0, gets_ = {ptr = 0, call = 0x0}, state = EXPR_NONE, paren_nest = 0, lpar _seen = 0, debug = 0, has_shebang = 0, token_seen = 0, token_info_enabled = 0, error_p = 0, cr_seen = 0, value = 0, result = 0, parsing_thread = 0, s_value = 0, s_lvalue = 0, s_value_stack = 2097} ```` This seems to cause `double free or corruption (!prev)` and SEGV. So, fixing this by introduce `rb_ripper_parser_params_allocate` and `rb_ruby_parser_config` functions for Ripper, and `struct parser_params` same size is returned. | |||
2024-03-17 | Remove no longer needed matching | Nobuyoshi Nakada | |
2024-03-17 | Revert "Remove flip-flop usages from build scripts" | Nobuyoshi Nakada | |
This reverts commit 301fa452f7a9cdea922103e9c50d85a2d5652d0d. | |||
2024-03-14 | Ensure test suite is compatible with --frozen-string-literal | Jean Boussier | |
As preparation for https://bugs.ruby-lang.org/issues/20205 making sure the test suite is compatible with frozen string literals is making things easier. | |||
2024-02-20 | Move ripper_validate_object to ripper_init.c.tmpl | yui-knk | |
2024-02-20 | [Feature #20257] Rearchitect Ripper | yui-knk | |
Introduce another semantic value stack for Ripper so that Ripper can manage both Node and Ruby Object separately. This rearchitectutre of Ripper solves these issues. Therefore adding test cases for them. * [Bug 10436] https://bugs.ruby-lang.org/issues/10436 * [Bug 18988] https://bugs.ruby-lang.org/issues/18988 * [Bug 20055] https://bugs.ruby-lang.org/issues/20055 Checked the differences of `Ripper.sexp` for files under `/test/ruby` are only on test_pattern_matching.rb. The differences comes from the differences between `new_hash_pattern_tail` functions between parser and Ripper. Ripper `new_hash_pattern_tail` didn’t call `assignable` then `kw_rest_arg` wasn’t marked as local variable. This is also fixed by this commit. ``` --- a/./tmp/before/test_pattern_matching.rb +++ b/./tmp/after/test_pattern_matching.rb @@ -3607,7 +3607,7 @@ [:in, [:hshptn, nil, [], [:var_field, [:@ident, “a”, [984, 13]]]], [[:binary, - [:vcall, [:@ident, “a”, [985, 10]]], + [:var_ref, [:@ident, “a”, [985, 10]]], :==, [:hash, nil]]], nil]]], @@ -3662,7 +3662,7 @@ [:in, [:hshptn, nil, [], [:var_field, [:@ident, “a”, [993, 13]]]], [[:binary, - [:vcall, [:@ident, “a”, [994, 10]]], + [:var_ref, [:@ident, “a”, [994, 10]]], :==, [:hash, [:assoclist_from_args, @@ -3813,7 +3813,7 @@ [:command, [:@ident, “raise”, [1022, 10]], [:args_add_block, - [[:vcall, [:@ident, “b”, [1022, 16]]]], + [[:var_ref, [:@ident, “b”, [1022, 16]]]], false]]], [:else, [[:var_ref, [:@kw, “true”, [1024, 10]]]]]]]], nil, @@ -3876,7 +3876,7 @@ [:@int, “0”, [1033, 15]]], :“&&“, [:binary, - [:vcall, [:@ident, “b”, [1033, 20]]], + [:var_ref, [:@ident, “b”, [1033, 20]]], :==, [:hash, nil]]]], nil]]], @@ -3946,7 +3946,7 @@ [:@int, “0”, [1042, 15]]], :“&&“, [:binary, - [:vcall, [:@ident, “b”, [1042, 20]]], + [:var_ref, [:@ident, “b”, [1042, 20]]], :==, [:hash, [:assoclist_from_args, @@ -5206,7 +5206,7 @@ [[:assoc_new, [:@label, “c:“, [1352, 22]], [:@int, “0”, [1352, 25]]]]]], - [:vcall, [:@ident, “r”, [1352, 29]]]], + [:var_ref, [:@ident, “r”, [1352, 29]]]], false]]], [:binary, [:call, @@ -5299,7 +5299,7 @@ [:assoc_new, [:@label, “c:“, [1367, 34]], [:@int, “0”, [1367, 37]]]]]], - [:vcall, [:@ident, “r”, [1367, 41]]]], + [:var_ref, [:@ident, “r”, [1367, 41]]]], false]]], [:binary, [:call, @@ -5931,7 +5931,7 @@ [:in, [:hshptn, nil, [], [:var_field, [:@ident, “r”, [1533, 11]]]], [[:binary, - [:vcall, [:@ident, “r”, [1534, 8]]], + [:var_ref, [:@ident, “r”, [1534, 8]]], :==, [:hash, [:assoclist_from_args, ``` | |||
2024-01-30 | [DOC] Fix Ripper DSL input example | yui-knk | |
'!' suffix is needed for event dispatch. | |||
2024-01-23 | Make lastline and nextline to be rb_parser_string | yui-knk | |
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`. | |||
2024-01-19 | Mark asan fake stacks during machine stack marking | KJ Tsanaktsidis | |
ASAN leaves a pointer to the fake frame on the stack; we can use the __asan_addr_is_in_fake_stack API to work out the extent of the fake stack and thus mark any VALUEs contained therein. [Bug #20001] | |||
2024-01-12 | Statically allocate parser config | yui-knk | |
2024-01-12 | Revert "Mark asan fake stacks during machine stack marking" | KJ Tsanaktsidis | |
This reverts commit d10bc3a2b8300cffc383e10c3730871e851be24c. | |||
2024-01-12 | Mark asan fake stacks during machine stack marking | KJ Tsanaktsidis | |
ASAN leaves a pointer to the fake frame on the stack; we can use the __asan_addr_is_in_fake_stack API to work out the extent of the fake stack and thus mark any VALUEs contained therein. [Bug #20001] | |||
2024-01-07 | Introduce Numeric Node's | S-H-GAMELINKS | |
2023-12-28 | Verify that events2table.c was generated successfully | Nobuyoshi Nakada | |
2023-12-10 | Change the semantics of rb_postponed_job_register | KJ Tsanaktsidis | |
Our current implementation of rb_postponed_job_register suffers from some safety issues that can lead to interpreter crashes (see bug #1991). Essentially, the issue is that jobs can be called with the wrong arguments. We made two attempts to fix this whilst keeping the promised semantics, but: * The first one involved masking/unmasking when flushing jobs, which was believed to be too expensive * The second one involved a lock-free, multi-producer, single-consumer ringbuffer, which was too complex The critical insight behind this third solution is that essentially the only user of these APIs are a) internal, or b) profiling gems. For a), none of the usages actually require variable data; they will work just fine with the preregistration interface. For b), generally profiling gems only call a single callback with a single piece of data (which is actually usually just zero) for the life of the program. The ringbuffer is complex because it needs to support multi-word inserts of job & data (which can't be atomic); but nobody actually even needs that functionality, really. So, this comit: * Introduces a pre-registration API for jobs, with a GVL-requiring rb_postponed_job_prereigster, which returns a handle which can be used with an async-signal-safe rb_postponed_job_trigger. * Deprecates rb_postponed_job_register (and re-implements it on top of the preregister function for compatability) * Moves all the internal usages of postponed job register pre-registration | |||
2023-10-20 | Stop creating ripper.h because it's not used | yui-knk | |
2023-10-10 | ripper: Support member references in the DSL | Nobuyoshi Nakada | |
2023-10-01 | Use rb_node_opt_arg_t and rb_node_kw_arg_t instead of NODE | yui-knk | |
2023-09-30 | Extract `ripper_parser_params` | Nobuyoshi Nakada | |
2023-09-28 | Change RNode structure from union to struct | yui-knk | |
All kind of AST nodes use same struct RNode, which has u1, u2, u3 union members for holding different kind of data. This has two problems. 1. Low flexibility of data structure Some nodes, for example NODE_TRUE, don’t use u1, u2, u3. On the other hand, NODE_OP_ASGN2 needs more than three union members. However they use same structure definition, need to allocate three union members for NODE_TRUE and need to separate NODE_OP_ASGN2 into another node. This change removes the restriction so make it possible to change data structure by each node type. 2. No compile time check for union member access It’s developer’s responsibility for using correct member for each node type when it’s union. This change clarifies which node has which type of fields and enables compile time check. This commit also changes node_buffer_elem_struct buf management to handle different size data with alignment. | |||
2023-09-25 | ripper: Support named references in the DSL | Nobuyoshi Nakada | |
2023-09-17 | ripper: Preprocess ripper-dispatchable types only | Nobuyoshi Nakada | |
Keep the other types, which not having setter macros for ripper. | |||
2023-09-10 | Set ripper_init.c.tmpl to C mode [ci skip] | Nobuyoshi Nakada | |
2023-08-25 | include missing header | 卜部昌平 | |
Notes: Merged: https://github.com/ruby/ruby/pull/8274 |