summaryrefslogtreecommitdiffstats
path: root/fluent-bit/lib/luajit-3065c9/src/lj_lib.c
diff options
context:
space:
mode:
Diffstat (limited to 'fluent-bit/lib/luajit-3065c9/src/lj_lib.c')
-rw-r--r--fluent-bit/lib/luajit-3065c9/src/lj_lib.c359
1 files changed, 0 insertions, 359 deletions
diff --git a/fluent-bit/lib/luajit-3065c9/src/lj_lib.c b/fluent-bit/lib/luajit-3065c9/src/lj_lib.c
deleted file mode 100644
index 82a9e256..00000000
--- a/fluent-bit/lib/luajit-3065c9/src/lj_lib.c
+++ /dev/null
@@ -1,359 +0,0 @@
-/*
-** Library function support.
-** Copyright (C) 2005-2022 Mike Pall. See Copyright Notice in luajit.h
-*/
-
-#define lj_lib_c
-#define LUA_CORE
-
-#include "lauxlib.h"
-
-#include "lj_obj.h"
-#include "lj_gc.h"
-#include "lj_err.h"
-#include "lj_str.h"
-#include "lj_tab.h"
-#include "lj_func.h"
-#include "lj_bc.h"
-#include "lj_dispatch.h"
-#if LJ_HASFFI
-#include "lj_ctype.h"
-#endif
-#include "lj_vm.h"
-#include "lj_strscan.h"
-#include "lj_strfmt.h"
-#include "lj_lex.h"
-#include "lj_bcdump.h"
-#include "lj_lib.h"
-
-/* -- Library initialization ---------------------------------------------- */
-
-static GCtab *lib_create_table(lua_State *L, const char *libname, int hsize)
-{
- if (libname) {
- luaL_findtable(L, LUA_REGISTRYINDEX, "_LOADED", 16);
- lua_getfield(L, -1, libname);
- if (!tvistab(L->top-1)) {
- L->top--;
- if (luaL_findtable(L, LUA_GLOBALSINDEX, libname, hsize) != NULL)
- lj_err_callerv(L, LJ_ERR_BADMODN, libname);
- settabV(L, L->top, tabV(L->top-1));
- L->top++;
- lua_setfield(L, -3, libname); /* _LOADED[libname] = new table */
- }
- L->top--;
- settabV(L, L->top-1, tabV(L->top));
- } else {
- lua_createtable(L, 0, hsize);
- }
- return tabV(L->top-1);
-}
-
-static const uint8_t *lib_read_lfunc(lua_State *L, const uint8_t *p, GCtab *tab)
-{
- int len = *p++;
- GCstr *name = lj_str_new(L, (const char *)p, len);
- LexState ls;
- GCproto *pt;
- GCfunc *fn;
- memset(&ls, 0, sizeof(ls));
- ls.L = L;
- ls.p = (const char *)(p+len);
- ls.pe = (const char *)~(uintptr_t)0;
- ls.c = -1;
- ls.level = (BCDUMP_F_STRIP|(LJ_BE*BCDUMP_F_BE));
- ls.chunkname = name;
- pt = lj_bcread_proto(&ls);
- pt->firstline = ~(BCLine)0;
- fn = lj_func_newL_empty(L, pt, tabref(L->env));
- /* NOBARRIER: See below for common barrier. */
- setfuncV(L, lj_tab_setstr(L, tab, name), fn);
- return (const uint8_t *)ls.p;
-}
-
-void lj_lib_register(lua_State *L, const char *libname,
- const uint8_t *p, const lua_CFunction *cf)
-{
- GCtab *env = tabref(L->env);
- GCfunc *ofn = NULL;
- int ffid = *p++;
- BCIns *bcff = &L2GG(L)->bcff[*p++];
- GCtab *tab = lib_create_table(L, libname, *p++);
- ptrdiff_t tpos = L->top - L->base;
-
- /* Avoid barriers further down. */
- lj_gc_anybarriert(L, tab);
- tab->nomm = 0;
-
- for (;;) {
- uint32_t tag = *p++;
- MSize len = tag & LIBINIT_LENMASK;
- tag &= LIBINIT_TAGMASK;
- if (tag != LIBINIT_STRING) {
- const char *name;
- MSize nuv = (MSize)(L->top - L->base - tpos);
- GCfunc *fn = lj_func_newC(L, nuv, env);
- if (nuv) {
- L->top = L->base + tpos;
- memcpy(fn->c.upvalue, L->top, sizeof(TValue)*nuv);
- }
- fn->c.ffid = (uint8_t)(ffid++);
- name = (const char *)p;
- p += len;
- if (tag == LIBINIT_CF)
- setmref(fn->c.pc, &G(L)->bc_cfunc_int);
- else
- setmref(fn->c.pc, bcff++);
- if (tag == LIBINIT_ASM_)
- fn->c.f = ofn->c.f; /* Copy handler from previous function. */
- else
- fn->c.f = *cf++; /* Get cf or handler from C function table. */
- if (len) {
- /* NOBARRIER: See above for common barrier. */
- setfuncV(L, lj_tab_setstr(L, tab, lj_str_new(L, name, len)), fn);
- }
- ofn = fn;
- } else {
- switch (tag | len) {
- case LIBINIT_LUA:
- p = lib_read_lfunc(L, p, tab);
- break;
- case LIBINIT_SET:
- L->top -= 2;
- if (tvisstr(L->top+1) && strV(L->top+1)->len == 0)
- env = tabV(L->top);
- else /* NOBARRIER: See above for common barrier. */
- copyTV(L, lj_tab_set(L, tab, L->top+1), L->top);
- break;
- case LIBINIT_NUMBER:
- memcpy(&L->top->n, p, sizeof(double));
- L->top++;
- p += sizeof(double);
- break;
- case LIBINIT_COPY:
- copyTV(L, L->top, L->top - *p++);
- L->top++;
- break;
- case LIBINIT_LASTCL:
- setfuncV(L, L->top++, ofn);
- break;
- case LIBINIT_FFID:
- ffid++;
- break;
- case LIBINIT_END:
- return;
- default:
- setstrV(L, L->top++, lj_str_new(L, (const char *)p, len));
- p += len;
- break;
- }
- }
- }
-}
-
-/* Push internal function on the stack. */
-GCfunc *lj_lib_pushcc(lua_State *L, lua_CFunction f, int id, int n)
-{
- GCfunc *fn;
- lua_pushcclosure(L, f, n);
- fn = funcV(L->top-1);
- fn->c.ffid = (uint8_t)id;
- setmref(fn->c.pc, &G(L)->bc_cfunc_int);
- return fn;
-}
-
-void lj_lib_prereg(lua_State *L, const char *name, lua_CFunction f, GCtab *env)
-{
- luaL_findtable(L, LUA_REGISTRYINDEX, "_PRELOAD", 4);
- lua_pushcfunction(L, f);
- /* NOBARRIER: The function is new (marked white). */
- setgcref(funcV(L->top-1)->c.env, obj2gco(env));
- lua_setfield(L, -2, name);
- L->top--;
-}
-
-int lj_lib_postreg(lua_State *L, lua_CFunction cf, int id, const char *name)
-{
- GCfunc *fn = lj_lib_pushcf(L, cf, id);
- GCtab *t = tabref(curr_func(L)->c.env); /* Reference to parent table. */
- setfuncV(L, lj_tab_setstr(L, t, lj_str_newz(L, name)), fn);
- lj_gc_anybarriert(L, t);
- setfuncV(L, L->top++, fn);
- return 1;
-}
-
-/* -- Type checks --------------------------------------------------------- */
-
-TValue *lj_lib_checkany(lua_State *L, int narg)
-{
- TValue *o = L->base + narg-1;
- if (o >= L->top)
- lj_err_arg(L, narg, LJ_ERR_NOVAL);
- return o;
-}
-
-GCstr *lj_lib_checkstr(lua_State *L, int narg)
-{
- TValue *o = L->base + narg-1;
- if (o < L->top) {
- if (LJ_LIKELY(tvisstr(o))) {
- return strV(o);
- } else if (tvisnumber(o)) {
- GCstr *s = lj_strfmt_number(L, o);
- setstrV(L, o, s);
- return s;
- }
- }
- lj_err_argt(L, narg, LUA_TSTRING);
- return NULL; /* unreachable */
-}
-
-GCstr *lj_lib_optstr(lua_State *L, int narg)
-{
- TValue *o = L->base + narg-1;
- return (o < L->top && !tvisnil(o)) ? lj_lib_checkstr(L, narg) : NULL;
-}
-
-#if LJ_DUALNUM
-void lj_lib_checknumber(lua_State *L, int narg)
-{
- TValue *o = L->base + narg-1;
- if (!(o < L->top && lj_strscan_numberobj(o)))
- lj_err_argt(L, narg, LUA_TNUMBER);
-}
-#endif
-
-lua_Number lj_lib_checknum(lua_State *L, int narg)
-{
- TValue *o = L->base + narg-1;
- if (!(o < L->top &&
- (tvisnumber(o) || (tvisstr(o) && lj_strscan_num(strV(o), o)))))
- lj_err_argt(L, narg, LUA_TNUMBER);
- if (LJ_UNLIKELY(tvisint(o))) {
- lua_Number n = (lua_Number)intV(o);
- setnumV(o, n);
- return n;
- } else {
- return numV(o);
- }
-}
-
-int32_t lj_lib_checkint(lua_State *L, int narg)
-{
- TValue *o = L->base + narg-1;
- if (!(o < L->top && lj_strscan_numberobj(o)))
- lj_err_argt(L, narg, LUA_TNUMBER);
- if (LJ_LIKELY(tvisint(o))) {
- return intV(o);
- } else {
- int32_t i = lj_num2int(numV(o));
- if (LJ_DUALNUM) setintV(o, i);
- return i;
- }
-}
-
-int32_t lj_lib_optint(lua_State *L, int narg, int32_t def)
-{
- TValue *o = L->base + narg-1;
- return (o < L->top && !tvisnil(o)) ? lj_lib_checkint(L, narg) : def;
-}
-
-GCfunc *lj_lib_checkfunc(lua_State *L, int narg)
-{
- TValue *o = L->base + narg-1;
- if (!(o < L->top && tvisfunc(o)))
- lj_err_argt(L, narg, LUA_TFUNCTION);
- return funcV(o);
-}
-
-GCtab *lj_lib_checktab(lua_State *L, int narg)
-{
- TValue *o = L->base + narg-1;
- if (!(o < L->top && tvistab(o)))
- lj_err_argt(L, narg, LUA_TTABLE);
- return tabV(o);
-}
-
-GCtab *lj_lib_checktabornil(lua_State *L, int narg)
-{
- TValue *o = L->base + narg-1;
- if (o < L->top) {
- if (tvistab(o))
- return tabV(o);
- else if (tvisnil(o))
- return NULL;
- }
- lj_err_arg(L, narg, LJ_ERR_NOTABN);
- return NULL; /* unreachable */
-}
-
-int lj_lib_checkopt(lua_State *L, int narg, int def, const char *lst)
-{
- GCstr *s = def >= 0 ? lj_lib_optstr(L, narg) : lj_lib_checkstr(L, narg);
- if (s) {
- const char *opt = strdata(s);
- MSize len = s->len;
- int i;
- for (i = 0; *(const uint8_t *)lst; i++) {
- if (*(const uint8_t *)lst == len && memcmp(opt, lst+1, len) == 0)
- return i;
- lst += 1+*(const uint8_t *)lst;
- }
- lj_err_argv(L, narg, LJ_ERR_INVOPTM, opt);
- }
- return def;
-}
-
-/* -- Strict type checks -------------------------------------------------- */
-
-/* The following type checks do not coerce between strings and numbers.
-** And they handle plain int64_t/uint64_t FFI numbers, too.
-*/
-
-#if LJ_HASBUFFER
-GCstr *lj_lib_checkstrx(lua_State *L, int narg)
-{
- TValue *o = L->base + narg-1;
- if (!(o < L->top && tvisstr(o))) lj_err_argt(L, narg, LUA_TSTRING);
- return strV(o);
-}
-
-int32_t lj_lib_checkintrange(lua_State *L, int narg, int32_t a, int32_t b)
-{
- TValue *o = L->base + narg-1;
- lj_assertL(b >= 0, "expected range must be non-negative");
- if (o < L->top) {
- if (LJ_LIKELY(tvisint(o))) {
- int32_t i = intV(o);
- if (i >= a && i <= b) return i;
- } else if (LJ_LIKELY(tvisnum(o))) {
- /* For performance reasons, this doesn't check for integerness or
- ** integer overflow. Overflow detection still works, since all FPUs
- ** return either MININT or MAXINT, which is then out of range.
- */
- int32_t i = (int32_t)numV(o);
- if (i >= a && i <= b) return i;
-#if LJ_HASFFI
- } else if (tviscdata(o)) {
- GCcdata *cd = cdataV(o);
- if (cd->ctypeid == CTID_INT64) {
- int64_t i = *(int64_t *)cdataptr(cd);
- if (i >= (int64_t)a && i <= (int64_t)b) return (int32_t)i;
- } else if (cd->ctypeid == CTID_UINT64) {
- uint64_t i = *(uint64_t *)cdataptr(cd);
- if ((a < 0 || i >= (uint64_t)a) && i <= (uint64_t)b) return (int32_t)i;
- } else {
- goto badtype;
- }
-#endif
- } else {
- goto badtype;
- }
- lj_err_arg(L, narg, LJ_ERR_NUMRNG);
- }
-badtype:
- lj_err_argt(L, narg, LUA_TNUMBER);
- return 0; /* unreachable */
-}
-#endif
-