1
0
Fork 0
mirror of https://github.com/rubyjs/therubyracer synced 2023-03-27 23:21:42 -04:00
therubyracer/lib/v8/stack.rb

85 lines
1.4 KiB
Ruby
Raw Normal View History

module V8
class StackTrace
include Enumerable
def initialize(native)
2012-08-13 10:12:14 -05:00
@context = V8::Context.current
@native = native
end
def length
2012-08-13 10:12:14 -05:00
@context.enter do
@native ? @native.GetFrameCount() : 0
end
end
def each
return unless @native
2012-08-13 10:12:14 -05:00
@context.enter do
for i in 0..length - 1
yield V8::StackFrame.new(@native.GetFrame(i), @context)
end
end
end
def to_s
@native ? map(&:to_s).join("\n") : ""
end
end
class StackFrame
2012-08-13 10:12:14 -05:00
def initialize(native, context)
@context = context
@native = native
end
def script_name
2012-08-13 10:12:14 -05:00
@context.enter do
@context.to_ruby(@native.GetScriptName())
end
end
def function_name
2012-08-13 10:12:14 -05:00
@context.enter do
@context.to_ruby(@native.GetFunctionName())
end
end
def line_number
2012-08-13 10:12:14 -05:00
@context.enter do
@native.GetLineNumber()
end
end
def column
2012-08-13 10:12:14 -05:00
@context.enter do
@native.GetColumn()
end
end
def eval?
2012-08-13 10:12:14 -05:00
@context.enter do
@native.IsEval()
end
end
def constructor?
2012-08-13 10:12:14 -05:00
@context.enter do
@native.IsConstructor()
end
end
def to_s
2012-08-13 10:12:14 -05:00
@context.enter do
"at " + if !function_name.empty?
"#{function_name} (#{script_name}:#{line_number}:#{column})"
else
"#{script_name}:#{line_number}:#{column}"
end
end
end
end
end