PONY_API asio_event_t* pony_asio_event_create(pony_actor_t* owner, int fd, uint32_t flags, uint64_t nsec, bool noisy) { if((flags == ASIO_DISPOSABLE) || (flags == ASIO_DESTROYED)) return NULL; pony_type_t* type = *(pony_type_t**)owner; uint32_t msg_id = type->event_notify; if(msg_id == (uint32_t)-1) return NULL; asio_event_t* ev = POOL_ALLOC(asio_event_t); ev->magic = ev; ev->owner = owner; ev->msg_id = msg_id; ev->fd = fd; ev->flags = flags; ev->noisy = noisy; ev->nsec = nsec; ev->writeable = false; ev->readable = false; // The event is effectively being sent to another thread, so mark it here. pony_ctx_t* ctx = pony_ctx(); pony_gc_send(ctx); pony_traceknown(ctx, owner, type, PONY_TRACE_OPAQUE); pony_send_done(ctx); pony_asio_event_subscribe(ev); return ev; }
static void package_signature_serialise_trace(pony_ctx_t* ctx, void* object) { package_t* package = (package_t*)object; string_trace(ctx, package->filename); // The group has already been traced. size_t i = HASHMAP_BEGIN; package_t* dep; while((dep = package_set_next(&package->dependencies, &i)) != NULL) pony_traceknown(ctx, dep, package_dep_signature_pony_type(), PONY_TRACE_MUTABLE); pony_traceknown(ctx, package->ast, ast_signature_pony_type(), PONY_TRACE_MUTABLE); }
static void package_dep_signature_serialise_trace(pony_ctx_t* ctx, void* object) { package_t* package = (package_t*)object; string_trace(ctx, package->filename); pony_traceknown(ctx, package->group, package_group_dep_signature_pony_type(), PONY_TRACE_MUTABLE); }
static void package_serialise_trace(pony_ctx_t* ctx, void* object) { package_t* package = (package_t*)object; string_trace(ctx, package->path); string_trace(ctx, package->qualified_name); string_trace(ctx, package->id); string_trace(ctx, package->filename); if(package->symbol != NULL) string_trace(ctx, package->symbol); pony_traceknown(ctx, package->ast, ast_pony_type(), PONY_TRACE_MUTABLE); package_set_serialise_trace(ctx, &package->dependencies); if(package->group != NULL) pony_traceknown(ctx, package->group, package_group_pony_type(), PONY_TRACE_MUTABLE); }
static void deferred_reification_serialise_trace(pony_ctx_t* ctx, void* object) { deferred_reification_t* d = (deferred_reification_t*)object; pony_traceknown(ctx, d->ast, ast_pony_type(), PONY_TRACE_MUTABLE); if(d->type_typeparams != NULL) pony_traceknown(ctx, d->type_typeparams, ast_pony_type(), PONY_TRACE_MUTABLE); if(d->type_typeargs != NULL) pony_traceknown(ctx, d->type_typeargs, ast_pony_type(), PONY_TRACE_MUTABLE); if(d->method_typeparams != NULL) pony_traceknown(ctx, d->method_typeparams, ast_pony_type(), PONY_TRACE_MUTABLE); if(d->method_typeargs != NULL) pony_traceknown(ctx, d->method_typeargs, ast_pony_type(), PONY_TRACE_MUTABLE); if(d->thistype != NULL) pony_traceknown(ctx, d->thistype, ast_pony_type(), PONY_TRACE_MUTABLE); }
static void program_serialise_trace(pony_ctx_t* ctx, void* object) { program_t* program = (program_t*)object; if(program->package_groups != NULL) pony_traceknown(ctx, program->package_groups, package_group_list_pony_type(), PONY_TRACE_MUTABLE); if(program->signature != NULL) pony_serialise_reserve(ctx, program->signature, SIGNATURE_LENGTH); if(program->libpaths != NULL) pony_traceknown(ctx, program->libpaths, strlist_pony_type(), PONY_TRACE_MUTABLE); if(program->libs != NULL) pony_traceknown(ctx, program->libs, strlist_pony_type(), PONY_TRACE_MUTABLE); if(program->lib_args != NULL) pony_serialise_reserve(ctx, program->lib_args, program->lib_args_size + 1); }
static void package_group_signature_serialise_trace(pony_ctx_t* ctx, void* object) { package_group_t* group = (package_group_t*)object; pony_assert(group->signature == NULL); size_t i = HASHMAP_BEGIN; package_t* member; while((member = package_set_next(&group->members, &i)) != NULL) { pony_traceknown(ctx, member, package_signature_pony_type(), PONY_TRACE_MUTABLE); } }