diff options
author | Eduardo Julian | 2017-11-01 13:36:15 -0400 |
---|---|---|
committer | Eduardo Julian | 2017-11-01 13:36:15 -0400 |
commit | 88006e957373bbd72ec68897474303964885fc68 (patch) | |
tree | a34f88ea0921f56737c8881345245e11e7c8b546 /new-luxc/source/luxc/lang/synthesis/case.lux | |
parent | 012f6bd41e527479dddbccbdab10daa78fd9a0fd (diff) |
- Minor refactorings.
- Fixed some bugs.
- Enabled macro-expansion for statements.
Diffstat (limited to 'new-luxc/source/luxc/lang/synthesis/case.lux')
-rw-r--r-- | new-luxc/source/luxc/lang/synthesis/case.lux | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/new-luxc/source/luxc/lang/synthesis/case.lux b/new-luxc/source/luxc/lang/synthesis/case.lux index 15cb6eca3..e66bbf3a8 100644 --- a/new-luxc/source/luxc/lang/synthesis/case.lux +++ b/new-luxc/source/luxc/lang/synthesis/case.lux @@ -2,6 +2,7 @@ lux (lux (data [bool "bool/" Eq<Bool>] [text "text/" Eq<Text>] + text/format [number] (coll [list "list/" Fold<List>])) (meta [code "code/" Eq<Code>])) @@ -11,7 +12,7 @@ (def: #export (path pattern) (-> la;Pattern ls;Path) (case pattern - (^code [(~@ membersP)]) + (^code ("lux case tuple" [(~@ membersP)])) (case (list;reverse membersP) #;Nil (' ("lux case pop")) @@ -30,12 +31,16 @@ [(n.dec last-idx) (` ("lux case tuple right" (~ (code;nat last-idx)) (~ (path lastP))))] prevsP)] - tuple-path)) + (` ("lux case seq" + (~ tuple-path) + ("lux case pop"))))) - (^code ((~ [_ (#;Nat tag)]) (~ [_ (#;Nat num-tags)]) (~ memberP))) - (if (n.= (n.dec num-tags) tag) - (` ("lux case variant right" (~ (code;nat tag)) (~ (path memberP)))) - (` ("lux case variant left" (~ (code;nat tag)) (~ (path memberP))))) + (^code ("lux case variant" (~ [_ (#;Nat tag)]) (~ [_ (#;Nat num-tags)]) (~ memberP))) + (` ("lux case seq" + (~ (if (n.= (n.dec num-tags) tag) + (` ("lux case variant right" (~ (code;nat tag)) (~ (path memberP)))) + (` ("lux case variant left" (~ (code;nat tag)) (~ (path memberP)))))) + ("lux case pop"))) _ pattern)) |