view runtime/object.h @ 58:4c22fe798779

Some small optimizations
author Mike Pavone <pavone@retrodev.com>
date Thu, 08 Oct 2009 03:03:48 -0400
parents d2f9b0a9403d
children b218af069da7
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       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;
	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;

#pragma pack(push,1)
typedef struct calldata {
	object 			*params[1];
	struct calldata	*lastframe;
	uint16_t 		num_params;
	uint16_t 		resume;
	uint32_t 		func;
} calldata;
#pragma pack(pop)

#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);
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_