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

SCM Repository

[diderot] Diff of /branches/vis15/src/compiler/cxx-util/type-to-cxx.sml
ViewVC logotype

Diff of /branches/vis15/src/compiler/cxx-util/type-to-cxx.sml

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

revision 4031, Thu Jun 23 04:39:37 2016 UTC revision 4032, Thu Jun 23 05:27:06 2016 UTC
# Line 8  Line 8 
8    
9  structure TypeToCxx : sig  structure TypeToCxx : sig
10    
11      (* the scope in which a type will appear *)
12        datatype namespace = NSDiderot | NSProgram | NSTopLevel
13    
14      (* translate a type for use inside the program's namespace scope
15       * `trType (env, ty)` is the same as `trQType (env, Program, ty)`
16       *)
17      val trType : CodeGenEnv.t * TreeTypes.t -> CLang.ty      val trType : CodeGenEnv.t * TreeTypes.t -> CLang.ty
18    
19      (* translate a type for use outside the program's namespace scope *)
20        val trQType : CodeGenEnv.t * namespace * TreeTypes.t -> CLang.ty
21    
22      val dynseqTy : CodeGenEnv.t * TreeTypes.t -> CLang.ty      val dynseqTy : CodeGenEnv.t * TreeTypes.t -> CLang.ty
23    
24      val trAPIType : CodeGenEnv.t * APITypes.t -> CLang.ty      val trAPIType : CodeGenEnv.t * APITypes.t -> CLang.ty
# Line 22  Line 31 
31      structure Env = CodeGenEnv      structure Env = CodeGenEnv
32      structure RN = CxxNames      structure RN = CxxNames
33    
34        datatype namespace = NSDiderot | NSProgram | NSTopLevel
35    
36        fun trQType (env, ns, ty) = let
37              val progNS = #namespace(Env.target env)
38              fun diderotQ s = (case ns
39                     of NSDiderot => CL.T_Named s
40                      | _ => CL.T_Named("diderot::" ^ s)
41                    (* end case *))
42              fun diderotTQ (s, args) = (case ns
43                     of NSDiderot => CL.T_Template(s, args)
44                      | _ => CL.T_Template("diderot::" ^ s, args)
45                    (* end case *))
46              fun programQ s = (case ns
47                     of NSProgram => CL.T_Named s
48                      | _ => CL.T_Named(concat[progNS, "::",  s])
49                    (* end case *))
50              fun tr ty = (case ty
51                   of Ty.BoolTy => CL.boolTy
52                    | Ty.StringTy => CL.T_Named "std::string"
53                    | Ty.IntTy => Env.intTy env
54                    | (Ty.VecTy(1, 1)) => Env.realTy env
55                    | (Ty.VecTy(d, _)) => CL.T_Named("vec" ^ Int.toString d)
56                    | (Ty.TensorTy []) => Env.realTy env
57                    | (Ty.TensorTy dd) => programQ(RN.tensorStruct dd)
58                    | (Ty.TensorRefTy _) => CL.constPtrTy(Env.realTy env)
59                    | (Ty.TupleTy tys) => raise Fail "FIXME: TupleTy"
60                    | (Ty.SeqTy(ty, NONE)) => diderotTQ("dynseq", [tr ty])
61                    | (Ty.SeqTy(ty, SOME n)) => CL.T_Array(tr ty, SOME n)
62                    | (Ty.ImageTy info) =>
63                        diderotTQ (
64                          concat["image", Int.toString(ImageInfo.dim info), "d"],
65                          [Env.realTy env])
66                    | (Ty.StrandTy name) => programQ("strand_" ^ Atom.toString name)
67                  (* end case *))
68              in
69                tr ty
70              end
71    
72      fun trType (env, ty) = (case ty      fun trType (env, ty) = (case ty
73             of Ty.BoolTy => CL.boolTy             of Ty.BoolTy => CL.boolTy
74              | Ty.StringTy => CL.T_Named "std::string"              | Ty.StringTy => CL.T_Named "std::string"

Legend:
Removed from v.4031  
changed lines
  Added in v.4032

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