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

SCM Repository

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

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

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

revision 1115, Thu May 5 04:42:18 2011 UTC revision 1116, Thu May 5 04:49:02 2011 UTC
# Line 10  Line 10 
10    
11      val env : Env.env      val env : Env.env
12    
   (* find an operator by name; this returns a singleton list for regular operators (including  
    * type-index operators) and a list of variables for overloaded operators.  
    *)  
     val findOp : Atom.atom -> AST.var list  
   
13    (* certain operations are restricted to only appear at global scope (i.e., not in an    (* certain operations are restricted to only appear at global scope (i.e., not in an
14     * strand body).  This function returns true for such operations.     * strand body).  This function returns true for such operations.
15     *)     *)
# Line 30  Line 25 
25      val basisFunctions = [      val basisFunctions = [
26          (* non-overloaded operators *)          (* non-overloaded operators *)
27            BV.op_at,            BV.op_at,
28            BV.op_convolve,            BV.op_cross,
29              BV.op_outer,
30            BV.op_D,            BV.op_D,
31            BV.op_norm,            BV.op_norm,
32            BV.op_not,            BV.op_not,
33          (* functions *)          (* functions *)
34              BV.fn_atan2,
35            BV.fn_CL,            BV.fn_CL,
36            BV.fn_convolve,       (* depreciated *)            BV.fn_convolve,       (* depreciated *)
37            BV.fn_cos,            BV.fn_cos,
38            BV.fn_dot,            BV.fn_cross,          (* depreciated *)
39              BV.fn_outer,          (* depreciated *)
40              BV.fn_dot,            (* depreciated *)
41              BV.fn_evals,
42              BV.fn_evecs,
43            BV.fn_inside,            BV.fn_inside,
44            BV.fn_load,            BV.fn_load,
45            BV.fn_max,            BV.fn_max,
46            BV.fn_min,            BV.fn_min,
47            BV.fn_modulate,            BV.fn_modulate,
48              BV.fn_normalize,
49            BV.fn_pow,            BV.fn_pow,
50            BV.fn_principleEvec,            BV.fn_principleEvec,
51            BV.fn_sin            BV.fn_sin,
52              BV.fn_sqrt,
53              BV.fn_tan,
54              BV.fn_trace
55          ]          ]
56    
57        val basisVars = [        val basisVars = [
# Line 54  Line 59 
59            BV.kn_bspln3,            BV.kn_bspln3,
60            BV.kn_bspln5,            BV.kn_bspln5,
61            BV.kn_ctmr,            BV.kn_ctmr,
62            BV.kn_tent            BV.kn_tent,
63              BV.kn_c1tent,
64              BV.kn_c2ctmr
65          ]          ]
66    
67      (* seed the basis environment *)    (* overloaded operators and functions *)
       val env = let  
             fun insF (x, env) = Env.insertFunc(env, Atom.atom(Var.nameOf x), x)  
             fun insV (x, env) = Env.insertGlobal(env, Atom.atom(Var.nameOf x), x)  
             val env = List.foldl insF (Env.new()) basisFunctions  
             val env = List.foldl insV env basisVars  
             in  
               env  
             end  
   
   (* overloaded operators *)  
68      val overloads = [      val overloads = [
           (N.op_add, [BV.add_ii, BV.add_tt, BV.add_ff]),  
           (N.op_sub, [BV.sub_ii, BV.sub_tt, BV.sub_ff]),  
           (N.op_mul, [BV.mul_ii, BV.mul_rr, BV.mul_rt, BV.mul_tr, BV.mul_rf, BV.mul_fr]),  
           (N.op_div, [BV.div_ii, BV.div_rr, BV.div_tr, BV.div_tr]),  
           (N.op_lt, [BV.lt_ii, BV.lt_rr]),  
69            (N.op_lte, [BV.lte_ii, BV.lte_rr]),            (N.op_lte, [BV.lte_ii, BV.lte_rr]),
70            (N.op_equ, [BV.equ_bb, BV.equ_ii, BV.equ_ss, BV.equ_rr]),            (N.op_equ, [BV.equ_bb, BV.equ_ii, BV.equ_ss, BV.equ_rr]),
71            (N.op_neq, [BV.neq_bb, BV.neq_ii, BV.neq_ss, BV.neq_rr]),            (N.op_neq, [BV.neq_bb, BV.neq_ii, BV.neq_ss, BV.neq_rr]),
72            (N.op_gte, [BV.gte_ii, BV.gte_rr]),            (N.op_gte, [BV.gte_ii, BV.gte_rr]),
73            (N.op_gt, [BV.gt_ii, BV.gt_rr]),            (N.op_gt, [BV.gt_ii, BV.gt_rr]),
74            (N.op_neg, [BV.neg_i, BV.neg_t, BV.neg_f])            (N.op_add, [BV.add_ii, BV.add_tt, BV.add_ff]),
75              (N.op_sub, [BV.sub_ii, BV.sub_tt, BV.sub_ff]),
76              (N.op_mul, [BV.mul_ii, BV.mul_rr, BV.mul_rt, BV.mul_tr, BV.mul_rf, BV.mul_fr]),
77              (N.op_div, [BV.div_ii, BV.div_rr, BV.div_tr, BV.div_tr]),
78              (N.op_exp, [BV.exp_ri, BV.exp_rr]),
79              (N.op_convolve, [BV.convolve_vk, BV.convolve_kv]),
80              (N.op_lt, [BV.lt_ii, BV.lt_rr]),
81              (N.op_neg, [BV.neg_i, BV.neg_t, BV.neg_f]),
82              (N.fn_lerp, [BV.lerp5, BV.lerp3])
83          ]          ]
84    
85      local      (* seed the basis environment *)
86        val find = let      val env = let
87              val tbl = ATbl.mkTable(64, Fail "op table")            fun insF (x, env) = Env.insertFunc(env, Atom.atom(Var.nameOf x), [x])
88              fun insV (x, env) = Env.insertGlobal(env, Atom.atom(Var.nameOf x), x)
89              fun insOvld ((f, fns), env) = Env.insertFunc(env, f, fns)
90              val env = List.foldl insF (Env.new()) basisFunctions
91              val env = List.foldl insV env basisVars
92              val env = List.foldl insOvld env overloads
93              in              in
94                List.app (ATbl.insert tbl) overloads;              env
               ATbl.find tbl  
95              end              end
     in  
     fun findOp name = (case Env.findFunc(env, name)  
            of SOME x => [x]  
             | NONE => (case find name  
                  of SOME xs => xs  
                   | NONE => raise Fail("unknown operator "^Atom.toString name)  
                 (* end case *))  
           (* end case *))  
     end (* local *)  
96    
97      local      local
98        val restricted = List.foldl Var.Set.add' Var.Set.empty [        val restricted = List.foldl Var.Set.add' Var.Set.empty [

Legend:
Removed from v.1115  
changed lines
  Added in v.1116

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