diff --git a/src/fe.c b/src/fe.c index 71141ee..ebefe22 100644 --- a/src/fe.c +++ b/src/fe.c @@ -33,7 +33,11 @@ #define number(x) ( (x)->cdr.n ) #define prim(x) ( (x)->cdr.c ) #define cfunc(x) ( (x)->cdr.f ) +#ifdef GINT +#define strbuf(x) ( (char *)&(x) ) +#else #define strbuf(x) ( &(x)->car.c + 1 ) +#endif #define STRBUFSIZE ( (int) sizeof(fe_Object*) - 1 ) #define GCMARKBIT ( 0x2 ) @@ -57,7 +61,16 @@ static const char *typenames[] = { "func", "macro", "prim", "cfunc", "ptr" }; -typedef union { fe_Object *o; fe_CFunc f; fe_Number n; char c; } Value; +typedef union { + fe_Object *o; + fe_CFunc f; + fe_Number n; +#ifdef GINT + struct { char _[3]; char c }; +#else + char c; +#endif +} Value; struct fe_Object { Value car, cdr; }; @@ -89,13 +102,13 @@ void fe_error(fe_Context *ctx, const char *msg) { /* do error handler */ if (ctx->handlers.error) { ctx->handlers.error(ctx, msg, cl); } /* error handler returned -- print error and traceback, exit */ -#ifdef RAYLIB +#ifndef GINT fprintf(stderr, "error: %s\n", msg); #endif for (; !isnil(cl); cl = cdr(cl)) { char buf[64]; fe_tostring(ctx, car(cl), buf, sizeof(buf)); -#ifdef RAYLIB +#ifndef GINT fprintf(stderr, "=> %s\n", buf); #endif } @@ -735,7 +748,7 @@ static fe_Object* eval(fe_Context *ctx, fe_Object *obj, fe_Object *env, fe_Objec case P_PRINT: while (!isnil(arg)) { -#ifdef RAYLIB +#ifndef GINT fe_writefp(ctx, evalarg(), stdout); if (!isnil(arg)) { printf(" "); } #else @@ -743,7 +756,7 @@ static fe_Object* eval(fe_Context *ctx, fe_Object *obj, fe_Object *env, fe_Objec unused(isnil(arg)); #endif } -#ifdef RAYLIB +#ifndef GINT printf("\n"); #endif break; @@ -855,7 +868,7 @@ static char buf[64000]; static void onerror(fe_Context *ctx, const char *msg, fe_Object *cl) { unused(ctx), unused(cl); -#ifdef RAYLIB +#ifndef GINT fprintf(stderr, "error: %s\n", msg); #endif longjmp(toplevel, -1); @@ -881,12 +894,12 @@ int main(int argc, char **argv) { /* re(p)l */ for (;;) { fe_restoregc(ctx, gc); -#ifdef RAYLIB +#ifndef GINT if (fp == stdin) { printf("> "); } #endif if (!(obj = fe_readfp(ctx, fp))) { break; } obj = fe_eval(ctx, obj); -#ifdef RAYLIB +#ifndef GINT if (fp == stdin) { fe_writefp(ctx, obj, stdout); printf("\n"); } #endif }