Mercurial > repos > rhope
view runtime/object.h @ 40:789a146a48e1
Started adding support for naked values in user defined objects
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Fri, 09 Oct 2009 01:01:26 -0400 |
parents | 495dddadd058 |
children | 1b86a1ee500a |
line wrap: on
line source
#ifndef OBJECT_H_ #define OBJECT_H_ #include "plat_types.h" #include "thread.h" #include "func.h" typedef struct{ rhope_func *method_lookup; rhope_func *getter_lookup; rhope_func *setter_lookup; rhope_func *convert_to; rhope_func *convert_from; special_func init; special_func copy; special_func cleanup; struct object *name; uint32_t first_methodid; uint32_t last_methodid; uint32_t first_getfieldid; uint32_t last_getfieldid; uint32_t first_setfieldid; uint32_t last_setfieldid; uint32_t first_convertto; uint32_t last_convertto; uint32_t first_convertfrom; uint32_t last_convertfrom; uint32_t size; uint32_t boxed_size; } blueprint; typedef struct object { rh_atomic32(refcount); blueprint *bprint; } object; typedef struct { object base; uint32_t size; } multisize; typedef struct calldata { rhope_func tail_func; struct context *ct; void *locals; struct calldata *call; uint32_t original_methodid; uint16_t num_params; uint16_t resume; object *params[1]; } calldata; #define OBegin typedef struct { object header; #define Object(name) } t_ ## name; #define MOBegin typedef struct { multisize header; #define get_blueprint(object) (object)->bprint #define add_ref(object) (rh_atomic_add((object), refcount, 1),object) returntype call_method(uint32_t methodid, calldata * params); returntype set_field(uint32_t setfieldid, calldata * params); returntype get_field(uint32_t getfieldid, calldata * params); object * alloc_object(blueprint * bp); void * alloc_variable(uint32_t size); object * new_object(uint32_t type); object * new_object_bp(blueprint * bp); multisize * new_multisize(uint32_t type, uint32_t size); void release_ref(object * obj); blueprint * register_type_byid(uint32_t type, uint32_t size, special_func init, special_func copy, special_func cleanup); blueprint * new_blueprint(uint32_t type, uint32_t size, special_func init, special_func copy, special_func cleanup); void add_method(blueprint * bp, uint32_t methodid, rhope_func impl); void add_getter(blueprint * bp, uint32_t fieldid, rhope_func impl); void add_setter(blueprint * bp, uint32_t fieldid, rhope_func impl); returntype convert_to(uint32_t convertto, calldata * params); returntype convert_from(uint32_t convertfrom, calldata * params); object * copy_object(object * tocopy); object * naked_to_boxed(uint32_t type, void * rawdata); void boxed_to_naked(object * src, void * dest); returntype coerce_value(uint32_t type, calldata * params); blueprint * get_blueprint_byid(uint32_t type); #define INITIAL_TYPE_STORAGE 32 #define INITIAL_METHOD_LOOKUP 8 #define BELOW_INITIAL_METHOD 3 #endif //OBJECT_H_