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

SCM Repository

[diderot] Annotation of /branches/vis15/src/compiler/codegen/codegen-env.sml
ViewVC logotype

Annotation of /branches/vis15/src/compiler/codegen/codegen-env.sml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3896 - (view) (download)

1 : jhr 3873 (* codegen-env.sml
2 :     *
3 :     * This code is part of the Diderot Project (http://diderot-language.cs.uchicago.edu)
4 :     *
5 :     * COPYRIGHT (c) 2016 The University of Chicago
6 :     * All rights reserved.
7 :     *)
8 :    
9 :     structure CodeGenEnv : sig
10 :    
11 :     type t
12 :    
13 :     val new : {
14 :     spec : TargetSpec.t, (* target spec *)
15 :     global : CLang.var, (* variable for accessing globals *)
16 :     selfIn : CLang.var, (* variable for accessing input strand state *)
17 :     selfOut : CLang.var (* variable for accessing output strand state *)
18 :     } -> t
19 :    
20 : jhr 3896 val empty : TargetSpec.t -> t
21 :    
22 : jhr 3873 (* get the target spec record from the environment *)
23 :     val target : t -> TargetSpec.t
24 :    
25 :     val lookup : t * TreeVar.t -> CLang.var
26 :    
27 :     val insert : t * TreeVar.t * CLang.var -> t
28 :    
29 :     (* lookup the bindings for accessing the globals and strand state *)
30 :     val global : t -> CLang.var
31 :     val selfIn : t -> CLang.var
32 :     val selfOut : t -> CLang.var
33 :    
34 : jhr 3876 (* get CLang versions of standard Diderot types *)
35 : jhr 3896 val realTy : t -> CLang.ty
36 :     val intTy : t -> CLang.ty
37 :     val boolTy : t -> CLang.ty
38 : jhr 3876
39 : jhr 3896 (* CLang versions of templated runtime types *)
40 :     val optionsTy : t -> CLang.ty
41 :    
42 : jhr 3873 end = struct
43 :    
44 :     structure V = TreeVar
45 :     structure VMap = TreeVar.Map
46 : jhr 3876 structure CL = CLang
47 : jhr 3873
48 :     datatype t = Env of {
49 : jhr 3876 vmap : CL.var VMap.map,
50 : jhr 3873 spec : TargetSpec.t
51 :     }
52 :    
53 :     fun new {spec, global, selfIn, selfOut} = Env{
54 :     vmap = List.foldl VMap.insert' VMap.empty [
55 :     (PseudoVars.global, global),
56 :     (PseudoVars.selfIn, selfIn),
57 :     (PseudoVars.selfOut, selfOut)
58 :     ],
59 :     spec = spec
60 :     }
61 :    
62 : jhr 3896 fun empty spec = Env{
63 :     vmap = VMap.empty,
64 :     spec = spec
65 :     }
66 :    
67 : jhr 3873 fun target (Env{spec, ...}) = spec
68 :    
69 :     fun lookup (Env{vmap, ...}, x) = (case VMap.find (vmap, x)
70 :     of SOME x' => x'
71 :     | NONE => raise Fail(concat["lookup(_, ", V.name x, ")"])
72 :     (* end case *))
73 :    
74 :     fun insert (Env{vmap, spec}, x, x') = Env{vmap = VMap.insert(vmap, x, x'), spec = spec}
75 :    
76 :     fun global env = lookup(env, PseudoVars.global)
77 :     fun selfIn env = lookup(env, PseudoVars.selfIn)
78 :     fun selfOut env = lookup(env, PseudoVars.selfOut)
79 :    
80 : jhr 3876 fun realTy (Env{spec, ...}) = if (#double spec) then CL.double else CL.float
81 :     fun intTy (Env{spec, ...}) = if (#longint spec) then CL.int64 else CL.int32
82 : jhr 3896 (* FIXME: to support versions of C without <stdbool>, we will need to map bool to int *)
83 :     fun boolTy (Env{spec, ...}) = CL.boolTy
84 : jhr 3876
85 : jhr 3896 fun optionsTy env = CL.T_Template("diderot::options", [realTy env, intTy env])
86 :    
87 : jhr 3873 end

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