diff --git a/archive/c/ops/equal.c b/archive/c/ops/equal.c index 9a7aded..296aea6 100644 --- a/archive/c/ops/equal.c +++ b/archive/c/ops/equal.c @@ -272,7 +272,7 @@ bool equal_map_map( struct cons_pointer a, struct cons_pointer b ) { for ( struct cons_pointer i = keys_a; !nilp( i ); i = c_cdr( i ) ) { struct cons_pointer key = c_car( i ); - if ( !c_equal + if ( !equal ( hashmap_get( a, key, false ), hashmap_get( b, key, false ) ) ) { result = false; @@ -331,7 +331,7 @@ bool equal_vector_vector( struct cons_pointer a, struct cons_pointer b ) { * Deep, and thus expensive, equality: true if these two objects have * identical structure, else false. */ -bool c_equal( struct cons_pointer a, struct cons_pointer b ) { +bool equal( struct cons_pointer a, struct cons_pointer b ) { debug_print( L"\nequal: ", DEBUG_EQUAL ); debug_print_object( a, DEBUG_EQUAL ); debug_print( L" = ", DEBUG_EQUAL ); @@ -353,8 +353,8 @@ bool c_equal( struct cons_pointer a, struct cons_pointer b ) { * structures can be of indefinite extent. It *must* be done by * iteration (and even that is problematic) */ result = - c_equal( cell_a->payload.cons.car, cell_b->payload.cons.car ) - && c_equal( cell_a->payload.cons.cdr, + equal( cell_a->payload.cons.car, cell_b->payload.cons.car ) + && equal( cell_a->payload.cons.cdr, cell_b->payload.cons.cdr ); break; case KEYTV: @@ -401,7 +401,7 @@ bool c_equal( struct cons_pointer a, struct cons_pointer b ) { * isn't sufficient. So we recurse at least once. */ result = ( wcsncmp( a_buff, b_buff, i ) == 0 ) - && c_equal( c_cdr( a ), c_cdr( b ) ); + && equal( c_cdr( a ), c_cdr( b ) ); } break; case VECTORPOINTTV: diff --git a/archive/c/ops/equal.h b/archive/c/ops/equal.h index a3ae93a..061eb94 100644 --- a/archive/c/ops/equal.h +++ b/archive/c/ops/equal.h @@ -31,6 +31,6 @@ bool eq( struct cons_pointer a, struct cons_pointer b ); * Deep, and thus expensive, equality: true if these two objects have * identical structure, else false. */ -bool c_equal( struct cons_pointer a, struct cons_pointer b ); +bool equal( struct cons_pointer a, struct cons_pointer b ); #endif diff --git a/archive/c/ops/intern.c b/archive/c/ops/intern.c index f16733d..989686b 100644 --- a/archive/c/ops/intern.c +++ b/archive/c/ops/intern.c @@ -334,7 +334,7 @@ struct cons_pointer search_store( struct cons_pointer key, switch ( get_tag_value( entry_ptr ) ) { case CONSTV: - if ( c_equal( key, c_car( entry_ptr ) ) ) { + if ( equal( key, c_car( entry_ptr ) ) ) { result = return_key ? c_car( entry_ptr ) : c_cdr( entry_ptr ); @@ -441,7 +441,7 @@ struct cons_pointer internedp( struct cons_pointer key, for ( struct cons_pointer pair = c_car( store ); eq( result, NIL ) && !nilp( pair ); pair = c_car( store ) ) { if ( consp( pair ) ) { - if ( c_equal( c_car( pair ), key ) ) { + if ( equal( c_car( pair ), key ) ) { // yes, this should be `eq`, but if symbols are correctly // interned this will work efficiently, and if not it will // still work. diff --git a/archive/c/ops/lispops.c b/archive/c/ops/lispops.c index 2a8cc47..a9dd7ea 100644 --- a/archive/c/ops/lispops.c +++ b/archive/c/ops/lispops.c @@ -987,7 +987,7 @@ lisp_equal( struct stack_frame *frame, struct cons_pointer frame_pointer, if ( frame->args > 1 ) { for ( int b = 1; ( truep( result ) ) && ( b < frame->args ); b++ ) { result = - c_equal( frame->arg[0], fetch_arg( frame, b ) ) ? TRUE : NIL; + equal( frame->arg[0], fetch_arg( frame, b ) ) ? TRUE : NIL; } } diff --git a/src/c/environment/environment.h b/src/c/environment/environment.h index 4ec736a..87a40aa 100644 --- a/src/c/environment/environment.h +++ b/src/c/environment/environment.h @@ -10,6 +10,6 @@ #ifndef __psse_environment_environment_h #define __psse_environment_environment_h -struct pso_pointer initialise_environment( uint32_t node ); +struct pso_pointer initialise_environment( uint32_t node); -#endif +#endif \ No newline at end of file diff --git a/src/c/io/io.c b/src/c/io/io.c index e9b40e1..a8cf105 100644 --- a/src/c/io/io.c +++ b/src/c/io/io.c @@ -114,7 +114,8 @@ char *lisp_string_to_c_string( struct pso_pointer s ) { if ( stringp( s ) || symbolp( s ) ) { int len = 0; - for ( struct pso_pointer c = s; !nilp( c ); c = cdr( c ) ) { + for ( struct pso_pointer c = s; !nilp( c ); + c = cdr(c)) { len++; } @@ -123,7 +124,8 @@ char *lisp_string_to_c_string( struct pso_pointer s ) { result = calloc( ( len * 4 ) + 1, sizeof( char ) ); int i = 0; - for ( struct pso_pointer c = s; !nilp( c ); c = cdr( c ) ) { + for ( struct pso_pointer c = s; !nilp( c ); + c = cdr(c)) { buffer[i++] = pointer_to_object( c )->payload.string.character; } @@ -132,7 +134,7 @@ char *lisp_string_to_c_string( struct pso_pointer s ) { } debug_print( L"lisp_string_to_c_string( ", DEBUG_IO, 0 ); - debug_print_object( s, DEBUG_IO, 0 ); + debug_print_object( s, DEBUG_IO , 0); debug_printf( DEBUG_IO, 0, L") => '%s'\n", result ); return result; @@ -260,16 +262,13 @@ wint_t url_ungetwc( wint_t wc, URL_FILE *input ) { * @return a pointer to a character object on success, or `nil` on failure. */ struct pso_pointer get_character( struct pso_pointer read_stream ) { - struct pso_pointer result = nil; + struct pso_pointer result = nil; - if ( readp( read_stream ) ) { - result = - make_character( url_fgetwc - ( pointer_to_object_of_size_class - ( read_stream, 2 )->payload.stream.stream ) ); - } + if (readp( read_stream)) { + result = make_character( url_fgetwc( pointer_to_object_of_size_class(read_stream, 2)->payload.stream.stream)); + } - return result; + return result; } /** @@ -280,20 +279,16 @@ struct pso_pointer get_character( struct pso_pointer read_stream ) { * * @return `t` on success, else `nil`. */ -struct pso_pointer push_back_character( struct pso_pointer c, - struct pso_pointer r ) { - struct pso_pointer result = nil; +struct pso_pointer push_back_character( struct pso_pointer c, struct pso_pointer r) { + struct pso_pointer result = nil; - if ( characterp( c ) && readp( r ) ) { - if ( url_ungetwc( ( wint_t ) - ( pointer_to_object( c )->payload.character. - character ), - pointer_to_object( r )->payload.stream.stream ) >= - 0 ) { - result = t; - } - } - return result; + if (characterp(c) && readp(r)) { + if (url_ungetwc( (wint_t)(pointer_to_object(c)->payload.character.character), + pointer_to_object(r)->payload.stream.stream) >= 0) { + result = t; + } + } + return result; } /** @@ -309,14 +304,12 @@ struct pso_pointer push_back_character( struct pso_pointer c, * @return T if the stream was successfully closed, else nil. */ struct pso_pointer -lisp_close( struct pso_pointer frame_pointer, struct pso_pointer env ) { - struct pso4 *frame = pointer_to_pso4( frame_pointer ); +lisp_close( struct pso4 *frame, struct pso_pointer frame_pointer, + struct pso_pointer env ) { struct pso_pointer result = nil; - if ( readp( fetch_arg( frame, 0 ) ) || writep( fetch_arg( frame, 0 ) ) ) { - if ( url_fclose - ( pointer_to_object( fetch_arg( frame, 0 ) )->payload. - stream.stream ) + if ( readp( fetch_arg( frame, 0) ) || writep( fetch_arg( frame, 0) ) ) { + if ( url_fclose( pointer_to_object( fetch_arg( frame, 0) )->payload.stream.stream ) == 0 ) { result = t; } @@ -326,25 +319,25 @@ lisp_close( struct pso_pointer frame_pointer, struct pso_pointer env ) { } struct pso_pointer add_meta_integer( struct pso_pointer meta, wchar_t *key, - long int value ) { + long int value ) { return cons( cons - ( c_string_to_lisp_keyword( key ), - make_integer( value ) ), meta ); + ( c_string_to_lisp_keyword( key ), + make_integer( value ) ), meta ); } struct pso_pointer add_meta_string( struct pso_pointer meta, wchar_t *key, - char *value ) { + char *value ) { value = trim( value ); wchar_t buffer[strlen( value ) + 1]; mbstowcs( buffer, value, strlen( value ) + 1 ); return cons( cons( c_string_to_lisp_keyword( key ), - c_string_to_lisp_string( buffer ) ), meta ); + c_string_to_lisp_string( buffer ) ), meta ); } struct pso_pointer add_meta_time( struct pso_pointer meta, wchar_t *key, - time_t *value ) { + time_t *value ) { /* I don't yet have a concept of a date-time object, which is a * bit of an oversight! */ char datestring[256]; @@ -416,7 +409,7 @@ static size_t write_meta_callback( char *string, size_t size, size_t nmemb, // } // free( s ); - return 0; // strlen( string ); + return 0; // strlen( string ); } void collect_meta( struct pso_pointer stream, char *url ) { @@ -496,8 +489,8 @@ struct pso_pointer get_default_stream( bool inputp, struct pso_pointer env ) { * on my stream, if any, else nil. */ struct pso_pointer -lisp_open( struct pso_pointer frame_pointer, struct pso_pointer env ) { - struct pso4 *frame = pointer_to_pso4( frame_pointer ); +lisp_open( struct pso4 *frame, struct pso_pointer frame_pointer, + struct pso_pointer env ) { struct pso_pointer result = nil; // if ( stringp( fetch_arg( frame, 0) ) ) { @@ -563,14 +556,14 @@ lisp_open( struct pso_pointer frame_pointer, struct pso_pointer env ) { * on my stream, if any, else nil. */ struct pso_pointer -lisp_read_char( struct pso_pointer frame_pointer, struct pso_pointer env ) { - struct pso4 *frame = pointer_to_pso4( frame_pointer ); +lisp_read_char( struct pso4 *frame, struct pso_pointer frame_pointer, + struct pso_pointer env ) { struct pso_pointer result = nil; - if ( readp( fetch_arg( frame, 0 ) ) ) { + if ( readp( fetch_arg( frame, 0) ) ) { result = make_string( url_fgetwc - ( pointer_to_object( fetch_arg( frame, 0 ) )->payload. + ( pointer_to_object( fetch_arg( frame, 0) )->payload. stream.stream ), nil ); } @@ -592,19 +585,18 @@ lisp_read_char( struct pso_pointer frame_pointer, struct pso_pointer env ) { * on my stream, if any, else nil. */ struct pso_pointer -lisp_slurp( struct pso_pointer frame_pointer, struct pso_pointer env ) { - struct pso4 *frame = pointer_to_pso4( frame_pointer ); +lisp_slurp( struct pso4 *frame, struct pso_pointer frame_pointer, + struct pso_pointer env ) { struct pso_pointer result = nil; - if ( readp( fetch_arg( frame, 0 ) ) ) { - URL_FILE *stream = - pointer_to_object( fetch_arg( frame, 0 ) )->payload.stream.stream; + if ( readp( fetch_arg( frame, 0) ) ) { + URL_FILE *stream = pointer_to_object( fetch_arg( frame, 0) )->payload.stream.stream; struct pso_pointer cursor = make_string( url_fgetwc( stream ), nil ); result = cursor; for ( wint_t c = url_fgetwc( stream ); !url_feof( stream ) && c != 0; c = url_fgetwc( stream ) ) { - debug_print( L"slurp: cursor is: ", DEBUG_IO, 0 ); + debug_print( L"slurp: cursor is: ", DEBUG_IO, 0); debug_dump_object( cursor, DEBUG_IO, 0 ); debug_print( L"; result is: ", DEBUG_IO, 0 ); debug_dump_object( result, DEBUG_IO, 0 ); diff --git a/src/c/io/io.h b/src/c/io/io.h index 703ed2e..c64114f 100644 --- a/src/c/io/io.h +++ b/src/c/io/io.h @@ -8,8 +8,8 @@ * Licensed under GPL version 2.0, or, at your option, any later version. */ -#ifndef __psse_io_io_h -#define __psse_io_io_h +#ifndef __psse_io_h +#define __psse_io_h #include #include "memory/pointer.h" @@ -32,19 +32,22 @@ wint_t url_ungetwc( wint_t wc, URL_FILE * input ); struct pso_pointer get_character( struct pso_pointer read_stream ); -struct pso_pointer push_back_character( struct pso_pointer c, - struct pso_pointer r ); +struct pso_pointer push_back_character( struct pso_pointer c, struct pso_pointer r); struct pso_pointer get_default_stream( bool inputp, struct pso_pointer env ); struct pso_pointer -lisp_close( struct pso_pointer frame_pointer, struct pso_pointer env ); +lisp_close( struct pso4 *frame, struct pso_pointer frame_pointer, + struct pso_pointer env ); struct pso_pointer -lisp_open( struct pso_pointer frame_pointer, struct pso_pointer env ); +lisp_open( struct pso4 *frame, struct pso_pointer frame_pointer, + struct pso_pointer env ); struct pso_pointer -lisp_read_char( struct pso_pointer frame_pointer, struct pso_pointer env ); +lisp_read_char( struct pso4 *frame, struct pso_pointer frame_pointer, + struct pso_pointer env ); struct pso_pointer -lisp_slurp( struct pso_pointer frame_pointer, struct pso_pointer env ); +lisp_slurp( struct pso4 *frame, struct pso_pointer frame_pointer, + struct pso_pointer env ); char *lisp_string_to_c_string( struct pso_pointer s ); #endif diff --git a/src/c/io/print.c b/src/c/io/print.c index e56babf..1b1bb0b 100644 --- a/src/c/io/print.c +++ b/src/c/io/print.c @@ -36,29 +36,28 @@ #include "payloads/cons.h" #include "payloads/integer.h" -struct pso_pointer in_print( struct pso_pointer p, URL_FILE * output ); +struct pso_pointer in_print( struct pso_pointer p, URL_FILE * output); -struct pso_pointer print_list_content( struct pso_pointer p, URL_FILE *output ) { - struct pso_pointer result = nil; +struct pso_pointer print_list_content( struct pso_pointer p, URL_FILE * output) { + struct pso_pointer result = nil; - if ( consp( p ) ) { - for ( ; consp( p ); p = cdr( p ) ) { - struct pso2 *object = pointer_to_object( p ); + if (consp(p)) { + for (; consp( p); p = cdr(p)) { + struct pso2* object = pointer_to_object(p); + + result = in_print( object->payload.cons.car, output); - result = in_print( object->payload.cons.car, output ); + if (exceptionp(result)) break; - if ( exceptionp( result ) ) - break; - - switch ( get_tag_value( object->payload.cons.cdr ) ) { - case NILTV: + switch (get_tag_value(object->payload.cons.cdr)) { + case NILTV : break; - case CONSTV: + case CONSTV : url_fputwc( L' ', output ); break; - default: - url_fputws( L" . ", output ); - result = in_print( object->payload.cons.cdr, output ); + default : + url_fputws( L" . ", output); + result = in_print( object->payload.cons.cdr, output); } } @@ -69,34 +68,33 @@ struct pso_pointer print_list_content( struct pso_pointer p, URL_FILE *output ) return result; } -struct pso_pointer in_print( struct pso_pointer p, URL_FILE *output ) { - struct pso2 *object = pointer_to_object( p ); +struct pso_pointer in_print( struct pso_pointer p, URL_FILE * output) { + struct pso2* object = pointer_to_object(p); struct pso_pointer result = nil; - if ( object != NULL ) { - switch ( get_tag_value( p ) ) { - case CHARACTERTV: - url_fputwc( object->payload.character.character, output ); + if (object != NULL) { + switch (get_tag_value( p)) { + case CHARACTERTV : + url_fputwc( object->payload.character.character, output); break; - case CONSTV: + case CONSTV : url_fputwc( L'(', output ); - result = print_list_content( p, output ); + result = print_list_content( p, output); url_fputwc( L')', output ); break; - case INTEGERTV: - url_fwprintf( output, L"%d", - ( int64_t ) ( object->payload.integer.value ) ); + case INTEGERTV : + url_fwprintf( output, L"%d", (int64_t)(object->payload.integer.value)); break; - case TRUETV: + case TRUETV : url_fputwc( L't', output ); break; - case NILTV: + case NILTV : url_fputws( L"nil", output ); - default: + default : // TODO: return exception } } else { - // TODO: return exception + // TODO: return exception } return result; @@ -109,20 +107,16 @@ struct pso_pointer in_print( struct pso_pointer p, URL_FILE *output ) { * @param stream if a pointer to an open write stream, print to there. * @return struct pso_pointer `nil`, or an exception if some erroe occurred. */ -struct pso_pointer print( struct pso_pointer p, struct pso_pointer stream ) { - URL_FILE *output = writep( stream ) ? - pointer_to_object( stream )->payload.stream.stream : - file_to_url_file( stdout ); +struct pso_pointer print( struct pso_pointer p, struct pso_pointer stream) { + URL_FILE *output = writep( stream) ? + pointer_to_object( stream )->payload.stream.stream : + file_to_url_file(stdout); - if ( writep( stream ) ) { - inc_ref( stream ); - } + if ( writep( stream)) { inc_ref( stream); } - struct pso_pointer result = in_print( p, output ); + struct pso_pointer result = in_print(p, output); - if ( writep( stream ) ) { - dec_ref( stream ); - } + if ( writep( stream)) { dec_ref( stream); } return result; } diff --git a/src/c/io/print.h b/src/c/io/print.h index eb728c3..7542076 100644 --- a/src/c/io/print.h +++ b/src/c/io/print.h @@ -14,6 +14,6 @@ #ifndef __psse_io_print_h #define __psse_io_print_h -struct pso_pointer print( struct pso_pointer p, struct pso_pointer stream ); +struct pso_pointer print( struct pso_pointer p, struct pso_pointer stream); -#endif +#endif \ No newline at end of file diff --git a/src/c/io/read.c b/src/c/io/read.c index 71c96f8..7811bf1 100644 --- a/src/c/io/read.c +++ b/src/c/io/read.c @@ -28,7 +28,6 @@ #include "io/read.h" #include "memory/node.h" #include "memory/pointer.h" -#include "memory/pso.h" #include "memory/pso2.h" #include "memory/tags.h" @@ -73,14 +72,14 @@ * 2. The character most recently read from that stream. */ struct pso_pointer read_example( struct pso_pointer frame_pointer, - struct pso_pointer env ) { - struct pso4 *frame = pointer_to_pso4( frame_pointer ); - struct pso_pointer stream = fetch_arg( frame, 0 ); - struct pso_pointer readtable = fetch_arg( frame, 1 ); - struct pso_pointer character = fetch_arg( frame, 2 ); - struct pso_pointer result = nil; + struct pso_pointer env) { + struct pso4 *frame = pointer_to_pso4( frame_pointer); + struct pso_pointer stream = fetch_arg( frame, 0); + struct pso_pointer readtable = fetch_arg( frame, 1); + struct pso_pointer character = fetch_arg( frame, 2); + struct pso_pointer result = nil; - return result; + return result; } /** @@ -94,62 +93,64 @@ struct pso_pointer read_example( struct pso_pointer frame_pointer, * 2. The character most recently read from that stream. */ struct pso_pointer read_number( struct pso_pointer frame_pointer, - struct pso_pointer env ) { - struct pso4 *frame = pointer_to_pso4( frame_pointer ); - struct pso_pointer stream = fetch_arg( frame, 0 ); - struct pso_pointer readtable = fetch_arg( frame, 1 ); - struct pso_pointer character = fetch_arg( frame, 2 ); - struct pso_pointer result = nil; + struct pso_pointer env) { + struct pso4 *frame = pointer_to_pso4( frame_pointer); + struct pso_pointer stream = fetch_arg( frame, 0); + struct pso_pointer readtable = fetch_arg( frame, 1); + struct pso_pointer character = fetch_arg( frame, 2); + struct pso_pointer result = nil; - int base = 10; - // TODO: should check for *read-base* in the environment - int64_t value = 0; + int base = 10; + // TODO: should check for *read-base* in the environment + int64_t value = 0; - if ( readp( stream ) ) { - if ( nilp( character ) ) { - character = get_character( stream ); - } - wchar_t c = nilp( character ) ? 0 : - pointer_to_object( character )->payload.character.character; + if (readp(stream)) { + if (nilp( character)) { + character = get_character( stream); + } + wchar_t c = nilp(character) ? 0 : + pointer_to_object( character)->payload.character.character; - URL_FILE *input = pointer_to_object( stream )->payload.stream.stream; - for ( ; iswdigit( c ); c = url_fgetwc( input ) ) { - value = ( value * base ) + ( ( int ) c - ( int ) L'0' ); - } + URL_FILE * input = pointer_to_object(stream)->payload.stream.stream; + for ( ; iswdigit( c ); + c = url_fgetwc( input ) ){ + value = (value * base) + ((int)c - (int)L'0'); + } - url_ungetwc( c, input ); - result = make_integer( value ); - } // else exception? + url_ungetwc( c, input); + result = make_integer( value); + } // else exception? - return result; + return result; } struct pso_pointer read_symbol( struct pso_pointer frame_pointer, - struct pso_pointer env ) { - struct pso4 *frame = pointer_to_pso4( frame_pointer ); - struct pso_pointer stream = fetch_arg( frame, 0 ); - struct pso_pointer readtable = fetch_arg( frame, 1 ); - struct pso_pointer character = fetch_arg( frame, 2 ); - struct pso_pointer result = nil; + struct pso_pointer env) { + struct pso4 *frame = pointer_to_pso4( frame_pointer); + struct pso_pointer stream = fetch_arg( frame, 0); + struct pso_pointer readtable = fetch_arg( frame, 1); + struct pso_pointer character = fetch_arg( frame, 2); + struct pso_pointer result = nil; - if ( readp( stream ) ) { - if ( nilp( character ) ) { - character = get_character( stream ); - } + if (readp(stream)) { + if (nilp( character)) { + character = get_character( stream); + } - wchar_t c = nilp( character ) ? 0 : - pointer_to_object( character )->payload.character.character; + wchar_t c = nilp(character) ? 0 : + pointer_to_object( character)->payload.character.character; - URL_FILE *input = pointer_to_object( stream )->payload.stream.stream; - for ( ; iswalnum( c ); c = url_fgetwc( input ) ) { - result = make_string_like_thing( c, result, SYMBOLTAG ); - } + URL_FILE * input = pointer_to_object(stream)->payload.stream.stream; + for ( ; iswalnum( c ); + c = url_fgetwc( input ) ){ + result = make_string_like_thing(c, result, SYMBOLTAG); + } - url_ungetwc( c, input ); - result = reverse( result ); - } + url_ungetwc( c, input); + result = reverse( result); + } - return result; + return result; } /** @@ -164,35 +165,34 @@ struct pso_pointer read_symbol( struct pso_pointer frame_pointer, * 2. The character most recently read from that stream. */ struct pso_pointer read( struct pso_pointer frame_pointer, - struct pso_pointer env ) { - struct pso4 *frame = pointer_to_pso4( frame_pointer ); - struct pso_pointer stream = fetch_arg( frame, 0 ); - struct pso_pointer readtable = fetch_arg( frame, 1 ); - struct pso_pointer character = fetch_arg( frame, 2 ); + struct pso_pointer env ) { + struct pso4 *frame = pointer_to_pso4( frame_pointer); + struct pso_pointer stream = fetch_arg( frame, 0); + struct pso_pointer readtable = fetch_arg( frame, 1); + struct pso_pointer character = fetch_arg( frame, 2); - struct pso_pointer result = nil; + struct pso_pointer result = nil; - if ( nilp( stream ) ) { - stream = make_read_stream( file_to_url_file( stdin ), nil ); - } + if (nilp(stream)) { + stream = make_read_stream( file_to_url_file(stdin), nil); + } - if ( nilp( readtable ) ) { - // TODO: check for the value of `*read-table*` in the environment and - // use that. - } + if (nilp( readtable)) { + // TODO: check for the value of `*read-table*` in the environment and + // use that. + } - if ( nilp( character ) ) { - character = get_character( stream ); - } + if (nilp( character)) { + character = get_character( stream); + } - struct pso_pointer readmacro = assoc( character, readtable ); + struct pso_pointer readmacro = assoc(character, readtable); - if ( !nilp( readmacro ) ) { - // invoke the read macro on the stream - } else if ( readp( stream ) && characterp( character ) ) { - wchar_t c = - pointer_to_object( character )->payload.character.character; - URL_FILE *input = pointer_to_object( stream )->payload.stream.stream; + if (!nilp( readmacro)) { + // invoke the read macro on the stream + } else if (readp( stream) && characterp(character)) { + wchar_t c = pointer_to_object( character)->payload.character.character; + URL_FILE * input = pointer_to_object(stream)->payload.stream.stream; switch ( c ) { case ';': @@ -207,12 +207,10 @@ struct pso_pointer read( struct pso_pointer frame_pointer, // frame_pointer ); break; default: - struct pso_pointer next = - make_frame( frame_pointer, stream, readtable, - make_character( c ) ); - inc_ref( next ); - if ( iswdigit( c ) ) { - result = read_number( next, env ); + struct pso_pointer next = make_frame( frame_pointer, stream, readtable, make_character(c)); + if ( iswdigit( c ) ) { + result = + read_number( next, env ); } else if ( iswalpha( c ) ) { result = read_symbol( next, env ); } else { @@ -223,10 +221,9 @@ struct pso_pointer read( struct pso_pointer frame_pointer, // make_string( c, NIL ) ), // frame_pointer ); } - dec_ref( next ); break; } - } + } - return result; + return result; } diff --git a/src/c/io/read.h b/src/c/io/read.h index a3e0ffc..e69de29 100644 --- a/src/c/io/read.h +++ b/src/c/io/read.h @@ -1,25 +0,0 @@ -/** - * read.h - * - * Read basic Lisp objects..This is :bootstrap layer print; it needs to be - * able to read characters, symbols, integers, lists and dotted pairs. I - * don't think it needs to be able to read anything else. It must, however, - * take a readtable as argument and expand reader macros. - * - * - * (c) 2017 Simon Brooke - * Licensed under GPL version 2.0, or, at your option, any later version. - */ - -#ifndef __psse_io_read_h -#define __psse_io_read_h -struct pso_pointer read_number( struct pso_pointer frame_pointer, - struct pso_pointer env ); - -struct pso_pointer read_symbol( struct pso_pointer frame_pointer, - struct pso_pointer env ); - -struct pso_pointer read( struct pso_pointer frame_pointer, - struct pso_pointer env ); - -#endif diff --git a/src/c/memory/destroy.c b/src/c/memory/destroy.c index 01e493d..b497655 100644 --- a/src/c/memory/destroy.c +++ b/src/c/memory/destroy.c @@ -37,29 +37,22 @@ * failure. This function returns that exception pointer. How we * handle that exception pointer I simply don't know yet. */ -struct pso_pointer destroy( struct pso_pointer p ) { - struct pso_pointer result = nil; - struct pso_pointer f = make_frame( nil, p ); - inc_ref( f ); +struct pso_pointer destroy( struct pso_pointer p) { + struct pso_pointer result = nil; + struct pso_pointer f = make_frame( nil, p); + inc_ref( f); - switch ( get_tag_value( p ) ) { - case CONSTV: - destroy_cons( f, nil ); - break; - case EXCEPTIONTV: - destroy_exception( f, nil ); - break; - case KEYTV: - case STRINGTV: - case SYMBOLTV: - destroy_string( f, nil ); - break; - case STACKTV: - destroy_stack_frame( f, nil ); - break; - // TODO: others. - } + switch (get_tag_value(p)) { + case CONSTV: destroy_cons(f, nil); break; + case EXCEPTIONTV: destroy_exception(f, nil); break; + case KEYTV : + case STRINGTV: + case SYMBOLTV: destroy_string(f, nil); break; + case STACKTV: destroy_stack_frame(f, nil); break; + // TODO: others. + } - dec_ref( f ); - return result; + dec_ref(f); + return result; } + diff --git a/src/c/memory/destroy.h b/src/c/memory/destroy.h index d85013e..ad2fc84 100644 --- a/src/c/memory/destroy.h +++ b/src/c/memory/destroy.h @@ -12,6 +12,6 @@ #include "memory/pointer.h" -struct pso_pointer destroy( struct pso_pointer p ); +struct pso_pointer destroy( struct pso_pointer p); #endif diff --git a/src/c/memory/node.c b/src/c/memory/node.c index 2a650a0..ebf470e 100644 --- a/src/c/memory/node.c +++ b/src/c/memory/node.c @@ -57,7 +57,7 @@ struct pso_pointer initialise_node( uint32_t index ) { struct pso_pointer result = initialise_memory( index ); - if ( c_eq( result, t ) ) { + if ( eq( result, t ) ) { result = initialise_environment( index ); } diff --git a/src/c/memory/node.h b/src/c/memory/node.h index fbc177a..1e94956 100644 --- a/src/c/memory/node.h +++ b/src/c/memory/node.h @@ -34,3 +34,4 @@ extern struct pso_pointer t; struct pso_pointer initialise_node( uint32_t index ); #endif + diff --git a/src/c/memory/page.c b/src/c/memory/page.c index 60771b4..0d60021 100644 --- a/src/c/memory/page.c +++ b/src/c/memory/page.c @@ -125,10 +125,10 @@ struct pso_pointer allocate_page( uint8_t size_class ) { L"Initialised page %d; freelist for size class %x updated.\n", npages_allocated, size_class ); - if ( npages_allocated == 0 ) { - // first page allocated; initialise nil and t - nil = lock_object( allocate( NILTAG, 2 ) ); - t = lock_object( allocate( TRUETAG, 2 ) ); + if (npages_allocated == 0) { + // first page allocated; initialise nil and t + nil = lock_object( allocate(NILTAG, 2)); + t = lock_object( allocate(TRUETAG, 2)); } npages_allocated++; @@ -164,6 +164,6 @@ struct pso_pointer allocate_page( uint8_t size_class ) { * @brief allow other files to see the current value of npages_allocated, but not * change it. */ -uint32_t get_pages_allocated( ) { - return npages_allocated; +uint32_t get_pages_allocated() { + return npages_allocated; } diff --git a/src/c/memory/page.h b/src/c/memory/page.h index d30befb..3df37e6 100644 --- a/src/c/memory/page.h +++ b/src/c/memory/page.h @@ -74,6 +74,6 @@ union page { struct pso_pointer allocate_page( uint8_t size_class ); -uint32_t get_pages_allocated( ); +uint32_t get_pages_allocated(); #endif diff --git a/src/c/memory/pointer.c b/src/c/memory/pointer.c index b76f92c..fb7c035 100644 --- a/src/c/memory/pointer.c +++ b/src/c/memory/pointer.c @@ -54,12 +54,11 @@ struct pso2 *pointer_to_object( struct pso_pointer p ) { struct pso2 *result = NULL; if ( p.node == node_index ) { - if ( p.page < get_pages_allocated( ) - && p.offset < ( PAGE_BYTES / 8 ) ) { - // TODO: that's not really a safe test of whether this is a valid pointer. - union page *pg = pages[p.page]; - result = ( struct pso2 * ) &pg->words[p.offset]; - } + if (p.page < get_pages_allocated() && p.offset < (PAGE_BYTES / 8)) { + // TODO: that's not really a safe test of whether this is a valid pointer. + union page *pg = pages[p.page]; + result = ( struct pso2 * ) &pg->words[p.offset]; + } } // TODO: else if we have a copy of the object in cache, return that; // else request a copy of the object from the node which curates it. @@ -86,15 +85,14 @@ struct pso2 *pointer_to_object( struct pso_pointer p ) { * @return the memory address of the object, provided it is a valid object and * of the specified size class, else NULL. */ -struct pso2 *pointer_to_object_of_size_class( struct pso_pointer p, - uint8_t size_class ) { - struct pso2 *result = pointer_to_object( p ); +struct pso2 * pointer_to_object_of_size_class( struct pso_pointer p, uint8_t size_class) { + struct pso2 * result = pointer_to_object( p); - if ( result->header.tag.bytes.size_class != size_class ) { - result = NULL; - } + if (result->header.tag.bytes.size_class != size_class) { + result = NULL; + } - return result; + return result; } /** @@ -105,13 +103,13 @@ struct pso2 *pointer_to_object_of_size_class( struct pso_pointer p, * exception back from this function. Consequently, if anything goes wrong * we return NULL. The caller *should* check for that and throw an exception. */ -struct pso2 *pointer_to_object_with_tag_value( struct pso_pointer p, - uint32_t tag_value ) { - struct pso2 *result = pointer_to_object( p ); +struct pso2 * pointer_to_object_with_tag_value( struct pso_pointer p, uint32_t tag_value) { + struct pso2 * result = pointer_to_object( p); - if ( ( result->header.tag.value & 0xffffff ) != tag_value ) { - result = NULL; - } + if ((result->header.tag.value & 0xffffff) != tag_value) { + result = NULL; + } - return result; + return result; } + diff --git a/src/c/memory/pointer.h b/src/c/memory/pointer.h index 827bb95..b467f5e 100644 --- a/src/c/memory/pointer.h +++ b/src/c/memory/pointer.h @@ -39,15 +39,12 @@ struct pso_pointer { }; -struct pso_pointer make_pointer( uint32_t node, uint16_t page, - uint16_t offset ); +struct pso_pointer make_pointer( uint32_t node, uint16_t page, uint16_t offset); -struct pso2 *pointer_to_object( struct pso_pointer pointer ); +struct pso2* pointer_to_object( struct pso_pointer pointer); -struct pso2 *pointer_to_object_of_size_class( struct pso_pointer p, - uint8_t size_class ); +struct pso2 * pointer_to_object_of_size_class( struct pso_pointer p, uint8_t size_class); -struct pso2 *pointer_to_object_with_tag_value( struct pso_pointer p, - uint32_t tag_value ); +struct pso2 * pointer_to_object_with_tag_value( struct pso_pointer p, uint32_t tag_value); #endif diff --git a/src/c/memory/pso.c b/src/c/memory/pso.c index 7409e51..75df0d5 100644 --- a/src/c/memory/pso.c +++ b/src/c/memory/pso.c @@ -164,26 +164,25 @@ struct pso_pointer lock_object( struct pso_pointer pointer ) { * clear its memory, and return it to the freelist. */ struct pso_pointer free_object( struct pso_pointer p ) { - struct pso_pointer result = nil; + struct pso_pointer result = nil; struct pso2 *obj = pointer_to_object( p ); uint32_t array_size = payload_size( obj ); uint8_t size_class = obj->header.tag.bytes.size_class; - result = destroy( p ); + result = destroy( p); - /* will C just let me cheerfully walk off the end of the array I've declared? */ - for ( int i = 0; i < array_size; i++ ) { - obj->payload.words[i] = 0; - } + /* will C just let me cheerfully walk off the end of the array I've declared? */ + for ( int i = 0; i < array_size; i++ ) { + obj->payload.words[i] = 0; + } strncpy( ( char * ) ( obj->header.tag.bytes.mnemonic ), FREETAG, TAGLENGTH ); #ifdef DEBUG - debug_printf( DEBUG_ALLOC, 0, - L"Freeing object of size class %d at {%d, %d, %d}", - size_class, p.node, p.page, p.offset ); + debug_printf( DEBUG_ALLOC, 0, L"Freeing object of size class %d at {%d, %d, %d}", + size_class, p.node, p.page, p.offset); #endif /* TODO: obtain mutex on freelist */ diff --git a/src/c/memory/pso.h b/src/c/memory/pso.h index 928a6aa..5e5f308 100644 --- a/src/c/memory/pso.h +++ b/src/c/memory/pso.h @@ -15,13 +15,13 @@ #include "memory/header.h" #include "memory/pointer.h" -struct pso_pointer allocate( char *tag, uint8_t size_class ); +struct pso_pointer allocate( char* tag, uint8_t size_class); struct pso_pointer dec_ref( struct pso_pointer pointer ); struct pso_pointer inc_ref( struct pso_pointer pointer ); -struct pso_pointer lock_object( struct pso_pointer pointer ); +struct pso_pointer lock_object( struct pso_pointer pointer); struct pso_pointer free_object( struct pso_pointer p ); diff --git a/src/c/memory/pso4.c b/src/c/memory/pso4.c index cfe6722..fd604d5 100644 --- a/src/c/memory/pso4.c +++ b/src/c/memory/pso4.c @@ -12,7 +12,6 @@ #include "memory/pso2.h" #include "memory/pso4.h" -struct pso4 *pointer_to_pso4( struct pso_pointer p ) { - struct pso4 *result = - ( struct pso4 * ) pointer_to_object_of_size_class( p, 4 ); +struct pso4* pointer_to_pso4( struct pso_pointer p) { + struct pso4* result = (struct pso4*)pointer_to_object_of_size_class( p, 4); } diff --git a/src/c/memory/pso4.h b/src/c/memory/pso4.h index bafda3f..819f272 100644 --- a/src/c/memory/pso4.h +++ b/src/c/memory/pso4.h @@ -31,6 +31,6 @@ struct pso4 { } payload; }; -struct pso4 *pointer_to_pso4( struct pso_pointer p ); +struct pso4* pointer_to_pso4( struct pso_pointer p); #endif diff --git a/src/c/memory/tags.c b/src/c/memory/tags.c index 6e4a7c5..7718f3e 100644 --- a/src/c/memory/tags.c +++ b/src/c/memory/tags.c @@ -16,10 +16,10 @@ #include "memory/pointer.h" #include "memory/pso2.h" -uint32_t get_tag_value( struct pso_pointer p ) { - struct pso2 *object = pointer_to_object( p ); +uint32_t get_tag_value (struct pso_pointer p) { + struct pso2* object = pointer_to_object( p); - return object->header.tag.value & 0xffffff; + return object->header.tag.value & 0xffffff; } /** @@ -31,8 +31,8 @@ uint32_t get_tag_value( struct pso_pointer p ) { * * @return true if the tag at p matches v, else false. */ -bool check_tag( struct pso_pointer p, uint32_t v ) { - return get_tag_value( p ) == v; +bool check_tag( struct pso_pointer p, uint32_t v) { + return get_tag_value(p) == v; } /** @@ -46,9 +46,8 @@ bool check_tag( struct pso_pointer p, uint32_t v ) { * of the object. * @return false otherwise. */ -bool check_type( struct pso_pointer p, char *s ) { - return ( strncmp - ( &( pointer_to_object( p )->header.tag.bytes.mnemonic[0] ), s, - TAGLENGTH ) - == 0 ); -} +bool check_type( struct pso_pointer p, char* s) { + return (strncmp( + &(pointer_to_object(p)->header.tag.bytes.mnemonic[0]), s, TAGLENGTH) + == 0); +} \ No newline at end of file diff --git a/src/c/memory/tags.h b/src/c/memory/tags.h index 524e805..e152bd2 100644 --- a/src/c/memory/tags.h +++ b/src/c/memory/tags.h @@ -82,7 +82,7 @@ * @return the numerical value of the tag, as a uint32_t. */ // #define get_tag_value(p)((pointer_to_object(p)->header.tag.value) & 0xffffff) -uint32_t get_tag_value( struct pso_pointer p ); +uint32_t get_tag_value (struct pso_pointer p); /** * @brief check that the tag of the object indicated by this poiner has this @@ -94,9 +94,9 @@ uint32_t get_tag_value( struct pso_pointer p ); * @return true if the tag at p matches v, else false. */ // #define check_tag(p,v) (get_tag_value(p) == v) -bool check_tag( struct pso_pointer p, uint32_t v ); +bool check_tag( struct pso_pointer p, uint32_t v); -bool check_type( struct pso_pointer p, char *s ); +bool check_type( struct pso_pointer p, char* s); #define characterp(p) (check_tag(p, CHARACTERTV)) #define consp(p) (check_tag(p, CONSTV)) diff --git a/src/c/ops/assoc.c b/src/c/ops/assoc.c index b1d6acb..8589966 100644 --- a/src/c/ops/assoc.c +++ b/src/c/ops/assoc.c @@ -34,23 +34,25 @@ * return the binding. */ struct pso_pointer search( struct pso_pointer key, - struct pso_pointer store, bool return_key ) { - struct pso_pointer result = nil; - bool found = false; + struct pso_pointer store, + bool return_key ) { + struct pso_pointer result = nil; + bool found = false; - if ( consp( store ) ) { - for ( struct pso_pointer cursor = store; - consp( store ) && found == false; cursor = cdr( cursor ) ) { - struct pso_pointer pair = car( cursor ); + if (consp( store)) { + for ( struct pso_pointer cursor = store; + consp( store) && found == false; + cursor = cdr( cursor)) { + struct pso_pointer pair = car( cursor); - if ( consp( pair ) && c_equal( car( pair ), key ) ) { - found = true; - result = return_key ? car( pair ) : cdr( pair ); - } - } - } + if (consp(pair) && equal(car(pair), key)) { + found = true; + result = return_key ? car(pair) : cdr( pair); + } + } + } - return result; + return result; } /** @@ -61,8 +63,8 @@ struct pso_pointer search( struct pso_pointer key, * * @return a pointer to the value of the key in the store, or nil if not found */ -struct pso_pointer assoc( struct pso_pointer key, struct pso_pointer store ) { - return search( key, store, false ); +struct pso_pointer assoc( struct pso_pointer key, struct pso_pointer store) { + return search( key, store, false); } /** @@ -73,8 +75,8 @@ struct pso_pointer assoc( struct pso_pointer key, struct pso_pointer store ) { * * @return a pointer to the copy of the key in the store, or nil if not found. */ -struct pso_pointer interned( struct pso_pointer key, struct pso_pointer store ) { - return search( key, store, true ); +struct pso_pointer interned(struct pso_pointer key, struct pso_pointer store) { + return search( key, store, true); } /** @@ -85,6 +87,6 @@ struct pso_pointer interned( struct pso_pointer key, struct pso_pointer store ) * * @return `true` if a pointer the key was found in the store.. */ -bool internedp( struct pso_pointer key, struct pso_pointer store ) { - return !nilp( search( key, store, true ) ); +bool internedp(struct pso_pointer key, struct pso_pointer store) { + return !nilp( search( key, store, true)); } diff --git a/src/c/ops/assoc.h b/src/c/ops/assoc.h index 52d8d08..e5572f9 100644 --- a/src/c/ops/assoc.h +++ b/src/c/ops/assoc.h @@ -17,12 +17,12 @@ #include "memory/pointer.h" struct cons_pointer search( struct pso_pointer key, - struct pso_pointer store, bool return_key ); + struct pso_pointer store, + bool return_key ); -struct pso_pointer assoc( struct pso_pointer key, struct pso_pointer store ); +struct pso_pointer assoc( struct pso_pointer key, struct pso_pointer store); -struct pso_pointer interned( struct pso_pointer key, - struct pso_pointer store ); +struct pso_pointer interned(struct pso_pointer key, struct pso_pointer store); -bool internedp( struct pso_pointer key, struct pso_pointer store ); +bool internedp(struct pso_pointer key, struct pso_pointer store); #endif diff --git a/src/c/ops/bind.c b/src/c/ops/bind.c deleted file mode 100644 index f812c43..0000000 --- a/src/c/ops/bind.c +++ /dev/null @@ -1,44 +0,0 @@ -/** - * ops/bind.c - * - * Post Scarcity Software Environment: bind. - * - * Add a binding for a key/value pair to a store -- at this stage, just an - * association list. - * - * (c) 2026 Simon Brooke - * Licensed under GPL version 2.0, or, at your option, any later version. - */ - -#include "memory/node.h" -#include "memory/pointer.h" -#include "memory/pso.h" -#include "memory/pso4.h" -#include "memory/tags.h" - -#include "ops/stack_ops.h" - -#include "payloads/cons.h" -#include "payloads/stack.h" - -struct pso_pointer bind( struct pso_pointer frame_pointer, - struct pso_pointer env ) { - struct pso4 *frame = pointer_to_pso4( frame_pointer ); - struct pso_pointer key = fetch_arg( frame, 0 ); - struct pso_pointer value = fetch_arg( frame, 1 ); - struct pso_pointer store = fetch_arg( frame, 2 ); - - return cons( cons( key, value ), store ); -} - -struct pso_pointer c_bind( struct pso_pointer key, - struct pso_pointer value, - struct pso_pointer store ) { - struct pso_pointer result = nil; - struct pso_pointer next = make_frame( nil, key, value, store ); - inc_ref( next ); - result = bind( next, nil ); - dec_ref( next ); - - return result; -} diff --git a/src/c/ops/bind.h b/src/c/ops/bind.h deleted file mode 100644 index d7cdf42..0000000 --- a/src/c/ops/bind.h +++ /dev/null @@ -1,25 +0,0 @@ -/** - * ops/bind.h - * - * Post Scarcity Software Environment: bind. - * - * Test for pointer binduality. - * - * (c) 2026 Simon Brooke - * Licensed under GPL version 2.0, or, at your option, any later version. - */ - -#ifndef __psse_ops_bind_h -#define __psse_ops_bind_h -#include - -#include "memory/pointer.h" - -struct pso_pointer bind( struct pso_pointer frame_pointer, - struct pso_pointer env ); - -struct pso_pointer c_bind( struct pso_pointer key, - struct pso_pointer value, - struct pso_pointer store ); - -#endif diff --git a/src/c/ops/eq.c b/src/c/ops/eq.c index b3789e5..271e2a5 100644 --- a/src/c/ops/eq.c +++ b/src/c/ops/eq.c @@ -33,49 +33,47 @@ * @param b another pointer; * @return `true` if they are the same, else `false` */ -bool c_eq( struct pso_pointer a, struct pso_pointer b ) { +bool eq( struct pso_pointer a, struct pso_pointer b ) { return ( a.node == b.node && a.page == b.page && a.offset == b.offset ); } -bool c_equal( struct pso_pointer a, struct pso_pointer b ) { - bool result = false; +bool equal( struct pso_pointer a, struct pso_pointer b) { + bool result = false; - if ( c_eq( a, b ) ) { - result = true; - } else if ( get_tag_value( a ) == get_tag_value( b ) ) { - struct pso2 *oa = pointer_to_object( a ); - struct pso2 *ob = pointer_to_object( b ); + if ( eq( a, b)) { + result = true; + } else if ( get_tag_value(a) == get_tag_value(b)) { + struct pso2 *oa = pointer_to_object(a); + struct pso2 *ob = pointer_to_object(b); - switch ( get_tag_value( a ) ) { - case CHARACTERTV: - result = - ( oa->payload.character.character == - ob->payload.character.character ); - break; - case CONSTV: - result = ( c_equal( car( a ), car( b ) ) - && c_equal( cdr( a ), cdr( b ) ) ); - break; - case INTEGERTV: - result = ( oa->payload.integer.value - == ob->payload.integer.value ); - break; - case KEYTV: - case STRINGTV: - case SYMBOLTV: - while ( result == false && !nilp( a ) && !nilp( b ) ) { - if ( pointer_to_object( a )->payload.string.character == - pointer_to_object( b )->payload.string.character ) { - a = cdr( a ); - b = cdr( b ); - } - } - result = nilp( a ) && nilp( b ); - break; - } - } + switch ( get_tag_value(a)) { + case CHARACTERTV : + result = (oa->payload.character.character == ob->payload.character.character); + break; + case CONSTV : + result = (equal( car(a), car(b)) && equal( cdr(a), cdr(b))); + break; + case INTEGERTV : + result = (oa->payload.integer.value + == + ob->payload.integer.value); + break; + case KEYTV: + case STRINGTV : + case SYMBOLTV : + while (result == false && !nilp(a) && !nilp(b)) { + if (pointer_to_object(a)->payload.string.character == + pointer_to_object(b)->payload.string.character) { + a = cdr(a); + b = cdr(b); + } + } + result = nilp(a) && nilp(b); + break; + } + } - return result; + return result; } @@ -91,10 +89,9 @@ bool c_equal( struct pso_pointer a, struct pso_pointer b ) { * @param env my environment (ignored). * @return `t` if all args are pointers to the same object, else `nil`; */ -struct pso_pointer eq( struct pso_pointer frame_pointer, - struct pso_pointer env ) { - struct pso4 *frame = pointer_to_pso4( frame_pointer ); - +struct pso_pointer lisp_eq( struct pso4 *frame, + struct pso_pointer frame_pointer, + struct pso_pointer env ) { struct pso_pointer result = t; if ( frame->payload.stack_frame.args > 1 ) { @@ -102,9 +99,11 @@ struct pso_pointer eq( struct pso_pointer frame_pointer, ( truep( result ) ) && ( b < frame->payload.stack_frame.args ); b++ ) { result = - c_eq( fetch_arg( frame, 0 ), fetch_arg( frame, b ) ) ? t : nil; + eq( fetch_arg( frame, 0 ), fetch_arg( frame, b ) ) ? t : nil; } } return result; } + + diff --git a/src/c/ops/eq.h b/src/c/ops/eq.h index 854e40c..4b4300c 100644 --- a/src/c/ops/eq.h +++ b/src/c/ops/eq.h @@ -16,10 +16,11 @@ #include "memory/pointer.h" #include "memory/pso4.h" -bool c_eq( struct pso_pointer a, struct pso_pointer b ); +bool eq( struct pso_pointer a, struct pso_pointer b ); -struct pso_pointer eq( struct pso_pointer frame_pointer, - struct pso_pointer env ); +struct pso_pointer lisp_eq( struct pso4 *frame, + struct pso_pointer frame_pointer, + struct pso_pointer env ); -bool c_equal( struct pso_pointer a, struct pso_pointer b ); +bool equal( struct pso_pointer a, struct pso_pointer b); #endif diff --git a/src/c/ops/eval.c b/src/c/ops/eval.c index 830cceb..f78f4d6 100644 --- a/src/c/ops/eval.c +++ b/src/c/ops/eval.c @@ -10,9 +10,7 @@ */ #include "memory/pointer.h" -#include "memory/pso.h" #include "memory/pso2.h" -#include "memory/pso3.h" #include "memory/pso4.h" #include "memory/tags.h" @@ -25,8 +23,6 @@ #include "payloads/special.h" #include "payloads/stack.h" -#include "ops/truth.h" - /** * @brief Despatch eval based on tag of the form in the first position. * @@ -35,9 +31,9 @@ * @param env the evaluation environment. * @return struct pso_pointer */ -struct pso_pointer lisp_eval( struct pso_pointer frame_pointer, - struct pso_pointer env ) { - struct pso4 *frame = pointer_to_pso4( frame_pointer ); +struct pso_pointer eval_despatch( struct pso4 *frame, + struct pso_pointer frame_pointer, + struct pso_pointer env ) { struct pso_pointer result = frame->payload.stack_frame.arg[0]; // switch ( get_tag_value( result)) { @@ -59,17 +55,17 @@ struct pso_pointer lisp_eval( struct pso_pointer frame_pointer, // break; // } - if ( exceptionp( result ) ) { - struct pso3 *x = - ( struct pso3 * ) pointer_to_object_with_tag_value( result, - EXCEPTIONTV ); + return result; +} - if ( nilp( x->payload.exception.stack ) ) { - inc_ref( result ); - result = - make_exception( x->payload.exception.message, frame_pointer, - result ); - } +struct pso_pointer lisp_eval( struct pso4 *frame, + struct pso_pointer frame_pointer, + struct pso_pointer env ) { + struct pso_pointer result = eval_despatch( frame, frame_pointer, env ); + + if ( exceptionp( result ) ) { + // todo: if result doesn't have a stack frame, create a new exception wrapping + // result with this stack frame. } return result; diff --git a/src/c/ops/repl.h b/src/c/ops/repl.h index e5b1a9a..7a99f48 100644 --- a/src/c/ops/repl.h +++ b/src/c/ops/repl.h @@ -12,4 +12,4 @@ // struct pso_pointer repl( struct pso_pointer prompt, struct pso_pointer readtable); -#endif +#endif \ No newline at end of file diff --git a/src/c/ops/reverse.c b/src/c/ops/reverse.c index 5f59004..186af0b 100644 --- a/src/c/ops/reverse.c +++ b/src/c/ops/reverse.c @@ -35,41 +35,31 @@ * @return a sequence like the `sequence` passed, but reversed; or `nil` if * the argument was not a sequence. */ -struct pso_pointer reverse( struct pso_pointer sequence ) { - struct pso_pointer result = nil; +struct pso_pointer reverse( struct pso_pointer sequence) { + struct pso_pointer result = nil; - for ( struct pso_pointer cursor = sequence; !nilp( sequence ); - cursor = cdr( cursor ) ) { - struct pso2 *object = pointer_to_object( cursor ); - switch ( get_tag_value( cursor ) ) { - case CONSTV: - result = cons( car( cursor ), result ); - break; - case KEYTV: - result = - make_string_like_thing( object->payload.string.character, - result, KEYTAG ); - break; - case STRINGTV: - result = - make_string_like_thing( object->payload.string.character, - result, STRINGTAG ); - break; - case SYMBOLTV: - result = - make_string_like_thing( object->payload.string.character, - result, SYMBOLTAG ); - break; - default: - result = - make_exception( c_string_to_lisp_string - ( L"Invalid object in sequence" ), nil, - nil ); - goto exit; - break; - } - } - exit: + for (struct pso_pointer cursor = sequence; !nilp( sequence); cursor = cdr(cursor)) { + struct pso2* object = pointer_to_object( cursor); + switch (get_tag_value(cursor)) { + case CONSTV : + result = cons( car(cursor), result); + break; + case KEYTV : + result = make_string_like_thing( object->payload.string.character, result, KEYTAG); + break; + case STRINGTV : + result = make_string_like_thing( object->payload.string.character, result, STRINGTAG); + break; + case SYMBOLTV : + result = make_string_like_thing( object->payload.string.character, result, SYMBOLTAG); + break; + default : + result = make_exception( c_string_to_lisp_string(L"Invalid object in sequence"), nil, nil); + goto exit; + break; + } + } +exit: - return result; + return result; } diff --git a/src/c/ops/reverse.h b/src/c/ops/reverse.h index 96f6b2f..18cb36e 100644 --- a/src/c/ops/reverse.h +++ b/src/c/ops/reverse.h @@ -16,6 +16,6 @@ #include "memory/pointer.h" -struct pso_pointer reverse( struct pso_pointer sequence ); +struct pso_pointer reverse( struct pso_pointer sequence); #endif diff --git a/src/c/ops/string_ops.c b/src/c/ops/string_ops.c index 14d12a3..432a7d8 100644 --- a/src/c/ops/string_ops.c +++ b/src/c/ops/string_ops.c @@ -42,7 +42,7 @@ uint32_t calculate_hash( wint_t c, struct pso_pointer ptr ) { struct pso2 *cell = pointer_to_object( ptr ); uint32_t result = 0; - switch ( get_tag_value( ptr ) ) { + switch ( get_tag_value(ptr)) { case KEYTV: case STRINGTV: case SYMBOLTV: @@ -70,22 +70,22 @@ uint32_t calculate_hash( wint_t c, struct pso_pointer ptr ) { * (and thus simpler). */ struct pso_pointer make_string_like_thing( wint_t c, struct pso_pointer tail, - char *tag ) { + char* tag ) { struct pso_pointer pointer = nil; if ( check_type( tail, tag ) || check_tag( tail, NILTV ) ) { - pointer = allocate( tag, CONS_SIZE_CLASS ); + pointer = allocate( tag, CONS_SIZE_CLASS); struct pso2 *cell = pointer_to_object( pointer ); cell->payload.string.character = c; cell->payload.string.cdr = tail; - cell->payload.string.hash = calculate_hash( c, tail ); + cell->payload.string.hash = calculate_hash( c, tail); debug_dump_object( pointer, DEBUG_ALLOC, 0 ); debug_println( DEBUG_ALLOC ); } else { // \todo should throw an exception! - debug_printf( DEBUG_ALLOC, 0, + debug_printf( DEBUG_ALLOC, 0, L"Warning: only %4.4s can be prepended to %4.4s\n", tag, tag ); } diff --git a/src/c/ops/string_ops.h b/src/c/ops/string_ops.h index 59ce837..b874f2b 100644 --- a/src/c/ops/string_ops.h +++ b/src/c/ops/string_ops.h @@ -17,7 +17,7 @@ #include struct pso_pointer make_string_like_thing( wint_t c, struct pso_pointer tail, - char *tag ); + char* tag ); struct pso_pointer make_string( wint_t c, struct pso_pointer tail ); diff --git a/src/c/ops/truth.c b/src/c/ops/truth.c index 8ffb2f5..5d3db10 100644 --- a/src/c/ops/truth.c +++ b/src/c/ops/truth.c @@ -13,7 +13,6 @@ #include "memory/node.h" #include "memory/pointer.h" -#include "memory/pso4.h" #include "ops/stack_ops.h" /** @@ -65,11 +64,10 @@ bool truep( struct pso_pointer p ) { * @param env the evaluation environment. * @return `t` if the first argument in this frame is `nil`, else `t` */ -struct pso_pointer lisp_nilp( struct pso_pointer frame_pointer, - struct pso_pointer env ) { - struct pso4 *frame = pointer_to_pso4( frame_pointer ); - - return ( nilp( fetch_arg( frame, 0 ) ) ? t : nil ); +struct pso_pointer lisp_nilp( struct pso4 *frame, + struct pso_pointer frame_pointer, + struct pso_pointer env ) { +return ( nilp( fetch_arg( frame, 0 )) ? t : nil ); } /** @@ -80,11 +78,10 @@ struct pso_pointer lisp_nilp( struct pso_pointer frame_pointer, * @param env the evaluation environment. * @return `t` if the first argument in this frame is `t`, else `nil`. */ -struct pso_pointer lisp_truep( struct pso_pointer frame_pointer, - struct pso_pointer env ) { - struct pso4 *frame = pointer_to_pso4( frame_pointer ); - - return ( truep( fetch_arg( frame, 0 ) ) ? t : nil ); +struct pso_pointer lisp_truep( struct pso4 *frame, + struct pso_pointer frame_pointer, + struct pso_pointer env ) { + return ( truep( fetch_arg( frame, 0 ) ) ? t : nil ); } /** @@ -96,9 +93,8 @@ struct pso_pointer lisp_truep( struct pso_pointer frame_pointer, * @param env the evaluation environment. * @return `t` if the first argument in this frame is not `nil`, else `t`. */ -struct pso_pointer lisp_not( struct pso_pointer frame_pointer, - struct pso_pointer env ) { - struct pso4 *frame = pointer_to_pso4( frame_pointer ); - - return ( not( fetch_arg( frame, 0 ) ) ? t : nil ); +struct pso_pointer lisp_not( struct pso4 *frame, + struct pso_pointer frame_pointer, + struct pso_pointer env ) { + return ( not( fetch_arg( frame, 0 ) ) ? t : nil ); } diff --git a/src/c/ops/truth.h b/src/c/ops/truth.h index 0fa0574..e81eacd 100644 --- a/src/c/ops/truth.h +++ b/src/c/ops/truth.h @@ -18,17 +18,20 @@ bool nilp( struct pso_pointer p ); -struct pso_pointer lisp_nilp( struct pso_pointer frame_pointer, - struct pso_pointer env ); +struct pso_pointer lisp_nilp( struct pso4 *frame, + struct pso_pointer frame_pointer, + struct pso_pointer env ); bool not( struct pso_pointer p ); -struct pso_pointer lisp_not( struct pso_pointer frame_pointer, - struct pso_pointer env ); +struct pso_pointer lisp_not( struct pso4 *frame, + struct pso_pointer frame_pointer, + struct pso_pointer env ); bool truep( struct pso_pointer p ); -struct pso_pointer lisp_truep( struct pso_pointer frame_pointer, - struct pso_pointer env ); +struct pso_pointer lisp_truep( struct pso4 *frame, + struct pso_pointer frame_pointer, + struct pso_pointer env ); #endif diff --git a/src/c/payloads/character.c b/src/c/payloads/character.c index aa370e4..124053a 100644 --- a/src/c/payloads/character.c +++ b/src/c/payloads/character.c @@ -23,13 +23,12 @@ #include "payloads/character.h" -struct pso_pointer make_character( wint_t c ) { - struct pso_pointer result = allocate( CHARACTERTAG, 2 ); +struct pso_pointer make_character( wint_t c) { + struct pso_pointer result = allocate( CHARACTERTAG, 2 ); - if ( !nilp( result ) ) { - pointer_to_object( result )->payload.character.character = - ( wchar_t ) c; - } + if (!nilp(result)) { + pointer_to_object(result)->payload.character.character = (wchar_t) c; + } - return result; + return result; } diff --git a/src/c/payloads/character.h b/src/c/payloads/character.h index 355b79a..854cc13 100644 --- a/src/c/payloads/character.h +++ b/src/c/payloads/character.h @@ -36,5 +36,5 @@ struct character_payload { wchar_t character; }; -struct pso_pointer make_character( wint_t c ); +struct pso_pointer make_character( wint_t c); #endif diff --git a/src/c/payloads/cons.c b/src/c/payloads/cons.c index 607cca4..5da54bc 100644 --- a/src/c/payloads/cons.c +++ b/src/c/payloads/cons.c @@ -14,7 +14,7 @@ #include "memory/pso.h" #include "memory/pso2.h" #include "memory/pso4.h" -#include "memory/tags.h" +#include "memory/tags.h" #include "payloads/cons.h" #include "payloads/exception.h" @@ -33,8 +33,11 @@ struct pso_pointer cons( struct pso_pointer car, struct pso_pointer cdr ) { struct pso_pointer result = allocate( CONSTAG, 2 ); struct pso2 *object = pointer_to_object( result ); - object->payload.cons.car = inc_ref( car ); - object->payload.cons.cdr = inc_ref( cdr ); + object->payload.cons.car = car; + object->payload.cons.cdr = cdr; + + inc_ref( car ); + inc_ref( cdr ); return result; } @@ -70,21 +73,17 @@ struct pso_pointer cdr( struct pso_pointer p ) { struct pso_pointer result = nil; struct pso2 *object = pointer_to_object( result ); - switch ( get_tag_value( p ) ) { - case CONSTV: - result = object->payload.cons.cdr; - break; - case KEYTV: - case STRINGTV: - case SYMBOLTV: - result = object->payload.string.cdr; - break; - default: - result = - make_exception( cons - ( c_string_to_lisp_string - ( L"Invalid type for cdr" ), p ), nil, nil ); - break; + switch (get_tag_value( p)) { + case CONSTV : result = object->payload.cons.cdr; break; + case KEYTV : + case STRINGTV : + case SYMBOLTV : + result = object->payload.string.cdr; break; + default : + result = make_exception( + cons(c_string_to_lisp_string(L"Invalid type for cdr"), p), + nil, nil); + break; } // TODO: else throw an exception @@ -99,12 +98,11 @@ struct pso_pointer cdr( struct pso_pointer p ) { * Lisp calling conventions; one expected arg, the pointer to the cell to * be destroyed. */ -struct pso_pointer destroy_cons( struct pso_pointer fp, - struct pso_pointer env ) { - if ( stackp( fp ) ) { - struct pso4 *frame = pointer_to_pso4( fp ); - struct pso_pointer p = frame->payload.stack_frame.arg[0]; - dec_ref( car( p ) ); - dec_ref( cdr( p ) ); - } +struct pso_pointer destroy_cons( struct pso_pointer fp, struct pso_pointer env) { + if (stackp(fp)) { + struct pso4 *frame = pointer_to_pso4( fp); + struct pso_pointer p = frame->payload.stack_frame.arg[0]; + dec_ref( car( p)); + dec_ref( cdr( p)); + } } diff --git a/src/c/payloads/cons.h b/src/c/payloads/cons.h index 9ba768f..8649d13 100644 --- a/src/c/payloads/cons.h +++ b/src/c/payloads/cons.h @@ -32,7 +32,6 @@ struct pso_pointer cdr( struct pso_pointer cons ); struct pso_pointer cons( struct pso_pointer car, struct pso_pointer cdr ); -struct pso_pointer destroy_cons( struct pso_pointer fp, - struct pso_pointer env ); +struct pso_pointer destroy_cons( struct pso_pointer fp, struct pso_pointer env); #endif diff --git a/src/c/payloads/exception.c b/src/c/payloads/exception.c index 1b38a76..e29e684 100644 --- a/src/c/payloads/exception.c +++ b/src/c/payloads/exception.c @@ -17,8 +17,7 @@ #include "payloads/exception.h" struct pso_pointer make_exception( struct pso_pointer message, - struct pso_pointer frame_pointer, - struct pso_pointer cause ) { + struct pso_pointer frame_pointer, struct pso_pointer cause) { // TODO: not yet implemented return nil; } @@ -30,13 +29,13 @@ struct pso_pointer make_exception( struct pso_pointer message, * be destroyed. */ struct pso_pointer destroy_exception( struct pso_pointer fp, - struct pso_pointer env ) { - if ( stackp( fp ) ) { - struct pso4 *frame = pointer_to_pso4( fp ); - struct pso_pointer p = frame->payload.stack_frame.arg[0]; + struct pso_pointer env) { + if (stackp(fp)) { + struct pso4 *frame = pointer_to_pso4( fp); + struct pso_pointer p = frame->payload.stack_frame.arg[0]; - // TODO: decrement every pointer indicated by an exception. - } + // TODO: decrement every pointer indicated by an exception. + } - return nil; + return nil; } diff --git a/src/c/payloads/exception.h b/src/c/payloads/exception.h index 5b865e2..a0514e1 100644 --- a/src/c/payloads/exception.h +++ b/src/c/payloads/exception.h @@ -25,10 +25,9 @@ struct exception_payload { }; struct pso_pointer make_exception( struct pso_pointer message, - struct pso_pointer frame_pointer, - struct pso_pointer cause ); + struct pso_pointer frame_pointer, struct pso_pointer cause); struct pso_pointer destroy_exception( struct pso_pointer fp, - struct pso_pointer env ); + struct pso_pointer env); #endif diff --git a/src/c/payloads/integer.c b/src/c/payloads/integer.c index 8437a8b..6b62f47 100644 --- a/src/c/payloads/integer.c +++ b/src/c/payloads/integer.c @@ -26,13 +26,13 @@ */ struct pso_pointer make_integer( int64_t value ) { struct pso_pointer result = nil; - debug_print( L"Entering make_integer\n", DEBUG_ALLOC, 0 ); + debug_print( L"Entering make_integer\n", DEBUG_ALLOC , 0); - result = allocate( INTEGERTAG, 2 ); - struct pso2 *cell = pointer_to_object( result ); - cell->payload.integer.value = value; + result = allocate( INTEGERTAG, 2); + struct pso2 *cell = pointer_to_object( result ); + cell->payload.integer.value = value; - debug_print( L"make_integer: returning\n", DEBUG_ALLOC, 0 ); + debug_print( L"make_integer: returning\n", DEBUG_ALLOC , 0); debug_dump_object( result, DEBUG_ALLOC, 0 ); return result; diff --git a/src/c/payloads/psse_string.c b/src/c/payloads/psse_string.c index a75037b..e998cc3 100644 --- a/src/c/payloads/psse_string.c +++ b/src/c/payloads/psse_string.c @@ -11,8 +11,8 @@ #include /* - * wide characters - */ + * wide characters + */ #include #include @@ -33,13 +33,13 @@ * be destroyed. */ struct pso_pointer destroy_string( struct pso_pointer fp, - struct pso_pointer env ) { - if ( stackp( fp ) ) { - struct pso4 *frame = pointer_to_pso4( fp ); - struct pso_pointer p = frame->payload.stack_frame.arg[0]; + struct pso_pointer env) { + if (stackp(fp)) { + struct pso4 *frame = pointer_to_pso4( fp); + struct pso_pointer p = frame->payload.stack_frame.arg[0]; - dec_ref( cdr( p ) ); - } + dec_ref( cdr(p)); + } - return nil; + return nil; } diff --git a/src/c/payloads/psse_string.h b/src/c/payloads/psse_string.h index ea232ae..7997a1a 100644 --- a/src/c/payloads/psse_string.h +++ b/src/c/payloads/psse_string.h @@ -36,6 +36,6 @@ struct string_payload { struct pso_pointer make_string( wint_t c, struct pso_pointer tail ); struct pso_pointer destroy_string( struct pso_pointer fp, - struct pso_pointer env ); + struct pso_pointer env); #endif diff --git a/src/c/payloads/read_stream.c b/src/c/payloads/read_stream.c index 995d454..b70d41b 100644 --- a/src/c/payloads/read_stream.c +++ b/src/c/payloads/read_stream.c @@ -25,8 +25,8 @@ * @return a pointer to the new read stream. */ struct pso_pointer make_read_stream( URL_FILE *input, - struct pso_pointer metadata ) { - struct pso_pointer pointer = allocate( READTAG, 2 ); + struct pso_pointer metadata ) { + struct pso_pointer pointer = allocate( READTAG, 2); struct pso2 *cell = pointer_to_object( pointer ); cell->payload.stream.stream = input; diff --git a/src/c/payloads/read_stream.h b/src/c/payloads/read_stream.h index 1ea0adb..47167c2 100644 --- a/src/c/payloads/read_stream.h +++ b/src/c/payloads/read_stream.h @@ -29,7 +29,7 @@ struct stream_payload { struct pso_pointer meta; }; -struct pso_pointer make_read_stream( URL_FILE * input, - struct pso_pointer metadata ); +struct pso_pointer make_read_stream( URL_FILE *input, + struct pso_pointer metadata ); #endif diff --git a/src/c/payloads/stack.c b/src/c/payloads/stack.c index a0591ab..aeef298 100644 --- a/src/c/payloads/stack.c +++ b/src/c/payloads/stack.c @@ -25,44 +25,44 @@ * * @return a pso_pointer to the stack frame. */ -struct pso_pointer make_frame( struct pso_pointer previous, ... ) { - va_list args; - va_start( args, previous ); - int count = va_arg( args, int ); +struct pso_pointer make_frame( struct pso_pointer previous, ...) { + va_list args; + va_start(args, previous); + int count = va_arg(args, int); - struct pso_pointer frame_pointer = allocate( STACKTAG, 4 ); - struct pso4 *frame = ( struct pso4 * ) pointer_to_object( frame_pointer ); + struct pso_pointer frame_pointer = allocate( STACKTAG, 4); + struct pso4* frame = (struct pso4*)pointer_to_object( frame_pointer); - frame->payload.stack_frame.previous = previous; + frame->payload.stack_frame.previous = previous; - // I *think* the count starts with the number of args, so there are - // one fewer actual args. Need to test to verify this! - count--; - int cursor = 0; - frame->payload.stack_frame.args = count; + // I *think* the count starts with the number of args, so there are + // one fewer actual args. Need to test to verify this! + count --; + int cursor = 0; + frame->payload.stack_frame.args = count; - for ( ; cursor < count && cursor < args_in_frame; cursor++ ) { - struct pso_pointer argument = va_arg( args, struct pso_pointer ); + for ( ; cursor < count && cursor < args_in_frame; cursor++) { + struct pso_pointer argument = va_arg( args, struct pso_pointer); - frame->payload.stack_frame.arg[cursor] = inc_ref( argument ); - } - if ( cursor < count ) { - struct pso_pointer more_args = nil; + frame->payload.stack_frame.arg[cursor] = inc_ref( argument); + } + if ( cursor < count) { + struct pso_pointer more_args = nil; - for ( ; cursor < count; cursor++ ) { - more_args = cons( va_arg( args, struct pso_pointer ), more_args ); - } + for (; cursor < count; cursor++) { + more_args = cons( va_arg( args, struct pso_pointer), more_args); + } - // should be frame->payload.stack_frame.more = reverse( more_args), but - // we don't have reverse yet. TODO: fix. - frame->payload.stack_frame.more = more_args; - } else { - for ( ; cursor < args_in_frame; cursor++ ) { - frame->payload.stack_frame.arg[cursor] = nil; - } - } + // should be frame->payload.stack_frame.more = reverse( more_args), but + // we don't have reverse yet. TODO: fix. + frame->payload.stack_frame.more = more_args; + } else { + for (; cursor < args_in_frame; cursor++) { + frame->payload.stack_frame.arg[cursor] = nil; + } + } - return frame_pointer; + return frame_pointer; } /** @@ -72,23 +72,23 @@ struct pso_pointer make_frame( struct pso_pointer previous, ... ) { * be destroyed. */ struct pso_pointer destroy_stack_frame( struct pso_pointer fp, - struct pso_pointer env ) { - if ( stackp( fp ) ) { - struct pso4 *frame = pointer_to_pso4( fp ); - struct pso4 *casualty = - pointer_to_pso4( frame->payload.stack_frame.arg[0] ); + struct pso_pointer env) { + if (stackp(fp)) { + struct pso4 *frame = pointer_to_pso4( fp); + struct pso4 * casualty = + pointer_to_pso4( frame->payload.stack_frame.arg[0]); - dec_ref( casualty->payload.stack_frame.previous ); - dec_ref( casualty->payload.stack_frame.function ); - dec_ref( casualty->payload.stack_frame.more ); + dec_ref( casualty->payload.stack_frame.previous); + dec_ref( casualty->payload.stack_frame.function); + dec_ref( casualty->payload.stack_frame.more); - for ( int i = 0; i < args_in_frame; i++ ) { - dec_ref( casualty->payload.stack_frame.arg[0] ); - } + for (int i = 0; i < args_in_frame; i++) { + dec_ref( casualty->payload.stack_frame.arg[0]); + } - casualty->payload.stack_frame.args = 0; - casualty->payload.stack_frame.depth = 0; - } + casualty->payload.stack_frame.args = 0; + casualty->payload.stack_frame.depth = 0; + } - return nil; + return nil; } diff --git a/src/c/payloads/stack.h b/src/c/payloads/stack.h index 7333809..a2840ad 100644 --- a/src/c/payloads/stack.h +++ b/src/c/payloads/stack.h @@ -37,9 +37,9 @@ struct stack_frame_payload { uint32_t depth; }; -struct pso_pointer make_frame( struct pso_pointer previous, ... ); +struct pso_pointer make_frame( struct pso_pointer previous, ...); struct pso_pointer destroy_stack_frame( struct pso_pointer fp, - struct pso_pointer env ); + struct pso_pointer env); #endif diff --git a/src/c/psse.c b/src/c/psse.c index b234103..3b95d7e 100644 --- a/src/c/psse.c +++ b/src/c/psse.c @@ -101,10 +101,11 @@ int main( int argc, char *argv[] ) { } } - if ( nilp( initialise_node( 0 ) ) ) { + if ( nilp( initialise_node( 0 ))) { fputs( "Failed to initialise node\n", stderr ); exit( 1 ); } + // repl( ); exit( 0 );