Home My Page Projects Code Snippets Project Openings diderot
Summary Activity Tracker Tasks SCM

SCM Repository

[diderot] Diff of /trunk/src/compiler/codegen/clang.sml
ViewVC logotype

Diff of /trunk/src/compiler/codegen/clang.sml

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1443, Mon Jul 11 10:36:10 2011 UTC revision 1444, Mon Jul 11 12:11:53 2011 UTC
# Line 19  Line 19 
19        | T_Ptr of ty        | T_Ptr of ty
20        | T_Array of ty * int option        | T_Array of ty * int option
21        | T_Named of string        | T_Named of string
22          | T_Qual of attr * ty     (* qualified type *)
23    
24      datatype typed_var = V of ty * var      datatype typed_var = V of ty * var
25    
# Line 60  Line 61 
61        | S_Exp of exp                    (* exp ';' *)        | S_Exp of exp                    (* exp ';' *)
62        | S_If of exp * stm * stm         (* 'if' exp stm 'else' stm *)        | S_If of exp * stm * stm         (* 'if' exp stm 'else' stm *)
63        | S_While of exp * stm            (* 'while' exp stm *)        | S_While of exp * stm            (* 'while' exp stm *)
64          | S_DoWhile of stm * exp          (* 'do' stm 'while' exp *)
65        | S_For of (ty * var * exp) list * exp * exp list * stm        | S_For of (ty * var * exp) list * exp * exp list * stm
66                                          (* 'for' '(' inits ';' exp ';' incrs ')' stm *)                                          (* 'for' '(' inits ';' exp ';' incrs ')' stm *)
67        | S_Call of string * exp list     (* func '(' args ')' *)        | S_Call of string * exp list     (* func '(' args ')' *)
# Line 93  Line 95 
95      and binop      and binop
96        = #||        = #||
97        | #&&        | #&&
98          | #|
99          | #^
100          | #&
101        | #== | #!=        | #== | #!=
102        | #< | #<= | #>= | #>        | #< | #<= | #>= | #>
103        | #<< | #>>        | #<< | #>>
# Line 111  Line 116 
116        val lorP          = 3        val lorP          = 3
117        val landP         = 4        val landP         = 4
118        val borP          = 5        val borP          = 5
119        val bandP         = 6        val bxorP         = 6
120        val eqP           = 7        val bandP         = 7
121        val relP          = 8        val eqP           = 8
122        val shiftP        = 9        val relP          = 9
123        val addP          = 10        val shiftP        = 10
124        val mulP          = 11        val addP          = 11
125        val unaryP        = 12        val mulP          = 12
126        val preP          = 13        val castP         = 13
127        val compundP      = 14    (* compound literal *)        val unaryP        = 14
128        val postP         = 15        val preP          = 15
129        val callP         = 16        val compundP      = 16    (* compound literal *)
130        val subP          = 17        val postP         = 17
131        val atomP         = 18        val callP         = 18
132          val subP          = 19
133          val atomP         = 20
134        fun precOfBinop rator = (case rator        fun precOfBinop rator = (case rator
135               of #|| => lorP               of #|| => lorP
136                | #&& => landP                | #&& => landP
137                  | #| => borP
138                  | #^ => bxorP
139                  | #& => bandP
140                | #== => eqP | #!= => eqP                | #== => eqP | #!= => eqP
141                | #< => relP | #<= => relP | #>= => relP | #> => relP                | #< => relP | #<= => relP | #>= => relP | #> => relP
142                | #<< => shiftP | #>> => shiftP                | #<< => shiftP | #>> => shiftP
# Line 142  Line 152 
152          | prec (E_Subscript _) = postP          | prec (E_Subscript _) = postP
153          | prec (E_Select _) = postP          | prec (E_Select _) = postP
154          | prec (E_Indirect _) = postP          | prec (E_Indirect _) = postP
155          | prec (E_Cast _) = unaryP          | prec (E_Cast _) = castP
156          | prec (E_Var _) = atomP          | prec (E_Var _) = atomP
157          | prec (E_Int _) = atomP          | prec (E_Int _) = atomP
158          | prec (E_Flt _) = atomP          | prec (E_Flt _) = atomP
# Line 191  Line 201 
201      fun mkIndirect (e, f) = if prec e < postP      fun mkIndirect (e, f) = if prec e < postP
202            then E_Indirect(E_Grp e, f)            then E_Indirect(E_Grp e, f)
203            else E_Indirect(e, f)            else E_Indirect(e, f)
204      fun mkCast (ty, e) = E_Cast(ty, e)      fun mkCast (ty, e) = if prec e < castP
205              then E_Cast(ty, E_Grp e)
206              else E_Cast(ty, e)
207      val mkVar = E_Var      val mkVar = E_Var
208      fun mkIntTy (n, ty) = if n < 0 then E_UnOp(%-, E_Int(~n, ty)) else E_Int(n, ty)      fun mkIntTy (n, ty) = if n < 0 then E_UnOp(%-, E_Int(~n, ty)) else E_Int(n, ty)
209      fun mkInt n = mkIntTy(n, intTy)      fun mkInt n = mkIntTy(n, intTy)
# Line 220  Line 232 
232      fun mkIfThen (e, b) = mkIfThenElse (e, b, skip)      fun mkIfThen (e, b) = mkIfThenElse (e, b, skip)
233      val mkFor = S_For      val mkFor = S_For
234      fun mkWhile (e, b) = S_While(paren e, b)      fun mkWhile (e, b) = S_While(paren e, b)
235        fun mkDoWhile (b, e) = S_DoWhile(b, paren e)
236      val mkCall = S_Call      val mkCall = S_Call
237      val mkReturn = S_Return      val mkReturn = S_Return
238      val mkBreak = S_Break      val mkBreak = S_Break
# Line 247  Line 260 
260             of #|| => "||"             of #|| => "||"
261              | #&& => "&&"              | #&& => "&&"
262              | #== => "=="              | #== => "=="
263                | #| => "|"
264                | #^ => "^"
265                | #& => "&"
266              | #!= => "!="              | #!= => "!="
267              | #< => "<"              | #< => "<"
268              | #<= => "<="              | #<= => "<="

Legend:
Removed from v.1443  
changed lines
  Added in v.1444

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0