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 "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;
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue