Phasor 2.2.0
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 <functional>
4#include <map>
5#include <string>
6#include <vector>
7#include <algorithm>
8#include <cmath>
9#include <fstream>
10#include <sstream>
11#include <stdexcept>
12#include <stdlib.h>
13#include <string.h>
14
15namespace Phasor
16{
17
19using NativeFunction = std::function<Value(const std::vector<Value> &args, VM *vm)>;
20
24class StdLib
25{
26 public:
28 static void registerFunctions(VM &vm);
29
30 static char **argv;
31 static int argc;
32 static char **envp;
33
34 static void checkArgCount(const std::vector<Value> &args, size_t minimumArguments, const std::string &name,
35 bool allowMoreArguments = false);
36
37 private:
38 static int dupenv(std::string &out, const char *name, char *const argp[]);
39
40 static Value registerMathFunctions(const std::vector<Value> &args, VM *vm);
41 static Value registerStringFunctions(const std::vector<Value> &args, VM *vm);
42 static Value registerTypeConvFunctions(const std::vector<Value> &args, VM *vm);
43 static Value registerFileFunctions(const std::vector<Value> &args, VM *vm);
44 static Value registerSysFunctions(const std::vector<Value> &args, VM *vm);
45 static Value registerIOFunctions(const std::vector<Value> &args, VM *vm);
46
47 static Value registerRegexFunctions(const std::vector<Value> &args, VM *vm);
48
49 // Math functions
50 static Value math_sqrt(const std::vector<Value> &args, VM *vm);
51 static Value math_pow(const std::vector<Value> &args, VM *vm);
52 static Value math_abs(const std::vector<Value> &args, VM *vm);
53 static Value math_floor(const std::vector<Value> &args, VM *vm);
54 static Value math_ceil(const std::vector<Value> &args, VM *vm);
55 static Value math_round(const std::vector<Value> &args, VM *vm);
56 static Value math_min(const std::vector<Value> &args, VM *vm);
57 static Value math_max(const std::vector<Value> &args, VM *vm);
58 static Value math_log(const std::vector<Value> &args, VM *vm);
59 static Value math_exp(const std::vector<Value> &args, VM *vm);
60 static Value math_sin(const std::vector<Value> &args, VM *vm);
61 static Value math_cos(const std::vector<Value> &args, VM *vm);
62 static Value math_tan(const std::vector<Value> &args, VM *vm);
63
64 // File IO
65 static Value file_read(const std::vector<Value> &args, VM *vm);
66 static Value file_write(const std::vector<Value> &args, VM *vm);
67 static Value file_exists(const std::vector<Value> &args, VM *vm);
68 static Value file_read_line(const std::vector<Value> &args, VM *vm);
69 static Value file_write_line(const std::vector<Value> &args, VM *vm);
70 static Value file_append(const std::vector<Value> &args, VM *vm);
71 static Value file_delete(const std::vector<Value> &args, VM *vm);
72 static Value file_rename(const std::vector<Value> &args, VM *vm);
73 static Value file_current_directory(const std::vector<Value> &args, VM *vm);
74 static Value file_copy(const std::vector<Value> &args, VM *vm);
75 static Value file_move(const std::vector<Value> &args, VM *vm);
76 static Value file_property_edit(const std::vector<Value> &args, VM *vm);
77 static Value file_property_get(const std::vector<Value> &args, VM *vm);
78 static Value file_create(const std::vector<Value> &args, VM *vm);
79 static Value file_read_directory(const std::vector<Value> &args, VM *vm);
80 static Value file_statistics(const std::vector<Value> &args, VM *vm);
81 static Value file_create_directory(const std::vector<Value> &args, VM *vm);
82 static Value file_remove_directory(const std::vector<Value> &args, VM *vm);
83
84 // System (meaning VM/CRT more than actual system)
85 static Value sys_time(const std::vector<Value> &args, VM *vm);
86 static Value sys_time_formatted(const std::vector<Value> &args, VM *vm);
87 static Value sys_sleep(const std::vector<Value> &args, VM *vm);
88 static Value sys_clear(const std::vector<Value> &args, VM *vm);
89 static Value sys_os(const std::vector<Value> &args, VM *vm);
90 static Value sys_env(const std::vector<Value> &args, VM *vm);
91 static Value sys_argv(const std::vector<Value> &args, VM *vm);
92 static Value system_get_free_memory(const std::vector<Value> &args, VM *vm);
93 static Value sys_argc(const std::vector<Value> &args, VM *vm);
94 static Value sys_wait_for_input(const std::vector<Value> &args, VM *vm);
95 static Value sys_exec(const std::vector<Value> &args, VM *vm);
96 static Value sys_exec_get_output(const std::vector<Value> &args, VM *vm);
97 static Value sys_exec_get_error(const std::vector<Value> &args, VM *vm);
98 static Value sys_crash(const std::vector<Value> &args, VM *vm);
99 static Value sys_reset(const std::vector<Value> &args, VM *vm);
100 static Value sys_shutdown(const std::vector<Value> &args, VM *vm);
101 static Value sys_pid(const std::vector<Value> &args, VM *vm);
102
103 // Type conversion functions
104 static Value to_int(const std::vector<Value> &args, VM *vm);
105 static Value to_float(const std::vector<Value> &args, VM *vm);
106 static Value to_string(const std::vector<Value> &args, VM *vm);
107 static Value to_bool(const std::vector<Value> &args, VM *vm);
108
109 // String functions
110 static Value str_len(const std::vector<Value> &args, VM *vm);
111 static Value str_char_at(const std::vector<Value> &args, VM *vm);
112 static Value str_substr(const std::vector<Value> &args, VM *vm);
113 static Value str_concat(const std::vector<Value> &args, VM *vm);
114 static Value str_upper(const std::vector<Value> &args, VM *vm);
115 static Value str_lower(const std::vector<Value> &args, VM *vm);
116 static Value str_starts_with(const std::vector<Value> &args, VM *vm);
117 static Value str_ends_with(const std::vector<Value> &args, VM *vm);
118 // StringBuilder functions
119 static Value sb_new(const std::vector<Value> &args, VM *vm);
120 static Value sb_append(const std::vector<Value> &args, VM *vm);
121 static Value sb_to_string(const std::vector<Value> &args, VM *vm);
122 static Value sb_clear(const std::vector<Value> &args, VM *vm);
123 static Value sb_free(const std::vector<Value> &args, VM *vm);
124
125 // IO
126 static Value io_c_format(const std::vector<Value> &args, VM *vm);
127 static Value io_prints(const std::vector<Value> &args, VM *vm);
128 static Value io_printf(const std::vector<Value> &args, VM *vm);
129 static Value io_puts(const std::vector<Value> &args, VM *vm);
130 static Value io_putf(const std::vector<Value> &args, VM *vm);
131 static Value io_gets(const std::vector<Value> &args, VM *vm);
132 static Value io_putf_error(const std::vector<Value> &args,
133 VM *vm);
134 static Value io_puts_error(const std::vector<Value> &args, VM *vm);
135
136 // Regex
137 static Value regex_match(const std::vector<Value> &args, VM *vm);
138 static Value regex_search(const std::vector<Value> &args, VM *vm);
139 static Value regex_findall(const std::vector<Value> &args, VM *vm);
140 static Value regex_split(const std::vector<Value> &args, VM *vm);
141 static Value regex_replace(const std::vector<Value> &args, VM *vm);
142};
143
144} // namespace Phasor
Standard library Contains all the standard library functions.
Definition StdLib.hpp:25
static Value sb_clear(const std::vector< Value > &args, VM *vm)
Clear string builder.
Definition string.cpp:80
static Value registerIOFunctions(const std::vector< Value > &args, VM *vm)
Definition io.cpp:6
static Value str_char_at(const std::vector< Value > &args, VM *vm)
Get character at index.
Definition string.cpp:90
static Value sys_clear(const std::vector< Value > &args, VM *vm)
Clear the console.
Definition system.cpp:84
static Value sys_env(const std::vector< Value > &args, VM *vm)
Get the current environment variables.
Definition system.cpp:109
static Value file_current_directory(const std::vector< Value > &args, VM *vm)
Get/set working directory.
Definition file.cpp:175
static Value file_write_line(const std::vector< Value > &args, VM *vm)
Write a line to file.
Definition file.cpp:68
static Value math_sin(const std::vector< Value > &args, VM *vm)
Sine.
Definition math.cpp:122
static Value math_max(const std::vector< Value > &args, VM *vm)
Maximum.
Definition math.cpp:90
static Value sys_reset(const std::vector< Value > &args, VM *vm)
Reset the VM.
Definition system.cpp:187
static Value file_read_line(const std::vector< Value > &args, VM *vm)
Read a line from file.
Definition file.cpp:49
static Value io_printf(const std::vector< Value > &args, VM *vm)
Print formatted string.
Definition io.cpp:69
static void registerFunctions(VM &vm)
Register all standard library functions.
Definition StdLib.cpp:10
static Value sys_exec_get_output(const std::vector< Value > &args, VM *vm)
Run a shell command and get output.
Definition system.cpp:166
static Value sb_free(const std::vector< Value > &args, VM *vm)
Free string builder.
Definition string.cpp:71
static Value math_floor(const std::vector< Value > &args, VM *vm)
Floor.
Definition math.cpp:49
static Value file_remove_directory(const std::vector< Value > &args, VM *vm)
Definition file.cpp:381
static Value sys_exec_get_error(const std::vector< Value > &args, VM *vm)
Run a shell command and get error output.
Definition system.cpp:173
static char ** argv
Command line arguments.
Definition StdLib.hpp:30
static Value io_puts_error(const std::vector< Value > &args, VM *vm)
Print string with newline to error output.
Definition io.cpp:105
static Value sys_time(const std::vector< Value > &args, VM *vm)
Current time.
Definition system.cpp:43
static Value str_concat(const std::vector< Value > &args, VM *vm)
Concatenate strings.
Definition string.cpp:123
static Value math_ceil(const std::vector< Value > &args, VM *vm)
Ceiling.
Definition math.cpp:56
static Value sys_argc(const std::vector< Value > &args, VM *vm)
Get the current number of command line arguments.
Definition system.cpp:140
static Value math_round(const std::vector< Value > &args, VM *vm)
Round.
Definition math.cpp:63
static Value io_puts(const std::vector< Value > &args, VM *vm)
Print string with newline.
Definition io.cpp:78
static Value regex_search(const std::vector< Value > &args, VM *vm)
Check if regex is found.
Definition regex.cpp:43
static Value sys_crash(const std::vector< Value > &args, VM *vm)
Crash the VM / Program.
Definition system.cpp:180
static Value file_rename(const std::vector< Value > &args, VM *vm)
Rename file.
Definition file.cpp:162
static Value io_putf(const std::vector< Value > &args, VM *vm)
Print formatted string with newline.
Definition io.cpp:87
static Value regex_findall(const std::vector< Value > &args, VM *vm)
Find all regex matches.
Definition regex.cpp:94
static Value io_prints(const std::vector< Value > &args, VM *vm)
Print string without newline.
Definition io.cpp:61
static Value registerMathFunctions(const std::vector< Value > &args, VM *vm)
Definition math.cpp:7
static Value file_property_get(const std::vector< Value > &args, VM *vm)
Definition file.cpp:264
static Value file_exists(const std::vector< Value > &args, VM *vm)
Check if file exists.
Definition file.cpp:131
static Value system_get_free_memory(const std::vector< Value > &args, VM *vm)
Get current free memory.
Definition system.cpp:146
static Value sys_os(const std::vector< Value > &args, VM *vm)
Get the current OS.
Definition system.cpp:90
static void checkArgCount(const std::vector< Value > &args, size_t minimumArguments, const std::string &name, bool allowMoreArguments=false)
Definition StdLib.cpp:50
static Value str_substr(const std::vector< Value > &args, VM *vm)
Get substring.
Definition string.cpp:104
static Value sys_argv(const std::vector< Value > &args, VM *vm)
Get the current command line arguments.
Definition system.cpp:118
static Value to_int(const std::vector< Value > &args, VM *vm)
Convert to integer.
Definition typeconv.cpp:16
static Value sb_new(const std::vector< Value > &args, VM *vm)
Create new string builder.
Definition string.cpp:32
static Value str_lower(const std::vector< Value > &args, VM *vm)
Convert to lowercase.
Definition string.cpp:149
static Value file_read_directory(const std::vector< Value > &args, VM *vm)
Definition file.cpp:285
static int argc
Number of command line arguments.
Definition StdLib.hpp:31
static Value file_property_edit(const std::vector< Value > &args, VM *vm)
Definition file.cpp:251
static Value file_read(const std::vector< Value > &args, VM *vm)
Read file.
Definition file.cpp:35
static Value registerTypeConvFunctions(const std::vector< Value > &args, VM *vm)
Definition typeconv.cpp:6
static Value sys_wait_for_input(const std::vector< Value > &args, VM *vm)
Wait for input.
Definition system.cpp:152
static Value to_float(const std::vector< Value > &args, VM *vm)
Convert to float.
Definition typeconv.cpp:39
static Value io_c_format(const std::vector< Value > &args, VM *vm)
Format string.
Definition io.cpp:20
static Value file_delete(const std::vector< Value > &args, VM *vm)
Delete file.
Definition file.cpp:150
static Value file_statistics(const std::vector< Value > &args, VM *vm)
Definition file.cpp:306
static Value str_upper(const std::vector< Value > &args, VM *vm)
Convert to uppercase.
Definition string.cpp:141
static Value math_pow(const std::vector< Value > &args, VM *vm)
Power.
Definition math.cpp:32
static Value to_bool(const std::vector< Value > &args, VM *vm)
Convert to boolean.
Definition typeconv.cpp:51
static Value math_tan(const std::vector< Value > &args, VM *vm)
Tangent.
Definition math.cpp:134
static Value io_putf_error(const std::vector< Value > &args, VM *vm)
Print formatted string with newline to error output.
Definition io.cpp:113
static Value regex_replace(const std::vector< Value > &args, VM *vm)
Replace regex matches.
Definition regex.cpp:192
static Value sys_shutdown(const std::vector< Value > &args, VM *vm)
Shutdown the VM.
Definition system.cpp:194
static Value math_log(const std::vector< Value > &args, VM *vm)
Natural logarithm.
Definition math.cpp:110
static Value registerSysFunctions(const std::vector< Value > &args, VM *vm)
Definition system.cpp:20
static Value file_copy(const std::vector< Value > &args, VM *vm)
Copy file.
Definition file.cpp:193
static Value sys_pid(const std::vector< Value > &args, VM *vm)
Get the current process ID.
Definition system.cpp:203
static Value regex_match(const std::vector< Value > &args, VM *vm)
Check if regex matches.
Definition regex.cpp:22
static Value math_exp(const std::vector< Value > &args, VM *vm)
Exponential.
Definition math.cpp:116
static Value sys_sleep(const std::vector< Value > &args, VM *vm)
Sleep for a specified amount of time.
Definition system.cpp:76
static Value file_create_directory(const std::vector< Value > &args, VM *vm)
Definition file.cpp:371
static Value math_cos(const std::vector< Value > &args, VM *vm)
Cosine.
Definition math.cpp:128
static Value file_write(const std::vector< Value > &args, VM *vm)
Write to file.
Definition file.cpp:118
static Value file_create(const std::vector< Value > &args, VM *vm)
Definition file.cpp:272
static Value regex_split(const std::vector< Value > &args, VM *vm)
Split string by regex matches.
Definition regex.cpp:136
static Value file_append(const std::vector< Value > &args, VM *vm)
Append to file.
Definition file.cpp:137
static Value sb_to_string(const std::vector< Value > &args, VM *vm)
Convert string builder to string.
Definition string.cpp:61
static Value math_abs(const std::vector< Value > &args, VM *vm)
Absolute value.
Definition math.cpp:40
static char ** envp
Environment variables.
Definition StdLib.hpp:32
static Value sb_append(const std::vector< Value > &args, VM *vm)
Append to string builder.
Definition string.cpp:50
static Value sys_time_formatted(const std::vector< Value > &args, VM *vm)
Current time formatted.
Definition system.cpp:52
static Value math_sqrt(const std::vector< Value > &args, VM *vm)
Square root.
Definition math.cpp:26
static Value registerStringFunctions(const std::vector< Value > &args, VM *vm)
Definition string.cpp:7
static Value io_gets(const std::vector< Value > &args, VM *vm)
Get string.
Definition io.cpp:97
static int dupenv(std::string &out, const char *name, char *const argp[])
Definition StdLib.cpp:21
static Value str_len(const std::vector< Value > &args, VM *vm)
Get string length.
Definition string.cpp:134
static Value str_ends_with(const std::vector< Value > &args, VM *vm)
Check if string ends with.
Definition string.cpp:169
static Value sys_exec(const std::vector< Value > &args, VM *vm)
Run a shell command.
Definition system.cpp:159
static Value to_string(const std::vector< Value > &args, VM *vm)
Convert to string.
Definition typeconv.cpp:45
static Value file_move(const std::vector< Value > &args, VM *vm)
Move file.
Definition file.cpp:241
static Value math_min(const std::vector< Value > &args, VM *vm)
Minimum.
Definition math.cpp:70
static Value str_starts_with(const std::vector< Value > &args, VM *vm)
Check if string starts with.
Definition string.cpp:157
static Value registerRegexFunctions(const std::vector< Value > &args, VM *vm)
Definition regex.cpp:8
static Value registerFileFunctions(const std::vector< Value > &args, VM *vm)
Definition file.cpp:10
Virtual Machine.
Definition VM.hpp:18
A value in the Phasor VM.
Definition Value.hpp:33
The Phasor Programming Language and Runtime.
Definition AST.hpp:8
std::function< Value(const std::vector< Value > &args, VM *vm)> NativeFunction
Native function signature.
Definition StdLib.hpp:19