Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions .github/workflows/documentation.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,6 @@ jobs:
run: |
sudo apt-get update
sudo apt-get install doxygen graphviz
- name: Generate the templates
run: bundle exec rake templates
- name: Check ruby coverage
run: bundle exec rake rdoc:coverage
- name: Check C coverage
Expand Down
30 changes: 16 additions & 14 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,8 @@ GEM
specs:
ast (2.4.3)
benchmark-ips (2.14.0)
date (3.5.1)
date (3.5.1-java)
erb (6.0.2)
erb (6.0.2-java)
erb (6.0.7)
erb (6.0.7-java)
ffi (1.17.3)
ffi (1.17.3-aarch64-linux-gnu)
ffi (1.17.3-aarch64-linux-musl)
Expand All @@ -26,7 +24,8 @@ GEM
prism (>= 1.3.0)
rdoc (>= 4.0.0)
reline (>= 0.4.2)
jar-dependencies (0.5.5)
jar-dependencies (0.5.7)
logger (1.7.0)
lrama (0.8.0)
mini_portile2 (2.8.9)
nokogiri (1.19.1)
Expand Down Expand Up @@ -54,21 +53,25 @@ GEM
pp (0.6.3)
prettyprint
prettyprint (0.2.0)
psych (5.3.1)
date
stringio
psych (5.3.1-java)
date
jar-dependencies (>= 0.1.7)
racc (1.8.1)
racc (1.8.1-java)
rake (13.3.1)
rake-compiler (1.3.1)
rake
rake-compiler-dock (1.12.0)
rdoc (7.2.0)
rbs (4.1.3)
logger
prism (>= 1.6.0)
tsort
rbs (4.1.3-java)
jar-dependencies (>= 0.1.7)
logger
prism (>= 1.6.0)
tsort
rdoc (8.0.0)
erb
psych (>= 4.0.0)
prism (>= 1.6.0)
rbs (>= 4.0.0)
tsort
reline (0.6.3)
io-console (~> 0.5)
Expand All @@ -78,7 +81,6 @@ GEM
racc (~> 1.5)
sexp_processor (~> 4.16)
sexp_processor (4.17.5)
stringio (3.2.0)
test-unit (3.7.7)
power_assert
tsort (0.2.0)
Expand Down
2 changes: 2 additions & 0 deletions lib/prism/node_ext.rb
Original file line number Diff line number Diff line change
Expand Up @@ -386,6 +386,7 @@ def full_message_loc
end
end

# :stopdoc:
class InNode < Node
Comment thread
Earlopain marked this conversation as resolved.
#: () -> String
def in # :nodoc
Expand Down Expand Up @@ -487,4 +488,5 @@ def closing_loc # :nodoc
end_keyword_loc
end
end
# :startdoc:
end
1 change: 1 addition & 0 deletions lib/prism/translation/ruby_parser.rb
Original file line number Diff line number Diff line change
Expand Up @@ -1627,6 +1627,7 @@ def visit_write_value(node)
# Optional scopes to pass to the parser.
attr_reader :scopes #: Array[Array[Symbol]]?

# :nodoc:
#: (?scopes: Array[Array[Symbol]]?) -> void
def initialize(scopes: nil)
super()
Expand Down
6 changes: 5 additions & 1 deletion rakelib/rdoc.rake
Original file line number Diff line number Diff line change
Expand Up @@ -26,4 +26,8 @@ RDoc::Task.new(:rdoc) do |rdoc|
)
end

Rake::Task["rdoc"].prerequisites.unshift("templates")
%w[rdoc rerdoc rdoc:coverage].each do |name|
# rdoc:coverage available in rdoc as a default gem since ruby 3.3 only
next unless Rake::Task.task_defined?(name)
Rake::Task[name].enhance(["compile"])
end
Comment thread
Earlopain marked this conversation as resolved.
44 changes: 33 additions & 11 deletions src/prism.c
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,20 @@ pm_version(void) {
#define PM_NODE_LENGTH_SET_TOKEN(parser_, node_, token_) (PM_NODE_LENGTH(node_) = PM_TOKEN_END(parser_, token_) - PM_NODE_START(node_))
#define PM_NODE_LENGTH_SET_LOCATION(node_, location_) (PM_NODE_LENGTH(node_) = PM_LOCATION_END(location_) - PM_NODE_START(node_))

#define PM_LOCATION_INIT(start_, length_) ((pm_location_t) { .start = (start_), .length = (length_) })
/**
* A function instead of a compound literal: MSVC 19.16 (VS2017) miscompiles a
* conditional expression whose arms are both struct compound literals — it
* materializes both arms before testing the condition, so the token
* dereferences in the unselected arm of NTOK2LOC and friends fault on NULL.
* Function call arguments are only evaluated on the selected branch.
*/
static PRISM_INLINE pm_location_t
pm_location_init(uint32_t start, uint32_t length) {
pm_location_t location = { .start = start, .length = length };
return location;
}

#define PM_LOCATION_INIT(start_, length_) pm_location_init((start_), (length_))
#define PM_LOCATION_INIT_UNSET PM_LOCATION_INIT(0, 0)
#define PM_LOCATION_INIT_TOKEN(parser_, token_) PM_LOCATION_INIT(PM_TOKEN_START(parser_, token_), PM_TOKEN_LENGTH(token_))
#define PM_LOCATION_INIT_NODE(node_) UP(node_)->location
Expand Down Expand Up @@ -5670,12 +5683,15 @@ pm_match_write_node_create(pm_parser_t *parser, pm_call_node_t *call) {
*/
static pm_module_node_t *
pm_module_node_create(pm_parser_t *parser, pm_constant_id_list_t *locals, const pm_token_t *module_keyword, pm_node_t *constant_path, const pm_token_t *name, pm_node_t *body, const pm_token_t *end_keyword) {
pm_constant_id_list_t module_locals = { .ids = NULL, .size = 0, .capacity = 0 };
if (locals != NULL) module_locals = *locals;

return pm_module_node_new(
parser->arena,
++parser->node_id,
0,
PM_LOCATION_INIT_TOKENS(parser, module_keyword, end_keyword),
(locals == NULL ? ((pm_constant_id_list_t) { .ids = NULL, .size = 0, .capacity = 0 }) : *locals),
module_locals,
TOK2LOC(parser, module_keyword),
constant_path,
body,
Expand Down Expand Up @@ -17033,10 +17049,11 @@ parse_pattern_rest(pm_parser_t *parser, pm_constant_id_list_t *captures) {
pm_parser_local_add(parser, constant_id, parser->previous.start, parser->previous.end, 0);
}

parse_pattern_capture(parser, captures, constant_id, &TOK2LOC(parser, &parser->previous));
pm_location_t previous_loc = TOK2LOC(parser, &parser->previous);
parse_pattern_capture(parser, captures, constant_id, &previous_loc);
name = UP(pm_local_variable_target_node_create(
parser,
&TOK2LOC(parser, &parser->previous),
&previous_loc,
constant_id,
(uint32_t) (depth == -1 ? 0 : depth)
));
Expand Down Expand Up @@ -17069,10 +17086,11 @@ parse_pattern_keyword_rest(pm_parser_t *parser, pm_constant_id_list_t *captures)
pm_parser_local_add(parser, constant_id, parser->previous.start, parser->previous.end, 0);
}

parse_pattern_capture(parser, captures, constant_id, &TOK2LOC(parser, &parser->previous));
pm_location_t previous_loc = TOK2LOC(parser, &parser->previous);
parse_pattern_capture(parser, captures, constant_id, &previous_loc);
value = UP(pm_local_variable_target_node_create(
parser,
&TOK2LOC(parser, &parser->previous),
&previous_loc,
constant_id,
(uint32_t) (depth == -1 ? 0 : depth)
));
Expand Down Expand Up @@ -17316,10 +17334,11 @@ parse_pattern_primitive(pm_parser_t *parser, pm_constant_id_list_t *captures, pm
pm_parser_local_add(parser, constant_id, parser->previous.start, parser->previous.end, 0);
}

parse_pattern_capture(parser, captures, constant_id, &TOK2LOC(parser, &parser->previous));
pm_location_t previous_loc = TOK2LOC(parser, &parser->previous);
parse_pattern_capture(parser, captures, constant_id, &previous_loc);
return UP(pm_local_variable_target_node_create(
parser,
&TOK2LOC(parser, &parser->previous),
&previous_loc,
constant_id,
(uint32_t) (depth == -1 ? 0 : depth)
));
Expand Down Expand Up @@ -17668,10 +17687,11 @@ parse_pattern_primitives(pm_parser_t *parser, pm_constant_id_list_t *captures, p
pm_parser_local_add(parser, constant_id, parser->previous.start, parser->previous.end, 0);
}

parse_pattern_capture(parser, captures, constant_id, &TOK2LOC(parser, &parser->previous));
pm_location_t previous_loc = TOK2LOC(parser, &parser->previous);
parse_pattern_capture(parser, captures, constant_id, &previous_loc);
pm_local_variable_target_node_t *target = pm_local_variable_target_node_create(
parser,
&TOK2LOC(parser, &parser->previous),
&previous_loc,
constant_id,
(uint32_t) (depth == -1 ? 0 : depth)
);
Expand Down Expand Up @@ -21459,7 +21479,9 @@ parse_regular_expression_named_capture(pm_parser_t *parser, const pm_string_t *c

// Next, create the local variable target and add it to the list of
// targets for the match.
pm_node_t *target = UP(pm_local_variable_target_node_create(parser, &TOK2LOC(parser, &((pm_token_t) { .type = 0, .start = start, .end = end })), name, depth == -1 ? 0 : (uint32_t) depth));
pm_token_t token = { .type = 0, .start = start, .end = end };
pm_location_t token_loc = TOK2LOC(parser, &token);
pm_node_t *target = UP(pm_local_variable_target_node_create(parser, &token_loc, name, depth == -1 ? 0 : (uint32_t) depth));
pm_node_list_append(parser->arena, &callback_data->match->targets, target);
}

Expand Down