diff options
| author | Mike Pall <mike> | 2012-09-28 17:29:17 +0200 |
|---|---|---|
| committer | Mike Pall <mike> | 2012-09-28 17:29:17 +0200 |
| commit | 26841296ab9e5f6d5df1a720e185334d5e84936b (patch) | |
| tree | 69e6c9cec73988b8341b6518166a5f93dfc4323f /src | |
| parent | e013206dd845861c2e27766ada75a98501033cfd (diff) | |
| download | luajit-26841296ab9e5f6d5df1a720e185334d5e84936b.tar.gz luajit-26841296ab9e5f6d5df1a720e185334d5e84936b.tar.bz2 luajit-26841296ab9e5f6d5df1a720e185334d5e84936b.zip | |
From Lua 5.2: Add table.pack(). Needs -DLUAJIT_ENABLE_LUA52COMPAT.
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib_table.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/lib_table.c b/src/lib_table.c index 25894eb0..00374c60 100644 --- a/src/lib_table.c +++ b/src/lib_table.c | |||
| @@ -266,6 +266,24 @@ LJLIB_CF(table_sort) | |||
| 266 | return 0; | 266 | return 0; |
| 267 | } | 267 | } |
| 268 | 268 | ||
| 269 | #if LJ_52 | ||
| 270 | LJLIB_PUSH("n") | ||
| 271 | LJLIB_CF(table_pack) | ||
| 272 | { | ||
| 273 | TValue *array, *base = L->base; | ||
| 274 | MSize i, n = (uint32_t)(L->top - base); | ||
| 275 | GCtab *t = lj_tab_new(L, n ? n+1 : 0, 1); | ||
| 276 | /* NOBARRIER: The table is new (marked white). */ | ||
| 277 | setintV(lj_tab_setstr(L, t, strV(lj_lib_upvalue(L, 1))), (int32_t)n); | ||
| 278 | for (array = tvref(t->array) + 1, i = 0; i < n; i++) | ||
| 279 | copyTV(L, &array[i], &base[i]); | ||
| 280 | settabV(L, base, t); | ||
| 281 | L->top = base+1; | ||
| 282 | lj_gc_check(L); | ||
| 283 | return 1; | ||
| 284 | } | ||
| 285 | #endif | ||
| 286 | |||
| 269 | /* ------------------------------------------------------------------------ */ | 287 | /* ------------------------------------------------------------------------ */ |
| 270 | 288 | ||
| 271 | #include "lj_libdef.h" | 289 | #include "lj_libdef.h" |
