diff options
author | Kevin Newton <[email protected]> | 2023-11-03 08:42:48 -0400 |
---|---|---|
committer | Kevin Newton <[email protected]> | 2023-11-03 10:13:50 -0400 |
commit | ec86b2eb3947060cffbc95c7c236e110a269c7de (patch) | |
tree | 64f68447e59a1b43fe83b3de586921eebc149da5 | |
parent | aab2a6a8a3166c9d3eeaf7a41191afde515e6271 (diff) |
[prism] Update to use new options APIs
-rw-r--r-- | common.mk | 15 | ||||
-rw-r--r-- | iseq.c | 25 | ||||
-rw-r--r-- | prism/extension.c | 36 | ||||
-rw-r--r-- | ruby.c | 20 |
4 files changed, 59 insertions, 37 deletions
@@ -97,6 +97,7 @@ PRISM_FILES = prism/api_node.$(OBJEXT) \ prism/enc/pm_windows_31j.$(OBJEXT) \ prism/extension.$(OBJEXT) \ prism/node.$(OBJEXT) \ + prism/options.$(OBJEXT) \ prism/pack.$(OBJEXT) \ prism/prettyprint.$(OBJEXT) \ prism/regexp.$(OBJEXT) \ @@ -3214,6 +3215,7 @@ compile.$(OBJEXT): $(top_srcdir)/prism/defines.h compile.$(OBJEXT): $(top_srcdir)/prism/diagnostic.h compile.$(OBJEXT): $(top_srcdir)/prism/enc/pm_encoding.h compile.$(OBJEXT): $(top_srcdir)/prism/node.h +compile.$(OBJEXT): $(top_srcdir)/prism/options.h compile.$(OBJEXT): $(top_srcdir)/prism/pack.h compile.$(OBJEXT): $(top_srcdir)/prism/parser.h compile.$(OBJEXT): $(top_srcdir)/prism/prettyprint.h @@ -8267,6 +8269,7 @@ iseq.$(OBJEXT): $(top_srcdir)/prism/defines.h iseq.$(OBJEXT): $(top_srcdir)/prism/diagnostic.h iseq.$(OBJEXT): $(top_srcdir)/prism/enc/pm_encoding.h iseq.$(OBJEXT): $(top_srcdir)/prism/node.h +iseq.$(OBJEXT): $(top_srcdir)/prism/options.h iseq.$(OBJEXT): $(top_srcdir)/prism/pack.h iseq.$(OBJEXT): $(top_srcdir)/prism/parser.h iseq.$(OBJEXT): $(top_srcdir)/prism/prettyprint.h @@ -11335,6 +11338,7 @@ prism/api_node.$(OBJEXT): $(top_srcdir)/prism/diagnostic.h prism/api_node.$(OBJEXT): $(top_srcdir)/prism/enc/pm_encoding.h prism/api_node.$(OBJEXT): $(top_srcdir)/prism/extension.h prism/api_node.$(OBJEXT): $(top_srcdir)/prism/node.h +prism/api_node.$(OBJEXT): $(top_srcdir)/prism/options.h prism/api_node.$(OBJEXT): $(top_srcdir)/prism/pack.h prism/api_node.$(OBJEXT): $(top_srcdir)/prism/parser.h prism/api_node.$(OBJEXT): $(top_srcdir)/prism/prettyprint.h @@ -11528,6 +11532,7 @@ prism/api_pack.$(OBJEXT): $(top_srcdir)/prism/diagnostic.h prism/api_pack.$(OBJEXT): $(top_srcdir)/prism/enc/pm_encoding.h prism/api_pack.$(OBJEXT): $(top_srcdir)/prism/extension.h prism/api_pack.$(OBJEXT): $(top_srcdir)/prism/node.h +prism/api_pack.$(OBJEXT): $(top_srcdir)/prism/options.h prism/api_pack.$(OBJEXT): $(top_srcdir)/prism/pack.h prism/api_pack.$(OBJEXT): $(top_srcdir)/prism/parser.h prism/api_pack.$(OBJEXT): $(top_srcdir)/prism/prettyprint.h @@ -11833,6 +11838,7 @@ prism/extension.$(OBJEXT): $(top_srcdir)/prism/enc/pm_encoding.h prism/extension.$(OBJEXT): $(top_srcdir)/prism/extension.c prism/extension.$(OBJEXT): $(top_srcdir)/prism/extension.h prism/extension.$(OBJEXT): $(top_srcdir)/prism/node.h +prism/extension.$(OBJEXT): $(top_srcdir)/prism/options.h prism/extension.$(OBJEXT): $(top_srcdir)/prism/pack.h prism/extension.$(OBJEXT): $(top_srcdir)/prism/parser.h prism/extension.$(OBJEXT): $(top_srcdir)/prism/prettyprint.h @@ -12021,6 +12027,7 @@ prism/node.$(OBJEXT): $(top_srcdir)/prism/defines.h prism/node.$(OBJEXT): $(top_srcdir)/prism/diagnostic.h prism/node.$(OBJEXT): $(top_srcdir)/prism/enc/pm_encoding.h prism/node.$(OBJEXT): $(top_srcdir)/prism/node.h +prism/node.$(OBJEXT): $(top_srcdir)/prism/options.h prism/node.$(OBJEXT): $(top_srcdir)/prism/pack.h prism/node.$(OBJEXT): $(top_srcdir)/prism/parser.h prism/node.$(OBJEXT): $(top_srcdir)/prism/prism.h @@ -12037,6 +12044,10 @@ prism/node.$(OBJEXT): $(top_srcdir)/prism/util/pm_strpbrk.h prism/node.$(OBJEXT): {$(VPATH)}config.h prism/node.$(OBJEXT): {$(VPATH)}prism/ast.h prism/node.$(OBJEXT): {$(VPATH)}prism/node.c +prism/options.$(OBJEXT): $(top_srcdir)/prism/defines.h +prism/options.$(OBJEXT): $(top_srcdir)/prism/options.c +prism/options.$(OBJEXT): $(top_srcdir)/prism/options.h +prism/options.$(OBJEXT): $(top_srcdir)/prism/util/pm_string.h prism/pack.$(OBJEXT): $(top_srcdir)/prism/defines.h prism/pack.$(OBJEXT): $(top_srcdir)/prism/pack.c prism/pack.$(OBJEXT): $(top_srcdir)/prism/pack.h @@ -12058,6 +12069,7 @@ prism/prism.$(OBJEXT): $(top_srcdir)/prism/defines.h prism/prism.$(OBJEXT): $(top_srcdir)/prism/diagnostic.h prism/prism.$(OBJEXT): $(top_srcdir)/prism/enc/pm_encoding.h prism/prism.$(OBJEXT): $(top_srcdir)/prism/node.h +prism/prism.$(OBJEXT): $(top_srcdir)/prism/options.h prism/prism.$(OBJEXT): $(top_srcdir)/prism/pack.h prism/prism.$(OBJEXT): $(top_srcdir)/prism/parser.h prism/prism.$(OBJEXT): $(top_srcdir)/prism/prettyprint.h @@ -12097,6 +12109,7 @@ prism/serialize.$(OBJEXT): $(top_srcdir)/prism/defines.h prism/serialize.$(OBJEXT): $(top_srcdir)/prism/diagnostic.h prism/serialize.$(OBJEXT): $(top_srcdir)/prism/enc/pm_encoding.h prism/serialize.$(OBJEXT): $(top_srcdir)/prism/node.h +prism/serialize.$(OBJEXT): $(top_srcdir)/prism/options.h prism/serialize.$(OBJEXT): $(top_srcdir)/prism/pack.h prism/serialize.$(OBJEXT): $(top_srcdir)/prism/parser.h prism/serialize.$(OBJEXT): $(top_srcdir)/prism/prettyprint.h @@ -12191,6 +12204,7 @@ prism_init.$(OBJEXT): $(top_srcdir)/prism/diagnostic.h prism_init.$(OBJEXT): $(top_srcdir)/prism/enc/pm_encoding.h prism_init.$(OBJEXT): $(top_srcdir)/prism/extension.h prism_init.$(OBJEXT): $(top_srcdir)/prism/node.h +prism_init.$(OBJEXT): $(top_srcdir)/prism/options.h prism_init.$(OBJEXT): $(top_srcdir)/prism/pack.h prism_init.$(OBJEXT): $(top_srcdir)/prism/parser.h prism_init.$(OBJEXT): $(top_srcdir)/prism/prettyprint.h @@ -15323,6 +15337,7 @@ ruby.$(OBJEXT): $(top_srcdir)/prism/defines.h ruby.$(OBJEXT): $(top_srcdir)/prism/diagnostic.h ruby.$(OBJEXT): $(top_srcdir)/prism/enc/pm_encoding.h ruby.$(OBJEXT): $(top_srcdir)/prism/node.h +ruby.$(OBJEXT): $(top_srcdir)/prism/options.h ruby.$(OBJEXT): $(top_srcdir)/prism/pack.h ruby.$(OBJEXT): $(top_srcdir)/prism/parser.h ruby.$(OBJEXT): $(top_srcdir)/prism/prettyprint.h @@ -1414,34 +1414,34 @@ iseqw_s_compile_prism(int argc, VALUE *argv, VALUE self) Check_Type(file, T_STRING); rb_iseq_t *iseq = iseq_alloc(); + int start_line = NUM2INT(line); - pm_parser_t parser; - size_t len = RSTRING_LEN(src); - VALUE name = rb_fstring_lit("<compiled>"); + pm_options_t options = { 0 }; + pm_options_filepath_set(&options, RSTRING_PTR(file)); + pm_options_line_set(&options, start_line); - pm_parser_init(&parser, (const uint8_t *) RSTRING_PTR(src), len, ""); + pm_parser_t parser; + pm_parser_init(&parser, (const uint8_t *) RSTRING_PTR(src), RSTRING_LEN(src), &options); pm_node_t *node = pm_parse(&parser); - - int first_lineno = NUM2INT(line); pm_line_column_t start_loc = pm_newline_list_line_column(&parser.newline_list, node->location.start); pm_line_column_t end_loc = pm_newline_list_line_column(&parser.newline_list, node->location.end); rb_code_location_t node_location; - node_location.beg_pos.lineno = (int)start_loc.line; - node_location.beg_pos.column = (int)start_loc.column; - node_location.end_pos.lineno = (int)end_loc.line; - node_location.end_pos.column = (int)end_loc.column; + node_location.beg_pos.lineno = (int) start_loc.line; + node_location.beg_pos.column = (int) start_loc.column; + node_location.end_pos.lineno = (int) end_loc.line; + node_location.end_pos.column = (int) end_loc.column; int node_id = 0; - rb_iseq_t *parent = NULL; enum rb_iseq_type iseq_type = ISEQ_TYPE_TOP; rb_compile_option_t option; make_compile_option(&option, opt); - prepare_iseq_build(iseq, name, file, path, first_lineno, &node_location, node_id, + VALUE name = rb_fstring_lit("<compiled>"); + prepare_iseq_build(iseq, name, file, path, start_line, &node_location, node_id, parent, 0, (enum rb_iseq_type)iseq_type, Qnil, &option); pm_scope_node_t scope_node; @@ -1451,6 +1451,7 @@ iseqw_s_compile_prism(int argc, VALUE *argv, VALUE self) finish_iseq_build(iseq); pm_node_destroy(&parser, node); pm_parser_free(&parser); + pm_options_free(&options); return iseqw_new(iseq); } diff --git a/prism/extension.c b/prism/extension.c index 10bd141f93..839a5cda38 100644 --- a/prism/extension.c +++ b/prism/extension.c @@ -15,12 +15,12 @@ VALUE rb_cPrismParseError; VALUE rb_cPrismParseWarning; VALUE rb_cPrismParseResult; -ID id_filepath; -ID id_encoding; -ID id_line; -ID id_frozen_string_literal; -ID id_suppress_warnings; -ID id_scopes; +ID rb_option_id_filepath; +ID rb_option_id_encoding; +ID rb_option_id_line; +ID rb_option_id_frozen_string_literal; +ID rb_option_id_suppress_warnings; +ID rb_option_id_scopes; /******************************************************************************/ /* IO of Ruby code */ @@ -119,17 +119,17 @@ build_options_i(VALUE key, VALUE value, VALUE argument) { pm_options_t *options = (pm_options_t *) argument; ID key_id = SYM2ID(key); - if (key_id == id_filepath) { + if (key_id == rb_option_id_filepath) { if (!NIL_P(value)) pm_options_filepath_set(options, check_string(value)); - } else if (key_id == id_encoding) { + } else if (key_id == rb_option_id_encoding) { if (!NIL_P(value)) pm_options_encoding_set(options, rb_enc_name(rb_to_encoding(value))); - } else if (key_id == id_line) { + } else if (key_id == rb_option_id_line) { if (!NIL_P(value)) pm_options_line_set(options, NUM2UINT(value)); - } else if (key_id == id_frozen_string_literal) { + } else if (key_id == rb_option_id_frozen_string_literal) { if (!NIL_P(value)) pm_options_frozen_string_literal_set(options, value == Qtrue); - } else if (key_id == id_suppress_warnings) { + } else if (key_id == rb_option_id_suppress_warnings) { if (!NIL_P(value)) pm_options_suppress_warnings_set(options, value == Qtrue); - } else if (key_id == id_scopes) { + } else if (key_id == rb_option_id_scopes) { if (!NIL_P(value)) build_options_scopes(options, value); } else { rb_raise(rb_eArgError, "unknown keyword: %"PRIsVALUE, key); @@ -940,12 +940,12 @@ Init_prism(void) { // Intern all of the options that we support so that we don't have to do it // every time we parse. - id_filepath = rb_intern_const("filepath"); - id_encoding = rb_intern_const("encoding"); - id_line = rb_intern_const("line"); - id_frozen_string_literal = rb_intern_const("frozen_string_literal"); - id_suppress_warnings = rb_intern_const("suppress_warnings"); - id_scopes = rb_intern_const("scopes"); + rb_option_id_filepath = rb_intern_const("filepath"); + rb_option_id_encoding = rb_intern_const("encoding"); + rb_option_id_line = rb_intern_const("line"); + rb_option_id_frozen_string_literal = rb_intern_const("frozen_string_literal"); + rb_option_id_suppress_warnings = rb_intern_const("suppress_warnings"); + rb_option_id_scopes = rb_intern_const("scopes"); /** * The version of the prism library. @@ -2335,17 +2335,20 @@ process_options(int argc, char **argv, ruby_cmdline_options_t *opt) } if (dump & (DUMP_BIT(prism_parsetree))) { - pm_parser_t parser; + pm_string_t input; + pm_options_t options = { 0 }; + if (opt->e_script) { - size_t len = RSTRING_LEN(opt->e_script); - pm_parser_init(&parser, (const uint8_t *) RSTRING_PTR(opt->e_script), len, "-e"); + pm_string_constant_init(&input, RSTRING_PTR(opt->e_script), RSTRING_LEN(opt->e_script)); + pm_options_filepath_set(&options, "-e"); } else { - pm_string_t input; - char *filepath = RSTRING_PTR(opt->script_name); - pm_string_mapped_init(&input, filepath); - pm_parser_init(&parser, pm_string_source(&input), pm_string_length(&input), filepath); + pm_string_mapped_init(&input, RSTRING_PTR(opt->script_name)); + pm_options_filepath_set(&options, RSTRING_PTR(opt->script_name)); } + pm_parser_t parser; + pm_parser_init(&parser, pm_string_source(&input), pm_string_length(&input), &options); + pm_node_t *node = pm_parse(&parser); pm_buffer_t output_buffer = { 0 }; @@ -2356,6 +2359,9 @@ process_options(int argc, char **argv, ruby_cmdline_options_t *opt) pm_buffer_free(&output_buffer); pm_node_destroy(&parser, node); pm_parser_free(&parser); + + pm_string_free(&input); + pm_options_free(&options); } if (dump & (DUMP_BIT(parsetree)|DUMP_BIT(parsetree_with_comment))) { |