Mercurial > hg > Papers > 2018 > ryokka-sigos
view Paper/src/context2.c @ 12:e20725cd6d8a default tip
fix slides
author | ryokka |
---|---|
date | Mon, 21 May 2018 00:29:29 +0900 |
parents | a5facba1adbc |
children |
line wrap: on
line source
#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); }