Lines Matching refs:L

19 #define aux_getn(L,n)	(luaL_checktype(L, n, LUA_TTABLE), luaL_getn(L, n))  argument
22 static int foreachi (lua_State *L) { in foreachi() argument
24 int n = aux_getn(L, 1); in foreachi()
25 luaL_checktype(L, 2, LUA_TFUNCTION); in foreachi()
27 lua_pushvalue(L, 2); /* function */ in foreachi()
28 lua_pushinteger(L, i); /* 1st argument */ in foreachi()
29 lua_rawgeti(L, 1, i); /* 2nd argument */ in foreachi()
30 lua_call(L, 2, 1); in foreachi()
31 if (!lua_isnil(L, -1)) in foreachi()
33 lua_pop(L, 1); /* remove nil result */ in foreachi()
39 static int foreach (lua_State *L) { in foreach() argument
40 luaL_checktype(L, 1, LUA_TTABLE); in foreach()
41 luaL_checktype(L, 2, LUA_TFUNCTION); in foreach()
42 lua_pushnil(L); /* first key */ in foreach()
43 while (lua_next(L, 1)) { in foreach()
44 lua_pushvalue(L, 2); /* function */ in foreach()
45 lua_pushvalue(L, -3); /* key */ in foreach()
46 lua_pushvalue(L, -3); /* value */ in foreach()
47 lua_call(L, 2, 1); in foreach()
48 if (!lua_isnil(L, -1)) in foreach()
50 lua_pop(L, 2); /* remove value and result */ in foreach()
56 static int maxn (lua_State *L) { in maxn() argument
58 luaL_checktype(L, 1, LUA_TTABLE); in maxn()
59 lua_pushnil(L); /* first key */ in maxn()
60 while (lua_next(L, 1)) { in maxn()
61 lua_pop(L, 1); /* remove value */ in maxn()
62 if (lua_type(L, -1) == LUA_TNUMBER) { in maxn()
63 lua_Number v = lua_tonumber(L, -1); in maxn()
67 lua_pushnumber(L, max); in maxn()
72 static int getn (lua_State *L) { in getn() argument
73 lua_pushinteger(L, aux_getn(L, 1)); in getn()
78 static int setn (lua_State *L) { in setn() argument
79 luaL_checktype(L, 1, LUA_TTABLE); in setn()
81 luaL_setn(L, 1, luaL_checkint(L, 2)); in setn()
83 luaL_error(L, LUA_QL("setn") " is obsolete"); in setn()
85 lua_pushvalue(L, 1); in setn()
90 static int tinsert (lua_State *L) { in tinsert() argument
91 int e = aux_getn(L, 1) + 1; /* first empty element */ in tinsert()
93 switch (lua_gettop(L)) { in tinsert()
100 pos = luaL_checkint(L, 2); /* 2nd argument is the position */ in tinsert()
103 lua_rawgeti(L, 1, i-1); in tinsert()
104 lua_rawseti(L, 1, i); /* t[i] = t[i-1] */ in tinsert()
109 return luaL_error(L, "wrong number of arguments to " LUA_QL("insert")); in tinsert()
112 luaL_setn(L, 1, e); /* new size */ in tinsert()
113 lua_rawseti(L, 1, pos); /* t[pos] = v */ in tinsert()
118 static int tremove (lua_State *L) { in tremove() argument
119 int e = aux_getn(L, 1); in tremove()
120 int pos = luaL_optint(L, 2, e); in tremove()
123 luaL_setn(L, 1, e - 1); /* t.n = n-1 */ in tremove()
124 lua_rawgeti(L, 1, pos); /* result = t[pos] */ in tremove()
126 lua_rawgeti(L, 1, pos+1); in tremove()
127 lua_rawseti(L, 1, pos); /* t[pos] = t[pos+1] */ in tremove()
129 lua_pushnil(L); in tremove()
130 lua_rawseti(L, 1, e); /* t[e] = nil */ in tremove()
135 static void addfield (lua_State *L, luaL_Buffer *b, int i) { in addfield() argument
136 lua_rawgeti(L, 1, i); in addfield()
137 if (!lua_isstring(L, -1)) in addfield()
138 luaL_error(L, "invalid value (%s) at index %d in table for " in addfield()
139 LUA_QL("concat"), luaL_typename(L, -1), i); in addfield()
144 static int tconcat (lua_State *L) { in tconcat() argument
148 const char *sep = luaL_optlstring(L, 2, "", &lsep); in tconcat()
149 luaL_checktype(L, 1, LUA_TTABLE); in tconcat()
150 i = luaL_optint(L, 3, 1); in tconcat()
151 last = luaL_opt(L, luaL_checkint, 4, luaL_getn(L, 1)); in tconcat()
152 luaL_buffinit(L, &b); in tconcat()
154 addfield(L, &b, i); in tconcat()
158 addfield(L, &b, i); in tconcat()
173 static void set2 (lua_State *L, int i, int j) { in set2() argument
174 lua_rawseti(L, 1, i); in set2()
175 lua_rawseti(L, 1, j); in set2()
178 static int sort_comp (lua_State *L, int a, int b) { in sort_comp() argument
179 if (!lua_isnil(L, 2)) { /* function? */ in sort_comp()
181 lua_pushvalue(L, 2); in sort_comp()
182 lua_pushvalue(L, a-1); /* -1 to compensate function */ in sort_comp()
183 lua_pushvalue(L, b-2); /* -2 to compensate function and `a' */ in sort_comp()
184 lua_call(L, 2, 1); in sort_comp()
185 res = lua_toboolean(L, -1); in sort_comp()
186 lua_pop(L, 1); in sort_comp()
190 return lua_lessthan(L, a, b); in sort_comp()
193 static void auxsort (lua_State *L, int l, int u) { in auxsort() argument
197 lua_rawgeti(L, 1, l); in auxsort()
198 lua_rawgeti(L, 1, u); in auxsort()
199 if (sort_comp(L, -1, -2)) /* a[u] < a[l]? */ in auxsort()
200 set2(L, l, u); /* swap a[l] - a[u] */ in auxsort()
202 lua_pop(L, 2); in auxsort()
205 lua_rawgeti(L, 1, i); in auxsort()
206 lua_rawgeti(L, 1, l); in auxsort()
207 if (sort_comp(L, -2, -1)) /* a[i]<a[l]? */ in auxsort()
208 set2(L, i, l); in auxsort()
210 lua_pop(L, 1); /* remove a[l] */ in auxsort()
211 lua_rawgeti(L, 1, u); in auxsort()
212 if (sort_comp(L, -1, -2)) /* a[u]<a[i]? */ in auxsort()
213 set2(L, i, u); in auxsort()
215 lua_pop(L, 2); in auxsort()
218 lua_rawgeti(L, 1, i); /* Pivot */ in auxsort()
219 lua_pushvalue(L, -1); in auxsort()
220 lua_rawgeti(L, 1, u-1); in auxsort()
221 set2(L, i, u-1); in auxsort()
226 while (lua_rawgeti(L, 1, ++i), sort_comp(L, -1, -2)) { in auxsort()
227 if (i>u) luaL_error(L, "invalid order function for sorting"); in auxsort()
228 lua_pop(L, 1); /* remove a[i] */ in auxsort()
231 while (lua_rawgeti(L, 1, --j), sort_comp(L, -3, -1)) { in auxsort()
232 if (j<l) luaL_error(L, "invalid order function for sorting"); in auxsort()
233 lua_pop(L, 1); /* remove a[j] */ in auxsort()
236 lua_pop(L, 3); /* pop pivot, a[i], a[j] */ in auxsort()
239 set2(L, i, j); in auxsort()
241 lua_rawgeti(L, 1, u-1); in auxsort()
242 lua_rawgeti(L, 1, i); in auxsort()
243 set2(L, u-1, i); /* swap pivot (a[u-1]) with a[i] */ in auxsort()
252 auxsort(L, j, i); /* call recursively the smaller one */ in auxsort()
256 static int sort (lua_State *L) { in sort() argument
257 int n = aux_getn(L, 1); in sort()
258 luaL_checkstack(L, 40, ""); /* assume array is smaller than 2^40 */ in sort()
259 if (!lua_isnoneornil(L, 2)) /* is there a 2nd argument? */ in sort()
260 luaL_checktype(L, 2, LUA_TFUNCTION); in sort()
261 lua_settop(L, 2); /* make sure there is two arguments */ in sort()
262 auxsort(L, 1, n); in sort()
283 LUALIB_API int luaopen_table (lua_State *L) { in luaopen_table() argument
284 luaL_register(L, LUA_TABLIBNAME, tab_funcs); in luaopen_table()