mirror of
https://github.com/privatevoid-net/nix-super.git
synced 2024-11-14 02:06:16 +02:00
nix_api_expr: merge nix_parse_expr and nix_expr_eval, remove Expr
This commit is contained in:
parent
1777e4a5bb
commit
aa85f7d917
4 changed files with 11 additions and 66 deletions
|
@ -39,27 +39,15 @@ nix_err nix_libexpr_init(nix_c_context *context) {
|
||||||
NIXC_CATCH_ERRS
|
NIXC_CATCH_ERRS
|
||||||
}
|
}
|
||||||
|
|
||||||
Expr *nix_parse_expr_from_string(nix_c_context *context, State *state,
|
nix_err nix_expr_eval_from_string(nix_c_context *context, State *state,
|
||||||
const char *expr, const char *path,
|
const char *expr, const char *path,
|
||||||
GCRef *ref) {
|
Value *value) {
|
||||||
if (context)
|
if (context)
|
||||||
context->last_err_code = NIX_OK;
|
context->last_err_code = NIX_OK;
|
||||||
try {
|
try {
|
||||||
Expr *result = state->state.parseExprFromString(
|
nix::Expr *parsedExpr = state->state.parseExprFromString(
|
||||||
expr, state->state.rootPath(nix::CanonPath(path)));
|
expr, state->state.rootPath(nix::CanonPath(path)));
|
||||||
if (ref)
|
state->state.eval(parsedExpr, *(nix::Value *)value);
|
||||||
ref->ptr = result;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
NIXC_CATCH_ERRS_NULL
|
|
||||||
}
|
|
||||||
|
|
||||||
nix_err nix_expr_eval(nix_c_context *context, State *state, Expr *expr,
|
|
||||||
Value *value) {
|
|
||||||
if (context)
|
|
||||||
context->last_err_code = NIX_OK;
|
|
||||||
try {
|
|
||||||
state->state.eval((nix::Expr *)expr, *(nix::Value *)value);
|
|
||||||
}
|
}
|
||||||
NIXC_CATCH_ERRS
|
NIXC_CATCH_ERRS
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,12 +13,6 @@ extern "C" {
|
||||||
// cffi start
|
// cffi start
|
||||||
|
|
||||||
// Type definitions
|
// Type definitions
|
||||||
/**
|
|
||||||
* @brief Represents a parsed nix Expression, can be evaluated into a Value.
|
|
||||||
*
|
|
||||||
* Owned by the GC.
|
|
||||||
*/
|
|
||||||
typedef void Expr; // nix::Expr
|
|
||||||
/**
|
/**
|
||||||
* @brief Represents a nix evaluator state.
|
* @brief Represents a nix evaluator state.
|
||||||
*
|
*
|
||||||
|
@ -54,34 +48,19 @@ typedef struct GCRef GCRef; // void*
|
||||||
nix_err nix_libexpr_init(nix_c_context *context);
|
nix_err nix_libexpr_init(nix_c_context *context);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Parses a Nix expression from a string.
|
* @brief Parses and evaluates a Nix expression from a string.
|
||||||
*
|
|
||||||
* The returned expression is owned by the garbage collector.
|
|
||||||
* Pass a gcref to keep a reference.
|
|
||||||
*
|
|
||||||
* @param[out] context Optional, stores error information
|
|
||||||
* @param[in] state Evaluator state.
|
|
||||||
* @param[in] expr The Nix expression to parse.
|
|
||||||
* @param[in] path The file path to associate with the expression.
|
|
||||||
* @param[out] ref Optional, will store a reference to the returned value.
|
|
||||||
* @return A parsed expression or NULL on failure.
|
|
||||||
*/
|
|
||||||
Expr *nix_parse_expr_from_string(nix_c_context *context, State *state,
|
|
||||||
const char *expr, const char *path,
|
|
||||||
GCRef *ref);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Evaluates a parsed Nix expression.
|
|
||||||
*
|
*
|
||||||
* @param[out] context Optional, stores error information
|
* @param[out] context Optional, stores error information
|
||||||
* @param[in] state The state of the evaluation.
|
* @param[in] state The state of the evaluation.
|
||||||
* @param[in] expr The Nix expression to evaluate.
|
* @param[in] expr The Nix expression to parse.
|
||||||
|
* @param[in] path The file path to associate with the expression.
|
||||||
* @param[out] value The result of the evaluation. You should allocate this
|
* @param[out] value The result of the evaluation. You should allocate this
|
||||||
* yourself.
|
* yourself.
|
||||||
* @return NIX_OK if the evaluation was successful, an error code otherwise.
|
* @return NIX_OK if the evaluation was successful, an error code otherwise.
|
||||||
*/
|
*/
|
||||||
nix_err nix_expr_eval(nix_c_context *context, State *state, Expr *expr,
|
nix_err nix_expr_eval_from_string(nix_c_context *context, State *state,
|
||||||
Value *value);
|
const char *expr, const char *path,
|
||||||
|
Value *value);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Calls a Nix function with an argument.
|
* @brief Calls a Nix function with an argument.
|
||||||
|
|
|
@ -386,17 +386,6 @@ nix_err nix_copy_value(nix_c_context *context, Value *value, Value *source) {
|
||||||
NIXC_CATCH_ERRS
|
NIXC_CATCH_ERRS
|
||||||
}
|
}
|
||||||
|
|
||||||
nix_err nix_set_thunk(nix_c_context *context, State *s, Value *value,
|
|
||||||
Expr *expr) {
|
|
||||||
if (context)
|
|
||||||
context->last_err_code = NIX_OK;
|
|
||||||
try {
|
|
||||||
auto &v = check_value_not_null(value);
|
|
||||||
s->state.mkThunk_(v, (nix::Expr *)expr);
|
|
||||||
}
|
|
||||||
NIXC_CATCH_ERRS
|
|
||||||
}
|
|
||||||
|
|
||||||
typedef std::shared_ptr<nix::BindingsBuilder> BindingsBuilder_Inner;
|
typedef std::shared_ptr<nix::BindingsBuilder> BindingsBuilder_Inner;
|
||||||
|
|
||||||
nix_err nix_make_attrs(nix_c_context *context, Value *value,
|
nix_err nix_make_attrs(nix_c_context *context, Value *value,
|
||||||
|
|
|
@ -32,7 +32,6 @@ typedef enum {
|
||||||
|
|
||||||
// forward declarations
|
// forward declarations
|
||||||
typedef void Value;
|
typedef void Value;
|
||||||
typedef void Expr;
|
|
||||||
typedef struct State State;
|
typedef struct State State;
|
||||||
typedef struct GCRef GCRef;
|
typedef struct GCRef GCRef;
|
||||||
// type defs
|
// type defs
|
||||||
|
@ -307,16 +306,6 @@ nix_err nix_set_primop(nix_c_context *context, Value *value, PrimOp *op);
|
||||||
* @return error code, NIX_OK on success.
|
* @return error code, NIX_OK on success.
|
||||||
*/
|
*/
|
||||||
nix_err nix_copy_value(nix_c_context *context, Value *value, Value *source);
|
nix_err nix_copy_value(nix_c_context *context, Value *value, Value *source);
|
||||||
/** @brief Make a thunk from an expr.
|
|
||||||
*
|
|
||||||
* Expr will be evaluated when the value is forced
|
|
||||||
* @param[out] context Optional, stores error information
|
|
||||||
* @param[out] value Nix value to modify
|
|
||||||
* @param[in] expr the expr to thunk
|
|
||||||
* @return error code, NIX_OK on success.
|
|
||||||
*/
|
|
||||||
nix_err nix_set_thunk(nix_c_context *context, State *s, Value *value,
|
|
||||||
Expr *expr);
|
|
||||||
/**@}*/
|
/**@}*/
|
||||||
|
|
||||||
/** @brief Create a bindings builder
|
/** @brief Create a bindings builder
|
||||||
|
|
Loading…
Reference in a new issue