ref: 0bbf3b980b36941b018b7becc3427fe2e6315393
parent: f4365f7c4698a7c2251704fd8aa699bf21208af7
author: Lennart Augustsson <lennart.augustsson@epicgames.com>
date: Tue Sep 19 13:25:49 EDT 2023
Allow trailing , in export list
--- a/comb/mhs.comb
+++ b/comb/mhs.comb
@@ -1,3 +1,3 @@
v3.4
-836
-(($A :0 ((_632 _582) (($B ((($S' ($C ((($C' ($S' _632)) (($B ($C _2)) _565)) (($B ($B (_632 _661))) ((($C' ($C' $C)) ((($C' ($S' ($C' $C))) ((($C' ($C' ($C' $C))) ((($C' ($C' ($C' ($C' $S')))) (($B ($B ($B ($B $C)))) ((($C' ($C' ($C' $B))) (($B ($B ($B ($C' $S)))) ((($C' ($C' ($C' ($C' $C)))) ((($C' ($C' ($C' ($C' ($C' $S'))))) (($B ($B ($B ($B ($B $C))))) ((($C' ($C' ($C' ($C' ($C' $C))))) ((($C' ($C' ($C' $B))) (($B ($B ($B ($C' ($C' $S'))))) ((($C' ($C' ($C' ($C' ($C' $C'))))) ((($C' ($C' ($C' ($S' ($C' $C'))))) (($B ($B ($B ($B $B')))) ((($S' $B) ($B' ($B' (($B ($S' $B)) (($B ($B _633)) ((($C' $B) (($B _730) (($B _651) ((($C' _767) _8) 0)))) (($B (_730 _654)) (($B (_667 "top level defns: ")) _612)))))))) ((($S' $B) ($B' (($B ($C' $B)) (($B $B') (($B ($B _633)) ((($C' $B) (($B _730) (($B _651) ((($C' _767) _8) 1)))) (_650 ($T (($B ($B (_730 _654))) ((($C' $B) (($B _667) ((($C' _667) _571) " = "))) (($C _395) $K))))))))))) ((($C' $B) ((($S' $C') (($B $C') (($B $C') _9))) ((($S' $B) (($B ($C' ($C' _633))) ((($C' $B) ($B' (($B _730) (($B _656) _11)))) (($B _667) ((($C' _667) (($B (_667 _1)) _612)) (($O 10) $K)))))) (($B ($B (_632 _661))) ((($C' $B) ($B' (($B _730) (($B _651) ((($C' _767) _8) 0))))) (($B ($B (_730 _654))) ((($C' ($C' _667)) (($B ($B (_667 "final pass "))) (($B ($B (_626 6))) (($B ($B _612)) _761)))) "ms"))))))) _3))))) ((($C' ($C' $C)) (($B (($C' $C) (($B ($C _672)) _395))) (($C _685) (_701 0)))) $K))) (($B ($C $B)) (($B ($B ($C $B))) (($B ($B $BK)) (($B ($B (($C' $B) (($B _731) (($B _667) ((($C' _667) (($B (_667 "(($A :")) _612)) (($O 32) $K))))))) ((($C' $B) (($B ($C' _731)) ($B _395))) (($B (_731 (_667 ") "))) (($C _731) (_667 (($O 41) $K)))))))))))) $T)) (($B $Y) ((($C' ($C' $S)) ((($C' ($C' $S)) ((($C' $B) $P) ((($S' ($C' $B)) ($B _370)) $I))) ($BK $K))) $K))))) (($B (($S' _730) (($B _727) (($B (_730 _774)) (($B (_667 "main: findIdent: ")) _571))))) (($C' _601) _568)))) _608))) (($B ($B _605)) ((($C' $B) (($B _669) (($B $T) (($B ($C $B)) (($B ($B $BK)) ((($C' ($C' ($C' $O))) ($B (($C' $P) _568))) $K)))))) (($C _685) (_701 0))))))) ($T $A))) ($T $K))) $I)) (($B (_730 _369)) (($B (_730 _565)) (($B (_667 (($O 95) $K))) _612)))))))) (($S (($S ((($S' _7) (($B _684) (_671 (_624 "-v")))) ((_700 _624) "-r"))) (($B (_665 (($O 46) $K))) (($B _729) (_670 ((_689 _752) "-i")))))) (($B (_730 _696)) ((($C' _667) (($B _729) (_670 ((_689 _752) "-o")))) (($O "out.comb") $K))))) (($B (($S (($C ((($C' _763) _684) 1)) (_774 "Usage: mhs [-v] [-r] [-iPATH] [-oFILE] ModuleName"))) _696)) (_671 ((_731 _772) ((_731 (_624 (($O 45) $K))) (_682 1))))))) (_692 ((_731 _772) (_624 "--")))))) (($A :1 "v3.4\10&") (($A :2 ((($S' ($S' _632)) _16) (($B ($B ($B (_632 _661)))) ((($C' ($C' $B)) (($B ($B ($C' (($S' _632) (($B _634) (_723 _216)))))) (($B ($B ($B ($B $T)))) (($B ($B ($B ($B (_632 _661))))) ((($C' $B) (($B ($C' $B)) (($B ($B ($C' _633))) ((($C' $B) ($B' (($B _730) (($B _651) ((($C' _767) _8) 0))))) (($B ($B (_730 _654))) ((($C' ($C' _667)) (($B ($B (_667 "combinator conversion "))) (($B ($B (_626 6))) (($B ($B _612)) _761)))) "ms")))))) (($B ($B _634)) (($B $P) (($C _574) (_565 "main"))))))))) (_669 ($T ((($C' ($C' $O)) ((($C' $B) $P) _398)) $K))))))) (($A :3 ($T (($C ((($C' $C') (($B ($S' ($B (_632 _582)))) (($B ($B ($B (($C' _583) ((($C' _756) (($B _684) (_692 ((_731 _772) (_624 "--"))))) 1))))) (($B ($B ($B (_730 _6)))) ($C $C))))) (($B ($B $Y)) (($B ($B ($B _556))) (($C' ($C' _669)) (($B ($B $T)) ((($C' ($C' ($C' ($C' $O)))) (($B ($B (($C' $B) $P))) ($B _4))) $K))))))) (($B (($S' _730) (($B _727) (($B (_730 _774)) (($B (_667 "not found ")) _571))))) ($C _557))))) (($A :4 ((($C' $C) ((($S' $C) ((($C' ($C' $S')) (($S $P) ((($S' ($C' $B)) (($B ($B _6)) _4)) _4))) ($BK $K))) ((($C' ($S' $C)) ((($C' ($C' $C)) (($B (($C' $C) (($B ($P _6)) $K))) ((($C' $B) _4) _397))) ((($S' _730) (($B _727) (($B (_730 _774)) (_667 "primlookup: ")))) (($C (_706 _624)) _5)))) $K))) (_774 "trans: impossible"))) (($A :5 (($O (($P (($O 66) $K)) $B)) (($O (($P (($O 79) $K)) $O)) (($O (($P (($O 75) $K)) $K)) (($O (($P "C'") $C')) (($O (($P
\ No newline at end of file
+839
+(($A :0 ((_635 _585) (($B ((($S' ($C ((($C' ($S' _635)) (($B ($C _2)) _568)) (($B ($B (_635 _664))) ((($C' ($C' $C)) ((($C' ($S' ($C' $C))) ((($C' ($C' ($C' $C))) ((($C' ($C' ($C' ($C' $S')))) (($B ($B ($B ($B $C)))) ((($C' ($C' ($C' $B))) (($B ($B ($B ($C' $S)))) ((($C' ($C' ($C' ($C' $C)))) ((($C' ($C' ($C' ($C' ($C' $S'))))) (($B ($B ($B ($B ($B $C))))) ((($C' ($C' ($C' ($C' ($C' $C))))) ((($C' ($C' ($C' $B))) (($B ($B ($B ($C' ($C' $S'))))) ((($C' ($C' ($C' ($C' ($C' $C'))))) ((($C' ($C' ($C' ($S' ($C' $C'))))) (($B ($B ($B ($B $B')))) ((($S' $B) ($B' ($B' (($B ($S' $B)) (($B ($B _636)) ((($C' $B) (($B _733) (($B _654) ((($C' _770) _9) 0)))) (($B (_733 _657)) (($B (_670 "top level defns: ")) _615)))))))) ((($S' $B) ($B' (($B ($C' $B)) (($B $B') (($B ($B _636)) ((($C' $B) (($B _733) (($B _654) ((($C' _770) _9) 1)))) (_653 ($T (($B ($B (_733 _657))) ((($C' $B) (($B _670) ((($C' _670) _574) " = "))) (($C _398) $K))))))))))) ((($C' $B) ((($S' $C') (($B $C') (($B $C') _10))) ((($S' $B) (($B ($C' ($C' _636))) ((($C' $B) ($B' (($B _733) (($B _659) _12)))) (($B _670) ((($C' _670) (($B (_670 _1)) _615)) (($O 10) $K)))))) (($B ($B (_635 _664))) ((($C' $B) ($B' (($B _733) (($B _654) ((($C' _770) _9) 0))))) (($B ($B (_733 _657))) ((($C' ($C' _670)) (($B ($B (_670 "final pass "))) (($B ($B (_629 6))) (($B ($B _615)) _764)))) "ms"))))))) _3))))) ((($C' ($C' $C)) (($B (($C' $C) (($B ($C _675)) _398))) (($C _688) (_704 0)))) $K))) (($B ($C $B)) (($B ($B ($C $B))) (($B ($B $BK)) (($B ($B (($C' $B) (($B _734) (($B _670) ((($C' _670) (($B (_670 "(($A :")) _615)) (($O 32) $K))))))) ((($C' $B) (($B ($C' _734)) ($B _398))) (($B (_734 (_670 ") "))) (($C _734) (_670 (($O 41) $K)))))))))))) $T)) (($B $Y) ((($C' ($C' $S)) ((($C' ($C' $S)) ((($C' $B) $P) ((($S' ($C' $B)) ($B _373)) $I))) ($BK $K))) $K))))) (($B (($S' _733) (($B _730) (($B (_733 _777)) (($B (_670 "main: findIdent: ")) _574))))) (($C' _604) _571)))) _611))) (($B ($B _608)) ((($C' $B) (($B _672) (($B $T) (($B ($C $B)) (($B ($B $BK)) ((($C' ($C' ($C' $O))) ($B (($C' $P) _571))) $K)))))) (($C _688) (_704 0))))))) ($T $A))) ($T $K))) $I)) (($B (_733 _372)) (($B (_733 _568)) (($B (_670 (($O 95) $K))) _615)))))))) (($S (($S ((($S' _8) (($B _687) (_674 (_627 "-v")))) ((_703 _627) "-r"))) (($B (_668 (($O 46) $K))) (($B _732) (_673 ((_692 _755) "-i")))))) (($B (_733 _699)) ((($C' _670) (($B _732) (_673 ((_692 _755) "-o")))) (($O "out.comb") $K))))) (($B (($S (($C ((($C' _766) _687) 1)) (_777 "Usage: mhs [-v] [-r] [-iPATH] [-oFILE] ModuleName"))) _699)) (_674 ((_734 _775) ((_734 (_627 (($O 45) $K))) (_685 1))))))) (_695 ((_734 _775) (_627 "--")))))) (($A :1 "v3.4\10&") (($A :2 ((($S' ($S' _635)) _17) (($B ($B ($B (_635 _664)))) ((($C' ($C' $B)) (($B ($B ($C' (($S' _635) (($B _637) (_726 _219)))))) (($B ($B ($B ($B $T)))) (($B ($B ($B ($B (_635 _664))))) ((($C' $B) (($B ($C' $B)) (($B ($B ($C' _636))) ((($C' $B) ($B' (($B _733) (($B _654) ((($C' _770) _9) 0))))) (($B ($B (_733 _657))) ((($C' ($C' _670)) (($B ($B (_670 "combinator conversion "))) (($B ($B (_629 6))) (($B ($B _615)) _764)))) "ms")))))) (($B ($B _637)) (($B $P) (($C _577) (_568 "main"))))))))) (_672 ($T ((($C' ($C' $O)) ((($C' $B) $P) _401)) $K))))))) (($A :3 (($B (_635 _585)) (($B (($C' _586) ((($C' _759) (($B _687) (_695 ((_734 _775) (_627 "--"))))) 1))) (($B (_733 _7)) _4)))) (($A :4 ($T (($C ((($C' $C') (($B $S) ($C $C))) (($B ($B $Y)) (($B ($B ($B _559))) (($C' ($C' _672)) (($B ($B $T)) ((($C' ($C' ($C' ($C' $O)))) (($B ($B (($C' $B) $P))) ($B _5))) $K))))))) (($B (($S' _733) (($B _730) (($B (_733 _777)) (($B (_670 "not found ")) _574))))) ($C _560))))) (($A :5 ((($C' $C) ((($S' $C) ((($C' ($C' $S')) (($S $P) ((($S' ($C' $B)) (($B ($B _7)) _5)) _5))) ($BK $K))) ((($C' ($S' $C)) ((($C' ($C' $C)) (($B (($C' $C) (($B ($P _7)) $K))) ((($C' $B) _5) _400))) ((($S' _733) (($B _730) (($B (_733 _777)) (_670 "primlookup: ")))) (($C (_709 _627)) _6)))) $K))) (_777 "trans: impossible"))) (($A :6 (($O (($P (($O 66) $K)) $B)) (($O (($P (($O 79) $K)) $O)) (($O (($P (($O 75) $K)) $K)) (($O (($P "C'") $C')) (($O (($P (($O 67)
\ No newline at end of file
--- a/src/MicroHs/Parse.hs
+++ b/src/MicroHs/Parse.hs
@@ -38,7 +38,7 @@
pModule :: P EModule
pModule = EModule <$> (pKeyword "module" *> pUQIdentA) <*>
- (pSpec '(' *> esepBy pExportSpec (pSpec ',') <* pSpec ')') <*>+ (pSpec '(' *> esepEndBy pExportSpec (pSpec ',') <* pSpec ')') <*>(pKeyword "where" *> pBlock pDef)
pQIdent :: P Ident
--- a/src/Text/ParserComb.hs
+++ b/src/Text/ParserComb.hs
@@ -13,11 +13,12 @@
many, emany, optional, eoptional,
some, esome,
esepBy, sepBy1, esepBy1,
+ esepEndBy, esepEndBy1,
(<?>), (<|<),
--notFollowedBy,
lookAhead,
inject, nextToken,
- LastFail(..)
+ LastFail(..),
) where
--Ximport Prelude()
import PreludeNoIO
@@ -214,3 +215,9 @@
esepBy :: forall s t a sep . Prsr s t a -> Prsr s t sep -> Prsr s t [a]
esepBy p sep = esepBy1 p sep <|< pure []
+
+esepEndBy :: forall s t a sep . Prsr s t a -> Prsr s t sep -> Prsr s t [a]
+esepEndBy p sep = esepEndBy1 p sep <|< pure []
+
+esepEndBy1 :: forall s t a sep . Prsr s t a -> Prsr s t sep -> Prsr s t [a]
+esepEndBy1 p sep = (:) <$> p <*> ((sep *> esepEndBy p sep) <|< pure [])
--
⑨