ArkScript
A small, fast, functional and scripting language for video games
Builtins.hpp
Go to the documentation of this file.
1 /**
2  * @file Builtins.hpp
3  * @author Alexandre Plateau (lexplt.dev@gmail.com)
4  * @brief Host the declaration of all the ArkScript builtins
5  * @version 0.1
6  * @date 2020-10-27
7  *
8  * @copyright Copyright (c) 2020-2021
9  *
10  */
11 
12 #ifndef ARK_BUILTINS_BUILTINS_HPP
13 #define ARK_BUILTINS_BUILTINS_HPP
14 
15 #include <vector>
16 
17 #include <Ark/VM/Value.hpp>
18 #include <Ark/Exceptions.hpp>
19 
20 namespace Ark
21 {
22  class VM;
23 }
24 
26 {
27  extern const Value falseSym;
28  extern const Value trueSym;
29  extern const Value nil;
30 
31  extern const std::vector<std::pair<std::string, Value>> builtins;
32 
33  // ------------------------------
34  // builtins functions: we must use the instruction `BUILTIN index`
35  // ------------------------------
36  namespace List
37  {
38  Value reverseList(std::vector<Value>& n, VM* vm); // list:reverse, single arg
39  Value findInList(std::vector<Value>& n, VM* vm); // list:find, 2 arguments
40  Value removeAtList(std::vector<Value>& n, VM* vm); // list:removeAt, 2 arguments -- DEPRECATED
41  Value sliceList(std::vector<Value>& n, VM* vm); // list:slice, 4 arguments
42  Value sort_(std::vector<Value>& n, VM* vm); // list:sort, 1 argument
43  Value fill(std::vector<Value>& n, VM* vm); // list:fill, 2 arguments
44  Value setListAt(std::vector<Value>& n, VM* vm); // list:setAt, 3 arguments
45  }
46 
47  namespace IO
48  {
49  Value print(std::vector<Value>& n, VM* vm); // print, multiple arguments
50  Value puts_(std::vector<Value>& n, VM* vm); // puts, multiple arguments
51  Value input(std::vector<Value>& n, VM* vm); // input, 0 or 1 argument
52  Value writeFile(std::vector<Value>& n, VM* vm); // io:writeFile, 2 or 3 arguments
53  Value readFile(std::vector<Value>& n, VM* vm); // io:readFile, 1 argument
54  Value fileExists(std::vector<Value>& n, VM* vm); // io:fileExists?, 1 argument
55  Value listFiles(std::vector<Value>& n, VM* vm); // io:listFiles, 1 argument
56  Value isDirectory(std::vector<Value>& n, VM* vm); // io:isDir?, 1 argument
57  Value makeDir(std::vector<Value>& n, VM* vm); // io:makeDir, 1 argument
58  Value removeFiles(std::vector<Value>& n, VM* vm); // io:removeFiles, multiple arguments
59  }
60 
61  namespace Time
62  {
63  Value timeSinceEpoch(std::vector<Value>& n, VM* vm); // time, 0 argument
64  }
65 
66  namespace System
67  {
68  Value system_(std::vector<Value>& n, VM* vm); // sys:exec, 1 argument
69  Value sleep(std::vector<Value>& n, VM* vm); // sleep, 1 argument
70  Value exit_(std::vector<Value>& n, VM* vm); // sys:exit, 1 argument
71  }
72 
73  namespace String
74  {
75  Value format(std::vector<Value>& n, VM* vm); // str:format, multiple arguments
76  Value findSubStr(std::vector<Value>& n, VM* vm); // str:find, 2 arguments
77  Value removeAtStr(std::vector<Value>& n, VM* vm); // str:removeAt, 2 arguments
78  Value ord(std::vector<Value>& n, VM* vm); // str:ord, 1 arguments
79  Value chr(std::vector<Value>& n, VM* vm); // str:chr, 1 arguments
80  }
81 
82  namespace Mathematics
83  {
84  Value exponential(std::vector<Value>& n, VM* vm); // math:exp, 1 argument
85  Value logarithm(std::vector<Value>& n, VM* vm); // math:ln, 1 argument
86  Value ceil_(std::vector<Value>& n, VM* vm); // math:ceil, 1 argument
87  Value floor_(std::vector<Value>& n, VM* vm); // math:floor, 1 argument
88  Value round_(std::vector<Value>& n, VM* vm); // math:round, 1 argument
89  Value isnan_(std::vector<Value>& n, VM* vm); // math:NaN?, 1 argument
90  Value isinf_(std::vector<Value>& n, VM* vm); // math:Inf?, 1 argument
91 
92  extern const Value pi_;
93  extern const Value e_;
94  extern const Value tau_;
95  extern const Value inf_;
96  extern const Value nan_;
97 
98  Value cos_(std::vector<Value>& n, VM* vm); // math:cos, 1 argument
99  Value sin_(std::vector<Value>& n, VM* vm); // math:sin, 1 argument
100  Value tan_(std::vector<Value>& n, VM* vm); // math:tan, 1 argument
101  Value acos_(std::vector<Value>& n, VM* vm); // math:arccos, 1 argument
102  Value asin_(std::vector<Value>& n, VM* vm); // math:arcsin, 1 argument
103  Value atan_(std::vector<Value>& n, VM* vm); // math:arctan, 1 argument
104  Value cosh_(std::vector<Value>& n, VM* vm); // math:cosh, 1 argument
105  Value sinh_(std::vector<Value>& n, VM* vm); // math:sinh, 1 argument
106  Value tanh_(std::vector<Value>& n, VM* vm); // math:tanh, 1 argument
107  Value acosh_(std::vector<Value>& n, VM* vm); // math:acosh, 1 argument
108  Value asinh_(std::vector<Value>& n, VM* vm); // math:asinh, 1 argument
109  Value atanh_(std::vector<Value>& n, VM* vm); // math:atanh, 1 argument
110  }
111 
112  namespace Async
113  {
114  Value async(std::vector<Value>& n, VM* vm); // async, 1+ arguments
115  Value await(std::vector<Value>& n, VM* vm); // await, 1 argument
116  }
117 }
118 
119 #endif
ArkScript homemade exceptions.
The ArkScript virtual machine, executing ArkScript bytecode.
Definition: VM.hpp:47
Value async(std::vector< Value > &n, VM *vm)
Value await(std::vector< Value > &n, VM *vm)
Value makeDir(std::vector< Value > &n, VM *vm)
Value input(std::vector< Value > &n, VM *vm)
Value readFile(std::vector< Value > &n, VM *vm)
Value puts_(std::vector< Value > &n, VM *vm)
Value print(std::vector< Value > &n, VM *vm)
Value writeFile(std::vector< Value > &n, VM *vm)
Value fileExists(std::vector< Value > &n, VM *vm)
Value listFiles(std::vector< Value > &n, VM *vm)
Value removeFiles(std::vector< Value > &n, VM *vm)
Value isDirectory(std::vector< Value > &n, VM *vm)
Value removeAtList(std::vector< Value > &n, VM *vm)
Value sort_(std::vector< Value > &n, VM *vm)
Value fill(std::vector< Value > &n, VM *vm)
Value reverseList(std::vector< Value > &n, VM *vm)
Value setListAt(std::vector< Value > &n, VM *vm)
Value findInList(std::vector< Value > &n, VM *vm)
Value sliceList(std::vector< Value > &n, VM *vm)
Value atan_(std::vector< Value > &n, VM *vm)
Value isinf_(std::vector< Value > &n, VM *vm)
Value atanh_(std::vector< Value > &n, VM *vm)
Value acos_(std::vector< Value > &n, VM *vm)
Value asin_(std::vector< Value > &n, VM *vm)
Value cosh_(std::vector< Value > &n, VM *vm)
Value logarithm(std::vector< Value > &n, VM *vm)
Value tan_(std::vector< Value > &n, VM *vm)
Value ceil_(std::vector< Value > &n, VM *vm)
Value cos_(std::vector< Value > &n, VM *vm)
Value floor_(std::vector< Value > &n, VM *vm)
Value tanh_(std::vector< Value > &n, VM *vm)
Value acosh_(std::vector< Value > &n, VM *vm)
Value sinh_(std::vector< Value > &n, VM *vm)
Value isnan_(std::vector< Value > &n, VM *vm)
Value exponential(std::vector< Value > &n, VM *vm)
Value asinh_(std::vector< Value > &n, VM *vm)
Value round_(std::vector< Value > &n, VM *vm)
Value sin_(std::vector< Value > &n, VM *vm)
Value ord(std::vector< Value > &n, VM *vm)
Value findSubStr(std::vector< Value > &n, VM *vm)
Value removeAtStr(std::vector< Value > &n, VM *vm)
Value format(std::vector< Value > &n, VM *vm)
Value chr(std::vector< Value > &n, VM *vm)
Value system_(std::vector< Value > &n, VM *vm)
Value sleep(std::vector< Value > &n, VM *vm)
Value exit_(std::vector< Value > &n, VM *vm)
Value timeSinceEpoch(std::vector< Value > &n, VM *vm)
const std::vector< std::pair< std::string, Value > > builtins
Definition: Builtins.hpp:21