Пример #1
0
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;
}
Пример #2
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;
}
Пример #3
0
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;
}
Пример #4
0
                 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)
{