cheax
Lisp dialect with C API
|
The header for the cheax C API. More...
#include <stdbool.h>
#include <stdint.h>
#include <stdio.h>
#include <cheax/export.h>
Go to the source code of this file.
Data Structures | |
struct | chx_value |
Represents a value in the cheax environment. More... | |
struct | chx_id |
Identifier type. More... | |
struct | chx_quote |
Quoted value type. More... | |
struct | chx_list |
List type. More... | |
struct | chx_func |
Function or macro type. More... | |
union | chx_eval_out |
struct | chx_ext_func |
Cheax external/user function expression. More... | |
struct | chx_sym |
Custom symbol. More... | |
struct | chx_config_help |
Information about cheax config option. More... | |
Macros | |
#define | CHX_PURE |
#define | CHX_CONST |
#define | CHX_FORMAT(like, first, args) |
#define | CHX_INT_MIN INT_LEAST64_MIN |
Minimum value for chx_int. More... | |
#define | CHX_INT_MAX INT_LEAST64_MAX |
Maximum value for chx_int. More... | |
#define | PRIdCHX PRIdLEAST64 |
Conversion specifier to print chx_int (decimal). More... | |
#define | PRIiCHX PRIiLEAST64 |
Conversion specifier to print chx_int (decimal). More... | |
#define | SCNdCHX SCNdLEAST64 |
Conversion specifier to scan chx_int (decimal). More... | |
#define | SCNiCHX SCNiLEAST64 |
Conversion specifier to scan chx_int (decimal). More... | |
#define | CHEAX_NIL ((struct chx_value){ 0 }) |
The nil value. More... | |
#define | cheax_id_value(X) ((struct chx_value){ .type = CHEAX_ID, .data.as_id = (X) }) |
Turns chx_id into chx_value. More... | |
#define | cheax_int(X) ((struct chx_value){ .type = CHEAX_INT, .data.as_int = (X) }) |
Creates a chx_value of type CHEAX_INT. More... | |
#define | cheax_true() ((struct chx_value){ .type = CHEAX_BOOL, .data.as_int = 1 }) |
Creates chx_value true . More... | |
#define | cheax_false() ((struct chx_value){ .type = CHEAX_BOOL, .data.as_int = 0 }) |
Creates chx_value false . More... | |
#define | cheax_bool(X) ((struct chx_value){ .type = CHEAX_BOOL, .data.as_int = (X) ? 1 : 0 }) |
Creates chx_value of type CHEAX_BOOL. More... | |
#define | cheax_double(X) ((struct chx_value){ .type = CHEAX_DOUBLE, .data.as_double = (X) }) |
Creates a chx_value of type CHEAX_DOUBLE. More... | |
#define | cheax_list_value(X) ((struct chx_value){ .type = CHEAX_LIST, .data.as_list = (X) }) |
Turns chx_list into chx_value. More... | |
#define | cheax_func_value(X) ((struct chx_value){ .type = CHEAX_FUNC, .data.as_func = (X) }) |
#define | cheax_ext_func_value(X) ((struct chx_value){ .type = CHEAX_EXT_FUNC, .data.as_ext_func = (X) }) |
#define | cheax_quote_value(X) ((struct chx_value){ .type = CHEAX_QUOTE, .data.as_quote = (X) }) |
#define | cheax_backquote_value(X) ((struct chx_value){ .type = CHEAX_BACKQUOTE, .data.as_quote = (X) }) |
#define | cheax_comma_value(X) ((struct chx_value){ .type = CHEAX_COMMA, .data.as_quote = (X) }) |
#define | cheax_splice_value(X) ((struct chx_value){ .type = CHEAX_SPLICE, .data.as_quote = (X) }) |
#define | cheax_string_value(X) ((struct chx_value){ .type = CHEAX_STRING, .data.as_string = (X) }) |
#define | cheax_env_value(X) ((struct chx_value){ .type = CHEAX_ENV, .data.as_env = (X) }) |
#define | ERR_NAME_PAIR(NAME) {#NAME, CHEAX_##NAME} |
#define | CHEAX_BUILTIN_ERROR_NAMES(var) |
#define | cheax_ft(c, pad) { if (cheax_errno(c) != 0) goto pad; } |
Macro to fall through to a pad in case of an error. More... | |
Typedefs | |
typedef struct cheax | CHEAX |
The type of the cheax virtual machine state, a pointer to wich is needed for most cheax API functions. More... | |
typedef int_least64_t | chx_int |
Integer type. More... | |
typedef double | chx_double |
Floating point type. More... | |
typedef struct chx_value(* | chx_func_ptr) (CHEAX *c, struct chx_list *args, void *info) |
Type for C functions to be invoked from cheax. More... | |
typedef int(* | chx_tail_func_ptr) (CHEAX *c, struct chx_list *args, void *info, struct chx_env *pop_stop, union chx_eval_out *out) |
typedef struct chx_value(* | chx_getter) (CHEAX *c, struct chx_sym *sym) |
typedef void(* | chx_setter) (CHEAX *c, struct chx_sym *sym, struct chx_value value) |
typedef void(* | chx_finalizer) (CHEAX *c, struct chx_sym *sym) |
typedef int | chx_ref |
Functions | |
struct chx_value | cheax_nil (void) CHX_CONST |
Creates a nil value. More... | |
bool | cheax_is_nil (struct chx_value v) CHX_CONST |
Tests whether given value is nil . More... | |
struct chx_value | cheax_id (CHEAX *c, const char *id) CHX_PURE |
Creates a chx_value of type CHEAX_ID. More... | |
struct chx_value | cheax_id_value_proc (struct chx_id *id) CHX_CONST |
Turns chx_id into chx_value. Like cheax_id_value(), but a function and not a macro. More... | |
struct chx_value | cheax_int_proc (chx_int value) CHX_CONST |
Creates a chx_value of type CHEAX_INT. Like cheax_int(), but a function and not a macro. More... | |
struct chx_value | cheax_bool_proc (bool value) CHX_CONST |
Creates a chx_value of type CHEAX_BOOL. Like cheax_bool(), but a function and not a macro. More... | |
struct chx_value | cheax_double_proc (chx_double value) CHX_CONST |
Creates a chx_value of type CHEAX_DOUBLE. Like cheax_double(), but a function and not a macro. More... | |
struct chx_value | cheax_list (CHEAX *c, struct chx_value car, struct chx_list *cdr) |
Creates a list. More... | |
struct chx_value | cheax_list_value_proc (struct chx_list *list) CHX_CONST |
Turns chx_list into chx_value. Like cheax_list_value(), but a function and not a macro. More... | |
struct chx_value | cheax_func_value_proc (struct chx_func *fn) CHX_CONST |
struct chx_value | cheax_ext_func (CHEAX *c, const char *name, chx_func_ptr perform, void *info) |
Creates a cheax external/user function expression. More... | |
struct chx_value | cheax_ext_func_value_proc (struct chx_ext_func *sf) CHX_CONST |
struct chx_value | cheax_quote (CHEAX *c, struct chx_value value) |
Creates a quoted cheax expression. More... | |
struct chx_value | cheax_quote_value_proc (struct chx_quote *quote) CHX_CONST |
struct chx_value | cheax_backquote (CHEAX *c, struct chx_value value) |
Creates a backquoted cheax expression. More... | |
struct chx_value | cheax_backquote_value_proc (struct chx_quote *bkquote) CHX_CONST |
struct chx_value | cheax_comma (CHEAX *c, struct chx_value value) |
Creates a cheax comma expression. More... | |
struct chx_value | cheax_comma_value_proc (struct chx_quote *comma) CHX_CONST |
struct chx_value | cheax_splice (CHEAX *c, struct chx_value value) |
Creates a cheax comma splice expression. More... | |
struct chx_value | cheax_splice_value_proc (struct chx_quote *splice) CHX_CONST |
size_t | cheax_strlen (CHEAX *c, struct chx_string *str) CHX_PURE |
Size of string in number of bytes. More... | |
struct chx_value | cheax_string (CHEAX *c, const char *value) |
Creates a cheax string expression. More... | |
struct chx_value | cheax_nstring (CHEAX *c, const char *value, size_t len) |
Creates a cheax string expression of given length. More... | |
struct chx_value | cheax_string_value_proc (struct chx_string *string) CHX_CONST |
struct chx_value | cheax_substr (CHEAX *c, struct chx_string *str, size_t pos, size_t len) |
Takes substring of given cheax string. More... | |
char * | cheax_strdup (struct chx_string *str) |
Allocates a null-terminated copy of given chx_string. More... | |
struct chx_value | cheax_user_ptr (CHEAX *c, void *value, int type) |
Creates a cheax user pointer expression. More... | |
struct chx_value | cheax_env (CHEAX *c) |
Currently active chx_env. More... | |
struct chx_value | cheax_env_value_proc (struct chx_env *env) CHX_CONST |
chx_ref | cheax_ref (CHEAX *c, struct chx_value value) |
Increase reference count on cheax value, preventing it from gc deletion when cheax_eval() is called. More... | |
chx_ref | cheax_ref_ptr (CHEAX *c, void *obj) |
void | cheax_unref (CHEAX *c, struct chx_value value, chx_ref ref) |
Decrease reference count on cheax value, potentially allowing it to be deleted by gc when cheax_eval() is called. More... | |
void | cheax_unref_ptr (CHEAX *c, void *obj, chx_ref ref) |
int | cheax_new_type (CHEAX *c, const char *name, int base_type) |
Creates a new type code as an alias for another. More... | |
int | cheax_find_type (CHEAX *c, const char *name) |
Looks up the type code of a named type. More... | |
bool | cheax_is_valid_type (CHEAX *c, int type) CHX_PURE |
Checks whether a given type code is valid. More... | |
bool | cheax_is_basic_type (CHEAX *c, int type) CHX_PURE |
Checks whether a given type code is a basic type. More... | |
bool | cheax_is_user_type (CHEAX *c, int type) CHX_PURE |
Checks whether a given type code is a user-defined type code. More... | |
int | cheax_get_base_type (CHEAX *c, int type) |
Gets the base type for a given type. More... | |
int | cheax_resolve_type (CHEAX *c, int type) |
Resolves the basic type to which a given type code refers. More... | |
int | cheax_errno (CHEAX *c) CHX_PURE |
Gets the value of the current cheax error code. More... | |
void | cheax_perror (CHEAX *c, const char *s) |
Prints the current cheax error code and error message. More... | |
void | cheax_clear_errno (CHEAX *c) |
Sets cheax_errno() to 0. More... | |
void | cheax_throw (CHEAX *c, int code, struct chx_string *msg) |
Sets cheax_errno() to the given value. More... | |
void | cheax_throwf (CHEAX *c, int code, const char *fmt,...) CHX_FORMAT(printf |
void void | cheax_add_bt (CHEAX *c) |
int | cheax_new_error_code (CHEAX *c, const char *name) |
Creates a new error code with a given name. More... | |
int | cheax_find_error_code (CHEAX *c, const char *name) |
Looks up the value of a named error code. More... | |
CHEAX * | cheax_init (void) |
Initializes a new cheax virtual machine instance. More... | |
const char * | cheax_version (void) |
Returns cheax library version as a string in the static storage class. More... | |
int | cheax_load_feature (CHEAX *c, const char *feat) |
Loads extra functions or language features into the cheax environment, including 'unsafe' ones. More... | |
int | cheax_load_prelude (CHEAX *c) |
Loads the cheax standard library. More... | |
void | cheax_destroy (CHEAX *c) |
Destroys a cheax virtual machine instance, freeing its resources. More... | |
int | cheax_config_get_int (CHEAX *c, const char *opt) |
Get value of integer configuration option. More... | |
int | cheax_config_int (CHEAX *c, const char *opt, int value) |
Set value of integer configuration option. More... | |
bool | cheax_config_get_bool (CHEAX *c, const char *opt) |
Get value of boolean configuration option. More... | |
int | cheax_config_bool (CHEAX *c, const char *opt, bool value) |
Set value of boolean configuration option. More... | |
int | cheax_config_help (struct chx_config_help **help, size_t *num_opts) |
Load information about all cheax config options. More... | |
int | cheax_list_to_array (CHEAX *c, struct chx_list *list, struct chx_value **array_ptr, size_t *length) |
Converts chx_list to array. More... | |
struct chx_value | cheax_array_to_list (CHEAX *c, struct chx_value *array, size_t length) |
Converts array to chx_list. More... | |
void | cheax_push_env (CHEAX *c) |
Pushes new empty environment to environment stack. More... | |
void | cheax_enter_env (CHEAX *c, struct chx_env *main) |
Pushes new bifurcated environment to environment stack. More... | |
void | cheax_pop_env (CHEAX *c) |
Pops environment off environment stack. More... | |
struct chx_sym * | cheax_defsym (CHEAX *c, const char *id, chx_getter get, chx_setter set, chx_finalizer fin, void *user_info) |
Define symbol with custom getter and setter. More... | |
void | cheax_def (CHEAX *c, const char *id, struct chx_value value, int flags) |
Creates a new symbol in the cheax environment. More... | |
struct chx_value | cheax_get (CHEAX *c, const char *id) |
Obtains the value of the given symbol. More... | |
bool | cheax_try_get (CHEAX *c, const char *id, struct chx_value *out) |
struct chx_value | cheax_get_from (CHEAX *c, struct chx_env *env, const char *id) |
Retrieves the value of the given symbol, performing symbol lookup only in the specified environment. More... | |
bool | cheax_try_get_from (CHEAX *c, struct chx_env *env, const char *id, struct chx_value *out) |
void | cheax_set (CHEAX *c, const char *id, struct chx_value value) |
Sets the value of a symbol. More... | |
void | cheax_defun (CHEAX *c, const char *id, chx_func_ptr perform, void *info) |
Shorthand function to declare an external function the cheax environment. More... | |
void | cheax_defsyntax (CHEAX *c, const char *id, chx_tail_func_ptr perform, chx_func_ptr preproc, void *info) |
void | cheax_sync_int (CHEAX *c, const char *name, int *var, int flags) |
Synchronizes a variable from C with a symbol in the cheax environment. More... | |
void | cheax_sync_bool (CHEAX *c, const char *name, bool *var, int flags) |
Synchronizes a variable from C with a symbol in the cheax environment. More... | |
void | cheax_sync_float (CHEAX *c, const char *name, float *var, int flags) |
Synchronizes a variable from C with a symbol in the cheax environment. More... | |
void | cheax_sync_double (CHEAX *c, const char *name, double *var, int flags) |
Synchronizes a variable from C with a symbol in the cheax environment. More... | |
void | cheax_sync_nstring (CHEAX *c, const char *name, char *buf, size_t size, int flags) |
Synchronizes a null-terminated string buffer from C with a symbol in the cheax environment. More... | |
bool | cheax_match_in (CHEAX *c, struct chx_env *env, struct chx_value pan, struct chx_value match, int flags) |
Matches a cheax expression to a given pattern. More... | |
bool | cheax_match (CHEAX *c, struct chx_value pan, struct chx_value match, int flags) |
Matches a cheax expression to a given pattern. More... | |
bool | cheax_eq (CHEAX *c, struct chx_value l, struct chx_value r) |
Tests whether two given cheax expressions are equal. More... | |
bool | cheax_equiv (struct chx_value l, struct chx_value r) |
struct chx_value | cheax_cast (CHEAX *c, struct chx_value v, int type) |
Attempts to cast an expression to a given type. More... | |
struct chx_value | cheax_read (CHEAX *c, FILE *f) |
Reads value from file. More... | |
struct chx_value | cheax_read_at (CHEAX *c, FILE *f, const char *path, int *line, int *pos) |
Reads value from file and reports back line and column information. More... | |
struct chx_value | cheax_readstr (CHEAX *c, const char *str) |
Reads value from string. More... | |
struct chx_value | cheax_readstr_at (CHEAX *c, const char **str, const char *path, int *line, int *pos) |
Reads value from string, updates the string to reference the byte where it left off reading, and reports back line and column information. More... | |
struct chx_value | cheax_macroexpand (CHEAX *c, struct chx_value expr) |
Expand given expression until it is no longer a macro form. More... | |
struct chx_value | cheax_macroexpand_once (CHEAX *c, struct chx_value expr) |
Expand expression if it is a macro form. More... | |
struct chx_value | cheax_preproc (CHEAX *c, struct chx_value expr) |
struct chx_value | cheax_eval (CHEAX *c, struct chx_value expr) |
Evaluates given cheax expression. More... | |
struct chx_value | cheax_apply (CHEAX *c, struct chx_value func, struct chx_list *list) |
Invokes function with given argument list. More... | |
void | cheax_print (CHEAX *c, FILE *output, struct chx_value expr) |
Prints given value to file. More... | |
struct chx_value | cheax_format (CHEAX *c, struct chx_string *fmt, struct chx_list *args) |
Expresses given cheax values as a chx_string, using given format string. More... | |
void | cheax_exec (CHEAX *c, const char *f) |
Reads a file and executes it. More... | |
void * | cheax_malloc (CHEAX *c, size_t size) |
void * | cheax_calloc (CHEAX *c, size_t nmemb, size_t size) |
void * | cheax_realloc (CHEAX *c, void *ptr, size_t size) |
void | cheax_free (CHEAX *c, void *ptr) |
void | cheax_gc (CHEAX *c) |
The header for the cheax C API.