diff Paper/src/context2.c @ 1:a72446879486

Init paper
author soto <soto@cr.ie.u-ryukyu.ac.jp>
date Thu, 12 Jan 2023 20:28:50 +0900
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Paper/src/context2.c	Thu Jan 12 20:28:50 2023 +0900
@@ -0,0 +1,37 @@
+#include <stdlib.h>
+
+#include "../context.h"
+
+void initContext(struct Context* context) {
+    context->heapLimit = sizeof(union Data)*ALLOCATE_SIZE;
+    context->code = (__code(**) (struct Context*)) NEWN(ALLOCATE_SIZE, void*);
+    context->data = NEWN(ALLOCATE_SIZE, union Data*);
+    context->heapStart = NEWN(context->heapLimit, char);
+    context->heap = context->heapStart;
+
+    context->code[C_cs1]    = cs1_stub;
+    context->code[C_cs2]    = cs2_stub;
+    context->code[C_exit_code]    = exit_code_stub;
+    context->code[C_start_code]    = start_code_stub;
+
+#include "dataGearInit.c"
+}
+__code meta(struct Context* context, enum Code next) {
+    // printf("meta %d\n",next);
+    goto (context->code[next])(context);
+}
+__code start_code(struct Context* context) {
+    goto meta(context, context->next);
+}
+__code start_code_stub(struct Context* context) {
+    goto start_code(context);
+}
+__code exit_code(struct Context* context) {
+    free(context->code);
+    free(context->data);
+    free(context->heapStart);
+    goto exit(0);
+}
+__code exit_code_stub(struct Context* context) {
+    goto exit_code(context);
+}