mirror of
https://github.com/ruby/ruby.git
synced 2025-08-28 07:26:00 +02:00
![]() This patch is part of universal parser work. ## Summary - Decouple VALUE from members below: - `(struct parser_params *)->debug_lines` - `(rb_ast_t *)->body.script_lines` - Instead, they are now `rb_parser_ary_t *` - They can also be a `(VALUE)FIXNUM` as before to hold line count - `ISEQ_BODY(iseq)->variable.script_lines` remains VALUE - In order to do this, - Add `VALUE script_lines` param to `rb_iseq_new_with_opt()` - Introduce `rb_parser_build_script_lines_from()` to convert `rb_parser_ary_t *` into `VALUE` ## Other details - Extend `rb_parser_ary_t *`. It previously could only store `rb_parser_ast_token *`, now can store script_lines, too - Change tactics of building the top-level `SCRIPT_LINES__` in `yycompile0()` - Before: While parsing, each line of the script is added to `SCRIPT_LINES__[path]` - After: After `yyparse(p)`, `SCRIPT_LINES__[path]` will be built from `p->debug_lines` - Remove the second parameter of `rb_parser_set_script_lines()` to make it simple - Introduce `script_lines_free()` to be called from `rb_ast_free()` because the GC no longer takes care of the script_lines - Introduce `rb_parser_string_deep_copy()` in parse.y to maintain script_lines when `rb_ruby_parser_free()` called - With regard to this, please see *Future tasks* below ## Future tasks - Decouple IMEMO from `rb_ast_t *` - This lifts the five-members-restriction of Ruby object, - So we will be able to move the ownership of the `lex.string_buffer` from parser to AST - Then we remove `rb_parser_string_deep_copy()` to make the whole thing simple |
||
---|---|---|
.. | ||
array.h | ||
basic_operators.h | ||
bignum.h | ||
bits.h | ||
class.h | ||
cmdlineopt.h | ||
compar.h | ||
compile.h | ||
compilers.h | ||
complex.h | ||
cont.h | ||
dir.h | ||
enc.h | ||
encoding.h | ||
enum.h | ||
enumerator.h | ||
error.h | ||
eval.h | ||
file.h | ||
fixnum.h | ||
gc.h | ||
hash.h | ||
imemo.h | ||
inits.h | ||
io.h | ||
load.h | ||
loadpath.h | ||
math.h | ||
missing.h | ||
numeric.h | ||
object.h | ||
parse.h | ||
proc.h | ||
process.h | ||
ractor.h | ||
random.h | ||
range.h | ||
rational.h | ||
re.h | ||
ruby_parser.h | ||
sanitizers.h | ||
serial.h | ||
signal.h | ||
st.h | ||
static_assert.h | ||
string.h | ||
struct.h | ||
symbol.h | ||
thread.h | ||
time.h | ||
transcode.h | ||
util.h | ||
variable.h | ||
vm.h | ||
warnings.h |