Software /
code /
prosody
Annotate
util-src/compat.c @ 11640:51598e46e136
util.stanza: Simplify and make pretty-printing look nicer
I've had this color theme in a local debug module for some time and I
quite like it. The colors are from the XMPP logo.
Removes extra XML serialization implementation in favor of the standard
one. Also removes recursive str=str..more string building.
The new two-level gsub has the accumulator in C space so shouldn't be
too bad. The inner gsub calls use no callback, so should be fast and
not create all that much garbage.
No serious benchmarking has been done, but who cares if it looks nice?
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sat, 07 Nov 2020 22:09:46 +0100 |
parent | 9561:cfc7b2f7251e |
child | 12976:a187600ec7d6 |
rev | line source |
---|---|
9561
cfc7b2f7251e
util.xpcall, util.compat: Add non-hacky multi-argument xpcall() for Lua 5.1
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1 |
cfc7b2f7251e
util.xpcall, util.compat: Add non-hacky multi-argument xpcall() for Lua 5.1
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2 #include <lua.h> |
cfc7b2f7251e
util.xpcall, util.compat: Add non-hacky multi-argument xpcall() for Lua 5.1
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
3 #include <lauxlib.h> |
cfc7b2f7251e
util.xpcall, util.compat: Add non-hacky multi-argument xpcall() for Lua 5.1
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
4 |
cfc7b2f7251e
util.xpcall, util.compat: Add non-hacky multi-argument xpcall() for Lua 5.1
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5 |
cfc7b2f7251e
util.xpcall, util.compat: Add non-hacky multi-argument xpcall() for Lua 5.1
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
6 static int lc_xpcall (lua_State *L) { |
cfc7b2f7251e
util.xpcall, util.compat: Add non-hacky multi-argument xpcall() for Lua 5.1
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
7 int ret; |
cfc7b2f7251e
util.xpcall, util.compat: Add non-hacky multi-argument xpcall() for Lua 5.1
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
8 int n_arg = lua_gettop(L); |
cfc7b2f7251e
util.xpcall, util.compat: Add non-hacky multi-argument xpcall() for Lua 5.1
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
9 /* f, msgh, p1, p2... */ |
cfc7b2f7251e
util.xpcall, util.compat: Add non-hacky multi-argument xpcall() for Lua 5.1
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
10 luaL_argcheck(L, n_arg >= 2, 2, "value expected"); |
cfc7b2f7251e
util.xpcall, util.compat: Add non-hacky multi-argument xpcall() for Lua 5.1
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
11 lua_pushvalue(L, 1); /* f to top */ |
cfc7b2f7251e
util.xpcall, util.compat: Add non-hacky multi-argument xpcall() for Lua 5.1
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
12 lua_pushvalue(L, 2); /* msgh to top */ |
cfc7b2f7251e
util.xpcall, util.compat: Add non-hacky multi-argument xpcall() for Lua 5.1
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
13 lua_replace(L, 1); /* msgh to 1 */ |
cfc7b2f7251e
util.xpcall, util.compat: Add non-hacky multi-argument xpcall() for Lua 5.1
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
14 lua_replace(L, 2); /* f to 2 */ |
cfc7b2f7251e
util.xpcall, util.compat: Add non-hacky multi-argument xpcall() for Lua 5.1
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
15 /* msgh, f, p1, p2... */ |
cfc7b2f7251e
util.xpcall, util.compat: Add non-hacky multi-argument xpcall() for Lua 5.1
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
16 ret = lua_pcall(L, n_arg - 2, LUA_MULTRET, 1); |
cfc7b2f7251e
util.xpcall, util.compat: Add non-hacky multi-argument xpcall() for Lua 5.1
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
17 lua_pushboolean(L, ret == 0); |
cfc7b2f7251e
util.xpcall, util.compat: Add non-hacky multi-argument xpcall() for Lua 5.1
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
18 lua_replace(L, 1); |
cfc7b2f7251e
util.xpcall, util.compat: Add non-hacky multi-argument xpcall() for Lua 5.1
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
19 return lua_gettop(L); |
cfc7b2f7251e
util.xpcall, util.compat: Add non-hacky multi-argument xpcall() for Lua 5.1
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
20 } |
cfc7b2f7251e
util.xpcall, util.compat: Add non-hacky multi-argument xpcall() for Lua 5.1
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
21 |
cfc7b2f7251e
util.xpcall, util.compat: Add non-hacky multi-argument xpcall() for Lua 5.1
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
22 int luaopen_util_compat(lua_State *L) { |
cfc7b2f7251e
util.xpcall, util.compat: Add non-hacky multi-argument xpcall() for Lua 5.1
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
23 lua_createtable(L, 0, 2); |
cfc7b2f7251e
util.xpcall, util.compat: Add non-hacky multi-argument xpcall() for Lua 5.1
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
24 { |
cfc7b2f7251e
util.xpcall, util.compat: Add non-hacky multi-argument xpcall() for Lua 5.1
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
25 lua_pushcfunction(L, lc_xpcall); |
cfc7b2f7251e
util.xpcall, util.compat: Add non-hacky multi-argument xpcall() for Lua 5.1
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
26 lua_setfield(L, -2, "xpcall"); |
cfc7b2f7251e
util.xpcall, util.compat: Add non-hacky multi-argument xpcall() for Lua 5.1
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
27 } |
cfc7b2f7251e
util.xpcall, util.compat: Add non-hacky multi-argument xpcall() for Lua 5.1
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
28 return 1; |
cfc7b2f7251e
util.xpcall, util.compat: Add non-hacky multi-argument xpcall() for Lua 5.1
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
29 } |