Another inconclusive session: still nothing works, still making progress.

This commit is contained in:
Simon Brooke 2026-04-22 18:16:00 +01:00
parent ef59563e25
commit eed4711fee
35 changed files with 317 additions and 232 deletions

View file

@ -35,39 +35,41 @@
* @return a sequence like the `sequence` passed, but reversed; or `nil` if
* the argument was not a sequence.
*/
struct pso_pointer c_reverse( struct pso_pointer sequence ) {
struct pso_pointer c_reverse( struct pso_pointer frame_pointer, struct pso_pointer sequence ) {
// todo: issue #21: must have stack frame passed in.
struct pso_pointer result = nil;
for ( struct pso_pointer cursor = sequence; !nilp( sequence );
for ( struct pso_pointer cursor = sequence; !c_nilp( sequence );
cursor = c_cdr( cursor ) ) {
struct pso2 *object = pointer_to_object( cursor );
switch ( get_tag_value( cursor ) ) {
case CONSTV:
result = make_cons( c_car( cursor ), result );
result = make_cons( frame_pointer, c_car( cursor ), result );
break;
case KEYTV:
// TODO: should you be able to reverse keywords and symbols?
result =
make_string_like_thing( object->payload.string.character,
make_string_like_thing( frame_pointer, object->payload.string.character,
result, KEYTAG );
break;
case STRINGTV:
result =
make_string_like_thing( object->payload.string.character,
make_string_like_thing( frame_pointer, object->payload.string.character,
result, STRINGTAG );
break;
case SYMBOLTV:
// TODO: should you be able to reverse keywords and symbols?
result =
make_string_like_thing( object->payload.string.character,
make_string_like_thing( frame_pointer, object->payload.string.character,
result, SYMBOLTAG );
break;
default:
result =
make_exception( make_cons( c_string_to_lisp_string
( L"Invalid object in sequence" ),
cursor ), nil, nil, nil );
make_exception( make_frame( 1, frame_pointer,
make_cons( frame_pointer,
c_string_to_lisp_string
( frame_pointer, L"Invalid object in sequence" ),
cursor ) ));
goto exit;
break;
}