njs_int_t
njs_object_prototype_to_string(njs_vm_t *vm, njs_value_t *args,
njs_uint_t nargs, njs_index_t unused)
+{
+ return njs_object_to_string(vm, &args[0], &vm->retval);
+}
+
+
+njs_int_t
+njs_object_to_string(njs_vm_t *vm, njs_value_t *this, njs_value_t *retval)
{
u_char *p;
njs_int_t ret;
- njs_value_t tag, *this;
+ njs_value_t tag;
njs_string_prop_t string;
const njs_value_t *name;
- this = njs_argument(args, 0);
-
if (njs_is_null_or_undefined(this)) {
- vm->retval = njs_is_null(this) ? njs_object_null_string
- : njs_object_undefined_string;
+ njs_value_assign(retval,
+ njs_is_null(this) ? &njs_object_null_string
+ : &njs_object_undefined_string);
return NJS_OK;
}
return NJS_ERROR;
}
- vm->retval = *name;
+ njs_value_assign(retval, name);
return NJS_OK;
}
(void) njs_string_prop(&string, &tag);
- p = njs_string_alloc(vm, &vm->retval, string.size + njs_length("[object ]"),
+ p = njs_string_alloc(vm, retval, string.size + njs_length("[object ]"),
string.length + njs_length("[object ]"));
if (njs_slow_path(p == NULL)) {
return NJS_ERROR;
njs_value_t *retval);
njs_value_t *njs_property_constructor_set(njs_vm_t *vm, njs_lvlhsh_t *hash,
njs_value_t *constructor);
+njs_int_t njs_object_to_string(njs_vm_t *vm, njs_value_t *value,
+ njs_value_t *retval);
njs_int_t njs_object_prototype_to_string(njs_vm_t *vm, njs_value_t *args,
njs_uint_t nargs, njs_index_t unused);
njs_int_t njs_object_length(njs_vm_t *vm, njs_value_t *value, int64_t *dst);
njs_inline njs_int_t
-njs_value_to_key(njs_vm_t *vm, njs_value_t *dst, njs_value_t *value)
+njs_value_to_key2(njs_vm_t *vm, njs_value_t *dst, njs_value_t *value,
+ njs_bool_t convert)
{
njs_int_t ret;
njs_value_t primitive;
value = njs_object_value(value);
} else {
- ret = njs_value_to_primitive(vm, &primitive, value, 1);
+ if (convert) {
+ ret = njs_value_to_primitive(vm, &primitive, value, 1);
+
+ } else {
+ ret = njs_object_to_string(vm, value, &primitive);
+ }
+
if (njs_slow_path(ret != NJS_OK)) {
return ret;
}
}
+njs_inline njs_int_t
+njs_value_to_key(njs_vm_t *vm, njs_value_t *dst, njs_value_t *value)
+{
+ return njs_value_to_key2(vm, dst, value, 1);
+}
+
+
njs_inline njs_int_t
njs_key_string_get(njs_vm_t *vm, njs_value_t *key, njs_str_t *str)
{