/* Register module */ LUA_API int luaopen_python(lua_State *L) { lua_Object python = lua_createtable(L); set_table_string(L, python, PY_UNICODE_ENCODING, "utf8"); set_table_string(L, python, PY_UNICODE_ENCODING_ERRORHANDLER, "strict"); set_table_number(L, python, PY_OBJECT_BY_REFERENCE, 0); set_table_number(L, python, PY_API_IS_EMBEDDED, 0); // If Python is inside Lua set_table_number(L, python, PY_LUA_TABLE_CONVERT, 0); // table convert ? lua_pushcfunction(L, py_args); lua_setglobal(L, PY_ARGS_FUNC); lua_pushcfunction(L, py_kwargs); lua_setglobal(L, PY_KWARGS_FUNC); lua_pushcfunction(L, py_args_array); lua_setglobal(L, PY_ARGS_ARRAY_FUNC); lua_pushobject(L, python); lua_setglobal(L, PY_API_NAME); // api python int index = 0; while (py_lib[index].name) { set_table_fn(L, python, py_lib[index].name, py_lib[index].func); index++; } // register all tag methods int ntag = lua_newtag(L); index = 0; while (lua_tag_methods[index].name) { lua_pushcfunction(L, lua_tag_methods[index].func); lua_settagmethod(L, ntag, lua_tag_methods[index].name); index++; } // tag event set_table_number(L, python, PY_API_TAG, ntag); PyObject *pyObject = Py_True; Py_INCREF(pyObject); set_table_usertag(L, python, PY_TRUE, py_object_container(L, pyObject, 0), ntag); pyObject = Py_False; Py_INCREF(pyObject); set_table_usertag(L, python, PY_FALSE, py_object_container(L, pyObject, 0), ntag); pyObject = Py_None; Py_INCREF(pyObject); set_table_usertag(L, python, PY_NONE, py_object_container(L, pyObject, 0), ntag); return 0; }
/* * Set default values to program's options. */ void init_options(void) { lua_newtable(lua); set_table_boolean("certificates", 1); set_table_boolean("crammd5", 1); set_table_boolean("create", 0); set_table_boolean("expunge", 1); set_table_number("keepalive", 29); set_table_boolean("namespace", 1); set_table_string("recover", "all"); set_table_boolean("starttls", 1); set_table_boolean("subscribe", 0); set_table_number("timeout", 60); lua_setglobal(lua, "options"); }
static int py_convert_custom(lua_State *L, PyObject *pobj, int asindx) { Py_INCREF(pobj); Py_INCREF(pobj); lua_Object ltable = lua_createtable(L); set_table_userdata(L, ltable, POBJECT, pobj); set_table_number(L, ltable, ASINDX, asindx); // register all tag methods int tag = get_base_tag(L); lua_pushobject(L, ltable); lua_settag(L, tag); // returning table lua_pushobject(L, ltable); return 1; }
/* * Return PCRE available compile and exec flags. */ static int ifre_flags(lua_State *lua) { if (lua_gettop(lua) != 0) luaL_error(lua, "wrong number of arguments"); lua_newtable(lua); #ifdef PCRE_CASELESS set_table_number("CASELESS", PCRE_CASELESS); #endif #ifdef PCRE_MULTILINE set_table_number("MULTILINE", PCRE_MULTILINE); #endif #ifdef PCRE_DOTALL set_table_number("DOTALL", PCRE_DOTALL); #endif #ifdef PCRE_EXTENDED set_table_number("EXTENDED", PCRE_EXTENDED); #endif #ifdef PCRE_ANCHORED set_table_number("ANCHORED", PCRE_ANCHORED); #endif #ifdef PCRE_DOLLAR_ENDONLY set_table_number("DOLLAR_ENDONLY", PCRE_DOLLAR_ENDONLY); #endif #ifdef PCRE_EXTRA set_table_number("EXTRA", PCRE_EXTRA); #endif #ifdef PCRE_NOTBOL set_table_number("NOTBOL", PCRE_NOTBOL); #endif #ifdef PCRE_NOTEOL set_table_number("NOTEOL", PCRE_NOTEOL); #endif #ifdef PCRE_UNGREEDY set_table_number("UNGREEDY", PCRE_UNGREEDY); #endif #ifdef PCRE_NOTEMPTY set_table_number("NOTEMPTY", PCRE_NOTEMPTY); #endif #ifdef PCRE_UTF8 set_table_number("UTF8", PCRE_UTF8); #endif #ifdef PCRE_NO_AUTO_CAPTURE set_table_number("NO_AUTO_CAPTURE", PCRE_NO_AUTO_CAPTURE); #endif #ifdef PCRE_NO_UTF8_CHECK set_table_number("NO_UTF8_CHECK", PCRE_NO_UTF8_CHECK); #endif #ifdef PCRE_FIRSTLINE set_table_number("FIRSTLINE", PCRE_FIRSTLINE); #endif #ifdef PCRE_AUTO_CALLOUT set_table_number("AUTO_CALLOUT", PCRE_AUTO_CALLOUT); #endif #ifdef PCRE_PARTIAL set_table_number("PARTIAL", PCRE_PARTIAL); #endif #ifdef PCRE_DFA_SHORTEST set_table_number("DFA_SHORTEST", PCRE_DFA_SHORTEST); #endif #ifdef PCRE_DFA_RESTART set_table_number("DFA_RESTART", PCRE_DFA_RESTART); #endif #ifdef PCRE_FIRSTLINE set_table_number("FIRSTLINE", PCRE_FIRSTLINE); #endif #ifdef PCRE_DUPNAMES set_table_number("DUPNAMES", PCRE_DUPNAMES); #endif #ifdef PCRE_NEWLINE_CR set_table_number("NEWLINE_CR)", PCRE_NEWLINE_CR); #endif #ifdef PCRE_NEWLINE_LF set_table_number("NEWLINE_LF", PCRE_NEWLINE_LF); #endif #ifdef PCRE_NEWLINE_CRLF set_table_number("NEWLINE_CRLF", PCRE_NEWLINE_CRLF); #endif #ifdef PCRE_NEWLINE_ANY set_table_number("NEWLINE_ANY", PCRE_NEWLINE_ANY); #endif #ifdef PCRE_NEWLINE_ANYCRLF set_table_number("NEWLINE_ANYCRLF", PCRE_NEWLINE_ANYCRLF); #endif return 1; }