diff options
| author | Benoit Giannangeli <benoit.giannangeli@boursorama.fr> | 2017-03-06 07:34:00 +0100 | 
|---|---|---|
| committer | Benoit Giannangeli <benoit.giannangeli@boursorama.fr> | 2017-03-06 08:07:34 +0100 | 
| commit | d792a7dad54039074890d9d379eec8676cb9fa5a (patch) | |
| tree | 3bb2391b1a48f4fa460ab5f20f9f439b533c9e65 /src/lstrlib.js | |
| parent | 2ac8543dfd87f4c227385d6890bfcb011fc341f1 (diff) | |
| download | fengari-d792a7dad54039074890d9d379eec8676cb9fa5a.tar.gz fengari-d792a7dad54039074890d9d379eec8676cb9fa5a.tar.bz2 fengari-d792a7dad54039074890d9d379eec8676cb9fa5a.zip | |
string.char
Diffstat (limited to 'src/lstrlib.js')
| -rw-r--r-- | src/lstrlib.js | 22 | 
1 files changed, 18 insertions, 4 deletions
| diff --git a/src/lstrlib.js b/src/lstrlib.js index 194d6ba..69f634d 100644 --- a/src/lstrlib.js +++ b/src/lstrlib.js @@ -9,13 +9,25 @@ const CT      = lua.constant_types;  const TS      = lua.thread_status;  const str_len = function(L) { -    lauxlib.luaL_checkstring(L, 1); -    lapi.lua_pushinteger(L, lapi.lua_tostring(L, 1).length); +    lapi.lua_pushinteger(L, lauxlib.luaL_checkstring(L, 1).length); +    return 1; +}; + +const str_char = function(L) { +    let n = lapi.lua_gettop(L);  /* number of arguments */ +    let p = ""; +    for (let i = 1; i <= n; i++) { +        let c = lauxlib.luaL_checkinteger(L, i); +        lauxlib.luaL_argcheck(L, c >= 0 && c <= 255, "value out of range"); // Strings are 8-bit clean +        p += String.fromCharCode(c); +    } +    lapi.lua_pushstring(L, p);      return 1;  };  const strlib = { -    "len": str_len +    "len": str_len, +    "char": str_char  };  const createmetatable = function(L) { @@ -33,4 +45,6 @@ const luaopen_string = function(L) {      lauxlib.luaL_newlib(L, strlib);      createmetatable(L);      return 1; -};
\ No newline at end of file +}; + +module.exports.luaopen_string = luaopen_string;
\ No newline at end of file | 
