* src/gc.c (gc_loop): Do not relocate car of TCLOSURE, TCONTINUATION.
Check for TBROKEN_HEART.
* src/mes.c (make_closure_): Set car to 0.
(check_apply): Check for TBROKEN_HEART. Fixes reporting artificial
out-of-memory error.
(eval_apply): Likewise.
* src/vector.c (vector_entry): Only copy TCHAR and TNUMBER.
SCM cdr;
while (scan < g_free)
{
- if (NTYPE (scan) == TCLOSURE
- || NTYPE (scan) == TCONTINUATION
- || NTYPE (scan) == TFUNCTION
+ if (NTYPE (scan) == TBROKEN_HEART)
+ error (cell_symbol_system_error, cell_gc);
+ if (NTYPE (scan) == TFUNCTION
|| NTYPE (scan) == TKEYWORD
|| NTYPE (scan) == TMACRO
|| NTYPE (scan) == TPAIR
type = "number";
if (TYPE (f) == TSTRING)
type = "string";
+ if (TYPE (f) == TBROKEN_HEART)
+ type = "<3";
if (type)
{
SCM
make_closure_ (SCM args, SCM body, SCM a) ///((internal))
{
- return make_cell__ (TCLOSURE, cell_f, cons (cons (cell_circular, a), cons (args, body)));
+ return make_cell__ (TCLOSURE, 0, cons (cons (cell_circular, a), cons (args, body)));
}
SCM
r1 = CDR (VARIABLE (r1));
goto vm_return;
}
+ case TBROKEN_HEART:
+ {
+ error (cell_symbol_system_error, r1);
+ }
default: goto vm_return;
}
SCM
vector_entry (SCM x)
{
- if (TYPE (x) == TPAIR || TYPE (x) == TSPECIAL || TYPE (x) == TSTRING || TYPE (x) == TSYMBOL || TYPE (x) == TVECTOR)
+ if (TYPE (x) != TCHAR && TYPE (x) != TNUMBER)
x = MAKE_REF (x);
return x;
}