Mercurial > hg > Papers > 2022 > soto-sigos
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); +}