: interrupt-error. ( error -- )
"Interrupt" print drop ;
+: callback-space-overflow. ( error -- )
+ "Callback space overflow" print drop ;
+
PREDICATE: vm-error < array
dup length 2 < [ drop f ] [
{
: vm-errors ( error -- n errors )
second {
- [ expired-error. ]
- [ io-error. ]
- [ primitive-error. ]
- [ type-check-error. ]
- [ divide-by-zero-error. ]
- [ signal-error. ]
- [ array-size-error. ]
- [ fixnum-range-error. ]
- [ c-string-error. ]
- [ ffi-error. ]
- [ undefined-symbol-error. ]
- [ datastack-underflow. ]
- [ datastack-overflow. ]
- [ retainstack-underflow. ]
- [ retainstack-overflow. ]
- [ callstack-underflow. ]
- [ callstack-overflow. ]
- [ memory-error. ]
- [ fp-trap-error. ]
- [ interrupt-error. ]
+ [ expired-error. ]
+ [ io-error. ]
+ [ primitive-error. ]
+ [ type-check-error. ]
+ [ divide-by-zero-error. ]
+ [ signal-error. ]
+ [ array-size-error. ]
+ [ fixnum-range-error. ]
+ [ c-string-error. ]
+ [ ffi-error. ]
+ [ undefined-symbol-error. ]
+ [ datastack-underflow. ]
+ [ datastack-overflow. ]
+ [ retainstack-underflow. ]
+ [ retainstack-overflow. ]
+ [ callstack-underflow. ]
+ [ callstack-overflow. ]
+ [ memory-error. ]
+ [ fp-trap-error. ]
+ [ interrupt-error. ]
+ [ callback-space-overflow. ]
} ; inline
M: vm-error summary drop "VM error" ;
CONSTANT: OBJ-SIGNAL-PIPE 74
+CONSTANT: OBJ-INSTALL-PREFIX 75
+
! Context object count and identifiers must be kept in sync with:
! vm/contexts.hpp
CONSTANT: CONTEXT-OBJ-IN-CALLBACK-P 3
! Runtime errors must be kept in sync with:
+! basis/debugger/debugger.factor
! vm/errors.hpp
-CONSTANT: kernel-error-count 20
+CONSTANT: kernel-error-count 21
CONSTANT: ERROR-EXPIRED 0
CONSTANT: ERROR-IO 1
CONSTANT: ERROR-MEMORY 17
CONSTANT: ERROR-FP-TRAP 18
CONSTANT: ERROR-INTERRUPT 19
+CONSTANT: ERROR-CALLBACK-SPACE-OVERFLOW 20
PRIVATE>
cell size = array_capacity(insns.untagged());
cell bump = align(size + sizeof(code_block), data_alignment);
- if (here + bump > seg->end)
- fatal_error("Out of callback space", 0);
+
+ if (here + bump > seg->end) {
+ parent->general_error(ERROR_CALLBACK_SPACE_OVERFLOW,
+ false_object,
+ false_object);
+ }
free_heap_block* free_block = (free_heap_block*)here;
free_block->make_free(bump);