njs_object_get_prototype_of(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs,
njs_index_t unused)
{
+ uint32_t index;
njs_value_t *value;
value = njs_arg(args, nargs, 1);
return NJS_OK;
}
+ if (!njs_is_null_or_undefined(value)) {
+ index = njs_primitive_prototype_index(value->type);
+
+ njs_set_type_object(&vm->retval, &vm->prototypes[index].object,
+ njs_object_value_type(value->type));
+
+ return NJS_OK;
+ }
+
njs_type_error(vm, "cannot convert %s argument to object",
njs_type_string(value->type));
"Object.getPrototypeOf(o) === Object.prototype"),
njs_str("true") },
- { njs_str("Object.getPrototypeOf(1)"),
- njs_str("TypeError: cannot convert number argument to object") },
-
- { njs_str("Object.getPrototypeOf('a')"),
- njs_str("TypeError: cannot convert string argument to object") },
+ { njs_str("[true, 42, '' /*, Symbol()*/]"
+ ".every((x) => Object.getPrototypeOf(x) == Object.getPrototypeOf(Object(x)))"),
+ njs_str("true") },
{ njs_str("var p = {}; var o = Object.create(p);"
"p.isPrototypeOf(o)"),