view runtime/object.h @ 34:a10f1b049193

Working closures, but need to rethink method call strategy
author Mike Pavone <pavone@retrodev.com>
date Mon, 09 Jul 2012 08:57:50 -0700
parents 668f533e5284
children bf5e88f6419d
line wrap: on
line source

#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];
};

extern obj_meta lambda_meta;

#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, ...);
object * make_closure(void * env, closure_func func);

#endif //OBJECT_H_