ruby-changes:53922
From: nobu <ko1@a...>
Date: Mon, 3 Dec 2018 10:06:51 +0900 (JST)
Subject: [ruby-changes:53922] nobu:r66142 (trunk): Refine RubyVM::AbstractSyntaxTree::Node#type
nobu 2018-12-03 10:06:34 +0900 (Mon, 03 Dec 2018) New Revision: 66142 https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=66142 Log: Refine RubyVM::AbstractSyntaxTree::Node#type * ast.c (rb_ast_node_type): simplified to return a Symbol without "NODE_" prefix. Modified files: trunk/ast.c trunk/lib/pp.rb trunk/test/ruby/test_ast.rb Index: ast.c =================================================================== --- ast.c (revision 66141) +++ ast.c (revision 66142) @@ -262,21 +262,21 @@ rb_ast_node_alloc(VALUE klass) https://github.com/ruby/ruby/blob/trunk/ast.c#L262 } static const char* -node_type_to_str(NODE *node) +node_type_to_str(const NODE *node) { - return ruby_node_name(nd_type(node)); + return (ruby_node_name(nd_type(node)) + rb_strlen_lit("NODE_")); } /* * call-seq: - * node.type -> string + * node.type -> symbol * - * Returns the type of this node as a string. + * Returns the type of this node as a symbol. * * root = RubyVM::AbstractSyntaxTree.parse("x = 1 + 2") - * root.type # => "NODE_SCOPE" + * root.type # => :SCOPE * call = root.children[2] - * call.type # => "NODE_OPCALL" + * call.type # => :OPCALL */ static VALUE rb_ast_node_type(VALUE self) @@ -284,7 +284,7 @@ rb_ast_node_type(VALUE self) https://github.com/ruby/ruby/blob/trunk/ast.c#L284 struct ASTNodeData *data; TypedData_Get_Struct(self, struct ASTNodeData, &rb_node_type, data); - return rb_fstring_cstr(node_type_to_str(data->node)); + return rb_sym_intern_ascii_cstr(node_type_to_str(data->node)); } #define NEW_CHILD(ast, node) node ? ast_new_internal(ast, node) : Qnil Index: lib/pp.rb =================================================================== --- lib/pp.rb (revision 66141) +++ lib/pp.rb (revision 66142) @@ -529,13 +529,13 @@ class RubyVM::AbstractSyntaxTree::Node https://github.com/ruby/ruby/blob/trunk/lib/pp.rb#L529 end def pretty_print(q) - q.group(1, "(#{type.sub(/\ANODE_/,'')}@#{first_lineno}:#{first_column}-#{last_lineno}:#{last_column}", ")") { + q.group(1, "(#{type}@#{first_lineno}:#{first_column}-#{last_lineno}:#{last_column}", ")") { case type - when "NODE_SCOPE" + when :SCOPE pretty_print_children(q, %w"tbl args body") - when "NODE_ARGS" + when :ARGS pretty_print_children(q, %w[pre_num pre_init opt first_post post_num post_init rest kw kwrest block]) - when "NODE_DEFN" + when :DEFN pretty_print_children(q, %w[mid body]) else pretty_print_children(q) Index: test/ruby/test_ast.rb =================================================================== --- test/ruby/test_ast.rb (revision 66141) +++ test/ruby/test_ast.rb (revision 66142) @@ -76,7 +76,7 @@ class TestAst < Test::Unit::TestCase https://github.com/ruby/ruby/blob/trunk/test/ruby/test_ast.rb#L76 return true if children.empty? # These NODE_D* has NODE_ARRAY as nd_next->nd_next whose last locations # we can not update when item is appended. - return true if ["NODE_DSTR", "NODE_DXSTR", "NODE_DREGX", "NODE_DSYM"].include? node.type + return true if [:DSTR, :DXSTR, :DREGX, :DSYM].include? node.type min = children.map(&:beg_pos).min max = children.map(&:end_pos).max @@ -138,18 +138,18 @@ class TestAst < Test::Unit::TestCase https://github.com/ruby/ruby/blob/trunk/test/ruby/test_ast.rb#L138 term = "A"*257 ast = RubyVM::AbstractSyntaxTree.parse("<<-#{term}\n""ddddddd\n#{term}\n") node = ast.children[2] - assert_equal("NODE_STR", node.type) + assert_equal(:STR, node.type) assert_equal(0, node.first_column) end def test_column_of_heredoc node = RubyVM::AbstractSyntaxTree.parse("<<-SRC\nddddddd\nSRC\n").children[2] - assert_equal("NODE_STR", node.type) + assert_equal(:STR, node.type) assert_equal(0, node.first_column) assert_equal(6, node.last_column) node = RubyVM::AbstractSyntaxTree.parse("<<SRC\nddddddd\nSRC\n").children[2] - assert_equal("NODE_STR", node.type) + assert_equal(:STR, node.type) assert_equal(0, node.first_column) assert_equal(5, node.last_column) end @@ -200,15 +200,15 @@ class TestAst < Test::Unit::TestCase https://github.com/ruby/ruby/blob/trunk/test/ruby/test_ast.rb#L200 node = RubyVM::AbstractSyntaxTree.parse("x = 0") lv, _, body = *node.children assert_equal([:x], lv) - assert_equal("NODE_LASGN", body.type) + assert_equal(:LASGN, body.type) end def test_call node = RubyVM::AbstractSyntaxTree.parse("nil.foo") _, _, body = *node.children - assert_equal("NODE_CALL", body.type) + assert_equal(:CALL, body.type) recv, mid, args = body.children - assert_equal("NODE_NIL", recv.type) + assert_equal(:NIL, recv.type) assert_equal(:foo, mid) assert_nil(args) end @@ -216,7 +216,7 @@ class TestAst < Test::Unit::TestCase https://github.com/ruby/ruby/blob/trunk/test/ruby/test_ast.rb#L216 def test_fcall node = RubyVM::AbstractSyntaxTree.parse("foo()") _, _, body = *node.children - assert_equal("NODE_FCALL", body.type) + assert_equal(:FCALL, body.type) mid, args = body.children assert_equal(:foo, mid) assert_nil(args) @@ -225,7 +225,7 @@ class TestAst < Test::Unit::TestCase https://github.com/ruby/ruby/blob/trunk/test/ruby/test_ast.rb#L225 def test_vcall node = RubyVM::AbstractSyntaxTree.parse("foo") _, _, body = *node.children - assert_equal("NODE_VCALL", body.type) + assert_equal(:VCALL, body.type) mid, args = body.children assert_equal(:foo, mid) assert_nil(args) @@ -234,19 +234,19 @@ class TestAst < Test::Unit::TestCase https://github.com/ruby/ruby/blob/trunk/test/ruby/test_ast.rb#L234 def test_defn node = RubyVM::AbstractSyntaxTree.parse("def a; end") _, _, body = *node.children - assert_equal("NODE_DEFN", body.type) + assert_equal(:DEFN, body.type) mid, defn = body.children assert_equal(:a, mid) - assert_equal("NODE_SCOPE", defn.type) + assert_equal(:SCOPE, defn.type) end def test_defs node = RubyVM::AbstractSyntaxTree.parse("def a.b; end") _, _, body = *node.children - assert_equal("NODE_DEFS", body.type) + assert_equal(:DEFS, body.type) recv, mid, defn = body.children - assert_equal("NODE_VCALL", recv.type) + assert_equal(:VCALL, recv.type) assert_equal(:b, mid) - assert_equal("NODE_SCOPE", defn.type) + assert_equal(:SCOPE, defn.type) end end -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/