Phasor 3.1.1
Stack VM based Programming Language
Loading...
Searching...
No Matches
StdLib.hpp
Go to the documentation of this file.
1#pragma once
2#include "../VM/VM.hpp"
3#include <Value.hpp>
4#include <functional>
5#include <map>
6#include <string>
7#include <vector>
8#include <algorithm>
9#include <cmath>
10#include <fstream>
11#include <sstream>
12#include <stdexcept>
13#include <stdlib.h>
14#include <string.h>
16namespace Phasor
17{
18
20using NativeFunction = std::function<Value(const std::vector<Value> &args, VM *vm)>;
21
25class StdLib
26{
27 public:
28 inline static void registerFunctions(VM &vm)
29 {
30#ifdef TRACING
31 vm.log(std::format("StdLib::{}(): using VM {:#x}\n", __func__, reinterpret_cast<std::uintptr_t>(&vm)));
32 vm.flush();
33#endif
35#ifndef SANDBOXED
37#endif
38 }
39
40 static char **argv;
41 static int argc;
42 static char **envp;
43
44 static void checkArgCount(const std::vector<Value> &args, size_t minimumArguments, const std::string &name,
45 bool allowMoreArguments = false);
46 private:
47 static Value std_import(const std::vector<Value> &args, VM *vm);
48#ifndef SANDBOXED
49 static Value std_assert(const std::vector<Value> &args, VM *vm);
50#endif
51
52#ifndef __EMSCRIPTEN__
53#ifndef SANDBOXED
54 static int dupenv(std::string &out, const char *name, char *const argp[]);
55#endif
56
57 static void registerMathFunctions(VM *vm);
58 static void registerStringFunctions(VM *vm);
59 static void registerTypeConvFunctions(VM *vm);
60 static void registerFileFunctions(VM *vm);
61 static void registerSysFunctions(VM *vm);
62 static void registerIOFunctions(VM *vm);
63
64 // Math functions
65 static Value math_sqrt(const std::vector<Value> &args, VM *vm);
66 static Value math_pow(const std::vector<Value> &args, VM *vm);
67 static Value math_abs(const std::vector<Value> &args, VM *vm);
68 static Value math_floor(const std::vector<Value> &args, VM *vm);
69 static Value math_ceil(const std::vector<Value> &args, VM *vm);
70 static Value math_round(const std::vector<Value> &args, VM *vm);
71 static Value math_min(const std::vector<Value> &args, VM *vm);
72 static Value math_max(const std::vector<Value> &args, VM *vm);
73 static Value math_log(const std::vector<Value> &args, VM *vm);
74 static Value math_exp(const std::vector<Value> &args, VM *vm);
75 static Value math_sin(const std::vector<Value> &args, VM *vm);
76 static Value math_cos(const std::vector<Value> &args, VM *vm);
77 static Value math_tan(const std::vector<Value> &args, VM *vm);
78
79#ifndef SANDBOXED
80 // File IO
81 static Value file_absolute(const std::vector<Value> &args, VM *vm);
82 static Value file_read(const std::vector<Value> &args, VM *vm);
83 static Value file_write(const std::vector<Value> &args, VM *vm);
84 static Value file_exists(const std::vector<Value> &args, VM *vm);
85 static Value file_read_line(const std::vector<Value> &args, VM *vm);
86 static Value file_write_line(const std::vector<Value> &args, VM *vm);
87 static Value file_append(const std::vector<Value> &args, VM *vm);
88 static Value file_delete(const std::vector<Value> &args, VM *vm);
89 static Value file_rename(const std::vector<Value> &args, VM *vm);
90 static Value file_current_directory(const std::vector<Value> &args, VM *vm);
91 static Value file_copy(const std::vector<Value> &args, VM *vm);
92 static Value file_move(const std::vector<Value> &args, VM *vm);
93 static Value file_property_edit(const std::vector<Value> &args, VM *vm);
94 static Value file_property_get(const std::vector<Value> &args, VM *vm);
95 static Value file_create(const std::vector<Value> &args, VM *vm);
96 static Value file_read_directory(const std::vector<Value> &args, VM *vm);
97 static Value file_statistics(const std::vector<Value> &args, VM *vm);
98 static Value file_create_directory(const std::vector<Value> &args, VM *vm);
99 static Value file_remove_directory(const std::vector<Value> &args, VM *vm);
100
101 // System (meaning VM/CRT more than actual system)
102 static Value sys_env(const std::vector<Value> &args, VM *vm);
103 static Value sys_argv(const std::vector<Value> &args, VM *vm);
104 static Value system_get_free_memory(const std::vector<Value> &args, VM *vm);
105 static Value sys_argc(const std::vector<Value> &args, VM *vm);
106 static Value sys_wait_for_input(const std::vector<Value> &args, VM *vm);
107 static Value sys_shell(const std::vector<Value> &args, VM *vm);
108 static Value sys_fork(const std::vector<Value> &args, VM *vm);
109 static Value sys_fork_detached(const std::vector<Value> &args, VM *vm);
110 static Value sys_crash(const std::vector<Value> &args, VM *vm);
111 static Value sys_reset(const std::vector<Value> &args, VM *vm);
112 static Value sys_pid(const std::vector<Value> &args, VM *vm);
113 static Value sys_os(const std::vector<Value> &args, VM *vm);
114#endif
115 static Value sys_time(const std::vector<Value> &args, VM *vm);
116 static Value sys_time_formatted(const std::vector<Value> &args, VM *vm);
117 static Value sys_sleep(const std::vector<Value> &args, VM *vm);
118 static Value sys_shutdown(const std::vector<Value> &args, VM *vm);
119
120 // Type conversion functions
121 static Value to_int(const std::vector<Value> &args, VM *vm);
122 static Value to_float(const std::vector<Value> &args, VM *vm);
123 static Value to_string(const std::vector<Value> &args, VM *vm);
124 static Value to_bool(const std::vector<Value> &args, VM *vm);
125
126 // String functions
127 static Value str_find(const std::vector<Value> &args, VM *vm);
128 static Value str_len(const std::vector<Value> &args, VM *vm);
129 static Value str_char_at(const std::vector<Value> &args, VM *vm);
130 static Value str_substr(const std::vector<Value> &args, VM *vm);
131 static Value str_concat(const std::vector<Value> &args, VM *vm);
132 static Value str_upper(const std::vector<Value> &args, VM *vm);
133 static Value str_lower(const std::vector<Value> &args, VM *vm);
134 static Value str_starts_with(const std::vector<Value> &args, VM *vm);
135 static Value str_ends_with(const std::vector<Value> &args, VM *vm);
136 // StringBuilder functions
137 static Value sb_new(const std::vector<Value> &args, VM *vm);
138 static Value sb_append(const std::vector<Value> &args, VM *vm);
139 static Value sb_to_string(const std::vector<Value> &args, VM *vm);
140 static Value sb_clear(const std::vector<Value> &args, VM *vm);
141 static Value sb_free(const std::vector<Value> &args, VM *vm);
142
143 // IO
144 static Value io_c_format(const std::vector<Value> &args, VM *vm);
145#ifndef SANDBOXED
146 static Value io_clear(const std::vector<Value> &args, VM *vm);
147#endif
148 static Value io_prints(const std::vector<Value> &args, VM *vm);
149 static Value io_printf(const std::vector<Value> &args, VM *vm);
150 static Value io_puts(const std::vector<Value> &args, VM *vm);
151 static Value io_putf(const std::vector<Value> &args, VM *vm);
152#ifndef SANDBOXED
153 static Value io_gets(const std::vector<Value> &args, VM *vm);
154#endif
155 static Value io_putf_error(const std::vector<Value> &args,
156 VM *vm);
157 static Value io_puts_error(const std::vector<Value> &args, VM *vm);
158#endif
159};
160
161} // namespace Phasor
Standard library Contains all the standard library functions.
Definition StdLib.hpp:26
static Value sb_clear(const std::vector< Value > &args, VM *vm)
Clear string builder.
Definition string.cpp:105
static Value str_char_at(const std::vector< Value > &args, VM *vm)
Get character at index.
Definition string.cpp:115
static void registerStringFunctions(VM *vm)
Definition string.cpp:7
static Value sys_env(const std::vector< Value > &args, VM *vm)
Get the current environment variables.
Definition system.cpp:103
static Value sys_fork_detached(const std::vector< Value > &args, VM *vm)
Run a native program detached.
Definition system.cpp:172
static Value file_current_directory(const std::vector< Value > &args, VM *vm)
Get/set working directory.
Definition file.cpp:181
static Value file_write_line(const std::vector< Value > &args, VM *vm)
Write a line to file.
Definition file.cpp:74
static Value math_sin(const std::vector< Value > &args, VM *vm)
Sine.
Definition math.cpp:119
static Value math_max(const std::vector< Value > &args, VM *vm)
Maximum.
Definition math.cpp:87
static Value sys_reset(const std::vector< Value > &args, VM *vm)
Reset the VM.
Definition system.cpp:193
static Value file_read_line(const std::vector< Value > &args, VM *vm)
Read a line from file.
Definition file.cpp:55
static Value io_clear(const std::vector< Value > &args, VM *vm)
Clear the console.
Definition io.cpp:29
static Value io_printf(const std::vector< Value > &args, VM *vm)
Print formatted string.
Definition io.cpp:95
static Value sb_free(const std::vector< Value > &args, VM *vm)
Free string builder.
Definition string.cpp:96
static Value math_floor(const std::vector< Value > &args, VM *vm)
Floor.
Definition math.cpp:46
static void registerFileFunctions(VM *vm)
Definition file.cpp:10
static Value file_absolute(const std::vector< Value > &args, VM *vm)
Get full path to relative path.
Definition file.cpp:33
static Value file_remove_directory(const std::vector< Value > &args, VM *vm)
Definition file.cpp:395
static char ** argv
Command line arguments.
Definition StdLib.hpp:40
static Value io_puts_error(const std::vector< Value > &args, VM *vm)
Print string with newline to error output.
Definition io.cpp:128
static Value sys_time(const std::vector< Value > &args, VM *vm)
Current time.
Definition system.cpp:42
static void registerIOFunctions(VM *vm)
Definition io.cpp:13
static Value str_concat(const std::vector< Value > &args, VM *vm)
Concatenate strings.
Definition string.cpp:148
static Value math_ceil(const std::vector< Value > &args, VM *vm)
Ceiling.
Definition math.cpp:53
static Value sys_argc(const std::vector< Value > &args, VM *vm)
Get the current number of command line arguments.
Definition system.cpp:134
static Value math_round(const std::vector< Value > &args, VM *vm)
Round.
Definition math.cpp:60
static Value io_puts(const std::vector< Value > &args, VM *vm)
Print string with newline.
Definition io.cpp:103
static Value sys_crash(const std::vector< Value > &args, VM *vm)
Crash the VM / Program.
Definition system.cpp:185
static Value file_rename(const std::vector< Value > &args, VM *vm)
Rename file.
Definition file.cpp:168
static Value io_putf(const std::vector< Value > &args, VM *vm)
Print formatted string with newline.
Definition io.cpp:111
static void registerFunctions(VM &vm)
Definition StdLib.hpp:28
static Value io_prints(const std::vector< Value > &args, VM *vm)
Print string without newline.
Definition io.cpp:88
static Value file_property_get(const std::vector< Value > &args, VM *vm)
Definition file.cpp:282
static Value file_exists(const std::vector< Value > &args, VM *vm)
Check if file exists.
Definition file.cpp:137
static void registerTypeConvFunctions(VM *vm)
Definition typeconv.cpp:6
static Value system_get_free_memory(const std::vector< Value > &args, VM *vm)
Get current free memory.
Definition system.cpp:140
static Value sys_os(const std::vector< Value > &args, VM *vm)
Get the current OS.
Definition system.cpp:84
static void checkArgCount(const std::vector< Value > &args, size_t minimumArguments, const std::string &name, bool allowMoreArguments=false)
Definition StdLib.cpp:44
static Value str_find(const std::vector< Value > &args, VM *vm)
Find string in string.
Definition string.cpp:30
static Value str_substr(const std::vector< Value > &args, VM *vm)
Get substring.
Definition string.cpp:129
static void registerMathFunctions(VM *vm)
Definition math.cpp:6
static Value sys_argv(const std::vector< Value > &args, VM *vm)
Get the current command line arguments.
Definition system.cpp:112
static Value to_int(const std::vector< Value > &args, VM *vm)
Convert to integer.
Definition typeconv.cpp:14
static Value sb_new(const std::vector< Value > &args, VM *vm)
Create new string builder.
Definition string.cpp:57
static Value str_lower(const std::vector< Value > &args, VM *vm)
Convert to lowercase.
Definition string.cpp:174
static Value file_read_directory(const std::vector< Value > &args, VM *vm)
Definition file.cpp:303
static int argc
Number of command line arguments.
Definition StdLib.hpp:41
static Value file_property_edit(const std::vector< Value > &args, VM *vm)
Definition file.cpp:269
static Value file_read(const std::vector< Value > &args, VM *vm)
Read file.
Definition file.cpp:41
static Value sys_wait_for_input(const std::vector< Value > &args, VM *vm)
Wait for input.
Definition system.cpp:146
static Value to_float(const std::vector< Value > &args, VM *vm)
Convert to float.
Definition typeconv.cpp:37
static Value io_c_format(const std::vector< Value > &args, VM *vm)
Format string.
Definition io.cpp:37
static Value file_delete(const std::vector< Value > &args, VM *vm)
Delete file.
Definition file.cpp:156
static Value file_statistics(const std::vector< Value > &args, VM *vm)
Definition file.cpp:324
static Value str_upper(const std::vector< Value > &args, VM *vm)
Convert to uppercase.
Definition string.cpp:166
static Value math_pow(const std::vector< Value > &args, VM *vm)
Power.
Definition math.cpp:29
static Value to_bool(const std::vector< Value > &args, VM *vm)
Convert to boolean.
Definition typeconv.cpp:49
static Value math_tan(const std::vector< Value > &args, VM *vm)
Tangent.
Definition math.cpp:131
static Value io_putf_error(const std::vector< Value > &args, VM *vm)
Print formatted string with newline to error output.
Definition io.cpp:136
static Value std_import(const std::vector< Value > &args, VM *vm)
Definition StdLib.cpp:59
static void registerSysFunctions(VM *vm)
Definition system.cpp:20
static Value sys_shutdown(const std::vector< Value > &args, VM *vm)
Shutdown the VM.
Definition system.cpp:212
static Value math_log(const std::vector< Value > &args, VM *vm)
Natural logarithm.
Definition math.cpp:107
static Value sys_shell(const std::vector< Value > &args, VM *vm)
Run a shell command.
Definition system.cpp:153
static Value file_copy(const std::vector< Value > &args, VM *vm)
Copy file.
Definition file.cpp:199
static Value sys_pid(const std::vector< Value > &args, VM *vm)
Get the current process ID.
Definition system.cpp:200
static Value math_exp(const std::vector< Value > &args, VM *vm)
Exponential.
Definition math.cpp:113
static Value sys_sleep(const std::vector< Value > &args, VM *vm)
Sleep for a specified amount of time.
Definition system.cpp:75
static Value file_create_directory(const std::vector< Value > &args, VM *vm)
Definition file.cpp:385
static Value math_cos(const std::vector< Value > &args, VM *vm)
Cosine.
Definition math.cpp:125
static Value file_write(const std::vector< Value > &args, VM *vm)
Write to file.
Definition file.cpp:124
static Value file_create(const std::vector< Value > &args, VM *vm)
Definition file.cpp:290
static Value std_assert(const std::vector< Value > &args, VM *vm)
Definition StdLib.cpp:110
static Value file_append(const std::vector< Value > &args, VM *vm)
Append to file.
Definition file.cpp:143
static Value sb_to_string(const std::vector< Value > &args, VM *vm)
Convert string builder to string.
Definition string.cpp:86
static Value math_abs(const std::vector< Value > &args, VM *vm)
Absolute value.
Definition math.cpp:37
static char ** envp
Environment variables.
Definition StdLib.hpp:42
static Value sb_append(const std::vector< Value > &args, VM *vm)
Append to string builder.
Definition string.cpp:75
static Value sys_time_formatted(const std::vector< Value > &args, VM *vm)
Current time formatted.
Definition system.cpp:51
static Value math_sqrt(const std::vector< Value > &args, VM *vm)
Square root.
Definition math.cpp:23
static Value io_gets(const std::vector< Value > &args, VM *vm)
Get string.
Definition io.cpp:121
static int dupenv(std::string &out, const char *name, char *const argp[])
Definition StdLib.cpp:13
static Value str_len(const std::vector< Value > &args, VM *vm)
Get string length.
Definition string.cpp:159
static Value str_ends_with(const std::vector< Value > &args, VM *vm)
Check if string ends with.
Definition string.cpp:194
static Value to_string(const std::vector< Value > &args, VM *vm)
Convert to string.
Definition typeconv.cpp:43
static Value sys_fork(const std::vector< Value > &args, VM *vm)
Run a native program.
Definition system.cpp:159
static Value file_move(const std::vector< Value > &args, VM *vm)
Move file.
Definition file.cpp:252
static Value math_min(const std::vector< Value > &args, VM *vm)
Minimum.
Definition math.cpp:67
static Value str_starts_with(const std::vector< Value > &args, VM *vm)
Check if string starts with.
Definition string.cpp:182
Virtual Machine.
Definition VM.hpp:30
void registerNativeFunction(const std::string &name, NativeFunction fn)
Register a native function.
Definition Native.cpp:5
void log(const Value &msg)
Log a Value to stdout.
Definition Utility.cpp:176
void flush()
Flush stdout.
Definition Utility.cpp:188
A value in the Phasor VM.
Definition Value.hpp:67
The Phasor Programming Language and Runtime.
Definition AST.hpp:11
std::function< Value(const std::vector< Value > &args, VM *vm)> NativeFunction
Native function signature.
Definition StdLib.hpp:20