mirror of
https://github.com/privatevoid-net/nix-super.git
synced 2024-11-22 22:16:16 +02:00
nix_api_value: Add nix_register_primop to add builtins
This commit is contained in:
parent
e891aac2e4
commit
713f10aeaa
2 changed files with 24 additions and 0 deletions
|
@ -3,6 +3,7 @@
|
|||
#include "eval.hh"
|
||||
#include "gc/gc.h"
|
||||
#include "globals.hh"
|
||||
#include "primops.hh"
|
||||
#include "value.hh"
|
||||
|
||||
#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
|
||||
}
|
||||
|
||||
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) {
|
||||
if (context)
|
||||
context->last_err_code = NIX_OK;
|
||||
|
|
|
@ -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,
|
||||
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
|
||||
|
|
Loading…
Reference in a new issue