diff options
| author | Tom Smeding <tom@tomsmeding.com> | 2025-02-25 23:56:16 +0100 | 
|---|---|---|
| committer | Tom Smeding <tom@tomsmeding.com> | 2025-02-25 23:56:16 +0100 | 
| commit | 7fa10a9a07c7160531baf595d1111277c17a38b2 (patch) | |
| tree | 24b7263da33490d954b063926d509e1a10193687 /src/AST/Pretty.hs | |
| parent | 2c2b80264ae5777f0a759abb5571cbe68071c7e7 (diff) | |
Compile: Emit structs in proper order
Diffstat (limited to 'src/AST/Pretty.hs')
| -rw-r--r-- | src/AST/Pretty.hs | 40 | 
1 files changed, 23 insertions, 17 deletions
| diff --git a/src/AST/Pretty.hs b/src/AST/Pretty.hs index 4190f32..35c78c1 100644 --- a/src/AST/Pretty.hs +++ b/src/AST/Pretty.hs @@ -7,7 +7,7 @@  {-# LANGUAGE PolyKinds #-}  {-# LANGUAGE TupleSections #-}  {-# LANGUAGE TypeOperators #-} -module AST.Pretty (ppExpr, ppTy, PrettyX(..)) where +module AST.Pretty (ppExpr, ppSTy, ppTy, PrettyX(..)) where  import Control.Monad (ap)  import Data.List (intersperse) @@ -252,7 +252,7 @@ ppExpr' d val expr = case expr of        ppApp (annotate AMonoid (ppString "accum") <> ppX expr) [ppString (show (fromSNat i)), e1', e2', e3']    EZero _ t -> return $ parens $ -    annotate AMonoid (ppString "zero") <> ppX expr <+> ppString "::" <+> ppTy' 0 t <> ppString ")" +    annotate AMonoid (ppString "zero") <> ppX expr <+> ppString "::" <+> ppSTy' 0 t <> ppString ")"    EPlus _ _ a b -> do      a' <- ppExpr' 11 val a @@ -321,23 +321,29 @@ operator OExp{} = (Prefix, "exp")  operator OLog{} = (Prefix, "log")  operator OIDiv{} = (Infix, "`div`") -ppTy :: Int -> STy t -> String +ppSTy :: Int -> STy t -> String +ppSTy d ty = ppTy d (unSTy ty) + +ppSTy' :: Int -> STy t -> Doc q +ppSTy' d ty = ppTy' d (unSTy ty) + +ppTy :: Int -> Ty -> String  ppTy d ty = render $ ppTy' d ty -ppTy' :: Int -> STy t -> Doc q -ppTy' _ STNil = ppString "1" -ppTy' d (STPair a b) = ppParen (d > 7) $ ppTy' 8 a <> ppString " * " <> ppTy' 8 b -ppTy' d (STEither a b) = ppParen (d > 6) $ ppTy' 7 a <> ppString " + " <> ppTy' 7 b -ppTy' d (STMaybe t) = ppParen (d > 10) $ ppString "Maybe " <> ppTy' 11 t -ppTy' d (STArr n t) = ppParen (d > 10) $ -  ppString "Arr " <> ppString (show (fromSNat n)) <> ppString " " <> ppTy' 11 t -ppTy' _ (STScal sty) = ppString $ case sty of -  STI32 -> "i32" -  STI64 -> "i64" -  STF32 -> "f32" -  STF64 -> "f64" -  STBool -> "bool" -ppTy' d (STAccum t) = ppParen (d > 10) $ ppString "Accum " <> ppTy' 11 t +ppTy' :: Int -> Ty -> Doc q +ppTy' _ TNil = ppString "1" +ppTy' d (TPair a b) = ppParen (d > 7) $ ppTy' 8 a <> ppString " * " <> ppTy' 8 b +ppTy' d (TEither a b) = ppParen (d > 6) $ ppTy' 7 a <> ppString " + " <> ppTy' 7 b +ppTy' d (TMaybe t) = ppParen (d > 10) $ ppString "Maybe " <> ppTy' 11 t +ppTy' d (TArr n t) = ppParen (d > 10) $ +  ppString "Arr " <> ppString (show (fromNat n)) <> ppString " " <> ppTy' 11 t +ppTy' _ (TScal sty) = ppString $ case sty of +  TI32 -> "i32" +  TI64 -> "i64" +  TF32 -> "f32" +  TF64 -> "f64" +  TBool -> "bool" +ppTy' d (TAccum t) = ppParen (d > 10) $ ppString "Accum " <> ppTy' 11 t  ppString :: String -> Doc x  ppString = fromString | 
