I think read will now read integers and symbols, but it's untested.

Everything compiles.
This commit is contained in:
Simon Brooke 2026-04-01 16:06:16 +01:00
parent cc8e96eda4
commit 9eb0d3c5a0
28 changed files with 594 additions and 293 deletions

View file

@ -43,13 +43,20 @@ bool equal( struct pso_pointer a, struct pso_pointer 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 = (equal( car(a), car(b)) && equal( cdr(a), cdr(b)));
break;
case INTEGERTV :
result = (pointer_to_object(a)->payload.integer.value ==
pointer_to_object(b)->payload.integer.value);
result = (oa->payload.integer.value
==
ob->payload.integer.value);
break;
case KEYTV:
case STRINGTV :

View file

@ -25,6 +25,16 @@
#include "ops/string_ops.h"
#include "ops/truth.h"
/**
* @brief reverse a sequence.
*
* A sequence is a list or a string-like-thing. A dotted pair is not a
* sequence.
*
* @param sequence a pointer to a sequence.
* @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;