static void KRuntimeContext_Reftrace(KonohaContext *kctx, KonohaContextVar *ctx, KObjectVisitor *visitor) { KonohaStack *sp = ctx->stack->stack; while(sp < ctx->esp) { KRefTrace(sp[0].asObject); sp++; } KRefTrace(ctx->stack->ContextConstList); KRefTrace(ctx->stack->ThrownException); }
static void buffereventCBArg_Reftrace(KonohaContext *kctx, kObject *o, KObjectVisitor *visitor) { struct buffereventCBArg *bcbarg = (struct buffereventCBArg *) o; enum e_buffereventCB i; for (i = BEV_ReadCB; i < NUM_BuffereventCB; i++){ KRefTrace(bcbarg->kcb[i]); } KRefTrace(bcbarg->cbev); KRefTrace(bcbarg->arg); }
static void kResultSet_Reftrace(KonohaContext *kctx, kObject *p, KObjectVisitor *visitor) { kResultSet *rs = (kResultSet *)p; KColumn *col = rs->column; KColumn *end = col + rs->column_size; while(col < end) { KRefTrace(col->name); if(KType_Is(UnboxType, col->type)) { KRefTrace(col->val.asObject); } } KRefTraceNullable(rs->connectionNULL); }
static void Person_Reftrace(KonohaContext *kctx, kObject *o, KObjectVisitor *visitor) { /* Garbage collector (GC) cannot recognize in which position of the field * an object exists. The function tells to GC which object should be traced. */ struct Person *p = (struct Person *) o; /* If p->some_field is Nullable, please use * KRefTraceNullable() macro instead of KRefTrace(). */ KRefTrace(p->name); /* It is not necessary to trace p->age field, * because p->age is not an Object */ }
static void kThread_Reftrace(KonohaContext *kctx, kObject *o, KObjectVisitor *visitor) { kThread *t = (kThread *)o; KRefTrace(t->func); //KRefTrace(t->args); }
static void eventCBArg_Reftrace(KonohaContext *kctx, kObject *o, KObjectVisitor *visitor) { struct eventCBArg *cba = (struct eventCBArg *) o; KRefTrace(cba->kcb); KRefTrace(cba->arg); }