Print is less badly broken. Read is less badly broken. GC is too aggressive.
This commit is contained in:
parent
22b0160a26
commit
63906fe817
19 changed files with 489 additions and 303 deletions
|
|
@ -56,15 +56,17 @@ struct pso_pointer make_exception( struct pso_pointer frame_pointer ) {
|
|||
|
||||
struct pso_pointer result = allocate( frame_pointer, EXCEPTIONTAG, 3 );
|
||||
|
||||
if ( !c_nilp( result ) && !exceptionp( result ) ) {
|
||||
if ( exceptionp( result ) ) {
|
||||
struct pso3 *object = ( struct pso3 * ) pointer_to_object( result );
|
||||
|
||||
object->payload.exception.message = inc_ref(message);
|
||||
object->payload.exception.message = inc_ref( message );
|
||||
object->payload.exception.stack =
|
||||
stackp( frame_pointer ) ? inc_ref(frame_pointer) : nil;
|
||||
stackp( frame_pointer ) ? inc_ref( frame_pointer ) : nil;
|
||||
object->payload.exception.meta = ( consp( meta )
|
||||
|| hashtabp( meta ) ) ? inc_ref(meta) : nil;
|
||||
object->payload.exception.cause = exceptionp( cause ) ? inc_ref(cause) : nil;
|
||||
|| hashtabp( meta ) ) ?
|
||||
inc_ref( meta ) : nil;
|
||||
object->payload.exception.cause =
|
||||
exceptionp( cause ) ? inc_ref( cause ) : nil;
|
||||
}
|
||||
|
||||
return result;
|
||||
|
|
|
|||
|
|
@ -22,8 +22,6 @@
|
|||
/**
|
||||
* Allocate an integer cell representing this `value` and return a pso_pointer to it.
|
||||
* @param value an integer value;
|
||||
* @param more `nil`, or a pointer to the more significant cell(s) of this number.
|
||||
* *NOTE* that if `more` is not `nil`, `value` *must not* exceed `MAX_INTEGER`.
|
||||
*/
|
||||
struct pso_pointer make_integer( struct pso_pointer frame_pointer,
|
||||
int64_t value ) {
|
||||
|
|
@ -34,8 +32,8 @@ struct pso_pointer make_integer( struct pso_pointer frame_pointer,
|
|||
struct pso2 *cell = pointer_to_object( result );
|
||||
cell->payload.integer.value = value;
|
||||
|
||||
debug_print( L"make_integer: returning\n", DEBUG_ALLOC, 0 );
|
||||
debug_dump_object( result, DEBUG_ALLOC, 0 );
|
||||
debug_printf( DEBUG_ALLOC, 0, L"\nmake_integer returning %ld\n",
|
||||
cell->payload.integer.value );
|
||||
|
||||
return result;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -62,8 +62,8 @@ struct pso_pointer make_frame( int arg_count, struct pso_pointer previous,
|
|||
} else {
|
||||
new_frame->payload.stack_frame.depth = 0;
|
||||
}
|
||||
|
||||
new_frame->payload.stack_frame.previous = inc_ref( previous);
|
||||
|
||||
new_frame->payload.stack_frame.previous = inc_ref( previous );
|
||||
|
||||
debug_printf( DEBUG_ALLOC, 1, L"depth is %d...\n",
|
||||
new_frame->payload.stack_frame.depth );
|
||||
|
|
@ -129,7 +129,7 @@ struct pso_pointer make_frame_with_env( int arg_count,
|
|||
arg_count, new_pointer.page, new_pointer.offset );
|
||||
#endif
|
||||
|
||||
prev_frame->payload.stack_frame.previous = inc_ref(previous);
|
||||
prev_frame->payload.stack_frame.previous = inc_ref( previous );
|
||||
|
||||
if ( stackp( previous ) ) {
|
||||
new_frame->payload.stack_frame.depth =
|
||||
|
|
@ -203,7 +203,7 @@ struct pso_pointer make_frame_with_arglist_and_env( struct pso_pointer
|
|||
arg_count, new_pointer.page, new_pointer.offset );
|
||||
#endif
|
||||
|
||||
prev_frame->payload.stack_frame.previous = inc_ref( previous);
|
||||
prev_frame->payload.stack_frame.previous = inc_ref( previous );
|
||||
|
||||
if ( stackp( previous ) ) {
|
||||
new_frame->payload.stack_frame.depth =
|
||||
|
|
@ -279,12 +279,12 @@ struct pso_pointer destroy_stack_frame( struct pso_pointer fp,
|
|||
dec_ref( frame->payload.stack_frame.arg[i] );
|
||||
}
|
||||
|
||||
frame->payload.stack_frame.previous = nil;
|
||||
frame->payload.stack_frame.function = nil;
|
||||
frame->payload.stack_frame.more = nil;
|
||||
frame->payload.stack_frame.locals = nil;
|
||||
frame->payload.stack_frame.env = nil;
|
||||
|
||||
frame->payload.stack_frame.previous = nil;
|
||||
frame->payload.stack_frame.function = nil;
|
||||
frame->payload.stack_frame.more = nil;
|
||||
frame->payload.stack_frame.locals = nil;
|
||||
frame->payload.stack_frame.env = nil;
|
||||
|
||||
frame->payload.stack_frame.args = 0;
|
||||
frame->payload.stack_frame.depth = 0;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue