aboutsummaryrefslogtreecommitdiff
path: root/Sil/Util.icl
diff options
context:
space:
mode:
authorCamil Staps2017-07-19 11:46:32 +0000
committerCamil Staps2017-07-19 11:46:32 +0000
commitd722a77077e89504191728cf42f7d15ddfa209a7 (patch)
treef3f70e055e9a76dba7eecde01146c697b452f064 /Sil/Util.icl
parentWorking fibonacci (diff)
Reorganise
Diffstat (limited to 'Sil/Util.icl')
-rw-r--r--Sil/Util.icl151
1 files changed, 0 insertions, 151 deletions
diff --git a/Sil/Util.icl b/Sil/Util.icl
deleted file mode 100644
index 35b8522..0000000
--- a/Sil/Util.icl
+++ /dev/null
@@ -1,151 +0,0 @@
-implementation module Sil.Util
-
-import _SystemArray
-import StdEnum
-from StdFunc import id
-import StdInt
-import StdList
-import StdOverloaded
-import StdString
-
-from Data.Func import $
-import Data.List
-import Data.Maybe
-import Text
-
-import Sil.Parse
-import Sil.Syntax
-
-:: PrintState =
- { indent :: Int
- }
-
-instance zero PrintState where zero = {indent=0}
-
-incIndent :: PrintState -> PrintState
-incIndent ps = {ps & indent=inc ps.indent}
-
-decIndent :: PrintState -> PrintState
-decIndent ps = {ps & indent=dec ps.indent}
-
-instance toString PrintState where toString st = {'\t' \\ _ <- [1..st.indent]}
-
-instance PrettyPrinter [Token]
-where
- print st [] = ""
- print st [t] = toString t
- print st [t:ts=:[t`:_]] = toString t +++ spaceBetween t t` +++ print st` ts
- where
- st` = {st & indent=indent`}
- indent` = newIndent t t` st.indent
-
- spaceBetween :: Token Token -> String
- spaceBetween _ TBraceClose = newline
- spaceBetween TParenOpen _ = ""
- spaceBetween TParenClose TBraceOpen = space
- spaceBetween TParenClose _ = ""
- spaceBetween TBraceOpen _ = newline
- spaceBetween TBraceClose _ = newline
- spaceBetween TComma _ = space
- spaceBetween TSemicolon _ = newline
- spaceBetween TAssign _ = space
- spaceBetween (TLit _) _ = space
- spaceBetween TIf _ = space
- spaceBetween TWhile _ = space
- spaceBetween TReturn _ = space
- spaceBetween (TName _) TParenClose = ""
- spaceBetween (TName _) TSemicolon = ""
- spaceBetween (TName _) _ = space
-
- newline = "\r\n" +++ {'\t' \\ _ <- [1..indent`]}
- space = " "
-
- newIndent :: Token Token -> Int -> Int
- newIndent TBraceOpen _ = inc
- newIndent _ TBraceClose = dec
- newIndent _ _ = id
-
-instance PrettyPrinter Program
-where
- print st prog = p st prog.p_funs
- where
- p :: PrintState [Function] -> String
- p _ [] = ""
- p st [f] = print st f
- p st [f:fs] = print st f <+ "\r\n\r\n" <+ p st fs
-
-instance PrettyPrinter Function
-where
- print st f = st <+ f.f_type <+ " " <+ f.f_name
- <+ "(" <+ printersperse ", " f.f_args <+ ") {\r\n"
- <+ print {st & indent=st.indent+1} f.f_code <+ "\r\n" <+ st <+ "}"
-
-instance PrettyPrinter CodeBlock
-where
- print st cb = concat $ intersperse "\r\n" $
- [print st x \\ x <- cb.cb_init] ++ [print st x \\ x <- cb.cb_content]
-
-instance PrettyPrinter Initialisation
-where
- print st init = st <+ init.init_type <+ " " <+ init.init_name <+ ";"
-
-instance PrettyPrinter Statement
-where
- print st (If c t Nothing) = st <+ "if (" <+ c <+ ") {\r\n" <+
- print (incIndent st) t <+ "\r\n" <+ st <+ "}"
- print st (If c t (Just e)) = st <+ "if (" <+ c <+ ") {\r\n" <+
- print st` t <+ "\r\n" <+ st <+ "} else {\r\n" <+
- print st` e <+ "\r\n" <+ st <+ "}"
- where st` = incIndent st
- print st stm = st <+ stm
-
-instance toString Statement
-where
- toString (Declaration n a) = n <+ " " <+ TAssign <+ " " <+ a <+ ";"
- toString (Application app) = toString app <+ ";"
- toString (Return Nothing) = "return;"
- toString (Return (Just a)) = "return " <+ a <+ ";"
- toString (If c t e) = "if (" <+ c <+ ") ..."
- toString (MachineStm s) = "|~" <+ s
- toString _ = "<<unimplemented Statement>>"
-
-instance toString Type
-where
- toString TBool = "Bool"
- toString TInt = "Int"
- toString TVoid = "Void"
-
-instance toString Arg where toString arg = arg.arg_type <+ " " <+ arg.arg_name
-
-instance toString Application
-where
- toString (Name n) = n
- toString (Literal lit) = toString lit
- toString (App n args) = n <+ "(" <+ printersperse ", " args <+ ")"
- toString (BuiltinApp op e) = op <+ "(" <+ e <+ ")"
- toString (BuiltinApp2 e1 op e2) = "(" <+ e1 <+ ") " <+ op <+ " (" <+ e2 <+ ")"
-
-instance toString Op1
-where
- toString Neg = "~"
-
-instance toString Op2
-where
- toString Add = "+"
- toString Sub = "-"
- toString Mul = "*"
- toString Div = "/"
- toString Rem = "%"
- toString Equals = "=="
- toString LogOr = "||"
- toString LogAnd = "&&"
-
-instance toString Literal
-where
- toString (BLit b) = toString b
- toString (ILit i) = toString i
-
-printersperse :: a [b] -> String | toString a & toString b
-printersperse _ [] = ""
-printersperse _ [x] = toString x
-printersperse g [x:xs] = x <+ g <+ printersperse g xs