diff --git a/include/bqnffi.h b/include/bqnffi.h index a88ef998..7a9d152d 100644 --- a/include/bqnffi.h +++ b/include/bqnffi.h @@ -8,6 +8,8 @@ typedef uint64_t BQNV; extern "C" { #endif +void bqn_init(void); + void bqn_free(BQNV v); double bqn_toF64 (BQNV v); // includes bqn_free(v) diff --git a/include/syms b/include/syms index 88b22b4f..f4aa1947 100644 --- a/include/syms +++ b/include/syms @@ -1,4 +1,5 @@ { + bqn_init; bqn_free; bqn_toF64; bqn_toChar; diff --git a/src/ffi.c b/src/ffi.c index ca413c28..4d2f8222 100644 --- a/src/ffi.c +++ b/src/ffi.c @@ -30,6 +30,10 @@ uint32_t bqn_toChar(BQNV v) { uint32_t r = o2cu(getB(v)); freeTagged(v); return double bqn_readF64 (BQNV v) { return o2fu(getB(v)); } uint32_t bqn_readChar(BQNV v) { return o2cu(getB(v)); } +void bqn_init() { + cbqn_init(); +} + B type_c1(B t, B x); int bqn_type(BQNV v) { return o2i(type_c1(bi_N, inc(getB(v)))); diff --git a/src/load.c b/src/load.c index ef48a701..c9e97e26 100644 --- a/src/load.c +++ b/src/load.c @@ -683,6 +683,7 @@ void base_init() { // very first init function bool cbqn_initialized; void cbqn_init() { + if (cbqn_initialized) return; #define F(X) X##_init(); FOR_INIT(F) #undef F