Mercurial > repos > rhope
view runtime/object.h @ 10:0f2c4ee070fe
Changes to calldata struct for stack unwind
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Sat, 16 May 2009 23:24:24 -0400 |
parents | 8d74ef7fa357 |
children | 31f8182f3433 |
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; 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->header), refcount, 1) 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); 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); returntype convert_to(uint32_t convertto, calldata * params); returntype convert_from(uint32_t convertfrom, calldata * params); object * copy_object(object * tocopy); returntype coerce_value(uint32_t type, calldata * params); #define INITIAL_TYPE_STORAGE 32 #define INITIAL_METHOD_LOOKUP 8 #define BELOW_INITIAL_METHOD 3 #endif //_OBJECT_H_