Very close to a basic REPL now.

This commit is contained in:
Simon Brooke 2026-04-16 22:28:35 +01:00
parent 83537391a6
commit 4efe9eab87
23 changed files with 188 additions and 84 deletions

View file

@ -36,17 +36,18 @@
*/
struct pso_pointer make_exception( struct pso_pointer message,
struct pso_pointer frame,
struct pso_pointer meta,
struct pso_pointer meta,
struct pso_pointer cause ) {
struct pso_pointer result = allocate(EXCEPTIONTAG, 3);
struct pso_pointer result = allocate( EXCEPTIONTAG, 3 );
if (!nilp(result) && !exceptionp(result)) {
struct pso3* object = (struct pso3*)pointer_to_object( result);
if ( !nilp( result ) && !exceptionp( result ) ) {
struct pso3 *object = ( struct pso3 * ) pointer_to_object( result );
object->payload.exception.message = message;
object->payload.exception.stack = stackp(frame) ? frame : nil;
object->payload.exception.meta = (consp(meta) || hashtabp(meta)) ? meta : nil;
object->payload.exception.cause = exceptionp(cause) ? cause : nil;
object->payload.exception.message = message;
object->payload.exception.stack = stackp( frame ) ? frame : nil;
object->payload.exception.meta = ( consp( meta )
|| hashtabp( meta ) ) ? meta : nil;
object->payload.exception.cause = exceptionp( cause ) ? cause : nil;
}
return result;
@ -63,12 +64,12 @@ struct pso_pointer destroy_exception( struct pso_pointer fp,
if ( stackp( fp ) ) {
struct pso4 *frame = pointer_to_pso4( fp );
struct pso_pointer p = frame->payload.stack_frame.arg[0];
struct pso3* object = (struct pso3*)pointer_to_object( p);
struct pso3 *object = ( struct pso3 * ) pointer_to_object( p );
dec_ref( object->payload.exception.message);
dec_ref( object->payload.exception.stack);
dec_ref( object->payload.exception.meta);
dec_ref( object->payload.exception.cause);
dec_ref( object->payload.exception.message );
dec_ref( object->payload.exception.stack );
dec_ref( object->payload.exception.meta );
dec_ref( object->payload.exception.cause );
}
return nil;