diff options
| author | ruki <[email protected]> | 2015-04-30 15:16:35 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2015-04-30 15:16:35 +0800 |
| commit | b58ecc2194967e75375116db9ca782cdfe261022 (patch) | |
| tree | 87229347340351578fc44a8aeea69c3cb7812f28 /core/src | |
| parent | 84999518105e894be127ceb3237a3d260f23cda9 (diff) | |
add option module
Diffstat (limited to 'core/src')
| -rwxr-xr-x | core/src/xmake/machine.c | 26 | ||||
| -rwxr-xr-x | core/src/xmake/makefile | 3 | ||||
| -rw-r--r-- | core/src/xmake/string/prefix.h | 35 | ||||
| -rwxr-xr-x | core/src/xmake/string/startswith.c | 53 |
4 files changed, 112 insertions, 5 deletions
diff --git a/core/src/xmake/machine.c b/core/src/xmake/machine.c index aad8e358b..c4928e10d 100755 --- a/core/src/xmake/machine.c +++ b/core/src/xmake/machine.c @@ -49,6 +49,24 @@ typedef struct __xm_machine_impl_t }xm_machine_impl_t; /* ////////////////////////////////////////////////////////////////////////////////////// + * declaration + */ + +// the string functions +tb_int_t xm_string_startswith(lua_State* lua); + +/* ////////////////////////////////////////////////////////////////////////////////////// + * globals + */ + +// the string functions +static luaL_Reg const g_string_functions[] = +{ + { "startswith", xm_string_startswith } +, { tb_null, tb_null } +}; + +/* ////////////////////////////////////////////////////////////////////////////////////// * private implementation */ static tb_bool_t xm_machine_main_save_arguments(xm_machine_impl_t* impl, tb_int_t argc, tb_char_t** argv) @@ -184,12 +202,12 @@ xm_machine_ref_t xm_machine_init() // open lua libraries luaL_openlibs(impl->lua); - // TODO: bind lua interfaces - // ... + // bind string functions + luaL_register(impl->lua, "string", g_string_functions); // init namespace: xmake lua_newtable(impl->lua); - lua_setglobal(impl->lua, "xmake"); + lua_setglobal(impl->lua, "xmake"); // init verbose impl->verbose = tb_false; @@ -267,7 +285,7 @@ tb_int_t xm_machine_main(xm_machine_ref_t machine, tb_int_t argc, tb_char_t** ar if (impl->verbose) { lua_getglobal(impl->lua, "debug"); - lua_getfield(impl->lua, -1, "traceback"); + lua_getfield(impl->lua, -1, "traceback"); errfunc = -2; } diff --git a/core/src/xmake/makefile b/core/src/xmake/makefile index 394a48950..5c7228962 100755 --- a/core/src/xmake/makefile +++ b/core/src/xmake/makefile @@ -13,7 +13,8 @@ xmake_CONFIG = y # core files xmake_C_FILES += \ xmake \ - machine + machine \ + string/startswith # flags diff --git a/core/src/xmake/string/prefix.h b/core/src/xmake/string/prefix.h new file mode 100644 index 000000000..ef2779f9f --- /dev/null +++ b/core/src/xmake/string/prefix.h @@ -0,0 +1,35 @@ +/*!The Automatic Cross-platform Build Tool + * + * XMake is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2.1 of the License, or + * (at your option) any later version. + * + * XMake is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with XMake; + * If not, see <a href="http://www.gnu.org/licenses/"> http://www.gnu.org/licenses/</a> + * + * Copyright (C) 2009 - 2015, ruki All rights reserved. + * + * @author ruki + * @file prefix.h + * + */ +#ifndef XM_STRING_PREFIX_H +#define XM_STRING_PREFIX_H + +/* ////////////////////////////////////////////////////////////////////////////////////// + * includes + */ +#include "../prefix.h" +#include "luajit/luajit.h" + + +#endif + + diff --git a/core/src/xmake/string/startswith.c b/core/src/xmake/string/startswith.c new file mode 100755 index 000000000..b7516e129 --- /dev/null +++ b/core/src/xmake/string/startswith.c @@ -0,0 +1,53 @@ +/*!The Automatic Cross-platform Build Tool + * + * XMake is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2.1 of the License, or + * (at your option) any later version. + * + * XMake is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with XMake; + * If not, see <a href="http://www.gnu.org/licenses/"> http://www.gnu.org/licenses/</a> + * + * Copyright (C) 2009 - 2015, ruki All rights reserved. + * + * @author ruki + * @file startswith.c + * + */ + +/* ////////////////////////////////////////////////////////////////////////////////////// + * trace + */ +#define TB_TRACE_MODULE_NAME "startswith" +#define TB_TRACE_MODULE_DEBUG (0) + +/* ////////////////////////////////////////////////////////////////////////////////////// + * includes + */ +#include "prefix.h" + +/* ////////////////////////////////////////////////////////////////////////////////////// + * implementation + */ +tb_int_t xm_string_startswith(lua_State* lua) +{ + // check + tb_assert_and_check_return_val(lua, 0); + + // get the string and prefix + tb_char_t const* string = luaL_optstring(lua, 1, tb_null); + tb_char_t const* prefix = luaL_optstring(lua, 2, tb_null); + tb_check_return_val(string && prefix, 0); + + // done string:startswith(prefix) + lua_pushboolean(lua, !tb_strncmp(string, prefix, tb_strlen(prefix))); + + // ok + return 1; +} |
