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_