提交 46463af9 编写于 作者: Y yui-knk

Define AST module under RubyVM [experimental]

* ext/-test-/ast/ast.c: Rename to ast.c
  and define AST module under RubyVM.
* common.mk: compile ast.c.
* ext/-test-/ast/extconf.rb: Don't need this file anymore.
* inits.c (rb_call_inits): Call Init_ast to setup AST module.
* test/-ext-/ast/test_ast.rb: Follow up the namespace change.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63534 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
上级 c7c96353
......@@ -479,7 +479,7 @@ rb_ast_node_inspect(VALUE self)
void
Init_ast(void)
{
rb_mAST = rb_define_module("AST");
rb_mAST = rb_define_module_under(rb_cRubyVM, "AST");
rb_cNode = rb_define_class_under(rb_mAST, "Node", rb_cObject);
rb_define_alloc_func(rb_cNode, rb_ast_node_alloc);
......
......@@ -75,6 +75,7 @@ MAKE_ENC = -f $(ENC_MK) V="$(V)" UNICODE_HDR_DIR="$(UNICODE_HDR_DIR)" \
RUBY="$(MINIRUBY)" MINIRUBY="$(MINIRUBY)" $(mflags)
COMMONOBJS = array.$(OBJEXT) \
ast.$(OBJEXT) \
bignum.$(OBJEXT) \
class.$(OBJEXT) \
compar.$(OBJEXT) \
......@@ -1445,6 +1446,12 @@ array.$(OBJEXT): {$(VPATH)}ruby_assert.h
array.$(OBJEXT): {$(VPATH)}st.h
array.$(OBJEXT): {$(VPATH)}subst.h
array.$(OBJEXT): {$(VPATH)}util.h
ast.$(OBJEXT): $(hdrdir)/ruby/ruby.h
ast.$(OBJEXT): $(top_srcdir)/include/ruby.h
ast.$(OBJEXT): {$(VPATH)}encoding.h
ast.$(OBJEXT): {$(VPATH)}internal.h
ast.$(OBJEXT): {$(VPATH)}node.h
ast.$(OBJEXT): {$(VPATH)}vm_core.h
bignum.$(OBJEXT): $(hdrdir)/ruby/ruby.h
bignum.$(OBJEXT): $(top_srcdir)/include/ruby.h
bignum.$(OBJEXT): {$(VPATH)}bignum.c
......
# frozen_string_literal: false
require_relative "../auto_ext.rb"
auto_ext(inc: true)
......@@ -61,5 +61,6 @@ rb_call_inits(void)
CALL(Complex);
CALL(version);
CALL(vm_trace);
CALL(ast);
}
#undef CALL
# frozen_string_literal: false
require 'test/unit'
require "-test-/ast"
module AST
class Node
class CodePosition
include Comparable
attr_reader :lineno, :column
def initialize(lineno, column)
@lineno = lineno
@column = column
end
def <=>(other)
case
when lineno < other.lineno
-1
when lineno == other.lineno
column <=> other.column
when lineno > other.lineno
1
class RubyVM
module AST
class Node
class CodePosition
include Comparable
attr_reader :lineno, :column
def initialize(lineno, column)
@lineno = lineno
@column = column
end
def <=>(other)
case
when lineno < other.lineno
-1
when lineno == other.lineno
column <=> other.column
when lineno > other.lineno
1
end
end
end
end
def beg_pos
CodePosition.new(first_lineno, first_column)
end
def beg_pos
CodePosition.new(first_lineno, first_column)
end
def end_pos
CodePosition.new(last_lineno, last_column)
end
def end_pos
CodePosition.new(last_lineno, last_column)
end
alias to_s inspect
alias to_s inspect
end
end
end
......@@ -62,7 +63,7 @@ def validate_not_cared
def ast
return @ast if defined?(@ast)
ast = AST.parse_file(@path)
ast = RubyVM::AST.parse_file(@path)
raise "Syntax error: #{@path}" if ast.nil?
@ast = ast
end
......@@ -132,7 +133,7 @@ def validate_not_cared0(node)
def test_column_with_long_heredoc_identifier
term = "A"*257
ast = AST.parse("<<-#{term}\n""ddddddd\n#{term}\n")
ast = RubyVM::AST.parse("<<-#{term}\n""ddddddd\n#{term}\n")
node = ast.children[1]
assert_equal("NODE_STR", node.type)
assert_equal(0, node.first_column)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册