nix_api_value: Add nix_register_primop to add builtins

This commit is contained in:
Yorick van Pelt 2023-08-07 15:33:07 +02:00 committed by José Luis Lafuente
parent e891aac2e4
commit 713f10aeaa
No known key found for this signature in database
GPG key ID: 8A3455EBE455489A
2 changed files with 24 additions and 0 deletions

View file

@ -3,6 +3,7 @@
#include "eval.hh" #include "eval.hh"
#include "gc/gc.h" #include "gc/gc.h"
#include "globals.hh" #include "globals.hh"
#include "primops.hh"
#include "value.hh" #include "value.hh"
#include "nix_api_expr.h" #include "nix_api_expr.h"
@ -55,6 +56,15 @@ PrimOp *nix_alloc_primop(nix_c_context *context, PrimOpFun fun, int arity,
NIXC_CATCH_ERRS_NULL NIXC_CATCH_ERRS_NULL
} }
nix_err nix_register_primop(nix_c_context *context, PrimOp *primOp) {
if (context)
context->last_err_code = NIX_OK;
try {
nix::RegisterPrimOp r(std::move(*((nix::PrimOp *)primOp)));
}
NIXC_CATCH_ERRS
}
Value *nix_alloc_value(nix_c_context *context, State *state) { Value *nix_alloc_value(nix_c_context *context, State *state) {
if (context) if (context)
context->last_err_code = NIX_OK; context->last_err_code = NIX_OK;

View file

@ -88,6 +88,20 @@ typedef void (*PrimOpFun)(State *state, int pos, Value **args, Value *v);
*/ */
PrimOp *nix_alloc_primop(nix_c_context *context, PrimOpFun fun, int arity, PrimOp *nix_alloc_primop(nix_c_context *context, PrimOpFun fun, int arity,
const char *name, const char **args, const char *doc); const char *name, const char **args, const char *doc);
/** @brief add a primop to builtins
*
* Only applies to new States.
*
* Moves your primop into the global
* registry, meaning your input primOp is no longer usable
* (but still possibly subject to garbage collection).
*
* @param[out] context Optional, stores error information
* @return primop, or null in case of errors
*
*/
nix_err nix_register_primop(nix_c_context *context, PrimOp *primOp);
/** @} */ /** @} */
// Function prototypes // Function prototypes