builtin_error.go 3.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. package goja
  2. func (r *Runtime) builtin_Error(args []Value, proto *Object) *Object {
  3. obj := r.newBaseObject(proto, classError)
  4. if len(args) > 0 && args[0] != _undefined {
  5. obj._putProp("message", args[0], true, false, true)
  6. }
  7. return obj.val
  8. }
  9. func (r *Runtime) builtin_AggregateError(args []Value, proto *Object) *Object {
  10. obj := r.newBaseObject(proto, classAggError)
  11. if len(args) > 1 && args[1] != nil && args[1] != _undefined {
  12. obj._putProp("message", args[1].toString(), true, false, true)
  13. }
  14. var errors []Value
  15. if len(args) > 0 {
  16. errors = r.iterableToList(args[0], nil)
  17. }
  18. obj._putProp("errors", r.newArrayValues(errors), true, false, true)
  19. return obj.val
  20. }
  21. func (r *Runtime) createErrorPrototype(name valueString) *Object {
  22. o := r.newBaseObject(r.global.ErrorPrototype, classObject)
  23. o._putProp("message", stringEmpty, true, false, true)
  24. o._putProp("name", name, true, false, true)
  25. return o.val
  26. }
  27. func (r *Runtime) initErrors() {
  28. r.global.ErrorPrototype = r.NewObject()
  29. o := r.global.ErrorPrototype.self
  30. o._putProp("message", stringEmpty, true, false, true)
  31. o._putProp("name", stringError, true, false, true)
  32. o._putProp("toString", r.newNativeFunc(r.error_toString, nil, "toString", nil, 0), true, false, true)
  33. r.global.Error = r.newNativeFuncConstruct(r.builtin_Error, "Error", r.global.ErrorPrototype, 1)
  34. r.addToGlobal("Error", r.global.Error)
  35. r.global.AggregateErrorPrototype = r.createErrorPrototype(stringAggregateError)
  36. r.global.AggregateError = r.newNativeFuncConstructProto(r.builtin_AggregateError, "AggregateError", r.global.AggregateErrorPrototype, r.global.Error, 2)
  37. r.addToGlobal("AggregateError", r.global.AggregateError)
  38. r.global.TypeErrorPrototype = r.createErrorPrototype(stringTypeError)
  39. r.global.TypeError = r.newNativeFuncConstructProto(r.builtin_Error, "TypeError", r.global.TypeErrorPrototype, r.global.Error, 1)
  40. r.addToGlobal("TypeError", r.global.TypeError)
  41. r.global.ReferenceErrorPrototype = r.createErrorPrototype(stringReferenceError)
  42. r.global.ReferenceError = r.newNativeFuncConstructProto(r.builtin_Error, "ReferenceError", r.global.ReferenceErrorPrototype, r.global.Error, 1)
  43. r.addToGlobal("ReferenceError", r.global.ReferenceError)
  44. r.global.SyntaxErrorPrototype = r.createErrorPrototype(stringSyntaxError)
  45. r.global.SyntaxError = r.newNativeFuncConstructProto(r.builtin_Error, "SyntaxError", r.global.SyntaxErrorPrototype, r.global.Error, 1)
  46. r.addToGlobal("SyntaxError", r.global.SyntaxError)
  47. r.global.RangeErrorPrototype = r.createErrorPrototype(stringRangeError)
  48. r.global.RangeError = r.newNativeFuncConstructProto(r.builtin_Error, "RangeError", r.global.RangeErrorPrototype, r.global.Error, 1)
  49. r.addToGlobal("RangeError", r.global.RangeError)
  50. r.global.EvalErrorPrototype = r.createErrorPrototype(stringEvalError)
  51. o = r.global.EvalErrorPrototype.self
  52. o._putProp("name", stringEvalError, true, false, true)
  53. r.global.EvalError = r.newNativeFuncConstructProto(r.builtin_Error, "EvalError", r.global.EvalErrorPrototype, r.global.Error, 1)
  54. r.addToGlobal("EvalError", r.global.EvalError)
  55. r.global.URIErrorPrototype = r.createErrorPrototype(stringURIError)
  56. r.global.URIError = r.newNativeFuncConstructProto(r.builtin_Error, "URIError", r.global.URIErrorPrototype, r.global.Error, 1)
  57. r.addToGlobal("URIError", r.global.URIError)
  58. r.global.GoErrorPrototype = r.createErrorPrototype(stringGoError)
  59. r.global.GoError = r.newNativeFuncConstructProto(r.builtin_Error, "GoError", r.global.GoErrorPrototype, r.global.Error, 1)
  60. r.addToGlobal("GoError", r.global.GoError)
  61. }