view src/allocate/allocate_test.c @ 9:14c604cfa711

modify directories
author Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
date Thu, 02 Apr 2015 01:05:52 +0900
parents 714d0ce1efd7
children
line wrap: on
line source

#include <stdio.h>
#include <stdlib.h>

#include "allocate_test.h"
#include "allocate.h"

#ifdef CLANG
#define _CbC_retrun __return
#define _CbC_environment __environment
#endif

#define NUM 100

__code start_code(Context* context) {
    goto meta_start_code(context);
}

__code meta_start_code(Context* context) {
    goto code1(context);
}

__code code1(Context* context) {
    goto meta_code1(context);
}

__code meta_code1(Context* context) {
    goto allocate(context, (int)sizeof(data1), NUM, code2);
}

/* __code allocate(Context* context, int size, int num, __code (*next)()) { */
/*     goto meta_allocate(context, size, num, next); */
/* } */

/* __code meta_allocate(Context* context, int size, int num, __code (*next)()) { */
/*     context->next = next; */
/*     void* ds = context->ds; */
/*     context->ds += size*num; */
/*     ((mdata*)context->mds)->ds = ds; */
/*     ((mdata*)context->mds)->size = size; */
/*     context->mds = (mdata*)context->mds+1; */
/*     goto context->next(context, (data1*)ds, 0); */
/* } */

__code code2(Context* context, data1* out, int loop) {
    out->i = loop;
    if (loop == NUM) {
        goto meta_code2(context);
    }
    printf("%d\n",out->i);
    goto code2(context, out+1, loop+1);
}

__code meta_code2(Context* context) {
    goto exit_code(context);
}

__code exit_code(Context* context) {
    free(context->ds_heap);
    free(context->mds_heap);
    goto exit(0);
}

int main() {
    Context* context = (Context*)malloc(sizeof(Context));
    context->ds_heap = malloc(sizeof(data1)*1024);
    context->mds_heap = malloc(sizeof(mdata)*1024);
    context->ds = context->ds_heap;
    context->mds = context->mds_heap;
    goto start_code(context);
}