The code never worked and comments are in a broken state.
}
}
- /* GC: release value. */
-
njs_mp_free(vm->mem_pool, array->data);
array->start = NULL;
ret = njs_array_expand(vm, array, 0, 1);
if (njs_fast_path(ret == NJS_OK)) {
- /* GC: retain value. */
array->start[array->length++] = *value;
}
} else {
while (size != 0) {
- njs_retain(args);
*value++ = *args++;
size--;
}
}
for (i = 1; i < nargs; i++) {
- /* GC: njs_retain(&args[i]); */
array->start[array->length++] = args[i];
}
}
do {
n--;
- /* GC: njs_retain(&args[n]); */
array->start--;
array->start[0] = args[n];
} while (n > 1);
{
njs_value_t arguments[3];
- /* GC: array elt, array */
-
arguments[0] = *entry;
njs_set_number(&arguments[1], n);
njs_value_assign(&arguments[2], &args->value);
return NJS_OK;
}
- /* GC: array elt, array */
-
njs_set_undefined(&arguments[0]);
njs_value_assign(&arguments[1], &args->argument);
arguments[2] = *entry;
return NJS_ERROR;
}
- /* GC: retain. */
njs_set_array(rest_arguments, array);
vm->top_frame->local[n] = rest_arguments;
function->bound = values;
- /* GC: ? retain args. */
-
memcpy(values, args, size);
njs_set_function(retval, function);
return NJS_ERROR;
}
- /* GC retain it->target */
it->target = *target;
it->next = 0;
it->kind = kind;
release:
- /* GC release it->target */
njs_mp_free(vm->mem_pool, it);
njs_set_invalid(njs_object_value(iterator));
}
if (!njs_is_null(value)) {
- /* GC */
object->__proto__ = njs_object(value);
} else {
return NULL;
}
- /* GC */
-
njs_set_type_object(njs_prop_value(prop), prototype, prototype->type);
lhq.value = prop;
return NULL;
}
- /* GC */
-
njs_value_assign(njs_prop_value(prop), constructor);
prop->enumerable = 0;
case NJS_SYMBOL:
case NJS_STRING:
- /* GC: njs_retain(src); */
value = src;
break;
string->start = (u_char *) string + sizeof(njs_string_t);
string->length = src->long_string.data->length;
- string->retain = 0xffff;
memcpy(string->start, start, size);
}
string->start = (u_char *) start;
string->length = 0;
- string->retain = 1;
}
return NJS_OK;
string->start = (u_char *) string + sizeof(njs_string_t);
string->length = length;
- string->retain = 1;
if (map_offset != 0) {
map = (uint32_t *) (string->start + map_offset);
njs_string_copy(njs_value_t *dst, njs_value_t *src)
{
*dst = *src;
-
- /* GC: long string retain */
}
njs_set_number(retval, length);
- njs_release(vm, value);
-
return NJS_OK;
}
struct njs_string_s {
u_char *start;
uint32_t length; /* Length in UTF-8 characters. */
- uint32_t retain; /* Link counter. */
};
const njs_value_t njs_string_memory_error = njs_string("MemoryError");
-void
-njs_value_retain(njs_value_t *value)
-{
- njs_string_t *string;
-
- if (njs_is_string(value)) {
-
- if (value->long_string.external != 0xff) {
- string = value->long_string.data;
-
- njs_thread_log_debug("retain:%uxD \"%*s\"", string->retain,
- value->long_string.size, string->start);
-
- if (string->retain != 0xffff) {
- string->retain++;
- }
- }
- }
-}
-
-
-void
-njs_value_release(njs_vm_t *vm, njs_value_t *value)
-{
- njs_string_t *string;
-
- if (njs_is_string(value)) {
-
- if (value->long_string.external != 0xff) {
- string = value->long_string.data;
-
- njs_thread_log_debug("release:%uxD \"%*s\"", string->retain,
- value->long_string.size, string->start);
-
- if (string->retain != 0xffff) {
- string->retain--;
-
-#if 0
- if (string->retain == 0) {
- if ((u_char *) string + sizeof(njs_string_t)
- != string->start)
- {
- njs_memcache_pool_free(vm->mem_pool,
- string->start);
- }
-
- njs_memcache_pool_free(vm->mem_pool, string);
- }
-#endif
- }
- }
- }
-}
-
-
/*
* A hint value is 0 for numbers and 1 for strings. The value chooses
* method calls order specified by ECMAScript 5.1: "valueOf", "toString"
if (njs_is_primitive(value)) {
- /* GC */
*dst = *value;
return NJS_OK;
}
return NJS_ERROR;
case NJS_STRING:
- /* GC: njs_retain(src); */
value = src;
break;
#define njs_set_invalid(value) \
(value)->type = NJS_INVALID
-
-#if 0 /* GC: todo */
-
-#define njs_retain(value) \
- do { \
- if ((value)->data.truth == NJS_STRING_LONG) { \
- njs_value_retain(value); \
- } \
- } while (0)
-
-
-#define njs_release(vm, value) \
- do { \
- if ((value)->data.truth == NJS_STRING_LONG) { \
- njs_value_release((vm), (value)); \
- } \
- } while (0)
-
-#else
-
-#define njs_retain(value)
-#define njs_release(vm, value)
-
-#endif
-
-
-
-void njs_value_retain(njs_value_t *value);
-void njs_value_release(njs_vm_t *vm, njs_value_t *value);
njs_int_t njs_value_to_primitive(njs_vm_t *vm, njs_value_t *dst,
njs_value_t *value, njs_uint_t hint);
njs_array_t *njs_value_enumerate(njs_vm_t *vm, njs_value_t *value,
array->length = index + 1;
}
- /* GC: retain. */
array->start[index] = *init;
break;
frame = (njs_frame_t *) vm->top_frame;
if (frame->native.ctor) {
- if (njs_is_object(retval)) {
- njs_release(vm, frame->native.local[0]);
-
- } else {
+ if (!njs_is_object(retval)) {
retval = frame->native.local[0];
}
}