projects
/
fw
/
altos
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
altos/lisp: Change GC to do moves in batches of 32
[fw/altos]
/
src
/
lisp
/
ao_lisp_eval.c
diff --git
a/src/lisp/ao_lisp_eval.c
b/src/lisp/ao_lisp_eval.c
index f945bc163a35cbef1925ca6aa1c124e1376af971..04d0e70a2f79eeeee957ee01df3ced52575478db 100644
(file)
--- a/
src/lisp/ao_lisp_eval.c
+++ b/
src/lisp/ao_lisp_eval.c
@@
-16,6
+16,8
@@
#include "ao_lisp.h"
#include <assert.h>
#include "ao_lisp.h"
#include <assert.h>
+const struct ao_lisp_type ao_lisp_stack_type;
+
static int
stack_size(void *addr)
{
static int
stack_size(void *addr)
{
@@
-34,13
+36,11
@@
stack_mark(void *addr)
ao_lisp_poly_mark(stack->frame, 0);
ao_lisp_poly_mark(stack->list, 0);
stack = ao_lisp_poly_stack(stack->prev);
ao_lisp_poly_mark(stack->frame, 0);
ao_lisp_poly_mark(stack->list, 0);
stack = ao_lisp_poly_stack(stack->prev);
- if (ao_lisp_mark_memory(
stack, sizeof (struct ao_lisp_stack)
))
+ if (ao_lisp_mark_memory(
&ao_lisp_stack_type, stack
))
break;
}
}
break;
}
}
-static const struct ao_lisp_type ao_lisp_stack_type;
-
static void
stack_move(void *addr)
{
static void
stack_move(void *addr)
{
@@
-57,8
+57,7
@@
stack_move(void *addr)
prev = ao_lisp_poly_stack(stack->prev);
if (!prev)
break;
prev = ao_lisp_poly_stack(stack->prev);
if (!prev)
break;
- ret = ao_lisp_move_memory((void **) &prev,
- sizeof (struct ao_lisp_stack));
+ ret = ao_lisp_move_memory(&ao_lisp_stack_type, (void **) &prev);
if (prev != ao_lisp_poly_stack(stack->prev))
stack->prev = ao_lisp_stack_poly(prev);
if (ret)
if (prev != ao_lisp_poly_stack(stack->prev))
stack->prev = ao_lisp_stack_poly(prev);
if (ret)
@@
-67,10
+66,11
@@
stack_move(void *addr)
}
}
}
}
-
static
const struct ao_lisp_type ao_lisp_stack_type = {
+const struct ao_lisp_type ao_lisp_stack_type = {
.size = stack_size,
.mark = stack_mark,
.size = stack_size,
.mark = stack_mark,
- .move = stack_move
+ .move = stack_move,
+ .name = "stack"
};
struct ao_lisp_stack *ao_lisp_stack;
};
struct ao_lisp_stack *ao_lisp_stack;
@@
-567,14
+567,7
@@
ao_lisp_eval_restart(void)
ao_poly
ao_lisp_eval(ao_poly _v)
{
ao_poly
ao_lisp_eval(ao_poly _v)
{
- static uint8_t been_here;
-
ao_lisp_v = _v;
ao_lisp_v = _v;
- if (!been_here) {
- been_here = 1;
- ao_lisp_root_add(&ao_lisp_stack_type, &ao_lisp_stack);
- ao_lisp_root_poly_add(&ao_lisp_v);
- }
if (!ao_lisp_stack_push())
return AO_LISP_NIL;
if (!ao_lisp_stack_push())
return AO_LISP_NIL;