$$ indent ms
$$ text "}"
-staticblock = \ss ->
- text "static" <+> text "{"
- $$ indent ss
- $$ text "}"
-
modifiers mfs = hsep (map modifier mfs)
modifier mf = text $ map toLower (show mf)
declStatement d = d
-ifthenelse ((e,s):ecs) ms = sep [text "if" <+> parens e <+> text "{",
- indent s,
- thenelse ecs ms]
+ifthenelse ((e,s):ecs) ms = sep [ text "if" <+> parens e <+> text "{",
+ indent s,
+ thenelse ecs ms]
thenelse ((e,s):ecs) ms = sep [ text "} else if" <+> parens e <+> text "{",
indent s,
; Access e n -> expr e <> text "." <> name n
; Assign l r -> assign (expr l) r
; New n es ds -> new (typ n) es (maybeClass ds)
+ ; Raise n es -> text "raise" <+> text n
+ <+> parens (hsep (punctuate comma (map expr es)))
; Call e n es -> call (expr e) (name n) es
; Op e1 o e2 -> op e1 o e2
; InstanceOf e t -> expr e <+> text "instanceof" <+> typ t
literal = \l ->
case l of
{ IntLit i -> text (show i)
- ; CharLit c -> text (show c)
- ; StringLit s -> text (show s)
+ ; CharLit c -> text "(char)" <+> text (show c)
+ ; StringLit s -> text ("\"" ++ s ++ "\"") -- strings are already printable
}
maybeClass Nothing = Nothing