Started work on binding functions. Not yet complete.

This commit is contained in:
Simon Brooke 2026-05-04 16:15:57 +01:00
parent f4303247b9
commit efa6a3246d
17 changed files with 321 additions and 41 deletions

25
src/c/payloads/function.c Normal file
View file

@ -0,0 +1,25 @@
/**
* payloads/function.c
*
* an ordinary Lisp function - one whose arguments are pre-evaluated.
*
* (c) 2026 Simon Brooke <simon@journeyman.cc>
* Licensed under GPL version 2.0, or, at your option, any later version.
*/
#include "memory/pointer.h"
#include "memory/pso.h"
#include "memory/pso2.h"
#include "memory/tags.h"
struct pso_pointer make_function(
struct pso_pointer frame_pointer, struct pso_pointer meta,
struct pso_pointer (*executable)(struct pso_pointer frame_pointer)) {
struct pso_pointer result = allocate(frame_pointer, FUNCTIONTAG, 2);
struct pso2 *object = pointer_to_object(result);
object->payload.function.meta = meta;
object->payload.function.executable = executable;
return result;
}

View file

@ -39,4 +39,8 @@ struct function_payload {
struct pso_pointer ( *executable ) ( struct pso_pointer frame_pointer );
};
struct pso_pointer make_function(
struct pso_pointer frame_pointer, struct pso_pointer meta,
struct pso_pointer (*executable)(struct pso_pointer frame_pointer));
#endif

25
src/c/payloads/special.c Normal file
View file

@ -0,0 +1,25 @@
/**
* payloads/special.c
*
* a special Lisp function - one whose arguments are **not** pre-evaluated.
*
* (c) 2026 Simon Brooke <simon@journeyman.cc>
* Licensed under GPL version 2.0, or, at your option, any later version.
*/
#include "memory/pointer.h"
#include "memory/pso.h"
#include "memory/pso2.h"
#include "memory/tags.h"
struct pso_pointer make_special(
struct pso_pointer frame_pointer, struct pso_pointer meta,
struct pso_pointer (*executable)(struct pso_pointer frame_pointer)) {
struct pso_pointer result = allocate(frame_pointer, SPECIALTAG, 2);
struct pso2 *object = pointer_to_object(result);
object->payload.special.meta = meta;
object->payload.special.executable = executable;
return result;
}

View file

@ -18,8 +18,12 @@
/**
* A special form - one whose arguments are not pre-evaluated but passed as
* provided.
* provided. Shares payload with function, q.v.
* \see NLAMBDATAG.
*/
struct pso_pointer make_special(
struct pso_pointer frame_pointer, struct pso_pointer meta,
struct pso_pointer (*executable)(struct pso_pointer frame_pointer));
#endif