aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/lux/tool
diff options
context:
space:
mode:
authorEduardo Julian2019-05-01 21:29:32 -0400
committerEduardo Julian2019-05-01 21:29:32 -0400
commit8f7fa3f0592aa33dcfbca8b5e978b0b9075cdd81 (patch)
tree6af64ccfba88d14c3bb934dc85704f8863f79306 /stdlib/source/lux/tool
parente95633dab5642d6ccc168b5389794ffa65f230b9 (diff)
Now using "block" instead of "tagbody".
Diffstat (limited to 'stdlib/source/lux/tool')
-rw-r--r--stdlib/source/lux/tool/compiler/phase/generation/common-lisp/case.lux38
1 files changed, 14 insertions, 24 deletions
diff --git a/stdlib/source/lux/tool/compiler/phase/generation/common-lisp/case.lux b/stdlib/source/lux/tool/compiler/phase/generation/common-lisp/case.lux
index 144c0236e..dd5b89e38 100644
--- a/stdlib/source/lux/tool/compiler/phase/generation/common-lisp/case.lux
+++ b/stdlib/source/lux/tool/compiler/phase/generation/common-lisp/case.lux
@@ -69,7 +69,6 @@
(def: @cursor (_.var "lux_pm_cursor"))
(def: @temp (_.var "lux_pm_temp"))
(def: @variant (_.var "lux_pm_variant"))
-(def: @return (_.var "lux_pm_return"))
(def: (push! value)
(-> (Expression Any) (Expression Any))
@@ -93,11 +92,10 @@
(_.setq @cursor (_.car/1 @savepoint))
(_.setq @savepoint (_.cdr/1 @savepoint))))
-(def: fail-tag (_.tag "lux_pm_fail"))
-(def: done-tag (_.tag "lux_pm_done"))
+(def: @fail (_.label "lux_pm_fail"))
+(def: @done (_.label "lux_pm_done"))
-(def: fail! (_.go ..fail-tag))
-(def: return! (_.go ..done-tag))
+(def: fail! (_.return-from ..@fail _.nil))
(exception: #export unrecognized-path)
@@ -126,23 +124,18 @@
(def: (alternation pre! post!)
(-> (Expression Any) (Expression Any) (Expression Any))
- (_.tagbody ($_ _.progn
- ..save!
- pre!)
- (list [fail-tag
- ($_ _.progn
- ..restore!
- post!)])))
+ (_.progn (<| (_.block ..@fail)
+ (_.progn ..save!)
+ pre!)
+ ($_ _.progn
+ ..restore!
+ post!)))
(def: (pattern-matching' generate pathP)
(-> Phase Path (Operation (Expression Any)))
(.case pathP
(^ (/////synthesis.path/then bodyS))
- (do ////.monad
- [bodyG (generate bodyS)]
- (wrap ($_ _.progn
- (_.setq @return bodyG)
- ..return!)))
+ (:: ////.monad map (_.return-from ..@done) (generate bodyS))
#/////synthesis.Pop
(////@wrap ..pop!)
@@ -204,13 +197,10 @@
(-> Phase Path (Operation (Expression Any)))
(do ////.monad
[pattern-matching! (pattern-matching' generate pathP)]
- (wrap ($_ _.progn
- (_.tagbody pattern-matching!
- (list [..fail-tag
- (_.error/1 (_.string "Invalid expression for pattern-matching."))]
- [..done-tag
- _.nil]))
- @return))))
+ (wrap (_.block ..@done
+ (_.progn (_.block ..@fail
+ pattern-matching!)
+ (_.error/1 (_.string case.pattern-matching-error)))))))
(def: #export (case generate [valueS pathP])
(-> Phase [Synthesis Path] (Operation (Expression Any)))