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/gen-tys-and-ops.sml
ViewVC logotype

Diff of /branches/vis15/src/compiler/cxx-util/gen-tys-and-ops.sml

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

revision 3995, Sat Jun 18 20:00:19 2016 UTC revision 3996, Sun Jun 19 15:21:12 2016 UTC
# Line 44  Line 44 
44                        val len = List.foldl Int.* 1 shape                        val len = List.foldl Int.* 1 shape
45                        val name = RN.tensorStruct shape                        val name = RN.tensorStruct shape
46                        val thisData = CL.mkIndirect(CL.mkVar "this", "_data")                        val thisData = CL.mkIndirect(CL.mkVar "this", "_data")
47                          val copyFromInitializerList = [
48                                  CL.mkDeclInit(CL.int32, "i", CL.mkInt 0),
49                                  CL.mkFor(
50                                    CL.T_Named "auto",
51                                    [("it", CL.mkDispatch(CL.mkVar "il", "begin", []))],
52                                    CL.mkBinOp(CL.mkVar "it", CL.#!=, CL.mkDispatch(CL.mkVar "il", "end", [])),
53                                    [CL.mkUnOp(CL.%++, CL.mkVar "i"), CL.mkUnOp(CL.%++, CL.mkVar "it")],
54                                    CL.mkAssign(
55                                      CL.mkSubscript(thisData, CL.mkVar "i"),
56                                      CL.mkUnOp(CL.%*, CL.mkVar "it")))
57                                ]
58                      (* default constructor *)                      (* default constructor *)
59                        val constrDcl = CL.D_Constr([], NONE, name, [], [], SOME(CL.mkBlock[]))                        val constrDcl1 = CL.D_Constr([], NONE, name, [], [], SOME(CL.mkBlock[]))
60                        (* constructor from initializer list *)
61                          val constrDcl2 = CL.D_Constr([], NONE, name,
62                                [CL.PARAM([], CL.T_Template("std::initializer_list", [realTy]), "il")],
63                                [],
64                                SOME(CL.mkBlock copyFromInitializerList))
65                      (* destructor *)                      (* destructor *)
66                        val destrDcl = CL.D_Destr([], NONE, name, SOME(CL.mkBlock[]))                        val destrDcl = CL.D_Destr([], NONE, name, SOME(CL.mkBlock[]))
67                        (* assignment operator *)
68                          val assignDcl = CL.D_Func([], CL.T_Named(name ^ " &"), "operator=",
69                                [CL.PARAM([], CL.T_Template("std::initializer_list", [realTy]), "il")],
70                                CL.mkBlock(
71                                  copyFromInitializerList @
72                                    [CL.mkReturn(SOME(CL.mkUnOp(CL.%*, CL.mkVar "this")))]))
73                        (* subscript operator *)
74                          val subscriptDcl = CL.D_Func([], CL.T_Named(realTyName ^ " &"), "operator[]",
75                                [CL.PARAM([], CL.uint32, "i")],
76                                CL.mkReturn(SOME(CL.mkSubscript(thisData, CL.mkVar "i"))))
77                        val structDcl = CL.D_ClassDef{                        val structDcl = CL.D_ClassDef{
78                                name = name,                                name = name,
79                                args = NONE,                                args = NONE,
80                                from = NONE,                                from = NONE,
81                                public = [                                public = [
82                                    CL.D_Var([], CL.T_Array(realTy, SOME len), "_data", NONE),                                    CL.D_Var([], CL.T_Array(realTy, SOME len), "_data", NONE),
83                                    constrDcl,                                    constrDcl1, constrDcl2,
84                                    destrDcl,                                    destrDcl,
85                                    CL.D_Func([], CL.T_Named(realTyName ^ " &"), "operator[]",                                    assignDcl,
86                                      [CL.PARAM([], CL.uint32, "i")],                                    subscriptDcl
                                     CL.mkReturn(SOME(CL.mkSubscript(thisData, CL.mkVar "i"))))  
87                                  ],                                  ],
88                                protected = [],                                protected = [],
89                                private = []                                private = []
# Line 128  Line 153 
153                  ]                  ]
154            val (_, exp) = lp (true, CL.mkVar "outs", 0, shape)            val (_, exp) = lp (true, CL.mkVar "outs", 0, shape)
155            in            in
156              CL.D_Func(["static"], ostreamRef, "operator<<", [], mkReturn exp)              CL.D_Func(["static"], ostreamRef, "operator<<", params, mkReturn exp)
157            end            end
158    
159      fun genPrinter (ty, dcls) = (case ty      fun genPrinter (ty, dcls) = (case ty
160             of Ty.TensorTy shape => genTensorPrinter shape :: dcls             of Ty.TensorRefTy shape => genTensorPrinter shape :: dcls
161              | Ty.TupleTy tys => raise Fail "FIXME: printer for tuples"              | Ty.TupleTy tys => raise Fail "FIXME: printer for tuples"
162  (* the following two types will be handled by template expansion  (* the following two types will be handled by template expansion
163              | Ty.SeqTy(ty, NONE) =>              | Ty.SeqTy(ty, NONE) =>
# Line 347  Line 372 
372    
373      val first = CL.D_Comment["***** Begin synthesized types and operations *****"]      val first = CL.D_Comment["***** Begin synthesized types and operations *****"]
374      val last = CL.D_Comment["***** End synthesized types and operations *****"]      val last = CL.D_Comment["***** End synthesized types and operations *****"]
375        val noDcls = CL.D_Comment["***** No synthesized types or operations *****"]
376    
377      fun gen (env, info) = let      fun gen (env, info) = let
378            val spec = Env.target env            val spec = Env.target env
# Line 361  Line 387 
387                  in                  in
388                    dcls                    dcls
389                  end                  end
390            in            val dcls = CollectInfo.foldOverTypes
             first ::  
               CollectInfo.foldOverTypes  
391                  doType                  doType
392                    (CollectInfo.foldOverOps (doOp env) [last] info)                    (CollectInfo.foldOverOps (doOp env) [] info)
393                      info                      info
394              in
395                if List.null dcls
396                  then [noDcls]
397                  else [first, CL.D_Namespace("diderot", dcls), last]
398            end            end
399    
400    end    end

Legend:
Removed from v.3995  
changed lines
  Added in v.3996

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