In my last commit, make the feature variable a gc variable

This commit is contained in:
Kris Katterjohn 2018-03-31 20:23:00 -05:00
parent dc80bf4f04
commit 5e80cb2c2b

5
sexp.c
View file

@ -438,7 +438,8 @@ static const char* sexp_initial_features[] = {
void sexp_init_context_globals (sexp ctx) { void sexp_init_context_globals (sexp ctx) {
const char** features; const char** features;
int i, endianess_check = 1; int i, endianess_check = 1;
sexp feature, type, *vec, print=NULL; sexp type, *vec, print=NULL;
sexp_gc_var1(feature);
sexp_context_globals(ctx) sexp_context_globals(ctx)
= sexp_make_vector(ctx, sexp_make_fixnum(SEXP_G_NUM_GLOBALS), SEXP_VOID); = sexp_make_vector(ctx, sexp_make_fixnum(SEXP_G_NUM_GLOBALS), SEXP_VOID);
#if ! SEXP_USE_GLOBAL_SYMBOLS #if ! SEXP_USE_GLOBAL_SYMBOLS
@ -474,6 +475,7 @@ void sexp_init_context_globals (sexp ctx) {
sexp_global(ctx, SEXP_G_FEATURES) = SEXP_NULL; sexp_global(ctx, SEXP_G_FEATURES) = SEXP_NULL;
sexp_push(ctx, sexp_global(ctx, SEXP_G_FEATURES), SEXP_FALSE); sexp_push(ctx, sexp_global(ctx, SEXP_G_FEATURES), SEXP_FALSE);
sexp_car(sexp_global(ctx, SEXP_G_FEATURES)) = sexp_intern(ctx, (*(unsigned char*) &endianess_check) ? "little-endian" : "big-endian", -1); sexp_car(sexp_global(ctx, SEXP_G_FEATURES)) = sexp_intern(ctx, (*(unsigned char*) &endianess_check) ? "little-endian" : "big-endian", -1);
sexp_gc_preserve1(ctx, feature);
for (features=sexp_initial_features; *features; features++) { for (features=sexp_initial_features; *features; features++) {
feature = sexp_intern(ctx, *features, -1); feature = sexp_intern(ctx, *features, -1);
if (sexp_not(sexp_memq(ctx, feature, sexp_global(ctx, SEXP_G_FEATURES)))) { if (sexp_not(sexp_memq(ctx, feature, sexp_global(ctx, SEXP_G_FEATURES)))) {
@ -481,6 +483,7 @@ void sexp_init_context_globals (sexp ctx) {
sexp_car(sexp_global(ctx, SEXP_G_FEATURES)) = feature; sexp_car(sexp_global(ctx, SEXP_G_FEATURES)) = feature;
} }
} }
sexp_gc_release1(ctx);
sexp_global(ctx, SEXP_G_NUM_TYPES) = sexp_make_fixnum(SEXP_NUM_CORE_TYPES); sexp_global(ctx, SEXP_G_NUM_TYPES) = sexp_make_fixnum(SEXP_NUM_CORE_TYPES);
sexp_global(ctx, SEXP_G_TYPES) sexp_global(ctx, SEXP_G_TYPES)
= sexp_make_vector(ctx, sexp_make_fixnum(SEXP_INIT_NUM_TYPES), SEXP_VOID); = sexp_make_vector(ctx, sexp_make_fixnum(SEXP_INIT_NUM_TYPES), SEXP_VOID);