builtin_error.go 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. package otto
  2. import (
  3. "fmt"
  4. )
  5. func builtinError(call FunctionCall) Value {
  6. return objectValue(call.runtime.newError(classErrorName, call.Argument(0), 1))
  7. }
  8. func builtinNewError(obj *object, argumentList []Value) Value {
  9. return objectValue(obj.runtime.newError(classErrorName, valueOfArrayIndex(argumentList, 0), 0))
  10. }
  11. func builtinErrorToString(call FunctionCall) Value {
  12. thisObject := call.thisObject()
  13. if thisObject == nil {
  14. panic(call.runtime.panicTypeError("Error.toString is nil"))
  15. }
  16. name := classErrorName
  17. nameValue := thisObject.get("name")
  18. if nameValue.IsDefined() {
  19. name = nameValue.string()
  20. }
  21. message := ""
  22. messageValue := thisObject.get("message")
  23. if messageValue.IsDefined() {
  24. message = messageValue.string()
  25. }
  26. if len(name) == 0 {
  27. return stringValue(message)
  28. }
  29. if len(message) == 0 {
  30. return stringValue(name)
  31. }
  32. return stringValue(fmt.Sprintf("%s: %s", name, message))
  33. }
  34. func (rt *runtime) newEvalError(message Value) *object {
  35. o := rt.newErrorObject("EvalError", message, 0)
  36. o.prototype = rt.global.EvalErrorPrototype
  37. return o
  38. }
  39. func builtinEvalError(call FunctionCall) Value {
  40. return objectValue(call.runtime.newEvalError(call.Argument(0)))
  41. }
  42. func builtinNewEvalError(obj *object, argumentList []Value) Value {
  43. return objectValue(obj.runtime.newEvalError(valueOfArrayIndex(argumentList, 0)))
  44. }
  45. func (rt *runtime) newTypeError(message Value) *object {
  46. o := rt.newErrorObject("TypeError", message, 0)
  47. o.prototype = rt.global.TypeErrorPrototype
  48. return o
  49. }
  50. func builtinTypeError(call FunctionCall) Value {
  51. return objectValue(call.runtime.newTypeError(call.Argument(0)))
  52. }
  53. func builtinNewTypeError(obj *object, argumentList []Value) Value {
  54. return objectValue(obj.runtime.newTypeError(valueOfArrayIndex(argumentList, 0)))
  55. }
  56. func (rt *runtime) newRangeError(message Value) *object {
  57. o := rt.newErrorObject("RangeError", message, 0)
  58. o.prototype = rt.global.RangeErrorPrototype
  59. return o
  60. }
  61. func builtinRangeError(call FunctionCall) Value {
  62. return objectValue(call.runtime.newRangeError(call.Argument(0)))
  63. }
  64. func builtinNewRangeError(obj *object, argumentList []Value) Value {
  65. return objectValue(obj.runtime.newRangeError(valueOfArrayIndex(argumentList, 0)))
  66. }
  67. func (rt *runtime) newURIError(message Value) *object {
  68. o := rt.newErrorObject("URIError", message, 0)
  69. o.prototype = rt.global.URIErrorPrototype
  70. return o
  71. }
  72. func (rt *runtime) newReferenceError(message Value) *object {
  73. o := rt.newErrorObject("ReferenceError", message, 0)
  74. o.prototype = rt.global.ReferenceErrorPrototype
  75. return o
  76. }
  77. func builtinReferenceError(call FunctionCall) Value {
  78. return objectValue(call.runtime.newReferenceError(call.Argument(0)))
  79. }
  80. func builtinNewReferenceError(obj *object, argumentList []Value) Value {
  81. return objectValue(obj.runtime.newReferenceError(valueOfArrayIndex(argumentList, 0)))
  82. }
  83. func (rt *runtime) newSyntaxError(message Value) *object {
  84. o := rt.newErrorObject("SyntaxError", message, 0)
  85. o.prototype = rt.global.SyntaxErrorPrototype
  86. return o
  87. }
  88. func builtinSyntaxError(call FunctionCall) Value {
  89. return objectValue(call.runtime.newSyntaxError(call.Argument(0)))
  90. }
  91. func builtinNewSyntaxError(obj *object, argumentList []Value) Value {
  92. return objectValue(obj.runtime.newSyntaxError(valueOfArrayIndex(argumentList, 0)))
  93. }
  94. func builtinURIError(call FunctionCall) Value {
  95. return objectValue(call.runtime.newURIError(call.Argument(0)))
  96. }
  97. func builtinNewURIError(obj *object, argumentList []Value) Value {
  98. return objectValue(obj.runtime.newURIError(valueOfArrayIndex(argumentList, 0)))
  99. }