Mercurial > repos > tabletprog
diff runtime/object.h @ 31:668f533e5284
Add initial version of C backend
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Sat, 07 Jul 2012 16:48:36 -0700 |
parents | |
children | a10f1b049193 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/object.h Sat Jul 07 16:48:36 2012 -0700 @@ -0,0 +1,36 @@ +#ifndef OBJECT_H_ +#define OBJECT_H_ + +#include <stdint.h> + +typedef struct obj_meta obj_meta; + +typedef struct object +{ + obj_meta * meta; + struct object * parent; +} object; + +typedef object * (*method)(uint32_t method_id, uint32_t num_args, object **); + +typedef object * (*closure_func)(void *, uint32_t, object **); + +typedef struct closure +{ + object header; + void * env; + closure_func func; +} closure; + +struct obj_meta +{ + uint32_t size; + method meth_lookup[16]; +}; + +#define mcall(method_id, num_args, args) (args[0])->meta->meth_lookup[method_id & 0xF](method_id, num_args, args) +#define ccall(clos, num_args, args) (((closure *)clos)->func(((closure *)clos)->env, num_args, args)) + +object * make_object(obj_meta * meta, void * parent, int num_props, ...); + +#endif //OBJECT_H_