implementing mod-ffi

This commit is contained in:
2020-12-17 10:12:57 +00:00
parent 214c2bee3a
commit 49efdd3caf
12 changed files with 1463 additions and 23 deletions

View File

@ -199,6 +199,10 @@ libhawk_la_SOURCES += \
mod-sys.c mod-sys.h
libhawk_la_LIBADD += $(SOCKET_LIBS)
if ENABLE_MOD_FFI
libhawk_la_LIBADD += ../mod/libhawk-ffi.la
endif
if ENABLE_MOD_MYSQL
libhawk_la_LIBADD += ../mod/libhawk-mysql.la
endif

View File

@ -106,12 +106,13 @@ host_triplet = @host@
@ENABLE_STATIC_MODULE_TRUE@ mod-sys.c mod-sys.h
@ENABLE_STATIC_MODULE_TRUE@am__append_10 = $(SOCKET_LIBS)
@ENABLE_MOD_MYSQL_TRUE@@ENABLE_STATIC_MODULE_TRUE@am__append_11 = ../mod/libhawk-mysql.la
@ENABLE_MOD_UCI_TRUE@@ENABLE_STATIC_MODULE_TRUE@am__append_12 = ../mod/libhawk-uci.la
@ENABLE_MOD_FFI_TRUE@@ENABLE_STATIC_MODULE_TRUE@am__append_11 = ../mod/libhawk-ffi.la
@ENABLE_MOD_MYSQL_TRUE@@ENABLE_STATIC_MODULE_TRUE@am__append_12 = ../mod/libhawk-mysql.la
@ENABLE_MOD_UCI_TRUE@@ENABLE_STATIC_MODULE_TRUE@am__append_13 = ../mod/libhawk-uci.la
#pkglibdir = $(libdir)
#pkglib_LTLIBRARIES =
@ENABLE_STATIC_MODULE_FALSE@am__append_13 = libhawk-hawk.la \
@ENABLE_STATIC_MODULE_FALSE@am__append_14 = libhawk-hawk.la \
@ENABLE_STATIC_MODULE_FALSE@ libhawk-math.la libhawk-str.la \
@ENABLE_STATIC_MODULE_FALSE@ libhawk-sys.la
subdir = lib
@ -225,7 +226,7 @@ libhawk_sys_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
libhawk_la_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3) \
$(am__DEPENDENCIES_4) $(am__DEPENDENCIES_5) $(am__append_11) \
$(am__append_12)
$(am__append_12) $(am__append_13)
am__libhawk_la_SOURCES_DIST = hawk.h hawk-arr.h hawk-chr.h hawk-cmn.h \
hawk-dir.h hawk-ecs.h hawk-fmt.h hawk-gem.h hawk-htb.h \
hawk-map.h hawk-rbt.h hawk-pack1.h hawk-utl.h hawk-std.h \
@ -597,7 +598,7 @@ pkginclude_HEADERS = hawk.h hawk-arr.h hawk-chr.h hawk-cmn.h \
hawk-dir.h hawk-ecs.h hawk-fmt.h hawk-gem.h hawk-htb.h \
hawk-map.h hawk-rbt.h hawk-pack1.h hawk-utl.h hawk-std.h \
hawk-tre.h hawk-unpack.h hawk-xma.h $(am__append_7)
pkglib_LTLIBRARIES = libhawk.la $(am__append_13)
pkglib_LTLIBRARIES = libhawk.la $(am__append_14)
libhawk_la_SOURCES = $(pkginclude_HEADERS) arr.c chr.c dir.c ecs-imp.h \
ecs.c err-prv.h err.c err-sys.c fmt-imp.h fmt.c fnc-prv.h \
fnc.c htb.c gem.c gem-skad.c gem-nwif.c gem-nwif2.c hawk-prv.h \
@ -619,7 +620,7 @@ libhawk_la_CXXFLAGS = $(CXXFLAGS_ALL_COMMON)
libhawk_la_LDFLAGS = $(LDFLAGS_ALL_COMMON) -version-info 1:0:0 -no-undefined
libhawk_la_LIBADD = $(LIBM) $(SOCKET_LIBS) $(am__append_4) \
$(am__append_5) $(am__append_6) $(am__append_10) \
$(am__append_11) $(am__append_12)
$(am__append_11) $(am__append_12) $(am__append_13)
@ENABLE_CXX_FALSE@libhawk_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
@ENABLE_CXX_FALSE@ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) \
@ENABLE_CXX_FALSE@ $(CFLAGS) $(libhawk_la_LDFLAGS) $(LDFLAGS) -o $@

View File

@ -693,6 +693,9 @@
/* use libunwind for backtracing stack frames */
#undef HAWK_ENABLE_LIBUNWIND
/* build mod/ffi */
#undef HAWK_ENABLE_MOD_FFI
/* build mod/mysql */
#undef HAWK_ENABLE_MOD_MYSQL

View File

@ -608,3 +608,32 @@ int hawk_buildrex (hawk_t* hawk, const hawk_ooch_t* ptn, hawk_oow_t len, hawk_tr
{
return hawk_gem_buildrex(hawk_getgem(hawk), ptn, len, !(hawk->opt.trait & HAWK_REXBOUND), code, icode);
}
/* ------------------------------------------------------------------------ */
int hawk_finmodsymfnc (hawk_t* hawk, hawk_mod_fnc_tab_t* fnctab, hawk_oow_t count, const hawk_ooch_t* name, hawk_oow_t namelen, hawk_mod_sym_t* sym)
{
int n;
/* binary search */
/* [NOTE] this algorithm is underflow safe with hawk_oow_t types */
hawk_oow_t base, mid, lim;
for (base = 0, lim = count; lim > 0; lim >>= 1)
{
mid = base + (lim >> 1);
n = hawk_comp_oochars_oocstr(name, namelen, fnctab[mid].name);
if (n == 0)
{
sym->type = HAWK_MOD_FNC;
sym->u.fnc = fnctab[mid].info;
return 0;
}
if (n > 0) { base = mid + 1; lim--; }
}
hawk_seterrbfmt (hawk, HAWK_NULL, HAWK_ENOENT, "'%js' not found", name);
return -1;
}

View File

@ -1046,6 +1046,14 @@ struct hawk_mod_sym_t
} u;
};
/* ------------------------------------------------------------------------ */
typedef struct hawk_mod_fnc_tab_t hawk_mod_fnc_tab_t;
struct hawk_mod_fnc_tab_t
{
const hawk_ooch_t* name;
hawk_mod_sym_fnc_t info;
};
/* ------------------------------------------------------------------------ */

View File

@ -7373,6 +7373,10 @@ int hawk_putsrcoochars (hawk_t* hawk, const hawk_ooch_t* str, hawk_oow_t len)
#include "mod-str.h"
#include "mod-sys.h"
#if defined(HAWK_ENABLE_MOD_FFI)
#include "../mod/mod-ffi.h"
#endif
#if defined(HAWK_ENABLE_MOD_MYSQL)
#include "../mod/mod-mysql.h"
#endif