Added 'for (%k,%v) in ...' alias for 'for %k = %v in ...'
This commit is contained in:
parent
624fcdcc7e
commit
b3df63eb10
@ -79,7 +79,10 @@ immediately
|
|||||||
parse [%expression for %var in %start to %stop] as
|
parse [%expression for %var in %start to %stop] as
|
||||||
%expression for %var in %start to %stop via 1
|
%expression for %var in %start to %stop via 1
|
||||||
|
|
||||||
parse [%expression for %key = %value in %iterable] as
|
parse [..]
|
||||||
|
%expression for %key = %value in %iterable
|
||||||
|
%expression for (%key,%value) in %iterable
|
||||||
|
..as
|
||||||
result of
|
result of
|
||||||
%comprehension <- []
|
%comprehension <- []
|
||||||
for %key = %value in %iterable
|
for %key = %value in %iterable
|
||||||
@ -87,14 +90,20 @@ immediately
|
|||||||
return %comprehension
|
return %comprehension
|
||||||
|
|
||||||
# Dict comprehensions
|
# Dict comprehensions
|
||||||
parse [%key = %value for %item in %iterable] as
|
parse [..]
|
||||||
|
%key = %value for %item in %iterable
|
||||||
|
(%key,%value) for %item in %iterable
|
||||||
|
..as
|
||||||
result of
|
result of
|
||||||
%comprehension <- {}
|
%comprehension <- {}
|
||||||
for %item in %iterable
|
for %item in %iterable
|
||||||
%comprehension.%key <- %value
|
%comprehension.%key <- %value
|
||||||
return %comprehension
|
return %comprehension
|
||||||
|
|
||||||
parse [%key = %value for %src_key = %src_value in %iterable] as
|
parse [..]
|
||||||
|
%key = %value for %src_key = %src_value in %iterable
|
||||||
|
(%key,%value) for (%src_key,%src_value) in %iterable
|
||||||
|
..as
|
||||||
result of
|
result of
|
||||||
%comprehension <- {}
|
%comprehension <- {}
|
||||||
for %src_key = %src_value in %iterable
|
for %src_key = %src_value in %iterable
|
||||||
@ -133,7 +142,10 @@ immediately
|
|||||||
# Sorting
|
# Sorting
|
||||||
immediately
|
immediately
|
||||||
compile [sort %items] to: Lua "table.sort(\(%items as lua expr));"
|
compile [sort %items] to: Lua "table.sort(\(%items as lua expr));"
|
||||||
parse [sort %items by %item = %key_expr] as
|
parse [..]
|
||||||
|
sort %items by %item = %key_expr
|
||||||
|
sort %items by %item -> %key_expr
|
||||||
|
..as
|
||||||
do
|
do
|
||||||
%keys <- ({} with fallback %item -> %key_expr)
|
%keys <- ({} with fallback %item -> %key_expr)
|
||||||
lua> "table.sort(\%items, function(x,y) return \%keys[x] < \%keys[y] end)"
|
lua> "table.sort(\%items, function(x,y) return \%keys[x] < \%keys[y] end)"
|
||||||
@ -143,7 +155,10 @@ immediately
|
|||||||
%copy <- (% for % in %items)
|
%copy <- (% for % in %items)
|
||||||
sort %copy
|
sort %copy
|
||||||
return %copy
|
return %copy
|
||||||
action [%items sorted by %item = %key]
|
action [..]
|
||||||
|
%items sorted by %item = %key
|
||||||
|
%items sorted by %item -> %key
|
||||||
|
..
|
||||||
%copy <- (% for % in %items)
|
%copy <- (% for % in %items)
|
||||||
sort %copy by %item = %key
|
sort %copy by %item = %key
|
||||||
return %copy
|
return %copy
|
||||||
|
@ -76,10 +76,10 @@ immediately
|
|||||||
(function()
|
(function()
|
||||||
for \(%subtree as lua expr) in coroutine.wrap(function() \(%tree as lua expr):map(coroutine.yield) end) do
|
for \(%subtree as lua expr) in coroutine.wrap(function() \(%tree as lua expr):map(coroutine.yield) end) do
|
||||||
if \(%condition as lua expr) then
|
if \(%condition as lua expr) then
|
||||||
return true;
|
return true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
return false;
|
return false
|
||||||
end)()
|
end)()
|
||||||
|
|
||||||
# While loops
|
# While loops
|
||||||
@ -207,7 +207,10 @@ immediately
|
|||||||
|
|
||||||
# Dict iteration (lua's "pairs()")
|
# Dict iteration (lua's "pairs()")
|
||||||
immediately
|
immediately
|
||||||
compile [for %key = %value in %iterable %body] to
|
compile [..]
|
||||||
|
for %key = %value in %iterable %body
|
||||||
|
for (%key,%value) in %iterable %body
|
||||||
|
..to
|
||||||
# This uses Lua's approach of only allowing loop-scoped variables in a loop
|
# This uses Lua's approach of only allowing loop-scoped variables in a loop
|
||||||
assume (%key.type is "Var") or barf "Loop expected variable, not: \%key"
|
assume (%key.type is "Var") or barf "Loop expected variable, not: \%key"
|
||||||
assume (%value.type is "Var") or barf "Loop expected variable, not: \%value"
|
assume (%value.type is "Var") or barf "Loop expected variable, not: \%value"
|
||||||
|
@ -55,7 +55,6 @@ STDIN, STDOUT, STDERR = "/dev/fd/0", "/dev/fd/1", "/dev/fd/2"
|
|||||||
string.as_lua_id = (str)->
|
string.as_lua_id = (str)->
|
||||||
"_"..(str\gsub("%W", (c)-> if c == "_" then "__" else ("_%x")\format(c\byte!)))
|
"_"..(str\gsub("%W", (c)-> if c == "_" then "__" else ("_%x")\format(c\byte!)))
|
||||||
|
|
||||||
|
|
||||||
-- TODO:
|
-- TODO:
|
||||||
-- consider non-linear codegen, rather than doing thunks for things like comprehensions
|
-- consider non-linear codegen, rather than doing thunks for things like comprehensions
|
||||||
-- type checking?
|
-- type checking?
|
||||||
|
Loading…
Reference in New Issue
Block a user