-
Notifications
You must be signed in to change notification settings - Fork 197
Expand file tree
/
Copy pathcomprehension.lua
More file actions
54 lines (54 loc) · 1.25 KB
/
Copy pathcomprehension.lua
File metadata and controls
54 lines (54 loc) · 1.25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
local is_value
is_value = require("moonscript.types").is_value
local construct_comprehension
construct_comprehension = function(inner, clauses)
local current_stms = inner
for i = #clauses, 1, -1 do
local clause = clauses[i]
local t = clause[1]
local _exp_0 = t
if "for" == _exp_0 then
local _, name, bounds
_, name, bounds = clause[1], clause[2], clause[3]
current_stms = {
"for",
name,
bounds,
current_stms
}
elseif "foreach" == _exp_0 then
local _, names, iter
_, names, iter = clause[1], clause[2], clause[3]
current_stms = {
"foreach",
names,
{
iter
},
current_stms
}
elseif "when" == _exp_0 then
local _, cond
_, cond = clause[1], clause[2]
current_stms = {
"if",
cond,
current_stms
}
else
current_stms = error("Unknown comprehension clause: " .. t)
end
current_stms = {
current_stms
}
end
return current_stms[1]
end
local comprehension_has_value
comprehension_has_value = function(comp)
return is_value(comp[2])
end
return {
construct_comprehension = construct_comprehension,
comprehension_has_value = comprehension_has_value
}