diff --git a/src/core/corelib.c b/src/core/corelib.c index d1105f07..663eacc7 100644 --- a/src/core/corelib.c +++ b/src/core/corelib.c @@ -21,13 +21,15 @@ */ #include -#include "corelib.h" #include "compile.h" #include "state.h" /* Generated header */ #include +/* Only include dynamic modules if enabled */ +#ifdef DST_DYNAMIC_MODULES + /* Use LoadLibrary on windows or dlopen on posix to load dynamic libaries * with native code. */ #ifdef DST_WINDOWS @@ -66,7 +68,7 @@ DstCFunction dst_native(const char *name, const uint8_t **error) { return init; } -int dst_core_native(DstArgs args) { +static int dst_core_native(DstArgs args) { DstCFunction init; const uint8_t *error = NULL; const uint8_t *path = NULL; @@ -79,7 +81,10 @@ int dst_core_native(DstArgs args) { DST_RETURN_CFUNCTION(args, init); } -int dst_core_print(DstArgs args) { +#endif +/* end DST_DYNAMIC_MODULES */ + +static int dst_core_print(DstArgs args) { int32_t i; for (i = 0; i < args.n; ++i) { int32_t j, len; @@ -93,7 +98,7 @@ int dst_core_print(DstArgs args) { DST_RETURN_NIL(); } -int dst_core_describe(DstArgs args) { +static int dst_core_describe(DstArgs args) { int32_t i; DstBuffer b; dst_buffer_init(&b, 0); @@ -108,7 +113,7 @@ int dst_core_describe(DstArgs args) { return 0; } -int dst_core_string(DstArgs args) { +static int dst_core_string(DstArgs args) { int32_t i; DstBuffer b; dst_buffer_init(&b, 0); @@ -123,7 +128,7 @@ int dst_core_string(DstArgs args) { return 0; } -int dst_core_symbol(DstArgs args) { +static int dst_core_symbol(DstArgs args) { int32_t i; DstBuffer b; dst_buffer_init(&b, 0); @@ -138,7 +143,7 @@ int dst_core_symbol(DstArgs args) { return 0; } -int dst_core_buffer(DstArgs args) { +static int dst_core_buffer(DstArgs args) { int32_t i; DstBuffer *b = dst_buffer(0); for (i = 0; i < args.n; ++i) { @@ -150,7 +155,7 @@ int dst_core_buffer(DstArgs args) { DST_RETURN_BUFFER(args, b); } -int dst_core_scannumber(DstArgs args) { +static int dst_core_scannumber(DstArgs args) { const uint8_t *data; Dst x; int32_t len; @@ -163,7 +168,7 @@ int dst_core_scannumber(DstArgs args) { DST_RETURN(args, x); } -int dst_core_scaninteger(DstArgs args) { +static int dst_core_scaninteger(DstArgs args) { const uint8_t *data; int32_t len, ret; int err = 0; @@ -176,7 +181,7 @@ int dst_core_scaninteger(DstArgs args) { DST_RETURN_INTEGER(args, ret); } -int dst_core_scanreal(DstArgs args) { +static int dst_core_scanreal(DstArgs args) { const uint8_t *data; int32_t len; double ret; @@ -190,18 +195,18 @@ int dst_core_scanreal(DstArgs args) { DST_RETURN_REAL(args, ret); } -int dst_core_tuple(DstArgs args) { +static int dst_core_tuple(DstArgs args) { DST_RETURN_TUPLE(args, dst_tuple_n(args.v, args.n)); } -int dst_core_array(DstArgs args) { +static int dst_core_array(DstArgs args) { DstArray *array = dst_array(args.n); array->count = args.n; memcpy(array->data, args.v, args.n * sizeof(Dst)); DST_RETURN_ARRAY(args, array); } -int dst_core_table(DstArgs args) { +static int dst_core_table(DstArgs args) { int32_t i; DstTable *table = dst_table(args.n >> 1); if (args.n & 1) @@ -212,7 +217,7 @@ int dst_core_table(DstArgs args) { DST_RETURN_TABLE(args, table); } -int dst_core_struct(DstArgs args) { +static int dst_core_struct(DstArgs args) { int32_t i; DstKV *st = dst_struct_begin(args.n >> 1); if (args.n & 1) @@ -223,18 +228,18 @@ int dst_core_struct(DstArgs args) { DST_RETURN_STRUCT(args, dst_struct_end(st)); } -int dst_core_gensym(DstArgs args) { +static int dst_core_gensym(DstArgs args) { DST_FIXARITY(args, 0); DST_RETURN_SYMBOL(args, dst_symbol_gen()); } -int dst_core_gccollect(DstArgs args) { +static int dst_core_gccollect(DstArgs args) { (void) args; dst_collect(); return 0; } -int dst_core_gcsetinterval(DstArgs args) { +static int dst_core_gcsetinterval(DstArgs args) { int32_t val; DST_FIXARITY(args, 1); DST_ARG_INTEGER(val, args, 0); @@ -244,12 +249,12 @@ int dst_core_gcsetinterval(DstArgs args) { DST_RETURN_NIL(args); } -int dst_core_gcinterval(DstArgs args) { +static int dst_core_gcinterval(DstArgs args) { DST_FIXARITY(args, 0); DST_RETURN_INTEGER(args, dst_vm_gc_interval); } -int dst_core_type(DstArgs args) { +static int dst_core_type(DstArgs args) { DST_FIXARITY(args, 1); if (dst_checktype(args.v[0], DST_ABSTRACT)) { DST_RETURN(args, dst_csymbolv(dst_abstract_type(dst_unwrap_abstract(args.v[0]))->name)); @@ -258,7 +263,7 @@ int dst_core_type(DstArgs args) { } } -int dst_core_next(DstArgs args) { +static int dst_core_next(DstArgs args) { Dst ds; const DstKV *kv; DST_FIXARITY(args, 2); @@ -283,13 +288,15 @@ int dst_core_next(DstArgs args) { DST_RETURN_NIL(args); } -int dst_core_hash(DstArgs args) { +static int dst_core_hash(DstArgs args) { DST_FIXARITY(args, 1); DST_RETURN_INTEGER(args, dst_hash(args.v[0])); } static const DstReg cfuns[] = { +#ifdef DST_DYNAMIC_MODULES {"native", dst_core_native}, +#endif {"print", dst_core_print}, {"describe", dst_core_describe}, {"string", dst_core_string}, diff --git a/src/core/corelib.h b/src/core/corelib.h deleted file mode 100644 index 880b7ee6..00000000 --- a/src/core/corelib.h +++ /dev/null @@ -1,26 +0,0 @@ -/* -* Copyright (c) 2018 Calvin Rose -* -* Permission is hereby granted, free of charge, to any person obtaining a copy -* of this software and associated documentation files (the "Software"), to -* deal in the Software without restriction, including without limitation the -* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -* sell copies of the Software, and to permit persons to whom the Software is -* furnished to do so, subject to the following conditions: -* -* The above copyright notice and this permission notice shall be included in -* all copies or substantial portions of the Software. -* -* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -* IN THE SOFTWARE. -*/ - -#ifndef DST_CORELIB_H -#define DST_CORELIB_H - -#endif diff --git a/src/include/dst/dst.h b/src/include/dst/dst.h index 65dce48c..aeefaf34 100644 --- a/src/include/dst/dst.h +++ b/src/include/dst/dst.h @@ -104,6 +104,11 @@ extern "C" { #define DST_THREAD_LOCAL #endif +/* Enable or disbale dynamic module loading. Enabled by default. */ +#ifndef DST_NO_DYNAMIC_MODULES +#define DST_DYNAMIC_MODULES +#endif + /* Handle runtime errors */ #ifndef dst_exit #include