ft_object_new( FT_Class    clazz,
                 FT_Pointer  init_data )
  {
    FT_Memory  memory;
    FT_Object  obj;


    FT_ASSERT_IS_CLASS(clazz);

    memory         = FT_CLASS__MEMORY(clazz);
    obj            = ft_mem_alloc( clazz->obj_size, memory );
    obj->clazz     = clazz;
    obj->ref_count = 1;

    if ( clazz->obj_init )
    {
      FT_CleanupStack  stack = FT_MEMORY__CLEANUP(memory);


      ft_cleanup_push( stack, obj, (FT_CleanupFunc) ft_object_cleanup, NULL );

      clazz->obj_init( obj, init_data );

      ft_cleanup_pop( stack, obj, 0 );
    }
    return obj;
  }
Exemple #2
0
  ft_xhandler_exit( FT_XHandler  xhandler )
  {
    FT_CleanupStack  stack = FT_MEMORY__CLEANUP(memory);

    stack->xhandler    = xhandler->previous;
    xhandler->previous = NULL;
    xhandler->error    = error;
    xhandler->cleanup  = NULL;
  }
Exemple #3
0
  ft_xhandler_enter( FT_XHandler  xhandler,
                     FT_Memory    memory )
  {
    FT_CleanupStack  stack = FT_MEMORY__CLEANUP(memory);

    xhandler->previous = stack->xhandler;
    xhandler->cleanup  = stack->top;
    xhandler->error    = 0;
    stack->xhandler    = xhandler;
  }