1 /*****
2  * builtin.h
3  * Tom Prince 2004/08/25
4  *
5  * Initialize builtins.
6  *****/
7 #ifndef BUILTIN_H
8 #define BUILTIN_H
9 
10 #include "vm.h"
11 #include "types.h"
12 #include "arrayop.h"
13 
14 namespace trans {
15 
16 class tenv;
17 class venv;
18 
19 // The base environments for built-in types and functions
20 void base_tenv(tenv &);
21 void base_venv(venv &);
22 
23 extern const types::formal noformal;
24 
25 // Add a function with one or more default arguments.
26 void addFunc(venv &ve, vm::bltin f, types::ty *result, symbol name,
27              types::formal f1=noformal, types::formal f2=noformal,
28              types::formal f3=noformal, types::formal f4=noformal,
29              types::formal f5=noformal, types::formal f6=noformal,
30              types::formal f7=noformal, types::formal f8=noformal,
31              types::formal f9=noformal, types::formal fA=noformal,
32              types::formal fB=noformal, types::formal fC=noformal,
33              types::formal fD=noformal, types::formal fE=noformal,
34              types::formal fF=noformal, types::formal fG=noformal,
35              types::formal fH=noformal, types::formal fI=noformal);
36 
37 // Adds standard functions for a newly added types.
38 void addArrayOps(venv &ve, types::array *t);
39 void addRecordOps(venv &ve, types::record *r);
40 void addFunctionOps(venv &ve, types::function *f);
41 
42 #ifdef HAVE_LIBGSL
43 types::record *getGSLModule();
44 void GSLrngFree();
45 #endif
46 
47 } //namespace trans
48 
49 namespace run {
50 extern double infinity;
51 
52 void single(vm::stack *Stack);
53 void arrayDeleteHelper(vm::stack *Stack);
54 
55 // Used by to optimize conditional jumps.
56 extern const vm::bltin intLess;
57 extern const vm::bltin intGreater;
58 }
59 
60 #endif //BUILTIN_H
61