Fixed a segfault when the system can initialise no more pages.

Still not fixed the `member?` bug.
This commit is contained in:
Simon Brooke 2026-03-18 13:27:19 +00:00
parent 69b199fecd
commit 7d0ce67373
3 changed files with 25 additions and 19 deletions

View file

@ -1,14 +1,18 @@
(set! nil? (lambda
(o)
"`(nil? object)`: Return `t` if object is `nil`, else `t`."
(= o nil)))
(set! nil? (lambda (o) (= (type o) "NIL ")))
(set! member? (lambda
(set! CDR (lambda (o)
(print (list "in CDR; o is: " o) *log*)
(let ((r . (cdr o)))
(print (list "; returning: " r) *log*)
(println *log*)
(println *log*)
r)))
(set! member?
(lambda
(item collection)
"`(member? item collection)`: Return `t` if this `item` is a member of this `collection`, else `nil`."
(print (list "in member?: " 'item item 'collection collection) *log*)(println *log*)
(cond
((nil? collection) nil)
((= item (car collection)) t)
(t (member? item (cdr collection))))))
;; (member? (type member?) '("LMDA" "NLMD"))
(t (member? item (CDR collection))))))

View file

@ -65,7 +65,11 @@ struct cons_page *conspages[NCONSPAGES];
* that exception would have to have been pre-built.
*/
void make_cons_page( ) {
struct cons_page *result = malloc( sizeof( struct cons_page ) );
struct cons_page *result = NULL;
if ( initialised_cons_pages < NCONSPAGES) {
result = malloc( sizeof( struct cons_page ) );
}
if ( result != NULL ) {
conspages[initialised_cons_pages] = result;
@ -116,12 +120,10 @@ void make_cons_page( ) {
initialised_cons_pages++;
} else {
debug_printf( DEBUG_ALLOC,
L"FATAL: Failed to allocate memory for cons page %d\n",
initialised_cons_pages );
fwide( stderr, 1 );
fwprintf( stderr, L"FATAL: Failed to allocate memory for cons page %d\n", initialised_cons_pages );
exit( 1 );
}
}
/**

View file

@ -53,7 +53,7 @@ else
fi
expected='nil'
expected='nil'(CDR )
output=`target/psse $1 <<EOF
(progn
(set! nil? (lambda (o) (= (type o) "NIL ")))
@ -86,7 +86,7 @@ output=`target/psse $1 -s100<<EOF
(set! member?
(lambda
(item collection)
;; (print (list "in member?: " 'item item 'collection collection))
;; (print (list "in member?: " 'item item 'collection collection) *log*)(println *log*)
(cond
((nil? collection) nil)
((= item (car collection)) t)