Exemple #1
0
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;
}
Exemple #2
0
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);
}
Exemple #3
0
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);
}
Exemple #4
0
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);
}
Exemple #5
0
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);
}
Exemple #6
0
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);
}
Exemple #7
0
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);
  }
}