[ruby/prism] Set `#line" directives to respect the path in ruby/ruby repo

ruby/ruby measures test coverage of C code, but the `#line` directive
generated by prism points to a file that does not exist, so coverage is
not taken properly.

This changeset specifies the location of the source files as a relative
path in terms of ruby/ruby repo.

1a2626be27
This commit is contained in:
Yusuke Endoh 2024-06-20 12:15:25 +09:00 committed by git
parent 0a9f1ecc37
commit c3b5b98e15
3 changed files with 19 additions and 19 deletions

View file

@ -1,4 +1,4 @@
#line <%= __LINE__ + 1 %> "<%= File.basename(__FILE__) %>" #line <%= __LINE__ + 1 %> "prism/templates/ext/prism/<%= File.basename(__FILE__) %>"
#include "prism/extension.h" #include "prism/extension.h"
extern VALUE rb_cPrism; extern VALUE rb_cPrism;
@ -142,7 +142,7 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
switch (PM_NODE_TYPE(node)) { switch (PM_NODE_TYPE(node)) {
<%- nodes.each do |node| -%> <%- nodes.each do |node| -%>
<%- if node.fields.any? { |field| [Prism::Template::NodeField, Prism::Template::OptionalNodeField, Prism::Template::NodeListField].include?(field.class) } -%> <%- if node.fields.any? { |field| [Prism::Template::NodeField, Prism::Template::OptionalNodeField, Prism::Template::NodeListField].include?(field.class) } -%>
#line <%= __LINE__ + 1 %> "<%= File.basename(__FILE__) %>" #line <%= __LINE__ + 1 %> "prism/templates/ext/prism/<%= File.basename(__FILE__) %>"
case <%= node.type %>: { case <%= node.type %>: {
pm_<%= node.human %>_t *cast = (pm_<%= node.human %>_t *) node; pm_<%= node.human %>_t *cast = (pm_<%= node.human %>_t *) node;
<%- node.fields.each do |field| -%> <%- node.fields.each do |field| -%>
@ -162,13 +162,13 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
default: default:
break; break;
} }
#line <%= __LINE__ + 1 %> "<%= File.basename(__FILE__) %>" #line <%= __LINE__ + 1 %> "prism/templates/ext/prism/<%= File.basename(__FILE__) %>"
} else { } else {
const pm_node_t *node = pm_node_stack_pop(&node_stack); const pm_node_t *node = pm_node_stack_pop(&node_stack);
switch (PM_NODE_TYPE(node)) { switch (PM_NODE_TYPE(node)) {
<%- nodes.each do |node| -%> <%- nodes.each do |node| -%>
#line <%= __LINE__ + 1 %> "<%= File.basename(__FILE__) %>" #line <%= __LINE__ + 1 %> "prism/templates/ext/prism/<%= File.basename(__FILE__) %>"
case <%= node.type %>: { case <%= node.type %>: {
<%- if node.fields.any? { |field| ![Prism::Template::NodeField, Prism::Template::OptionalNodeField, Prism::Template::FlagsField].include?(field.class) } -%> <%- if node.fields.any? { |field| ![Prism::Template::NodeField, Prism::Template::OptionalNodeField, Prism::Template::FlagsField].include?(field.class) } -%>
pm_<%= node.human %>_t *cast = (pm_<%= node.human %>_t *) node; pm_<%= node.human %>_t *cast = (pm_<%= node.human %>_t *) node;
@ -182,50 +182,50 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
// <%= field.name %> // <%= field.name %>
<%- case field -%> <%- case field -%>
<%- when Prism::Template::NodeField, Prism::Template::OptionalNodeField -%> <%- when Prism::Template::NodeField, Prism::Template::OptionalNodeField -%>
#line <%= __LINE__ + 1 %> "<%= File.basename(__FILE__) %>" #line <%= __LINE__ + 1 %> "prism/templates/ext/prism/<%= File.basename(__FILE__) %>"
argv[<%= index %>] = rb_ary_pop(value_stack); argv[<%= index %>] = rb_ary_pop(value_stack);
<%- when Prism::Template::NodeListField -%> <%- when Prism::Template::NodeListField -%>
#line <%= __LINE__ + 1 %> "<%= File.basename(__FILE__) %>" #line <%= __LINE__ + 1 %> "prism/templates/ext/prism/<%= File.basename(__FILE__) %>"
argv[<%= index %>] = rb_ary_new_capa(cast-><%= field.name %>.size); argv[<%= index %>] = rb_ary_new_capa(cast-><%= field.name %>.size);
for (size_t index = 0; index < cast-><%= field.name %>.size; index++) { for (size_t index = 0; index < cast-><%= field.name %>.size; index++) {
rb_ary_push(argv[<%= index %>], rb_ary_pop(value_stack)); rb_ary_push(argv[<%= index %>], rb_ary_pop(value_stack));
} }
<%- when Prism::Template::StringField -%> <%- when Prism::Template::StringField -%>
#line <%= __LINE__ + 1 %> "<%= File.basename(__FILE__) %>" #line <%= __LINE__ + 1 %> "prism/templates/ext/prism/<%= File.basename(__FILE__) %>"
argv[<%= index %>] = pm_string_new(&cast-><%= field.name %>, encoding); argv[<%= index %>] = pm_string_new(&cast-><%= field.name %>, encoding);
<%- when Prism::Template::ConstantField -%> <%- when Prism::Template::ConstantField -%>
#line <%= __LINE__ + 1 %> "<%= File.basename(__FILE__) %>" #line <%= __LINE__ + 1 %> "prism/templates/ext/prism/<%= File.basename(__FILE__) %>"
assert(cast-><%= field.name %> != 0); assert(cast-><%= field.name %> != 0);
argv[<%= index %>] = RARRAY_AREF(constants, cast-><%= field.name %> - 1); argv[<%= index %>] = RARRAY_AREF(constants, cast-><%= field.name %> - 1);
<%- when Prism::Template::OptionalConstantField -%> <%- when Prism::Template::OptionalConstantField -%>
argv[<%= index %>] = cast-><%= field.name %> == 0 ? Qnil : RARRAY_AREF(constants, cast-><%= field.name %> - 1); argv[<%= index %>] = cast-><%= field.name %> == 0 ? Qnil : RARRAY_AREF(constants, cast-><%= field.name %> - 1);
<%- when Prism::Template::ConstantListField -%> <%- when Prism::Template::ConstantListField -%>
#line <%= __LINE__ + 1 %> "<%= File.basename(__FILE__) %>" #line <%= __LINE__ + 1 %> "prism/templates/ext/prism/<%= File.basename(__FILE__) %>"
argv[<%= index %>] = rb_ary_new_capa(cast-><%= field.name %>.size); argv[<%= index %>] = rb_ary_new_capa(cast-><%= field.name %>.size);
for (size_t index = 0; index < cast-><%= field.name %>.size; index++) { for (size_t index = 0; index < cast-><%= field.name %>.size; index++) {
assert(cast-><%= field.name %>.ids[index] != 0); assert(cast-><%= field.name %>.ids[index] != 0);
rb_ary_push(argv[<%= index %>], RARRAY_AREF(constants, cast-><%= field.name %>.ids[index] - 1)); rb_ary_push(argv[<%= index %>], RARRAY_AREF(constants, cast-><%= field.name %>.ids[index] - 1));
} }
<%- when Prism::Template::LocationField -%> <%- when Prism::Template::LocationField -%>
#line <%= __LINE__ + 1 %> "<%= File.basename(__FILE__) %>" #line <%= __LINE__ + 1 %> "prism/templates/ext/prism/<%= File.basename(__FILE__) %>"
argv[<%= index %>] = pm_location_new(parser, cast-><%= field.name %>.start, cast-><%= field.name %>.end); argv[<%= index %>] = pm_location_new(parser, cast-><%= field.name %>.start, cast-><%= field.name %>.end);
<%- when Prism::Template::OptionalLocationField -%> <%- when Prism::Template::OptionalLocationField -%>
#line <%= __LINE__ + 1 %> "<%= File.basename(__FILE__) %>" #line <%= __LINE__ + 1 %> "prism/templates/ext/prism/<%= File.basename(__FILE__) %>"
argv[<%= index %>] = cast-><%= field.name %>.start == NULL ? Qnil : pm_location_new(parser, cast-><%= field.name %>.start, cast-><%= field.name %>.end); argv[<%= index %>] = cast-><%= field.name %>.start == NULL ? Qnil : pm_location_new(parser, cast-><%= field.name %>.start, cast-><%= field.name %>.end);
<%- when Prism::Template::UInt8Field -%> <%- when Prism::Template::UInt8Field -%>
#line <%= __LINE__ + 1 %> "<%= File.basename(__FILE__) %>" #line <%= __LINE__ + 1 %> "prism/templates/ext/prism/<%= File.basename(__FILE__) %>"
argv[<%= index %>] = UINT2NUM(cast-><%= field.name %>); argv[<%= index %>] = UINT2NUM(cast-><%= field.name %>);
<%- when Prism::Template::UInt32Field -%> <%- when Prism::Template::UInt32Field -%>
#line <%= __LINE__ + 1 %> "<%= File.basename(__FILE__) %>" #line <%= __LINE__ + 1 %> "prism/templates/ext/prism/<%= File.basename(__FILE__) %>"
argv[<%= index %>] = ULONG2NUM(cast-><%= field.name %>); argv[<%= index %>] = ULONG2NUM(cast-><%= field.name %>);
<%- when Prism::Template::FlagsField -%> <%- when Prism::Template::FlagsField -%>
#line <%= __LINE__ + 1 %> "<%= File.basename(__FILE__) %>" #line <%= __LINE__ + 1 %> "prism/templates/ext/prism/<%= File.basename(__FILE__) %>"
argv[<%= index %>] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK); argv[<%= index %>] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
<%- when Prism::Template::IntegerField -%> <%- when Prism::Template::IntegerField -%>
#line <%= __LINE__ + 1 %> "<%= File.basename(__FILE__) %>" #line <%= __LINE__ + 1 %> "prism/templates/ext/prism/<%= File.basename(__FILE__) %>"
argv[<%= index %>] = pm_integer_new(&cast-><%= field.name %>); argv[<%= index %>] = pm_integer_new(&cast-><%= field.name %>);
<%- when Prism::Template::DoubleField -%> <%- when Prism::Template::DoubleField -%>
#line <%= __LINE__ + 1 %> "<%= File.basename(__FILE__) %>" #line <%= __LINE__ + 1 %> "prism/templates/ext/prism/<%= File.basename(__FILE__) %>"
argv[<%= index %>] = DBL2NUM(cast-><%= field.name %>); argv[<%= index %>] = DBL2NUM(cast-><%= field.name %>);
<%- else -%> <%- else -%>
<%- raise -%> <%- raise -%>

View file

@ -106,7 +106,7 @@ PRISM_EXPORTED_FUNCTION void
pm_node_destroy(pm_parser_t *parser, pm_node_t *node) { pm_node_destroy(pm_parser_t *parser, pm_node_t *node) {
switch (PM_NODE_TYPE(node)) { switch (PM_NODE_TYPE(node)) {
<%- nodes.each do |node| -%> <%- nodes.each do |node| -%>
#line <%= __LINE__ + 1 %> "<%= File.basename(__FILE__) %>" #line <%= __LINE__ + 1 %> "prism/templates/src/<%= File.basename(__FILE__) %>"
case <%= node.type %>: { case <%= node.type %>: {
<%- if node.fields.any? { |field| ![Prism::Template::LocationField, Prism::Template::OptionalLocationField, Prism::Template::UInt8Field, Prism::Template::UInt32Field, Prism::Template::FlagsField, Prism::Template::ConstantField, Prism::Template::OptionalConstantField, Prism::Template::DoubleField].include?(field.class) } -%> <%- if node.fields.any? { |field| ![Prism::Template::LocationField, Prism::Template::OptionalLocationField, Prism::Template::UInt8Field, Prism::Template::UInt32Field, Prism::Template::FlagsField, Prism::Template::ConstantField, Prism::Template::OptionalConstantField, Prism::Template::DoubleField].include?(field.class) } -%>
pm_<%= node.human %>_t *cast = (pm_<%= node.human %>_t *) node; pm_<%= node.human %>_t *cast = (pm_<%= node.human %>_t *) node;
@ -135,7 +135,7 @@ pm_node_destroy(pm_parser_t *parser, pm_node_t *node) {
break; break;
} }
<%- end -%> <%- end -%>
#line <%= __LINE__ + 1 %> "<%= File.basename(__FILE__) %>" #line <%= __LINE__ + 1 %> "prism/templates/src/<%= File.basename(__FILE__) %>"
default: default:
assert(false && "unreachable"); assert(false && "unreachable");
break; break;

View file

@ -267,7 +267,7 @@ pm_serialize_metadata(pm_parser_t *parser, pm_buffer_t *buffer) {
pm_serialize_diagnostic_list(parser, &parser->warning_list, buffer); pm_serialize_diagnostic_list(parser, &parser->warning_list, buffer);
} }
#line <%= __LINE__ + 1 %> "<%= File.basename(__FILE__) %>" #line <%= __LINE__ + 1 %> "prism/templates/src/<%= File.basename(__FILE__) %>"
/** /**
* Serialize the metadata, nodes, and constant pool. * Serialize the metadata, nodes, and constant pool.
*/ */