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 4350, Tue Aug 2 19:20:11 2016 UTC revision 4351, Wed Aug 3 01:15:46 2016 UTC
# Line 8  Line 8 
8    
9  structure GenTysAndOps : sig  structure GenTysAndOps : sig
10    
11      val gen : CodeGenEnv.t * CollectInfo.t -> CLang.decl list      val gen : CodeGenEnv.t * CollectInfo.t -> {
12                preWorld : CLang.decl list,         (* decls to place before world outside of namespace *)
13                postWorld : CLang.decl list         (* decls to place after world inside of namespace *)
14              }
15    
16    end = struct    end = struct
17    
# Line 579  Line 582 
582                    | EigenVals3x3 => expandFrag (env, CxxFragments.eigenvals3x3)                    | EigenVals3x3 => expandFrag (env, CxxFragments.eigenvals3x3)
583                    | EigenVecs2x2 => expandFrag (env, CxxFragments.eigenvecs2x2)                    | EigenVecs2x2 => expandFrag (env, CxxFragments.eigenvecs2x2)
584                    | EigenVecs3x3 => expandFrag (env, CxxFragments.eigenvecs3x3)                    | EigenVecs3x3 => expandFrag (env, CxxFragments.eigenvecs3x3)
585                      | SphereQuery d => let
586                          val seqTy = CL.T_Template("diderot::dynseq", [CL.uint32])
587                          val (posTy, posExp) = if d > 1
588                                then (
589                                    TypeToCxx.trType(env, Ty.TensorRefTy[d]),
590                                    CL.mkDispatch(CL.mkVar "pos", "base", [])
591                                  )
592                                else (realTy, CL.mkVar "pos")
593                          val wrldV = CL.mkVar RN.worldVar
594                          in
595                            mkFunc(
596                              seqTy, "sphere_query",
597                              [RN.worldParam, CL.PARAM([], posTy, "pos"), CL.PARAM([], realTy, "radius")],
598                              CL.mkReturn(SOME(
599                                CL.mkIndirectDispatch(
600                                  CL.mkIndirect(wrldV, "_tree"),
601                                  "sphere_query",
602                                  [CL.mkIndirect(wrldV, "_inState"), posExp, CL.mkVar "radius"]))))
603                          end
604                  (* end case *))                  (* end case *))
605            in            in
606              dcl :: dcls              dcl :: dcls
607            end            end
608    
609      val first = CL.D_Comment["***** Begin synthesized types and operations *****"]      val firstTy = CL.D_Comment["***** Begin synthesized types *****"]
610      val last = CL.D_Comment["***** End synthesized types and operations *****"]      val lastTy = CL.D_Comment["***** End synthesized types *****"]
611      val noDcls = CL.D_Comment["***** No synthesized types or operations *****"]      val noDclsTy = CL.D_Comment["***** No synthesized types *****"]
612    
613        val firstOp = CL.D_Comment["***** Begin synthesized operations *****"]
614        val lastOp = CL.D_Comment["***** End synthesized operations *****"]
615        val noDclsOp = CL.D_Comment["***** No synthesized operations *****"]
616    
617      fun gen (env, info) = let      fun gen (env, info) = let
618            val spec = Env.target env            val spec = Env.target env
# Line 595  Line 621 
621            val opDcls = List.foldl (doOp env) [] (CollectInfo.listOps info)            val opDcls = List.foldl (doOp env) [] (CollectInfo.listOps info)
622            val tys = CollectInfo.listTypes info            val tys = CollectInfo.listTypes info
623            val (tyDcls, fnDefs) = List.foldr genTyDecl ([], []) tys            val (tyDcls, fnDefs) = List.foldr genTyDecl ([], []) tys
624            val dcls = tyDcls @ fnDefs @ opDcls            val dcls = tyDcls @ fnDefs
625            val traitDcls = List.foldl genTrait [] tys            val traitDcls = List.foldl genTrait [] tys
626            in            val preDcls = if List.null dcls andalso List.null traitDcls
627              if List.null dcls andalso List.null traitDcls                  then [noDclsTy]
               then [noDcls]  
628                else let                else let
629                  val res = [last]                    val res = [lastTy]
630                  val res = if List.null traitDcls                  val res = if List.null traitDcls
631                        then res                        then res
632                        else CL.D_Namespace("diderot", traitDcls) :: res                        else CL.D_Namespace("diderot", traitDcls) :: res
# Line 609  Line 634 
634                        then res                        then res
635                        else CL.D_Namespace(#namespace(Env.target env), dcls) :: res                        else CL.D_Namespace(#namespace(Env.target env), dcls) :: res
636                  in                  in
637                    first :: res                      firstTy :: res
638                  end                  end
639              val postDcls = if List.null opDcls
640                    then [noDclsOp]
641                    else firstOp :: opDcls @ [lastOp]
642              in
643                {preWorld = preDcls, postWorld = postDcls}
644            end            end
645    
646    end    end

Legend:
Removed from v.4350  
changed lines
  Added in v.4351

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