48 #define LBM_EXTENSION(name, argv, argn) \
49 __attribute__((aligned(LBM_STORABLE_ADDRESS_ALIGNMENT))) lbm_value name(lbm_value *(argv), lbm_uint (argn))
125 #define LBM_CHECK_NUMBER_ALL() if (!lbm_check_number_all(args, argn)) {return ENC_SYM_EERROR;}
126 #define LBM_CHECK_ARGN(n) if (!lbm_check_argn(argn, n)) {return ENC_SYM_EERROR;}
127 #define LBM_CHECK_ARGN_NUMBER(n) if (!lbm_check_argn_number(args, argn, n)) {return ENC_SYM_EERROR;}
134 extern bool strmatch(
const char *str1,
const char *str2);
bool lbm_lookup_extension_id(char *sym_str, lbm_uint *ix)
Definition: extensions.c:87
bool lbm_check_argn(lbm_uint argn, lbm_uint n)
Definition: extensions.c:145
static bool lbm_is_extension(lbm_value exp)
Definition: extensions.h:100
static lbm_value mk_call_cc(lbm_value body)
Definition: extensions.h:140
static lbm_value mk_if(lbm_value cond, lbm_value tb, lbm_value fb)
Definition: extensions.h:148
lbm_uint lbm_get_max_extensions(void)
Definition: extensions.c:60
lbm_value make_list(int num,...)
Definition: extensions.c:166
void lbm_extensions_set_next(lbm_uint i)
Definition: extensions.c:34
static lbm_value mk_inc(lbm_value v)
Definition: extensions.h:152
static lbm_value mk_car(lbm_value a)
Definition: extensions.h:164
static lbm_value mk_lt(lbm_value a, lbm_value b)
Definition: extensions.h:156
extension_fptr lbm_get_extension(lbm_uint sym)
Definition: extensions.c:68
lbm_value lbm_extensions_default(lbm_value *args, lbm_uint argn)
Definition: extensions.c:38
static lbm_value mk_lam(lbm_value args, lbm_value body)
Definition: extensions.h:136
lbm_value(* extension_fptr)(lbm_value *, lbm_uint)
Definition: extensions.h:36
bool strmatch(const char *str1, const char *str2)
Definition: extensions.c:177
bool lbm_check_number_all(lbm_value *args, lbm_uint argn)
Definition: extensions.c:137
bool lbm_check_argn_number(lbm_value *args, lbm_uint argn, lbm_uint n)
Definition: extensions.c:154
bool lbm_extensions_init(lbm_extension_t *extension_storage, lbm_uint extension_storage_size)
Definition: extensions.c:44
lbm_extension_t * extension_table
Definition: extensions.c:32
static lbm_value mk_eq(lbm_value a, lbm_value b)
Definition: extensions.h:160
static lbm_value mk_let(lbm_value bindings, lbm_value body)
Definition: extensions.h:144
bool lbm_add_extension(char *sym_str, extension_fptr ext)
Definition: extensions.c:99
static lbm_value mk_cdr(lbm_value a)
Definition: extensions.h:168
lbm_uint lbm_get_num_extensions(void)
Definition: extensions.c:64
bool lbm_clr_extension(lbm_uint sym_id)
Definition: extensions.c:77
static lbm_uint lbm_dec_sym(lbm_value x)
Definition: heap.h:744
static lbm_value lbm_enc_i(lbm_int x)
Definition: heap.h:684
static lbm_type lbm_type_of(lbm_value x)
Definition: heap.h:645
#define ENC_SYM_LT
Definition: lbm_defines.h:544
#define EXTENSION_SYMBOLS_START
Definition: lbm_defines.h:396
#define ENC_SYM_CALL_CC_UNSAFE
Definition: lbm_defines.h:531
#define ENC_SYM_LET
Definition: lbm_defines.h:489
#define ENC_SYM_IF
Definition: lbm_defines.h:488
#define ENC_SYM_CAR
Definition: lbm_defines.h:553
#define ENC_SYM_LAMBDA
Definition: lbm_defines.h:487
#define ENC_SYM_ADD
Definition: lbm_defines.h:535
#define ENC_SYM_CDR
Definition: lbm_defines.h:554
#define LBM_TYPE_SYMBOL
Definition: lbm_defines.h:82
#define ENC_SYM_EQ
Definition: lbm_defines.h:540
uint32_t lbm_uint
Definition: lbm_types.h:48
uint32_t lbm_value
Definition: lbm_types.h:44
Definition: extensions.h:40
extension_fptr fptr
Definition: extensions.h:41
char * name
Definition: extensions.h:42