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

SCM Repository

[diderot] Annotation of /trunk/src/compiler/basis/basis.sml
ViewVC logotype

Annotation of /trunk/src/compiler/basis/basis.sml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3349 - (view) (download)

1 : jhr 47 (* basis.sml
2 :     *
3 : jhr 3349 * This code is part of the Diderot Project (http://diderot-language.cs.uchicago.edu)
4 :     *
5 :     * COPYRIGHT (c) 2015 The University of Chicago
6 : jhr 47 * All rights reserved.
7 :     *
8 :     * Type definitions for Basis functions.
9 :     *)
10 :    
11 : jhr 78 structure Basis : sig
12 :    
13 : jhr 2462 val env : unit -> Env.env
14 : jhr 78
15 : jhr 169 (* certain operations are restricted to only appear at global scope (i.e., not in an
16 : jhr 511 * strand body). This function returns true for such operations.
17 : jhr 169 *)
18 :     val isRestricted : AST.var -> bool
19 :    
20 : jhr 78 end = struct
21 : jhr 47
22 : jhr 79 structure N = BasisNames
23 :     structure BV = BasisVars
24 :     structure ATbl = AtomTable
25 : jhr 63
26 : jhr 68 (* non-overloaded operators, etc. *)
27 : jhr 169 val basisFunctions = [
28 : jhr 2356 (* non-overloaded operators *)
29 :     BV.op_cross,
30 :     BV.op_outer,
31 :     BV.op_D,
32 :     BV.op_Dotimes,
33 :     BV.op_norm,
34 :     BV.op_not,
35 :     (* functions *)
36 :     BV.fn_inside,
37 :     BV.fn_max,
38 :     BV.fn_min,
39 :     BV.fn_modulate,
40 :     BV.fn_normalize,
41 :     BV.fn_principleEvec,
42 :     BV.fn_trace,
43 :     BV.fn_transpose
44 :     ] @ (List.map #2 BV.mathFns)
45 : jhr 169
46 : jhr 1116 val basisVars = [
47 : jhr 2356 (* kernels *)
48 :     BV.kn_bspln3,
49 :     BV.kn_bspln5,
50 :     BV.kn_c4hexic,
51 :     BV.kn_ctmr,
52 :     BV.kn_tent,
53 :     BV.kn_c1tent,
54 :     BV.kn_c2ctmr
55 :     ]
56 : jhr 63
57 : jhr 1116 (* overloaded operators and functions *)
58 : jhr 79 val overloads = [
59 : jhr 2356 (N.op_lte, [BV.lte_ii, BV.lte_rr]),
60 :     (N.op_equ, [BV.equ_bb, BV.equ_ii, BV.equ_ss, BV.equ_rr]),
61 :     (N.op_neq, [BV.neq_bb, BV.neq_ii, BV.neq_ss, BV.neq_rr]),
62 :     (N.op_gte, [BV.gte_ii, BV.gte_rr]),
63 :     (N.op_gt, [BV.gt_ii, BV.gt_rr]),
64 :     (N.op_add, [BV.add_ii, BV.add_tt, BV.add_ff, BV.add_fr, BV.add_rf]),
65 :     (N.op_sub, [BV.sub_ii, BV.sub_tt, BV.sub_ff, BV.sub_fr, BV.sub_rf]),
66 :     (N.op_mul, [BV.mul_ii, BV.mul_rr, BV.mul_rt, BV.mul_tr, BV.mul_rf, BV.mul_fr]),
67 :     (N.op_div, [BV.div_ii, BV.div_rr, BV.div_tr, BV.div_tr]),
68 :     (N.op_exp, [BV.exp_ri, BV.exp_rr]),
69 :     (N.op_curl, [BV.curl2D, BV.curl3D]),
70 :     (N.op_convolve, [BV.convolve_vk, BV.convolve_kv]),
71 :     (N.op_lt, [BV.lt_ii, BV.lt_rr]),
72 :     (N.op_neg, [BV.neg_i, BV.neg_t, BV.neg_f]),
73 :     (N.fn_clamp, [BV.clamp_rrr, BV.clamp_vvv]),
74 :     (N.fn_lerp, [BV.lerp5, BV.lerp3]),
75 :     (N.fn_evals, [BV.evals2x2, BV.evals3x3]),
76 :     (N.fn_evecs, [BV.evecs2x2, BV.evecs3x3]),
77 :     (* assignment operators are bound to the corresponding binary operator *)
78 :     (N.asgn_add, [BV.add_ii, BV.add_tt, BV.add_ff, BV.add_fr]),
79 :     (N.asgn_sub, [BV.sub_ii, BV.sub_tt, BV.sub_ff, BV.sub_fr]),
80 :     (N.asgn_mul, [BV.mul_ii, BV.mul_rr, BV.mul_tr, BV.mul_fr]),
81 :     (N.asgn_div, [BV.div_ii, BV.div_rr, BV.div_tr, BV.div_tr])
82 :     ]
83 : jhr 79
84 : jhr 2462 (* seed the basis environment *)
85 :     fun env () = let
86 : jhr 2356 fun insF (x, env) = Env.insertFunc(env, Atom.atom(Var.nameOf x), Env.PrimFun[x])
87 :     fun insV (x, env) = Env.insertGlobal(env, Atom.atom(Var.nameOf x), x)
88 :     fun insOvld ((f, fns), env) = Env.insertFunc(env, f, Env.PrimFun fns)
89 :     val env = List.foldl insF (Env.new()) basisFunctions
90 :     val env = List.foldl insV env basisVars
91 :     val env = List.foldl insOvld env overloads
92 :     in
93 :     env
94 :     end
95 : jhr 79
96 : jhr 169 local
97 :     val restricted = List.foldl Var.Set.add' Var.Set.empty [
98 : jhr 2636 BV.fn_image
99 : jhr 2356 ]
100 : jhr 169 in
101 :     fun isRestricted x = Var.Set.member (restricted, x)
102 :     end (* local *)
103 :    
104 : jhr 47 end

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