File tree Expand file tree Collapse file tree 2 files changed +49
-0
lines changed
Expand file tree Collapse file tree 2 files changed +49
-0
lines changed Original file line number Diff line number Diff line change @@ -2,7 +2,33 @@ if not moon or not moon.inject then
22 module (" moon" , package.seeall )
33end
44local util = require (" moonscript.util" )
5+ local lua = {
6+ debug = debug
7+ }
58dump = 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+ }
632run_with_scope = function (fn , scope , ...)
733 local old_env = getfenv (fn )
834 local env = setmetatable ({ }, {
Original file line number Diff line number Diff line change @@ -4,10 +4,33 @@ if not moon or not moon.inject
44
55util = require " moonscript.util"
66
7+ lua = { : debug }
8+
79export *
810
911dump = 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
1235run_with_scope = ( fn, scope, ... ) ->
1336 old_env = getfenv fn
You can’t perform that action at this time.
0 commit comments