/
Pretty.cag
94 lines (78 loc) · 3.2 KB
/
Pretty.cag
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
%%[0
%include lhs2TeX.fmt
%include afp.fmt
%%]
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% Haskell importable interface to Foreign pretty print
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%[90 hs module {%{EH}Foreign.Pretty} import(UHC.Util.Pretty,{%{EH}Base.Common},{%{EH}Foreign})
%%]
%%[90.WRAPPER ag import({Foreign/AbsSyn})
WRAPPER ForeignAGItf ForeignExprAGItf
%%]
%%[90 hs export(ppForeignEnt)
ppForeignEnt :: ForeignEnt -> PP_Doc
ppForeignEnt ent
= let t = wrap_ForeignAGItf
(sem_ForeignAGItf (ForeignAGItf_AGItf ent))
Inh_ForeignAGItf
in pp_Syn_ForeignAGItf t
instance PP ForeignEnt where
pp t = ppForeignEnt t
%%]
%%[90 hs export(ppForeignExpr)
ppForeignExpr :: String -> ForeignExpr -> PP_Doc
ppForeignExpr nm e
= let t = wrap_ForeignExprAGItf
(sem_ForeignExprAGItf (ForeignExprAGItf_AGItf e))
(Inh_ForeignExprAGItf
{ entNm_Inh_ForeignExprAGItf = nm
})
in pp_Syn_ForeignExprAGItf t
%%]
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% Global info
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%[90
ATTR ForeignExprAGItf AllForeignExpr [ entNm: String | | ]
%%]
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% PP
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%[90
ATTR ForeignAGItf ForeignExprAGItf AllForeign ForeignExpr [ | | pp: PP_Doc ]
SEM JavaScriptCall
-- | Id lhs . pp = maybe empty (\i -> "%" >|< i >|< ".") @mbThisArgNr >|< pp @nm >|< maybe empty (\i -> "[%" >|< i >|< "]") @mbIndexArgNr
| Id lhs . pp = maybe (pp @nm) (ppForeignExpr @nm) @mbForeignExpr
| Wrapper lhs . pp = pp "wrapper"
| Dynamic lhs . pp = pp "dynamic"
SEM PrimCall
| Id lhs . pp = pp @nm >#< maybe empty pp @mbKnownPrim
SEM PlainCall
| Id lhs . pp = pp @nm
SEM CCall
| Id lhs . pp = (if @isStatic then pp "static" else empty)
>#< (maybe empty pp @mbInclude)
>#< (if @asPointer then pp "&" else empty)
>#< @nm
| Wrapper lhs . pp = pp "wrapper"
| Dynamic lhs . pp = pp "dynamic"
SEM ForeignExpr
| Call lhs . pp = @expr.pp >|< ppParens empty
| CallArgs lhs . pp = @expr.pp >|< ppParensCommas @args.ppL
| Ent lhs . pp = pp @lhs.entNm
| EntNm lhs . pp = pp @nm
| Arg lhs . pp = "%" >|< @nr
| AllArg lhs . pp = pp "%*"
| Sel lhs . pp = @expr.pp >|< "." >|< @sel.pp
| Inx lhs . pp = @expr.pp >|< "[" >|< @inx.pp >|< "]"
| Ptr lhs . pp = "&" >|< @expr.pp
| Empty lhs . pp = empty
| Str lhs . pp = pp $ show @str
| ObjData lhs . pp = pp "{}"
%%]
%%[90
SEM ForeignExprs [ | | ppL: {[PP_Doc]} ]
| Nil lhs . ppL = []
| Cons lhs . ppL = @hd.pp : @tl.ppL
%%]