aboutsummaryrefslogtreecommitdiffstats
path: root/Godeps/_workspace/src/github.com/robertkrimen/otto/error.go
diff options
context:
space:
mode:
Diffstat (limited to 'Godeps/_workspace/src/github.com/robertkrimen/otto/error.go')
-rw-r--r--Godeps/_workspace/src/github.com/robertkrimen/otto/error.go245
1 files changed, 0 insertions, 245 deletions
diff --git a/Godeps/_workspace/src/github.com/robertkrimen/otto/error.go b/Godeps/_workspace/src/github.com/robertkrimen/otto/error.go
deleted file mode 100644
index 111471044..000000000
--- a/Godeps/_workspace/src/github.com/robertkrimen/otto/error.go
+++ /dev/null
@@ -1,245 +0,0 @@
-package otto
-
-import (
- "errors"
- "fmt"
- "strings"
-
- "github.com/robertkrimen/otto/file"
-)
-
-type _exception struct {
- value interface{}
-}
-
-func newException(value interface{}) *_exception {
- return &_exception{
- value: value,
- }
-}
-
-func (self *_exception) eject() interface{} {
- value := self.value
- self.value = nil // Prevent Go from holding on to the value, whatever it is
- return value
-}
-
-type _error struct {
- name string
- message string
- trace []_frame
-
- offset int
-}
-
-type _frame struct {
- file *file.File
- offset int
- callee string
-}
-
-var (
- nativeFrame = _frame{}
-)
-
-type _at int
-
-func (fr _frame) location() string {
- if fr.file == nil {
- return "<unknown>"
- }
- path := fr.file.Name()
- line, column := _position(fr.file, fr.offset)
-
- if path == "" {
- path = "<anonymous>"
- }
-
- str := fmt.Sprintf("%s:%d:%d", path, line, column)
-
- if fr.callee != "" {
- str = fmt.Sprintf("%s (%s)", fr.callee, str)
- }
-
- return str
-}
-
-func _position(file *file.File, offset int) (line, column int) {
- {
- offset := offset - file.Base()
- if offset < 0 {
- return -offset, -1
- }
-
- src := file.Source()
- if offset >= len(src) {
- return -offset, -len(src)
- }
- src = src[:offset]
-
- line := 1 + strings.Count(src, "\n")
- column := 0
- if index := strings.LastIndex(src, "\n"); index >= 0 {
- column = offset - index
- } else {
- column = 1 + len(src)
- }
- return line, column
- }
-}
-
-// An Error represents a runtime error, e.g. a TypeError, a ReferenceError, etc.
-type Error struct {
- _error
-}
-
-// Error returns a description of the error
-//
-// TypeError: 'def' is not a function
-//
-func (err Error) Error() string {
- if len(err.name) == 0 {
- return err.message
- }
- if len(err.message) == 0 {
- return err.name
- }
- return fmt.Sprintf("%s: %s", err.name, err.message)
-}
-
-// String returns a description of the error and a trace of where the
-// error occurred.
-//
-// TypeError: 'def' is not a function
-// at xyz (<anonymous>:3:9)
-// at <anonymous>:7:1/
-//
-func (err Error) String() string {
- str := err.Error() + "\n"
- for _, frame := range err.trace {
- str += " at " + frame.location() + "\n"
- }
- return str
-}
-
-func (err _error) describe(format string, in ...interface{}) string {
- return fmt.Sprintf(format, in...)
-}
-
-func (self _error) messageValue() Value {
- if self.message == "" {
- return Value{}
- }
- return toValue_string(self.message)
-}
-
-func (rt *_runtime) typeErrorResult(throw bool) bool {
- if throw {
- panic(rt.panicTypeError())
- }
- return false
-}
-
-func newError(rt *_runtime, name string, in ...interface{}) _error {
- err := _error{
- name: name,
- offset: -1,
- }
- description := ""
- length := len(in)
-
- if rt != nil {
- scope := rt.scope
- frame := scope.frame
- if length > 0 {
- if at, ok := in[length-1].(_at); ok {
- in = in[0 : length-1]
- if scope != nil {
- frame.offset = int(at)
- }
- length -= 1
- }
- if length > 0 {
- description, in = in[0].(string), in[1:]
- }
- }
- limit := 10
- err.trace = append(err.trace, frame)
- if scope != nil {
- for limit > 0 {
- scope = scope.outer
- if scope == nil {
- break
- }
- if scope.frame.offset >= 0 {
- err.trace = append(err.trace, scope.frame)
- }
- limit--
- }
- }
- } else {
- if length > 0 {
- description, in = in[0].(string), in[1:]
- }
- }
- err.message = err.describe(description, in...)
- return err
-}
-
-func (rt *_runtime) panicTypeError(argumentList ...interface{}) *_exception {
- return &_exception{
- value: newError(rt, "TypeError", argumentList...),
- }
-}
-
-func (rt *_runtime) panicReferenceError(argumentList ...interface{}) *_exception {
- return &_exception{
- value: newError(rt, "ReferenceError", argumentList...),
- }
-}
-
-func (rt *_runtime) panicURIError(argumentList ...interface{}) *_exception {
- return &_exception{
- value: newError(rt, "URIError", argumentList...),
- }
-}
-
-func (rt *_runtime) panicSyntaxError(argumentList ...interface{}) *_exception {
- return &_exception{
- value: newError(rt, "SyntaxError", argumentList...),
- }
-}
-
-func (rt *_runtime) panicRangeError(argumentList ...interface{}) *_exception {
- return &_exception{
- value: newError(rt, "RangeError", argumentList...),
- }
-}
-
-func catchPanic(function func()) (err error) {
- defer func() {
- if caught := recover(); caught != nil {
- if exception, ok := caught.(*_exception); ok {
- caught = exception.eject()
- }
- switch caught := caught.(type) {
- case _error:
- err = &Error{caught}
- return
- case Value:
- if vl := caught._object(); vl != nil {
- switch vl := vl.value.(type) {
- case _error:
- err = &Error{vl}
- return
- }
- }
- err = errors.New(caught.string())
- return
- }
- panic(caught)
- }
- }()
- function()
- return nil
-}