uint16_t const_checksum_inv;
};
+#ifndef AO_SCHEME_POOL_TOTAL
+#error Must define AO_SCHEME_POOL_TOTAL for AO_SCHEME_SAVE
+#endif
+
#define AO_SCHEME_POOL_EXTRA (sizeof(struct ao_scheme_os_save))
#define AO_SCHEME_POOL ((int) (AO_SCHEME_POOL_TOTAL - AO_SCHEME_POOL_EXTRA))
#else
#include "ao_scheme_const.h"
#ifndef AO_SCHEME_POOL
-#define AO_SCHEME_POOL 3072
+#error Must define AO_SCHEME_POOL
#endif
#ifndef AO_SCHEME_POOL_EXTRA
#define AO_SCHEME_POOL_EXTRA 0
extern uint64_t ao_scheme_freed[2];
extern uint64_t ao_scheme_loops[2];
-/* returns 1 if the object was already marked */
-int
-ao_scheme_mark(const struct ao_scheme_type *type, void *addr);
-
/* returns 1 if the object was already marked */
int
ao_scheme_mark_memory(const struct ao_scheme_type *type, void *addr);
-void *
-ao_scheme_move_map(void *addr);
-
-/* returns 1 if the object was already moved */
-int
-ao_scheme_move(const struct ao_scheme_type *type, void **ref);
-
/* returns 1 if the object was already moved */
int
ao_scheme_move_memory(const struct ao_scheme_type *type, void **ref);
ao_scheme_bool_write(ao_poly v);
#ifdef AO_SCHEME_MAKE_CONST
-struct ao_scheme_bool *ao_scheme_true, *ao_scheme_false;
+extern struct ao_scheme_bool *ao_scheme_true, *ao_scheme_false;
struct ao_scheme_bool *
ao_scheme_bool_get(uint8_t value);
{
return ao_scheme_integer_typep(t) || (t == AO_SCHEME_FLOAT);
}
-
-float
-ao_scheme_poly_number(ao_poly p);
#else
#define ao_scheme_number_typep ao_scheme_integer_typep
-#define ao_scheme_poly_number ao_scheme_poly_integer
#endif
/* builtin */
return _ao_scheme_bool_true;
}
-int32_t
+static int32_t
ao_scheme_arg_int(ao_poly name, struct ao_scheme_cons *cons, int argc)
{
ao_poly p = ao_scheme_arg(cons, argc);
return _ao_scheme_bool_true;
}
-ao_poly
+static ao_poly
ao_scheme_math(struct ao_scheme_cons *orig_cons, enum ao_scheme_builtin_id op)
{
- struct ao_scheme_cons *cons = cons;
+ struct ao_scheme_cons *cons;
ao_poly ret = AO_SCHEME_NIL;
for (cons = orig_cons; cons; cons = ao_scheme_cons_cdr(cons)) {
return ao_scheme_math(cons, builtin_remainder);
}
-ao_poly
+static ao_poly
ao_scheme_compare(struct ao_scheme_cons *cons, enum ao_scheme_builtin_id op)
{
ao_poly left;
default:
break;
}
+#ifdef AO_SCHEME_FEATURE_FLOAT
} else if (ao_scheme_number_typep(lt) && ao_scheme_number_typep(rt)) {
float l, r;
default:
break;
}
+#endif /* AO_SCHEME_FEATURE_FLOAT */
} else if (lt == AO_SCHEME_STRING && rt == AO_SCHEME_STRING) {
int c = strcmp(ao_scheme_poly_string(left),
ao_scheme_poly_string(right));
#include "ao_scheme.h"
-int
+static int
lambda_size(void *addr)
{
(void) addr;
return sizeof (struct ao_scheme_lambda);
}
-void
+static void
lambda_mark(void *addr)
{
struct ao_scheme_lambda *lambda = addr;
ao_scheme_poly_mark(lambda->frame, 0);
}
-void
+static void
lambda_move(void *addr)
{
struct ao_scheme_lambda *lambda = addr;
printf(")");
}
-ao_poly
+static ao_poly
ao_scheme_lambda_alloc(struct ao_scheme_cons *code, int args)
{
struct ao_scheme_lambda *lambda;
return crc;
}
-uint16_t
+static uint16_t
ao_fec_crc(const uint8_t *bytes, uint8_t len)
{
uint16_t crc = AO_FEC_CRC_INIT;
struct ao_scheme_macro_stack *macro_stack;
-int
+static int
ao_scheme_macro_push(ao_poly p)
{
struct ao_scheme_macro_stack *m = macro_stack;
return 0;
}
-void
+static void
ao_scheme_macro_pop(void)
{
struct ao_scheme_macro_stack *m = macro_stack;
ao_poly
ao_has_macro(ao_poly p);
-ao_poly
+static ao_poly
ao_macro_test_get(ao_poly atom)
{
ao_poly *ref = ao_scheme_atom_ref(atom, NULL);
return AO_SCHEME_NIL;
}
-ao_poly
+static ao_poly
ao_is_macro(ao_poly p)
{
struct ao_scheme_builtin *builtin;
return 0;
}
-int
+static int
ao_scheme_read_eval_abort(void)
{
ao_poly in, out = AO_SCHEME_NIL;
static struct feature *enable;
static struct feature *disable;
-void
+static void
ao_scheme_add_feature(struct feature **list, char *name)
{
struct feature *feature = malloc (sizeof (struct feature) + strlen(name) + 1);
ao_poly val;
struct ao_scheme_atom *a;
struct ao_scheme_builtin *b;
+ struct feature *d;
int in_atom = 0;
char *out_name = NULL;
int c;
prev_func = _builtin_last;
target_func = 0;
+ b = NULL;
for (f = 0; f < (int) N_FUNC; f++) {
if (ao_scheme_has_feature(enable, funcs[f].feature) || !ao_scheme_has_feature(disable, funcs[f].feature)) {
if (funcs[f].func != prev_func) {
fprintf(out, "/* Generated file, do not edit */\n\n");
+ for (d = disable; d; d = d->next)
+ fprintf(out, "#undef AO_SCHEME_FEATURE_%s\n", d->name);
+
fprintf(out, "#define AO_SCHEME_POOL_CONST %d\n", ao_scheme_top);
fprintf(out, "extern const uint8_t ao_scheme_const[AO_SCHEME_POOL_CONST] __attribute__((aligned(4)));\n");
fprintf(out, "#define ao_builtin_atoms 0x%04x\n", ao_scheme_atom_poly(ao_scheme_atoms));
ao_poly
ao_scheme_do_save(struct ao_scheme_cons *cons)
{
+#ifdef AO_SCHEME_SAVE
+ struct ao_scheme_os_save *os;
+#endif
+
if (!ao_scheme_check_argc(_ao_scheme_atom_save, cons, 0, 0))
return AO_SCHEME_NIL;
#ifdef AO_SCHEME_SAVE
- struct ao_scheme_os_save *os = (struct ao_scheme_os_save *) (void *) &ao_scheme_pool[AO_SCHEME_POOL];
+ os = (struct ao_scheme_os_save *) (void *) &ao_scheme_pool[AO_SCHEME_POOL];
ao_scheme_collect(AO_SCHEME_COLLECT_FULL);
os->atoms = ao_scheme_atom_poly(ao_scheme_atoms);
ao_poly
ao_scheme_do_restore(struct ao_scheme_cons *cons)
{
+#ifdef AO_SCHEME_SAVE
+ struct ao_scheme_os_save save;
+ struct ao_scheme_os_save *os = (struct ao_scheme_os_save *) (void *) &ao_scheme_pool[AO_SCHEME_POOL];
+#endif
if (!ao_scheme_check_argc(_ao_scheme_atom_save, cons, 0, 0))
return AO_SCHEME_NIL;
#ifdef AO_SCHEME_SAVE
- struct ao_scheme_os_save save;
- struct ao_scheme_os_save *os = (struct ao_scheme_os_save *) (void *) &ao_scheme_pool[AO_SCHEME_POOL];
+ os = (struct ao_scheme_os_save *) (void *) &ao_scheme_pool[AO_SCHEME_POOL];
if (!ao_scheme_os_restore_save(&save, AO_SCHEME_POOL))
return ao_scheme_error(AO_SCHEME_INVALID, "header restore failed");
ao_poly
ao_scheme_stack_eval(void)
{
+ struct ao_scheme_cons *cons;
struct ao_scheme_stack *new = ao_scheme_stack_copy(ao_scheme_poly_stack(ao_scheme_v));
if (!new)
return AO_SCHEME_NIL;
- struct ao_scheme_cons *cons = ao_scheme_poly_cons(ao_scheme_stack->values);
+ cons = ao_scheme_poly_cons(ao_scheme_stack->values);
if (!cons || !cons->cdr)
return ao_scheme_error(AO_SCHEME_INVALID, "continuation requires a value");
ao_scheme_string_copy(char *a)
{
int alen = strlen(a);
+ char *r;
ao_scheme_string_stash(0, a);
- char *r = ao_scheme_alloc(alen + 1);
+ r = ao_scheme_alloc(alen + 1);
a = ao_scheme_string_fetch(0);
if (!r)
return NULL;
{
int alen = strlen(a);
int blen = strlen(b);
+ char *r;
ao_scheme_string_stash(0, a);
ao_scheme_string_stash(1, b);
- char *r = ao_scheme_alloc(alen + blen + 1);
+ r = ao_scheme_alloc(alen + blen + 1);
a = ao_scheme_string_fetch(0);
b = ao_scheme_string_fetch(1);
if (!r)
ao_poly
ao_scheme_string_pack(struct ao_scheme_cons *cons)
{
- int len = ao_scheme_cons_length(cons);
+ char *r;
+ char *s;
+ int len;
+
+ len = ao_scheme_cons_length(cons);
ao_scheme_cons_stash(0, cons);
- char *r = ao_scheme_alloc(len + 1);
+ r = ao_scheme_alloc(len + 1);
cons = ao_scheme_cons_fetch(0);
- char *s = r;
+ s = r;
while (cons) {
if (!ao_scheme_integer_typep(ao_scheme_poly_type(cons->car)))
int i;
for (i = 0; (c = a[i]); i++) {
+ struct ao_scheme_cons *n;
ao_scheme_cons_stash(0, cons);
ao_scheme_cons_stash(1, tail);
ao_scheme_string_stash(0, a);
- struct ao_scheme_cons *n = ao_scheme_cons_cons(ao_scheme_int_poly(c), AO_SCHEME_NIL);
+ n = ao_scheme_cons_cons(ao_scheme_int_poly(c), AO_SCHEME_NIL);
a = ao_scheme_string_fetch(0);
cons = ao_scheme_cons_fetch(0);
tail = ao_scheme_cons_fetch(1);
OBJS=$(SRCS:.c=.o)
CC=cc
-CFLAGS=-DAO_SCHEME_MAKE_CONST -O0 -g -I. -Wall -Wextra
+CFLAGS=-DAO_SCHEME_MAKE_CONST -O2 -g -I. -Wall -Wextra -Wpointer-arith -Wmissing-declarations -Wformat=2 -Wstrict-prototypes -Wmissing-prototypes -Wnested-externs -Wbad-function-cast -Wold-style-definition -Wdeclaration-after-statement -Wunused -Wuninitialized -Wshadow -Wmissing-noreturn -Wmissing-format-attribute -Wredundant-decls -Wlogical-op -Werror=implicit -Werror=nonnull -Werror=init-self -Werror=main -Werror=missing-braces -Werror=sequence-point -Werror=return-type -Werror=trigraphs -Werror=array-bounds -Werror=write-strings -Werror=address -Werror=int-to-pointer-cast -Werror=pointer-to-int-cast
.c.o:
$(CC) -c $(CFLAGS) $< -o $@
OBJS=$(SRCS:.c=.o)
-CFLAGS=-O2 -g -Wall -Wextra -I. -I..
+CFLAGS=-O2 -g -Wall -Wextra -I. -I.. -Wpointer-arith -Wmissing-declarations -Wformat=2 -Wstrict-prototypes -Wmissing-prototypes -Wnested-externs -Wbad-function-cast -Wold-style-definition -Wdeclaration-after-statement -Wunused -Wuninitialized -Wshadow -Wmissing-noreturn -Wmissing-format-attribute -Wredundant-decls -Wlogical-op -Werror=implicit -Werror=nonnull -Werror=init-self -Werror=main -Werror=missing-braces -Werror=sequence-point -Werror=return-type -Werror=trigraphs -Werror=array-bounds -Werror=write-strings -Werror=address -Werror=int-to-pointer-cast -Werror=pointer-to-int-cast
ao-scheme: $(OBJS)
cc $(CFLAGS) -o $@ $(OBJS) -lm
extern int ao_scheme_getc(void);
static inline void
-ao_scheme_os_flush() {
+ao_scheme_os_flush(void) {
fflush(stdout);
}
OBJS=$(SRCS:.c=.o)
-CFLAGS=-O0 -g -Wall -Wextra -I. -I..
+CFLAGS=-O0 -g -Wall -Wextra -I. -I.. -Wpointer-arith -Wmissing-declarations -Wformat=2 -Wstrict-prototypes -Wmissing-prototypes -Wnested-externs -Wbad-function-cast -Wold-style-definition -Wdeclaration-after-statement -Wunused -Wuninitialized -Wshadow -Wmissing-noreturn -Wmissing-format-attribute -Wredundant-decls -Wlogical-op -Werror=implicit -Werror=nonnull -Werror=init-self -Werror=main -Werror=missing-braces -Werror=sequence-point -Werror=return-type -Werror=trigraphs -Werror=array-bounds -Werror=write-strings -Werror=address -Werror=int-to-pointer-cast -Werror=pointer-to-int-cast
ao-scheme-tiny: $(OBJS)
cc $(CFLAGS) -o $@ $(OBJS) -lm
#include <stdlib.h>
#include <time.h>
-#undef AO_SCHEME_FEATURE_FLOAT
-#undef AO_SCHEME_FEATURE_VECTOR
-#undef AO_SCHEME_FEATURE_QUASI
-#undef AO_SCHEME_FEATURE_BIGINT
-
#define AO_SCHEME_POOL_TOTAL 4096
#define AO_SCHEME_SAVE 1
extern int ao_scheme_getc(void);
static inline void
-ao_scheme_os_flush() {
+ao_scheme_os_flush(void) {
fflush(stdout);
}