nxt_lvlhsh_init(&object->hash);
nxt_lvlhsh_init(&object->shared_hash);
- object->__proto__ = &prototypes[NJS_PROTOTYPE_MEMORY_ERROR].object;
+ object->__proto__ = &prototypes[NJS_PROTOTYPE_INTERNAL_ERROR].object;
object->type = NJS_OBJECT_INTERNAL_ERROR;
object->shared = 1;
}
+static njs_ret_t
+njs_memory_error_prototype_create(njs_vm_t *vm, njs_value_t *value)
+{
+ int32_t index;
+ njs_value_t *proto;
+ njs_function_t *function;
+
+ /* MemoryError has no its own prototype. */
+
+ index = NJS_PROTOTYPE_INTERNAL_ERROR;
+
+ function = value->data.u.function;
+ proto = njs_property_prototype_create(vm, &function->object.hash,
+ &vm->prototypes[index].object);
+ if (proto == NULL) {
+ proto = (njs_value_t *) &njs_value_void;
+ }
+
+ vm->retval = *proto;
+
+ return NXT_OK;
+}
+
+
static const njs_object_prop_t njs_memory_error_constructor_properties[] =
{
/* MemoryError.name == "MemoryError". */
{
.type = NJS_NATIVE_GETTER,
.name = njs_string("prototype"),
- .value = njs_native_getter(njs_object_prototype_create),
+ .value = njs_native_getter(njs_memory_error_prototype_create),
},
};
};
+static njs_ret_t
+njs_internal_error_prototype_to_string(njs_vm_t *vm, njs_value_t *args,
+ nxt_uint_t nargs, njs_index_t unused)
+{
+ if (nargs >= 1 && njs_is_object(&args[0])) {
+
+ /* MemoryError is a nonextensible internal error. */
+ if (!args[0].data.u.object->extensible) {
+ static const njs_value_t name = njs_string("MemoryError");
+
+ vm->retval = name;
+
+ return NJS_OK;
+ }
+ }
+
+ return njs_error_prototype_to_string(vm, args, nargs, unused);
+}
+
+
static const njs_object_prop_t njs_internal_error_prototype_properties[] =
{
{
.name = njs_string("name"),
.value = njs_string("InternalError"),
},
+
+ {
+ .type = NJS_METHOD,
+ .name = njs_string("toString"),
+ .value = njs_native_function(njs_internal_error_prototype_to_string,
+ 0, 0),
+ },
};
njs_uri_error_prototype_properties,
nxt_nitems(njs_uri_error_prototype_properties),
};
-
-
-static njs_ret_t
-njs_memory_error_prototype_to_string(njs_vm_t *vm, njs_value_t *args,
- nxt_uint_t nargs, njs_index_t unused)
-{
- static const njs_value_t name = njs_string("MemoryError");
-
- vm->retval = name;
-
- return NJS_OK;
-}
-
-
-static const njs_object_prop_t njs_memory_error_prototype_properties[] =
-{
- {
- .type = NJS_PROPERTY,
- .name = njs_string("name"),
- .value = njs_string("MemoryError"),
- },
-
- {
- .type = NJS_PROPERTY,
- .name = njs_string("message"),
- .value = njs_string(""),
- },
-
- {
- .type = NJS_METHOD,
- .name = njs_string("valueOf"),
- .value = njs_native_function(njs_error_prototype_value_of, 0, 0),
- },
-
- {
- .type = NJS_METHOD,
- .name = njs_string("toString"),
- .value = njs_native_function(njs_memory_error_prototype_to_string,
- 0, 0),
- },
-};
-
-
-const njs_object_init_t njs_memory_error_prototype_init = {
- nxt_string("MemoryError"),
- njs_memory_error_prototype_properties,
- nxt_nitems(njs_memory_error_prototype_properties),
-};
NJS_PROTOTYPE_SYNTAX_ERROR,
NJS_PROTOTYPE_TYPE_ERROR,
NJS_PROTOTYPE_URI_ERROR,
- NJS_PROTOTYPE_MEMORY_ERROR,
-#define NJS_PROTOTYPE_MAX (NJS_PROTOTYPE_MEMORY_ERROR + 1)
+#define NJS_PROTOTYPE_MAX (NJS_PROTOTYPE_URI_ERROR + 1)
};
NJS_CONSTRUCTOR_SYNTAX_ERROR = NJS_PROTOTYPE_SYNTAX_ERROR,
NJS_CONSTRUCTOR_TYPE_ERROR = NJS_PROTOTYPE_TYPE_ERROR,
NJS_CONSTRUCTOR_URI_ERROR = NJS_PROTOTYPE_URI_ERROR,
- NJS_CONSTRUCTOR_MEMORY_ERROR = NJS_PROTOTYPE_MEMORY_ERROR,
+ /* MemoryError has no its own prototype. */
+ NJS_CONSTRUCTOR_MEMORY_ERROR,
#define NJS_CONSTRUCTOR_MAX (NJS_CONSTRUCTOR_MEMORY_ERROR + 1)
};
/*
* MemoryError is statically allocated immutable Error object
- * with the generic type NJS_OBJECT_INTERNAL_ERROR but its own prototype
- * object NJS_PROTOTYPE_MEMORY_ERROR.
+ * with the generic type NJS_OBJECT_INTERNAL_ERROR.
*/
njs_object_t memory_error_object;
{ nxt_string("URIError('e').name + ': ' + URIError('e').message"),
nxt_string("URIError: e") },
- { nxt_string("MemoryError('e').name + ': ' + MemoryError('e').message"),
- nxt_string("MemoryError: ") },
-
{ nxt_string("var e = EvalError('e'); e.name = 'E'; e"),
nxt_string("E: e") },
nxt_string("URIError") },
{ nxt_string("MemoryError.prototype.name"),
- nxt_string("MemoryError") },
+ nxt_string("InternalError") },
{ nxt_string("EvalError.prototype.message"),
nxt_string("") },