class Nashorn::JSError
Constants
- PARSER_EXCEPTION
Public Class Methods
new(native)
click to toggle source
Calls superclass method
# File lib/nashorn/error.rb, line 5 def initialize(native) @native = native # might be a NativeException wrapping a Java Throwable if ( value = self.value(true) ) != nil if value.is_a?(Exception) super "#{value.class.name}: #{value.message}" elsif value.is_a?(JS::ScriptObject) # && @native.to_s.index('Error:') super normalize_message(@native) else super value end else if cause = self.cause message = normalize_message(cause) else message = normalize_message(@native) end super message end end
parse_error?(error)
click to toggle source
@private invented for ExceJS
# File lib/nashorn/error.rb, line 120 def self.parse_error?(error) PARSER_EXCEPTION.eql? error.class.name end
Public Instance Methods
backtrace()
click to toggle source
The backtrace is constructed using javascript_backtrace
+ the Ruby
part.
Calls superclass method
# File lib/nashorn/error.rb, line 77 def backtrace if js_backtrace = javascript_backtrace js_backtrace.push(*super) else super end end
cause()
click to toggle source
Returns the (nested) cause of this error if any.
# File lib/nashorn/error.rb, line 32 def cause return @cause if defined?(@cause) if @native.respond_to?(:cause) && @native.cause @cause = @native.cause else @cause = @native.is_a?(JS::NashornException) ? @native : nil end end
column_number()
click to toggle source
# File lib/nashorn/error.rb, line 112 def column_number cause.respond_to?(:getColumnNumber) ? cause.getColumnNumber : nil end
file_name()
click to toggle source
jdk.nashorn.internal.runtime::ECMAException < NashornException has these :
# File lib/nashorn/error.rb, line 104 def file_name cause.respond_to?(:getFileName) ? cause.getFileName : nil end
inspect()
click to toggle source
# File lib/nashorn/error.rb, line 25 def inspect "#<#{self.class.name}: #{message}>" end
javascript_backtrace(raw_elements = false)
click to toggle source
Returns the JavaScript back-trace part for this error (the script stack).
# File lib/nashorn/error.rb, line 86 def javascript_backtrace(raw_elements = false) return @javascript_backtrace if (@javascript_backtrace ||= nil) && ! raw_elements return nil unless cause.is_a?(JS::NashornException) return JS::NashornException.getScriptFrames(cause) if raw_elements js_backtrace = [] js_backtrace << @_trace_trail if defined?(@_trace_trail) for element in JS::NashornException.getScriptFrames(cause) js_backtrace << element.to_s # element - ScriptStackElement end @javascript_backtrace = js_backtrace end
line_number()
click to toggle source
# File lib/nashorn/error.rb, line 108 def line_number cause.respond_to?(:getLineNumber) ? cause.getLineNumber : nil end
message()
click to toggle source
Calls superclass method
# File lib/nashorn/error.rb, line 29 def message; super.to_s end
unwrap()
click to toggle source
Attempts to unwrap the (native) JavaScript/Java exception.
# File lib/nashorn/error.rb, line 43 def unwrap return @unwrap if defined?(@unwrap) cause = self.cause if cause && cause.is_a?(JS::NashornException) e = cause.getCause if e && e.is_a?(Java::OrgJrubyExceptions::RaiseException) @unwrap = e.getException else @unwrap = e end else @unwrap = nil end end
value(unwrap = nil)
click to toggle source
Return the thown (native) JavaScript value.
# File lib/nashorn/error.rb, line 59 def value(unwrap = nil) # (unwrap = false) # return @value if defined?(@value) && ! unwrap # @value = get_thrown unless defined?(@value) # return @value.unwrap if unwrap && @value.respond_to?(:unwrap) # @value return @value if defined?(@value) if thrown = get_thrown # NOTE: thrown sometimes leaks a Nashorn::JS::ScriptObject @value = Nashorn.to_rb thrown else @value = thrown end end
Also aliased as: thrown
Private Instance Methods
get_thrown()
click to toggle source
# File lib/nashorn/error.rb, line 126 def get_thrown if ( cause = self.cause ) && cause.respond_to?(:thrown) cause.thrown # e.g. NashornException.getThrown else nil end end
normalize_message(error)
click to toggle source
# File lib/nashorn/error.rb, line 134 def normalize_message(error) # "<eval>:1:1 Expected an operand but found )\n ())\n^" # extract first trace part of message : message = error.message return message unless JSError.parse_error?(error) if match = message.match(/^(.*?\:\d+\:\d+)\s/) @_trace_trail = match[1] return message[@_trace_trail.length + 1..-1] end message end