/* Copyright (C) 2025 Aryadev Chavali * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License Version 2 for * details. * You may distribute and modify this code under the terms of the GNU General * Public License Version 2, which you should have received a copy of along with * this program. If not, please go to . * Created: 2025-04-06 * Description: Object model where we deal with contexts */ #ifndef LISP_H #define LISP_H #include #include #include #include typedef struct Cons { lisp_t *car, *cdr; } cons_t; typedef struct Cell { u64 size; u8 data[]; } cell_t; lisp_t *make_int(i64 integer); lisp_t *make_sym(context_t *ctx, char *data, u64 size); lisp_t *make_cons(context_t *ctx, lisp_t *car, lisp_t *cdr); lisp_t *make_list(context_t *ctx, lisp_t **lisps, u64 size); lisp_t *make_vec(context_t *ctx, u32 size); lisp_t *make_str(context_t *ctx, char *data, u64 size); i64 as_int(lisp_t *obj); u32 as_char(lisp_t *obj); cell_t *as_sym(lisp_t *obj); void as_ssym(lisp_t *obj, sv_t *sv); bool as_bool(lisp_t *obj); f64 as_float(lisp_t *obj); cons_t *as_cons(lisp_t *obj); vec_t *as_vec(lisp_t *obj); vec_t *as_str(lisp_t *obj); sv_t serialise(context_t *ctx, lisp_t *lisp); #define CAR(PTR) (as_cons(PTR)->car) #define CDR(PTR) (as_cons(PTR)->cdr) #endif