Skip to content

Commit

Permalink
[ruby/prism] Move template related methods/classes under `Prism::Temp…
Browse files Browse the repository at this point in the history
…late` namespace

ruby/prism@0e4dbcd3e4
  • Loading branch information
paracycle authored and matzbot committed Mar 6, 2024
1 parent 4c64d2a commit 2e1d735
Show file tree
Hide file tree
Showing 10 changed files with 649 additions and 647 deletions.
34 changes: 17 additions & 17 deletions prism/templates/ext/prism/api_node.c.erb
Expand Up @@ -130,15 +130,15 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi

switch (PM_NODE_TYPE(node)) {
<%- nodes.each do |node| -%>
<%- if node.fields.any? { |field| [Prism::NodeField, Prism::OptionalNodeField, Prism::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__) %>"
case <%= node.type %>: {
pm_<%= node.human %>_t *cast = (pm_<%= node.human %>_t *) node;
<%- node.fields.each do |field| -%>
<%- case field -%>
<%- when Prism::NodeField, Prism::OptionalNodeField -%>
<%- when Prism::Template::NodeField, Prism::Template::OptionalNodeField -%>
pm_node_stack_push(&node_stack, (pm_node_t *) cast-><%= field.name %>);
<%- when Prism::NodeListField -%>
<%- when Prism::Template::NodeListField -%>
for (size_t index = 0; index < cast-><%= field.name %>.size; index++) {
pm_node_stack_push(&node_stack, (pm_node_t *) cast-><%= field.name %>.nodes[index]);
}
Expand All @@ -159,7 +159,7 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
<%- nodes.each do |node| -%>
#line <%= __LINE__ + 1 %> "<%= File.basename(__FILE__) %>"
case <%= node.type %>: {
<%- if node.fields.any? { |field| ![Prism::NodeField, Prism::OptionalNodeField, Prism::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;
<%- end -%>
VALUE argv[<%= node.fields.length + 2 %>];
Expand All @@ -170,50 +170,50 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi

// <%= field.name %>
<%- case field -%>
<%- when Prism::NodeField, Prism::OptionalNodeField -%>
<%- when Prism::Template::NodeField, Prism::Template::OptionalNodeField -%>
#line <%= __LINE__ + 1 %> "<%= File.basename(__FILE__) %>"
argv[<%= index %>] = rb_ary_pop(value_stack);
<%- when Prism::NodeListField -%>
<%- when Prism::Template::NodeListField -%>
#line <%= __LINE__ + 1 %> "<%= File.basename(__FILE__) %>"
argv[<%= index %>] = rb_ary_new_capa(cast-><%= field.name %>.size);
for (size_t index = 0; index < cast-><%= field.name %>.size; index++) {
rb_ary_push(argv[<%= index %>], rb_ary_pop(value_stack));
}
<%- when Prism::StringField -%>
<%- when Prism::Template::StringField -%>
#line <%= __LINE__ + 1 %> "<%= File.basename(__FILE__) %>"
argv[<%= index %>] = pm_string_new(&cast-><%= field.name %>, encoding);
<%- when Prism::ConstantField -%>
<%- when Prism::Template::ConstantField -%>
#line <%= __LINE__ + 1 %> "<%= File.basename(__FILE__) %>"
assert(cast-><%= field.name %> != 0);
argv[<%= index %>] = rb_id2sym(constants[cast-><%= field.name %> - 1]);
<%- when Prism::OptionalConstantField -%>
<%- when Prism::Template::OptionalConstantField -%>
argv[<%= index %>] = cast-><%= field.name %> == 0 ? Qnil : rb_id2sym(constants[cast-><%= field.name %> - 1]);
<%- when Prism::ConstantListField -%>
<%- when Prism::Template::ConstantListField -%>
#line <%= __LINE__ + 1 %> "<%= File.basename(__FILE__) %>"
argv[<%= index %>] = rb_ary_new_capa(cast-><%= field.name %>.size);
for (size_t index = 0; index < cast-><%= field.name %>.size; index++) {
assert(cast-><%= field.name %>.ids[index] != 0);
rb_ary_push(argv[<%= index %>], rb_id2sym(constants[cast-><%= field.name %>.ids[index] - 1]));
}
<%- when Prism::LocationField -%>
<%- when Prism::Template::LocationField -%>
#line <%= __LINE__ + 1 %> "<%= File.basename(__FILE__) %>"
argv[<%= index %>] = pm_location_new(parser, cast-><%= field.name %>.start, cast-><%= field.name %>.end);
<%- when Prism::OptionalLocationField -%>
<%- when Prism::Template::OptionalLocationField -%>
#line <%= __LINE__ + 1 %> "<%= File.basename(__FILE__) %>"
argv[<%= index %>] = cast-><%= field.name %>.start == NULL ? Qnil : pm_location_new(parser, cast-><%= field.name %>.start, cast-><%= field.name %>.end);
<%- when Prism::UInt8Field -%>
<%- when Prism::Template::UInt8Field -%>
#line <%= __LINE__ + 1 %> "<%= File.basename(__FILE__) %>"
argv[<%= index %>] = UINT2NUM(cast-><%= field.name %>);
<%- when Prism::UInt32Field -%>
<%- when Prism::Template::UInt32Field -%>
#line <%= __LINE__ + 1 %> "<%= File.basename(__FILE__) %>"
argv[<%= index %>] = ULONG2NUM(cast-><%= field.name %>);
<%- when Prism::FlagsField -%>
<%- when Prism::Template::FlagsField -%>
#line <%= __LINE__ + 1 %> "<%= File.basename(__FILE__) %>"
argv[<%= index %>] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
<%- when Prism::IntegerField -%>
<%- when Prism::Template::IntegerField -%>
#line <%= __LINE__ + 1 %> "<%= File.basename(__FILE__) %>"
argv[<%= index %>] = pm_integer_new(&cast-><%= field.name %>);
<%- when Prism::DoubleField -%>
<%- when Prism::Template::DoubleField -%>
#line <%= __LINE__ + 1 %> "<%= File.basename(__FILE__) %>"
argv[<%= index %>] = DBL2NUM(cast-><%= field.name %>);
<%- else -%>
Expand Down
26 changes: 13 additions & 13 deletions prism/templates/include/prism/ast.h.erb
Expand Up @@ -151,7 +151,7 @@ typedef struct pm_node {
* <%= node.name %>
*
* Type: <%= node.type %>
<%- if (node_flags = node.fields.find { |field| field.is_a? Prism::FlagsField }) -%>
<%- if (node_flags = node.fields.find { |field| field.is_a? Prism::Template::FlagsField }) -%>
* Flags:
<%- found = flags.find { |flag| flag.name == node_flags.kind }.tap { |found| raise "Expected to find #{field.kind}" unless found } -%>
<%- found.values.each do |value| -%>
Expand All @@ -164,7 +164,7 @@ typedef struct pm_node {
typedef struct pm_<%= node.human %> {
/** The embedded base node. */
pm_node_t base;
<%- node.fields.grep_v(Prism::FlagsField).each do |field| -%>
<%- node.fields.grep_v(Prism::Template::FlagsField).each do |field| -%>

/**
* <%= node.name %>#<%= field.name %>
Expand All @@ -176,16 +176,16 @@ typedef struct pm_<%= node.human %> {
<%- end -%>
*/
<%= case field
when Prism::NodeField, Prism::OptionalNodeField then "struct #{field.c_type} *#{field.name}"
when Prism::NodeListField then "struct pm_node_list #{field.name}"
when Prism::ConstantField, Prism::OptionalConstantField then "pm_constant_id_t #{field.name}"
when Prism::ConstantListField then "pm_constant_id_list_t #{field.name}"
when Prism::StringField then "pm_string_t #{field.name}"
when Prism::LocationField, Prism::OptionalLocationField then "pm_location_t #{field.name}"
when Prism::UInt8Field then "uint8_t #{field.name}"
when Prism::UInt32Field then "uint32_t #{field.name}"
when Prism::IntegerField then "pm_integer_t #{field.name}"
when Prism::DoubleField then "double #{field.name}"
when Prism::Template::NodeField, Prism::Template::OptionalNodeField then "struct #{field.c_type} *#{field.name}"
when Prism::Template::NodeListField then "struct pm_node_list #{field.name}"
when Prism::Template::ConstantField, Prism::Template::OptionalConstantField then "pm_constant_id_t #{field.name}"
when Prism::Template::ConstantListField then "pm_constant_id_list_t #{field.name}"
when Prism::Template::StringField then "pm_string_t #{field.name}"
when Prism::Template::LocationField, Prism::Template::OptionalLocationField then "pm_location_t #{field.name}"
when Prism::Template::UInt8Field then "uint8_t #{field.name}"
when Prism::Template::UInt32Field then "uint32_t #{field.name}"
when Prism::Template::IntegerField then "pm_integer_t #{field.name}"
when Prism::Template::DoubleField then "double #{field.name}"
else raise field.class.name
end
%>;
Expand All @@ -212,6 +212,6 @@ typedef enum pm_<%= flag.human %> {
* to specify that through the environment. It will never be true except for in
* those build systems.
*/
#define PRISM_SERIALIZE_ONLY_SEMANTICS_FIELDS <%= Prism::SERIALIZE_ONLY_SEMANTICS_FIELDS %>
#define PRISM_SERIALIZE_ONLY_SEMANTICS_FIELDS <%= Prism::Template::SERIALIZE_ONLY_SEMANTICS_FIELDS %>

#endif
14 changes: 7 additions & 7 deletions prism/templates/lib/prism/dot_visitor.rb.erb
Expand Up @@ -113,15 +113,15 @@ module Prism

# <%= field.name %>
<%- case field -%>
<%- when Prism::NodeField -%>
<%- when Prism::Template::NodeField -%>
table.field("<%= field.name %>", port: true)
digraph.edge("#{id}:<%= field.name %> -> #{node_id(node.<%= field.name %>)};")
<%- when Prism::OptionalNodeField -%>
<%- when Prism::Template::OptionalNodeField -%>
unless (<%= field.name %> = node.<%= field.name %>).nil?
table.field("<%= field.name %>", port: true)
digraph.edge("#{id}:<%= field.name %> -> #{node_id(<%= field.name %>)};")
end
<%- when Prism::NodeListField -%>
<%- when Prism::Template::NodeListField -%>
if node.<%= field.name %>.any?
table.field("<%= field.name %>", port: true)

Expand All @@ -133,15 +133,15 @@ module Prism
else
table.field("<%= field.name %>", "[]")
end
<%- when Prism::StringField, Prism::ConstantField, Prism::OptionalConstantField, Prism::UInt8Field, Prism::UInt32Field, Prism::ConstantListField, Prism::IntegerField, Prism::DoubleField -%>
<%- when Prism::Template::StringField, Prism::Template::ConstantField, Prism::Template::OptionalConstantField, Prism::Template::UInt8Field, Prism::Template::UInt32Field, Prism::Template::ConstantListField, Prism::Template::IntegerField, Prism::Template::DoubleField -%>
table.field("<%= field.name %>", node.<%= field.name %>.inspect)
<%- when Prism::LocationField -%>
<%- when Prism::Template::LocationField -%>
table.field("<%= field.name %>", location_inspect(node.<%= field.name %>))
<%- when Prism::OptionalLocationField -%>
<%- when Prism::Template::OptionalLocationField -%>
unless (<%= field.name %> = node.<%= field.name %>).nil?
table.field("<%= field.name %>", location_inspect(<%= field.name %>))
end
<%- when Prism::FlagsField -%>
<%- when Prism::Template::FlagsField -%>
<%- flag = flags.find { |flag| flag.name == field.kind }.tap { |flag| raise "Expected to find #{field.kind}" unless flag } -%>
table.field("<%= field.name %>", <%= flag.human %>_inspect(node))
<%- else -%>
Expand Down
4 changes: 2 additions & 2 deletions prism/templates/lib/prism/mutation_compiler.rb.erb
Expand Up @@ -7,9 +7,9 @@ module Prism
<%= "\n" if index != 0 -%>
# Copy a <%= node.name %> node
def visit_<%= node.human %>(node)
<%- fields = node.fields.select { |field| [Prism::NodeField, Prism::OptionalNodeField, Prism::NodeListField].include?(field.class) } -%>
<%- fields = node.fields.select { |field| [Prism::Template::NodeField, Prism::Template::OptionalNodeField, Prism::Template::NodeListField].include?(field.class) } -%>
<%- if fields.any? -%>
node.copy(<%= fields.map { |field| "#{field.name}: #{field.is_a?(Prism::NodeListField) ? "visit_all" : "visit"}(node.#{field.name})" }.join(", ") %>)
node.copy(<%= fields.map { |field| "#{field.name}: #{field.is_a?(Prism::Template::NodeListField) ? "visit_all" : "visit"}(node.#{field.name})" }.join(", ") %>)
<%- else -%>
node.copy
<%- end -%>
Expand Down

0 comments on commit 2e1d735

Please sign in to comment.