Skip to content

Commit e32f075

Browse files
committed
some debug method
1 parent e9c7f56 commit e32f075

File tree

2 files changed

+49
-0
lines changed

2 files changed

+49
-0
lines changed

moon/init.lua

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,33 @@ if not moon or not moon.inject then
22
module("moon", package.seeall)
33
end
44
local util = require("moonscript.util")
5+
local lua = {
6+
debug = debug
7+
}
58
dump = util.dump
9+
debug = {
10+
upvalue = function(fn, k, v)
11+
local upvalues = { }
12+
local i = 1
13+
while true do
14+
local name = lua.debug.getupvalue(fn, i)
15+
if name == nil then
16+
break
17+
end
18+
upvalues[name] = i
19+
i = i + 1
20+
end
21+
if not upvalues[k] then
22+
error("Failed to find upvalue: " .. tostring(k))
23+
end
24+
if not v then
25+
local _, value = lua.debug.getupvalue(fn, upvalues[k])
26+
return value
27+
else
28+
return lua.debug.setupvalue(fn, upvalues[k], v)
29+
end
30+
end
31+
}
632
run_with_scope = function(fn, scope, ...)
733
local old_env = getfenv(fn)
834
local env = setmetatable({ }, {

moon/init.moon

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,33 @@ if not moon or not moon.inject
44

55
util = require "moonscript.util"
66

7+
lua = { :debug }
8+
79
export *
810

911
dump = util.dump
1012

13+
debug = {
14+
upvalue: (fn, k, v) ->
15+
upvalues = {}
16+
i = 1
17+
while true
18+
name = lua.debug.getupvalue(fn, i)
19+
break if name == nil
20+
upvalues[name] = i
21+
i += 1
22+
23+
if not upvalues[k]
24+
error "Failed to find upvalue: " .. tostring k
25+
26+
if not v
27+
_, value = lua.debug.getupvalue fn, upvalues[k]
28+
value
29+
else
30+
lua.debug.setupvalue fn, upvalues[k], v
31+
}
32+
33+
1134
-- run a function with scope injected before its function environment
1235
run_with_scope = (fn, scope, ...) ->
1336
old_env = getfenv fn

0 commit comments

Comments
 (0)