SCM Repository
Annotation of /branches/vis12/src/compiler/basis/basis.sml
Parent Directory
|
Revision Log
Revision 1926 - (view) (download)
1 : | jhr | 47 | (* basis.sml |
2 : | * | ||
3 : | jhr | 435 | * COPYRIGHT (c) 2010 The Diderot Project (http://diderot-language.cs.uchicago.edu) |
4 : | jhr | 47 | * All rights reserved. |
5 : | * | ||
6 : | * Type definitions for Basis functions. | ||
7 : | *) | ||
8 : | |||
9 : | jhr | 78 | structure Basis : sig |
10 : | |||
11 : | val env : Env.env | ||
12 : | |||
13 : | jhr | 169 | (* certain operations are restricted to only appear at global scope (i.e., not in an |
14 : | jhr | 511 | * strand body). This function returns true for such operations. |
15 : | jhr | 169 | *) |
16 : | val isRestricted : AST.var -> bool | ||
17 : | |||
18 : | jhr | 78 | end = struct |
19 : | jhr | 47 | |
20 : | jhr | 79 | structure N = BasisNames |
21 : | structure BV = BasisVars | ||
22 : | structure ATbl = AtomTable | ||
23 : | jhr | 63 | |
24 : | jhr | 68 | (* non-overloaded operators, etc. *) |
25 : | jhr | 169 | val basisFunctions = [ |
26 : | jhr | 79 | (* non-overloaded operators *) |
27 : | jhr | 1116 | BV.op_cross, |
28 : | BV.op_outer, | ||
29 : | jhr | 79 | BV.op_D, |
30 : | jhr | 1383 | BV.op_Dotimes, |
31 : | jhr | 79 | BV.op_norm, |
32 : | BV.op_not, | ||
33 : | jhr | 63 | (* functions *) |
34 : | jhr | 1926 | BV.fn_image, |
35 : | jhr | 79 | BV.fn_inside, |
36 : | jhr | 1925 | BV.fn_length, |
37 : | jhr | 79 | BV.fn_load, |
38 : | jhr | 143 | BV.fn_max, |
39 : | BV.fn_min, | ||
40 : | jhr | 83 | BV.fn_modulate, |
41 : | jhr | 1116 | BV.fn_normalize, |
42 : | jhr | 91 | BV.fn_principleEvec, |
43 : | jhr | 1116 | BV.fn_trace |
44 : | jhr | 1922 | ] @ (List.map #2 BV.mathFns) |
45 : | jhr | 169 | |
46 : | jhr | 1116 | val basisVars = [ |
47 : | jhr | 63 | (* kernels *) |
48 : | jhr | 79 | BV.kn_bspln3, |
49 : | jhr | 169 | BV.kn_bspln5, |
50 : | BV.kn_ctmr, | ||
51 : | jhr | 1116 | BV.kn_tent, |
52 : | BV.kn_c1tent, | ||
53 : | BV.kn_c2ctmr | ||
54 : | jhr | 63 | ] |
55 : | |||
56 : | jhr | 1116 | (* overloaded operators and functions *) |
57 : | jhr | 79 | val overloads = [ |
58 : | jhr | 1687 | (N.op_at, [BV.at_Td, BV.at_dT, BV.at_dd]), |
59 : | jhr | 1116 | (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 : | jhr | 470 | (N.op_add, [BV.add_ii, BV.add_tt, BV.add_ff]), |
65 : | (N.op_sub, [BV.sub_ii, BV.sub_tt, BV.sub_ff]), | ||
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 : | jhr | 1116 | (N.op_exp, [BV.exp_ri, BV.exp_rr]), |
69 : | (N.op_convolve, [BV.convolve_vk, BV.convolve_kv]), | ||
70 : | jhr | 79 | (N.op_lt, [BV.lt_ii, BV.lt_rr]), |
71 : | jhr | 1116 | (N.op_neg, [BV.neg_i, BV.neg_t, BV.neg_f]), |
72 : | jhr | 1295 | (N.fn_clamp, [BV.clamp_rrr, BV.clamp_vvv]), |
73 : | jhr | 1296 | (N.fn_lerp, [BV.lerp5, BV.lerp3]), |
74 : | jhr | 1640 | (N.fn_evals, [BV.evals2x2, BV.evals3x3]), |
75 : | (N.fn_evecs, [BV.evecs2x2, BV.evecs3x3]), | ||
76 : | jhr | 1296 | (* assignment operators are bound to the corresponding binary operator *) |
77 : | (N.asgn_add, [BV.add_ii, BV.add_tt, BV.add_ff]), | ||
78 : | (N.asgn_sub, [BV.sub_ii, BV.sub_tt, BV.sub_ff]), | ||
79 : | (N.asgn_mul, [BV.mul_ii, BV.mul_rr, BV.mul_tr, BV.mul_fr]), | ||
80 : | (N.asgn_div, [BV.div_ii, BV.div_rr, BV.div_tr, BV.div_tr]) | ||
81 : | jhr | 79 | ] |
82 : | |||
83 : | jhr | 1116 | (* seed the basis environment *) |
84 : | val env = let | ||
85 : | fun insF (x, env) = Env.insertFunc(env, Atom.atom(Var.nameOf x), [x]) | ||
86 : | fun insV (x, env) = Env.insertGlobal(env, Atom.atom(Var.nameOf x), x) | ||
87 : | fun insOvld ((f, fns), env) = Env.insertFunc(env, f, fns) | ||
88 : | val env = List.foldl insF (Env.new()) basisFunctions | ||
89 : | val env = List.foldl insV env basisVars | ||
90 : | val env = List.foldl insOvld env overloads | ||
91 : | in | ||
92 : | env | ||
93 : | end | ||
94 : | jhr | 79 | |
95 : | jhr | 169 | local |
96 : | val restricted = List.foldl Var.Set.add' Var.Set.empty [ | ||
97 : | jhr | 1926 | BV.fn_image, BV.fn_load |
98 : | jhr | 169 | ] |
99 : | in | ||
100 : | fun isRestricted x = Var.Set.member (restricted, x) | ||
101 : | end (* local *) | ||
102 : | |||
103 : | jhr | 47 | end |
root@smlnj-gforge.cs.uchicago.edu | ViewVC Help |
Powered by ViewVC 1.0.0 |