Mercurial > repos > rhope
view runtime/object.h @ 180:c40e0faa1c92
Add Call to Dict and List
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Sun, 19 Jun 2011 10:43:11 -0700 |
parents | 9fab36cc706b |
children | ba35ab624ec2 |
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; special_func free; struct object *name; uint32_t type_id; 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; int32_t size; int32_t boxed_size; } blueprint; struct object { rh_atomic32(refcount); blueprint *bprint; }; typedef struct { object base; uint32_t size; } multisize; #pragma pack(push,1) struct calldata { struct calldata *lastframe; void *vars; #ifdef ENABLE_PROFILING uint64_t start; uint64_t accum; uint64_t self_start; uint64_t self_accum; uint64_t *myactivationlevel; #endif uint32_t func; uint16_t num_params; uint16_t callspace; object *params[1]; }; #pragma pack(pop) #define OBegin typedef struct { #define Object(name) } nt_ ## name; typedef struct { object SP_header; nt_ ## name payload; } t_ ## name; #define MObject(name) } nt_ ## name; typedef struct { multisize SP_header; nt_ ## name payload; } t_ ## name; #define Box(nakedtype,fieldname,objectname) typedef struct{ object SP_header; nakedtype fieldname; } t_ ## objectname; #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, int32_t size, special_func init, special_func copy, special_func cleanup); blueprint * register_type(int32_t size, special_func init, special_func copy, special_func cleanup); blueprint * new_blueprint(uint32_t type, int32_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); extern blueprint ** registered_types; extern uint32_t max_registered_type; #include "fixed_alloc.h" extern mem_manager * manager; #define INITIAL_TYPE_STORAGE 32 #define INITIAL_METHOD_LOOKUP 8 #define BELOW_INITIAL_METHOD 3 #endif //OBJECT_H_