mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
RubyVM.keep_script_lines
`RubyVM.keep_script_lines` enables to keep script lines for each ISeq and AST. This feature is for debugger/REPL support. ```ruby RubyVM.keep_script_lines = true RubyVM::keep_script_lines = true eval("def foo = nil\ndef bar = nil") pp RubyVM::InstructionSequence.of(method(:foo)).script_lines ```
This commit is contained in:
parent
3b16d07e45
commit
c7550537f1
Notes:
git
2021-10-21 16:18:11 +09:00
8 changed files with 137 additions and 6 deletions
|
@ -15,4 +15,56 @@ class TestRubyVM < Test::Unit::TestCase
|
|||
assert_raise(ArgumentError){ RubyVM.stat(:unknown) }
|
||||
assert_raise_with_message(ArgumentError, /\u{30eb 30d3 30fc}/) {RubyVM.stat(:"\u{30eb 30d3 30fc}")}
|
||||
end
|
||||
|
||||
def parse_and_compile
|
||||
script = <<~RUBY
|
||||
a = 1
|
||||
def foo
|
||||
b = 2
|
||||
end
|
||||
1.times{
|
||||
c = 3
|
||||
}
|
||||
RUBY
|
||||
|
||||
ast = RubyVM::AbstractSyntaxTree.parse(script)
|
||||
iseq = RubyVM::InstructionSequence.compile(script)
|
||||
|
||||
[ast, iseq]
|
||||
end
|
||||
|
||||
def test_keep_script_lines
|
||||
prev_conf = RubyVM.keep_script_lines
|
||||
|
||||
# keep
|
||||
RubyVM.keep_script_lines = true
|
||||
|
||||
ast, iseq = *parse_and_compile
|
||||
|
||||
lines = ast.script_lines
|
||||
assert_equal Array, lines.class
|
||||
|
||||
lines = iseq.script_lines
|
||||
assert_equal Array, lines.class
|
||||
iseq.each_child{|child|
|
||||
assert_equal lines, child.script_lines
|
||||
}
|
||||
|
||||
# don't keep
|
||||
RubyVM.keep_script_lines = false
|
||||
|
||||
ast, iseq = *parse_and_compile
|
||||
|
||||
lines = ast.script_lines
|
||||
assert_equal nil, lines
|
||||
|
||||
lines = iseq.script_lines
|
||||
assert_equal nil, lines
|
||||
iseq.each_child{|child|
|
||||
assert_equal lines, child.script_lines
|
||||
}
|
||||
|
||||
ensure
|
||||
RubyVM.keep_script_lines = prev_conf
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue