Add loop operator in fcode #889

Open
zxq9 wants to merge 27 commits from loop-op into master
Showing only changes of commit e050618d7a - Show all commits

View File

@ -663,10 +663,12 @@ expr_to_fcode(Env, _Type, {app, _, {'..', _}, [A, B]}) ->
Init = {tuple, [nil, {var, AV}]}, Init = {tuple, [nil, {var, AV}]},
WithA(WithB( WithA(WithB(
{loop, Init, St, {loop, Init, St,
{'let', It, {proj, {var, St}, 2}, {'let', It, {proj, {var, St}, 1},
make_if({op, '=<', [{var, It}, {var, BV}]}, make_if({op, '=<', [{var, It}, {var, BV}]},
{continue, {tuple, [{op, '::', [{var, It}, {proj, {var, St}, 1}]}]}}, {continue, {tuple, [{op, '::', [{var, It}, {proj, {var, St}, 0}]},
{break, {proj, {var, St}, 2}} {op, '+', [{var, It}, {lit, {int, 1}}]}
]}},
{break, {proj, {var, St}, 0}}
)}})); )}}));
expr_to_fcode(Env, _Type, {list_comp, _, Yield, []}) -> expr_to_fcode(Env, _Type, {list_comp, _, Yield, []}) ->
{op, '::', [expr_to_fcode(Env, Yield), nil]}; {op, '::', [expr_to_fcode(Env, Yield), nil]};