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

SCM Repository

[diderot] Diff of /branches/vis12-cl/src/compiler/codegen/clang.sml
ViewVC logotype

Diff of /branches/vis12-cl/src/compiler/codegen/clang.sml

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

revision 3094, Wed Mar 18 04:45:43 2015 UTC revision 3095, Wed Mar 18 13:12:57 2015 UTC
# Line 90  Line 90 
90        | E_Select of exp * string        (* e "." f *)        | E_Select of exp * string        (* e "." f *)
91        | E_Indirect of exp * string      (* e "->" f *)        | E_Indirect of exp * string      (* e "->" f *)
92        | E_Cast of ty * exp              (* "(" ty ")" e *)        | E_Cast of ty * exp              (* "(" ty ")" e *)
93          | E_Vec of ty * exp list          (* vector construction; syntax depends on target *)
94        | E_Var of var        | E_Var of var
95        | E_Int of IntegerLit.integer * ty        | E_Int of IntegerLit.integer * ty
96        | E_Flt of FloatLit.float * ty        | E_Flt of FloatLit.float * ty
# Line 165  Line 166 
166          | prec (E_Select _) = postP          | prec (E_Select _) = postP
167          | prec (E_Indirect _) = postP          | prec (E_Indirect _) = postP
168          | prec (E_Cast _) = castP          | prec (E_Cast _) = castP
169            | prec (E_Vec _) = castP
170          | prec (E_Var _) = atomP          | prec (E_Var _) = atomP
171          | prec (E_Int _) = atomP          | prec (E_Int _) = atomP
172          | prec (E_Flt _) = atomP          | prec (E_Flt _) = atomP
# Line 225  Line 227 
227      fun mkCast (ty, e) = if prec e < castP      fun mkCast (ty, e) = if prec e < castP
228            then E_Cast(ty, E_Grp e)            then E_Cast(ty, E_Grp e)
229            else E_Cast(ty, e)            else E_Cast(ty, e)
230        val mkVec = E_Vec
231      val mkVar = E_Var      val mkVar = E_Var
232      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)
233      fun mkInt n = mkIntTy(n, intTy)      fun mkInt n = mkIntTy(n, intTy)
# Line 378  Line 381 
381                  | E_BinOp(e1, rator, e2) => e2s(e1, binopToString rator :: e2s(e2, l))                  | E_BinOp(e1, rator, e2) => e2s(e1, binopToString rator :: e2s(e2, l))
382                  | E_UnOp(rator, e) => unopToString rator :: e2s(e, l)                  | E_UnOp(rator, e) => unopToString rator :: e2s(e, l)
383                  | E_PostOp(e, rator) => e2s(e, postopToString rator :: l)                  | E_PostOp(e, rator) => e2s(e, postopToString rator :: l)
384                  | E_Apply(e, es) => let                  | E_Apply(e, es) => e2s(e, "(" :: args2s(es, ")"::l))
                     fun args2s ([], l) = l  
                       | args2s ([e], l) = e2s(e, l)  
                       | args2s (e::es, l) = e2s(e, ","::args2s(es, l))  
                     in  
                       e2s(e, "(" :: args2s(es, ")"::l))  
                     end  
385                  | E_Subscript(e1, e2) => e2s(e1, "[" :: e2s(e2, "]"::l))                  | E_Subscript(e1, e2) => e2s(e1, "[" :: e2s(e2, "]"::l))
386                  | E_Select(e, f) => e2s(e, "." :: f :: l)                  | E_Select(e, f) => e2s(e, "." :: f :: l)
387                  | E_Indirect(e, f) => e2s(e, "->" :: f :: l)                  | E_Indirect(e, f) => e2s(e, "->" :: f :: l)
388                  | E_Cast(ty, e) => "(ty)" :: e2s(e, l)  (* FIXME: need tyToString *)                  | E_Cast(ty, e) => "(ty)" :: e2s(e, l)  (* FIXME: need tyToString *)
389                    | E_Vec(ty, args) => "(vec)(" :: args2s(args, ")"::l)  (* FIXME: need tyToString *)
390                  | E_Var x => x::l                  | E_Var x => x::l
391                  | E_Int(n, _) => IntegerLit.toString n :: l                  | E_Int(n, _) => IntegerLit.toString n :: l
392                  | E_Flt(f, _) => FloatLit.toString f :: l                  | E_Flt(f, _) => FloatLit.toString f :: l
# Line 397  Line 395 
395                  | E_Char c => "'" :: Char.toCString c :: "'" :: l                  | E_Char c => "'" :: Char.toCString c :: "'" :: l
396                  | E_Sizeof ty => "sizeof(ty)" :: l                  | E_Sizeof ty => "sizeof(ty)" :: l
397                (* end case *))                (* end case *))
398              and args2s ([], l) = l
399                | args2s ([e], l) = e2s(e, l)
400                | args2s (e::es, l) = e2s(e, ","::args2s(es, l))
401            in            in
402              String.concat(e2s(e, []))              String.concat(e2s(e, []))
403            end            end

Legend:
Removed from v.3094  
changed lines
  Added in v.3095

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