ArkScript
A small, lisp-inspired, functional scripting language
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 * @date 2020-10-27
6 *
7 * @copyright Copyright (c) 2020-2025
8 *
9 */
10
11#ifndef ARK_BUILTINS_BUILTINS_HPP
12#define ARK_BUILTINS_BUILTINS_HPP
13
14#include <vector>
15
16#include <Ark/VM/Value.hpp>
17#include <Ark/Exceptions.hpp>
18
19namespace Ark
20{
21 class VM;
22}
23
25{
26 extern const Value falseSym;
27 extern const Value trueSym;
28 extern const Value nil;
29 extern const Value platform;
30
31 ARK_API 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); // builtin__list:reverse, single arg
39 Value findInList(std::vector<Value>& n, VM* vm); // builtin__list:find, 2 arguments
40 Value sliceList(std::vector<Value>& n, VM* vm); // builtin__list:slice, 4 arguments
41 Value sort_(std::vector<Value>& n, VM* vm); // builtin__list:sort, 1 argument
42 Value fill(std::vector<Value>& n, VM* vm); // builtin__list:fill, 2 arguments
43 Value setListAt(std::vector<Value>& n, VM* vm); // builtin__list:setAt, 3 arguments
44 }
45
46 namespace IO
47 {
48 Value print(std::vector<Value>& n, VM* vm); // print, multiple arguments
49 Value puts_(std::vector<Value>& n, VM* vm); // puts, multiple arguments
50 Value input(std::vector<Value>& n, VM* vm); // input, 0 or 1 argument
51 Value writeFile(std::vector<Value>& n, VM* vm); // builtin__io:writeFile, 2 arguments
52 Value appendToFile(std::vector<Value>& n, VM* vm); // builtin__io:appendToFile, 2 arguments
53 Value readFile(std::vector<Value>& n, VM* vm); // builtin__io:readFile, 1 argument
54 Value fileExists(std::vector<Value>& n, VM* vm); // builtin__io:fileExists?, 1 argument
55 Value listFiles(std::vector<Value>& n, VM* vm); // builtin__io:listFiles, 1 argument
56 Value isDirectory(std::vector<Value>& n, VM* vm); // builtin__io:isDir?, 1 argument
57 Value makeDir(std::vector<Value>& n, VM* vm); // builtin__io:makeDir, 1 argument
58 Value removeFile(std::vector<Value>& n, VM* vm); // builtin__io:removeFile, 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); // builtin__sys:exec, 1 argument
69 Value sleep(std::vector<Value>& n, VM* vm); // builtin__sys:sleep, 1 argument
70 Value exit_(std::vector<Value>& n, VM* vm); // builtin__sys:exit, 1 argument
71 }
72
73 namespace String
74 {
75 Value format(std::vector<Value>& n, VM* vm); // format, multiple arguments
76 Value findSubStr(std::vector<Value>& n, VM* vm); // builtin__string:find, 2 arguments
77 Value removeAtStr(std::vector<Value>& n, VM* vm); // builtin__string:removeAt, 2 arguments
78 Value ord(std::vector<Value>& n, VM* vm); // builtin__string:ord, 1 arguments
79 Value chr(std::vector<Value>& n, VM* vm); // builtin__string:chr, 1 arguments
80 Value setStringAt(std::vector<Value>& n, VM* vm); // builtin__string::setAt, 3 arguments
81 }
82
83 namespace Mathematics
84 {
85 Value exponential(std::vector<Value>& n, VM* vm); // builtin__math:exp, 1 argument
86 Value logarithm(std::vector<Value>& n, VM* vm); // builtin__math:ln, 1 argument
87 Value ceil_(std::vector<Value>& n, VM* vm); // builtin__math:ceil, 1 argument
88 Value floor_(std::vector<Value>& n, VM* vm); // builtin__math:floor, 1 argument
89 Value round_(std::vector<Value>& n, VM* vm); // builtin__math:round, 1 argument
90 Value isnan_(std::vector<Value>& n, VM* vm); // builtin__math:NaN?, 1 argument
91 Value isinf_(std::vector<Value>& n, VM* vm); // builtin__math:Inf?, 1 argument
92
93 extern const Value pi_;
94 extern const Value e_;
95 extern const Value tau_;
96 extern const Value inf_;
97 extern const Value nan_;
98
99 Value cos_(std::vector<Value>& n, VM* vm); // builtin__math:cos, 1 argument
100 Value sin_(std::vector<Value>& n, VM* vm); // builtin__math:sin, 1 argument
101 Value tan_(std::vector<Value>& n, VM* vm); // builtin__math:tan, 1 argument
102 Value acos_(std::vector<Value>& n, VM* vm); // builtin__math:arccos, 1 argument
103 Value asin_(std::vector<Value>& n, VM* vm); // builtin__math:arcsin, 1 argument
104 Value atan_(std::vector<Value>& n, VM* vm); // builtin__math:arctan, 1 argument
105 Value cosh_(std::vector<Value>& n, VM* vm); // builtin__math:cosh, 1 argument
106 Value sinh_(std::vector<Value>& n, VM* vm); // builtin__math:sinh, 1 argument
107 Value tanh_(std::vector<Value>& n, VM* vm); // builtin__math:tanh, 1 argument
108 Value acosh_(std::vector<Value>& n, VM* vm); // builtin__math:acosh, 1 argument
109 Value asinh_(std::vector<Value>& n, VM* vm); // builtin__math:asinh, 1 argument
110 Value atanh_(std::vector<Value>& n, VM* vm); // builtin__math:atanh, 1 argument
111
112 Value random(std::vector<Value>& n, VM* vm); // random, 0-2 args
113 }
114
115 namespace Async
116 {
117 Value async(std::vector<Value>& n, VM* vm); // async, 1+ arguments
118 Value await(std::vector<Value>& n, VM* vm); // await, 1 argument
119 }
120}
121
122#endif
ArkScript homemade exceptions.
#define ARK_API
Definition Module.hpp:28
Default value type handled by the virtual machine.
The ArkScript virtual machine, executing ArkScript bytecode.
Definition VM.hpp:46
Value async(std::vector< Value > &n, VM *vm)
Value await(std::vector< Value > &n, VM *vm)
Value appendToFile(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 removeFile(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 isDirectory(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 random(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 setStringAt(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)
ARK_API const std::vector< std::pair< std::string, Value > > builtins