7#ifdef DUK_USE_REFERENCE_COUNTING
9#ifndef DUK_USE_DOUBLE_LINKED_HEAP
10#error internal error, reference counting requires a double linked heap
102 while (
funcs < funcs_end) {
108 DUK_D(
DUK_DPRINT(
"duk_hcompiledfunction 'data' is NULL, skipping decref"));
126 while (tv < t->valstack_top) {
136#ifdef DUK_USE_NONSTD_FUNC_CALLER_PROPERTY
172#if defined(DUK_USE_REFZERO_FINALIZER_TORTURE)
201 DUK_DD(
DUK_DDPRINT(
"avoid fake torture finalizer for duk__refcount_fake_finalizer itself"));
211 DUK_D(
DUK_DPRINT(
"call recursion depth reached, avoid fake torture finalizer"));
275#if defined(DUK_USE_REFZERO_FINALIZER_TORTURE)
284 duk__refcount_run_torture_finalizer(thr, obj);
321 DUK_DDD(
DUK_DDDPRINT(
"-> object refcount after finalization non-zero, object will be rescued"));
324 DUK_DDD(
DUK_DDDPRINT(
"-> object refcount still zero after finalization, object will be freed"));
355 DUK_DD(
DUK_DDPRINT(
"object rescued during refcount finalization: %p", (
void *) h1));
385#if defined(DUK_USE_MARK_AND_SWEEP) && defined(DUK_USE_VOLUNTARY_GC)
396 DUK_D(
DUK_DPRINT(
"refcount triggered mark-and-sweep => rc %ld", (
long) rc));
441#if defined(DUK_USE_DEBUGGER_SUPPORT)
446 DUK_DDD(
DUK_DDDPRINT(
"refzero handling suppressed when mark-and-sweep running, object: %p", (
void *) h));
492#if !defined(DUK_USE_FAST_REFCOUNT_DEFAULT)
549#if !defined(DUK_USE_FAST_REFCOUNT_DEFAULT)
578#if defined(DUK_USE_ROM_OBJECTS)
598#if defined(DUK_USE_ROM_OBJECTS)
#define DUK_UNREACHABLE()
unsigned int duk_small_uint_t
duk_small_int_t duk_ret_t
duk_int_fast32_t duk_int_t
duk_small_int_t duk_bool_t
duk_uint32_t duk_uint_fast32_t
#define DUK_HEAPHDR_CLEAR_FINALIZED(h)
#define DUK_TVAL_NEEDS_REFCOUNT_UPDATE(tv)
#define DUK_HOBJECT_A_GET_VALUE_PTR(heap, h, i)
#define DUK_HCOMPILEDFUNCTION_GET_CONSTS_BASE(heap, h)
#define DUK_HEAPHDR_GET_TYPE(h)
#define DUK_HOBJECT_GET_PROTOTYPE(heap, h)
#define DUK_HEAPHDR_SET_NEXT(heap, h, val)
DUK_INTERNAL_DECL void duk_heap_remove_any_from_heap_allocated(duk_heap *heap, duk_heaphdr *hdr)
#define DUK_HOBJECT_GET_ENEXT(h)
#define DUK_HOBJECT_E_GET_VALUE_TVAL_PTR(heap, h, i)
#define DUK_HEAPHDR_GET_PREV(heap, h)
#define DUK_HEAPHDR_SET_PREV(heap, h, val)
#define DUK_HOBJECT_IS_COMPILEDFUNCTION(h)
DUK_EXTERNAL void duk_require_stack(duk_context *ctx, duk_idx_t extra)
#define DUK_HEAPHDR_PREDEC_REFCOUNT(h)
#define DUK_HOBJECT_E_GET_VALUE_SETTER(heap, h, i)
#define DUK_HCOMPILEDFUNCTION_GET_FUNCS_BASE(heap, h)
#define DUK_HOBJECT_E_GET_KEY(heap, h, i)
#define DUK_HOBJECT_GET_ASIZE(h)
#define DUK_HEAPHDR_HTYPE_VALID(h)
DUK_EXTERNAL duk_idx_t duk_push_c_function(duk_context *ctx, duk_c_function func, duk_int_t nargs)
#define DUK_ASSERT_DISABLE(x)
#define DUK_HEAPHDR_PREINC_REFCOUNT(h)
#define DUK_HEAPHDR_GET_REFCOUNT(h)
#define DUK_HOBJECT_IS_THREAD(h)
#define DUK_HEAP_SET_REFZERO_FREE_RUNNING(heap)
#define DUK_HOBJECT_IS_NATIVEFUNCTION(h)
#define DUK_HCOMPILEDFUNCTION_GET_FUNCS_END(heap, h)
DUK_INTERNAL_DECL duk_bool_t duk_heap_mark_and_sweep(duk_heap *heap, duk_small_uint_t flags)
#define DUK_HEAPHDR_HAS_READONLY(h)
#define DUK_HOBJECT_IS_BUFFEROBJECT(h)
DUK_INTERNAL_DECL duk_bool_t duk_hobject_hasprop_raw(duk_hthread *thr, duk_hobject *obj, duk_hstring *key)
#define DUK_HOBJECT_E_SLOT_IS_ACCESSOR(heap, h, i)
#define DUK_HEAP_HAS_MARKANDSWEEP_RUNNING(heap)
#define DUK_HEAP_HAS_REFZERO_FREE_RUNNING(heap)
#define DUK_HOBJECT_HAS_NATIVEFUNCTION(h)
DUK_INTERNAL_DECL void duk_heap_string_remove(duk_heap *heap, duk_hstring *h)
#define DUK_HEAPHDR_HAS_FINALIZED(h)
#define DUK_HCOMPILEDFUNCTION_GET_DATA(heap, h)
#define DUK_ACT_GET_FUNC(act)
DUK_EXTERNAL void duk_pop(duk_context *ctx)
#define DUK_HEAP_CLEAR_REFZERO_FREE_RUNNING(heap)
DUK_INTERNAL_DECL void duk_push_hobject(duk_context *ctx, duk_hobject *h)
#define DUK_TVAL_GET_HEAPHDR(tv)
#define DUK_HOBJECT_E_GET_VALUE_GETTER(heap, h, i)
DUK_INTERNAL_DECL void duk_heap_strcache_string_remove(duk_heap *heap, duk_hstring *h)
#define DUK_CALLSTACK_GROW_STEP
#define DUK_HEAPHDR_HAS_FINALIZABLE(h)
#define DUK_HTHREAD_STRING_INT_FINALIZER(thr)
#define DUK_HEAPHDR_GET_NEXT(heap, h)
DUK_INTERNAL_DECL void duk_hobject_run_finalizer(duk_hthread *thr, duk_hobject *obj)
DUK_EXTERNAL duk_int_t duk_pcall(duk_context *ctx, duk_idx_t nargs)
#define DUK_HCOMPILEDFUNCTION_GET_CONSTS_END(heap, h)
#define DUK_ASSERT_HEAPHDR_LINKS(heap, h)
DUK_INTERNAL_DECL void duk_heap_free_heaphdr_raw(duk_heap *heap, duk_heaphdr *hdr)
DUK_INTERNAL_DECL duk_tval * duk_get_tval(duk_context *ctx, duk_idx_t index)
DUK_LOCAL void duk__queue_refzero(duk_heap *heap, duk_heaphdr *hdr)
DUK_INTERNAL void duk_heaphdr_refzero(duk_hthread *thr, duk_heaphdr *h)
DUK_INTERNAL void duk_heaphdr_decref_allownull(duk_hthread *thr, duk_heaphdr *h)
DUK_LOCAL void duk__refzero_free_pending(duk_hthread *thr)
DUK_INTERNAL void duk_heaphdr_decref(duk_hthread *thr, duk_heaphdr *h)
DUK_INTERNAL void duk_tval_decref(duk_hthread *thr, duk_tval *tv)
DUK_LOCAL void duk__refcount_finalize_hobject(duk_hthread *thr, duk_hobject *h)
DUK_INTERNAL void duk_heaphdr_refcount_finalize(duk_hthread *thr, duk_heaphdr *hdr)
static const luaL_Reg funcs[]
duk_heaphdr * refzero_list
duk_int_t call_recursion_limit
duk_int_t mark_and_sweep_trigger_counter
duk_int_t call_recursion_depth
duk_heaphdr * refzero_list_tail
duk_heaphdr * heap_allocated
duk_hobject * builtins[DUK_NUM_BUILTINS]
duk_size_t catchstack_top
duk_size_t callstack_size
duk_activation * callstack