Very close to a basic REPL now.
This commit is contained in:
parent
83537391a6
commit
4efe9eab87
23 changed files with 188 additions and 84 deletions
|
|
@ -82,11 +82,10 @@ struct pso_pointer c_cdr( struct pso_pointer p ) {
|
|||
break;
|
||||
default:
|
||||
result =
|
||||
make_exception(
|
||||
c_cons(
|
||||
c_string_to_lisp_string( L"Invalid type for cdr" ),
|
||||
get_tag_string( p) ),
|
||||
nil, nil, nil );
|
||||
make_exception( c_cons
|
||||
( c_string_to_lisp_string
|
||||
( L"Invalid type for cdr" ),
|
||||
get_tag_string( p ) ), nil, nil, nil );
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@
|
|||
* @brief An exception; required three pointers, so use object of size class 3.
|
||||
*/
|
||||
struct exception_payload {
|
||||
/** @brief the exception message. Expected to be a string, but may be anything printable. */
|
||||
/** @brief the exception message. Expected to be a string, but may be anything printable. */
|
||||
struct pso_pointer message;
|
||||
/** @brief the stack frame at which the exception was thrown. */
|
||||
struct pso_pointer stack;
|
||||
|
|
@ -28,7 +28,7 @@ struct exception_payload {
|
|||
|
||||
struct pso_pointer make_exception( struct pso_pointer message,
|
||||
struct pso_pointer frame_pointer,
|
||||
struct pso_pointer meta,
|
||||
struct pso_pointer meta,
|
||||
struct pso_pointer cause );
|
||||
|
||||
struct pso_pointer destroy_exception( struct pso_pointer fp,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue