My monster, it not only compiles, it now runs!

This commit is contained in:
Simon Brooke 2026-03-30 11:52:41 +01:00
parent 60921be3d4
commit a8b4a6e69d
26 changed files with 244 additions and 172 deletions

View file

@ -9,6 +9,12 @@
* Licensed under GPL version 2.0, or, at your option, any later version.
*/
#include <stdbool.h>
#include "memory/node.h"
#include "memory/pointer.h"
#include "ops/stack_ops.h"
/**
* @brief true if `p` points to `nil`, else false.
*
@ -20,8 +26,8 @@
* @return true if `p` points to `nil`.
* @return false otherwise.
*/
bool nilp( struct pso_pointer p) {
return (p.page == 0 && p.offset = 0);
bool nilp( struct pso_pointer p ) {
return ( p.page == 0 && p.offset == 0 );
}
/**
@ -31,8 +37,8 @@ bool nilp( struct pso_pointer p) {
* @return true if `p` points to `nil`;
* @return false otherwise.
*/
bool not( struct pso_pointer p) {
return !nilp( p);
bool not( struct pso_pointer p ) {
return !nilp( p );
}
/**
@ -46,8 +52,8 @@ bool not( struct pso_pointer p) {
* @return true if `p` points to `t`.
* @return false otherwise.
*/
bool truep( struct pso_pointer p) {
return (p.page == 0 && p.offset = 1);
bool truep( struct pso_pointer p ) {
return ( p.page == 0 && p.offset == 1 );
}
/**
@ -58,10 +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`
*/
pso_pointer lisp_nilp( struct pso4 *frame,
struct pso_pointer frame_pointer,
struct pso_pointer env ){
return (nilp(frame->payload.stack_frame.arg[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 );
}
/**
@ -72,10 +78,10 @@ pso_pointer lisp_nilp( struct pso4 *frame,
* @param env the evaluation environment.
* @return `t` if the first argument in this frame is `t`, else `nil`.
*/
pso_pointer lisp_truep( struct pso4 *frame,
struct pso_pointer frame_pointer,
struct pso_pointer env ){
return (truep(frame->payload.stack_frame.arg[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 );
}
/**
@ -87,8 +93,8 @@ pso_pointer lisp_truep( struct pso4 *frame,
* @param env the evaluation environment.
* @return `t` if the first argument in this frame is not `nil`, else `t`.
*/
pso_pointer lisp_not( struct pso4 *frame,
struct pso_pointer frame_pointer,
struct pso_pointer env ){
return (not(frame->payload.stack_frame.arg[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 );
}