eclisp-sys 0.1.0

FFI Bindings for Embeddable Common Lisp
#include <ecl/ecl.h>
#include <stdint.h>

enum {
    ECLISP_OK = 0,
    ECLISP_ERROR = 1,
    ECLISP_ALLOCATION_FAILED = 2,
    ECLISP_INVALID_ARGUMENT = -1
};

typedef struct {
  cl_object object;
} eclisp_root;

eclisp_root *eclisp_root_new(cl_object object);
cl_object eclisp_root_get(const eclisp_root *root);
void eclisp_root_free(eclisp_root *root);

int eclisp_eval(const char *source, eclisp_root **out_root, char **out_error);
int eclisp_call(
    const char *function,
    size_t argc,
    const cl_object *argv,
    eclisp_root **out_root,
    char **out_error
);

int eclisp_int_new(int64_t value, eclisp_root **out);
int eclisp_float_new(double value, eclisp_root **out);
int eclisp_cons_new(
    cl_object car,
    cl_object cdr,
    eclisp_root **out
);
int eclisp_list_new(
    size_t length,
    const cl_object *values,
    eclisp_root **out
);
int eclisp_string_new(const char *text, size_t length, eclisp_root **out_root);
void eclisp_string_free(char *string);

int eclisp_root_is_nil(const eclisp_root *root);
int eclisp_root_is_t(const eclisp_root *root);
int eclisp_root_is_int(const eclisp_root *root);
int eclisp_root_is_float(const eclisp_root *root);
int eclisp_root_is_string(const eclisp_root *root);
int eclisp_root_as_int(const eclisp_root *root, int64_t *out);
int eclisp_root_as_float(const eclisp_root *root, double *out);
int eclisp_root_as_string(const eclisp_root *root, char **out, size_t *out_length);
int eclisp_root_repr(const eclisp_root *root, char **out_repr);

int eclisp_root_is_cons(const eclisp_root *root);
int eclisp_root_is_list(const eclisp_root *root);
int eclisp_root_car(const eclisp_root *root, eclisp_root **out_car);
int eclisp_root_cdr(const eclisp_root *root, eclisp_root **out_cdr);