diff Paper/src/gencontext.c @ 0:14a0e409d574

ADD fast commit
author soto <soto@cr.ie.u-ryukyu.ac.jp>
date Sun, 24 Apr 2022 23:13:44 +0900
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Paper/src/gencontext.c	Sun Apr 24 23:13:44 2022 +0900
@@ -0,0 +1,34 @@
+#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);
+}