MMError dylan_mm_register_thread(void *stackBot) { gc_teb_t gc_teb = current_gc_teb(); update_runtime_thread_count(1); zero_allocation_counter(gc_teb); unused(stackBot); return 0; }
MMError dylan_init_thread(void **rReturn, void *(*f)(void *, size_t), void *p, size_t s) { EXCEPTION_PREAMBLE() gc_teb_t gc_teb = current_gc_teb(); gc_teb->gc_teb_inside_tramp = 1; /* Go for it! */ mps_tramp(rReturn, f, p, s); gc_teb->gc_teb_inside_tramp = 0; EXCEPTION_POSTAMBLE() return MMSUCCESS; }
void *dylan_callin_handler(void *arg_base, size_t s) { void *res; EXCEPTION_PREAMBLE() gc_teb_t gc_teb = current_gc_teb(); int was_inside = gc_teb->gc_teb_inside_tramp; gc_teb->gc_teb_inside_tramp = 1; /* Go for it! */ mps_tramp(&res, dylan_callin_internal, arg_base, s); gc_teb->gc_teb_inside_tramp = was_inside; EXCEPTION_POSTAMBLE() return res; }
0, dylan_object, 0, 0, 0, dylan_object, 0, MMAllocateWrapper); } RUN_TIME_API void *primitive_alloc_rt(size_t size, void *wrapper, size_t rep_size, size_t rep_size_slot, void *template) { void **object; gc_teb_t gc_teb = current_gc_teb(); update_allocation_counter(gc_teb, size, wrapper); object = MMAllocateObject(size, wrapper, gc_teb); object[0] = wrapper; object[rep_size_slot] = (void*)((rep_size << 2) + 1); memcpy(object + rep_size_slot + 1, template, rep_size * sizeof(void *)); return object; } RUN_TIME_API void *primitive_copy(size_t size, void *template) {