Started work on binding functions. Not yet complete.
This commit is contained in:
parent
f4303247b9
commit
efa6a3246d
17 changed files with 321 additions and 41 deletions
25
src/c/payloads/function.c
Normal file
25
src/c/payloads/function.c
Normal 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;
|
||||
}
|
||||
|
|
@ -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
25
src/c/payloads/special.c
Normal 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;
|
||||
}
|
||||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue