Mercurial > repos > rhope
view runtime/object.h @ 50:689fb73e7612
Add support for various integer literals and add support for raw pointers to objects and raw pointers to arrays in the FFI
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Fri, 16 Apr 2010 01:57:04 -0400 |
parents | 3e20ed8959c4 |
children | 70af7fa155d0 |
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 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; 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 { #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 * 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); #define INITIAL_TYPE_STORAGE 32 #define INITIAL_METHOD_LOOKUP 8 #define BELOW_INITIAL_METHOD 3 #endif //OBJECT_H_