Phasor 3.3.0
Stack VM based Programming Language
Loading...
Searching...
No Matches
io.cpp
Go to the documentation of this file.
1#include "StdLib.hpp"
2#include <vformat.hpp>
3
4namespace Phasor
5{
6
21
22#ifndef SANDBOXED
23Value StdLib::io_clear(const std::vector<Value> &args, VM *vm)
24{
25 checkArgCount(args, 0, "clear");
26 vm->regRun(OpCode::PRINT_R, "\033[2J\033[H");
27 return Value();
28}
29#endif
30
31PhsString StdLib::io_c_format(const std::vector<Value> &args, VM *)
32{
33 if (args.empty())
34 {
35 return ""; // Return empty string if no arguments
36 }
37
38 const PhsString &fmt = args[0].asString();
39
40 // Make vector of format args
41 std::vector<Value> formatArgs(args.begin() + 1, args.end());
42
43 return vformat::str_format_v(fmt.c_str(), formatArgs);
44
45}
46
47PhsString StdLib::io_prints(const std::vector<Value> &args, VM *vm)
48{
49 checkArgCount(args, 1, "prints");
50 vm->regRun(OpCode::PRINT_R, args[0]);
51 return "";
52}
53
54PhsString StdLib::io_printf(const std::vector<Value> &args, VM *vm)
55{
56 checkArgCount(args, 1, "printf", true);
57 std::vector<Value> formatArgs(args.begin(), args.end());
58 vm->regRun(OpCode::PRINT_R, io_c_format(formatArgs, vm));
59 return "";
60}
61
62PhsString StdLib::io_puts(const std::vector<Value> &args, VM *vm)
63{
64 checkArgCount(args, 1, "puts", true);
65 PhsString input = args[0].toString();
66 vm->regRun(OpCode::PRINT_R, input.str() + "\n");
67 return "";
68}
69
70PhsString StdLib::io_putf(const std::vector<Value> &args, VM *vm)
71{
72 checkArgCount(args, 1, "putf", true);
73 std::vector<Value> formatArgs(args.begin(), args.end());
74 PhsString input = io_c_format(formatArgs, vm);
75 vm->regRun(OpCode::PRINT_R, input.str() + "\n");
76 return "";
77}
78
79#ifndef SANDBOXED
80Value StdLib::io_gets(const std::vector<Value> &args, VM *vm)
81{
82 checkArgCount(args, 0, "gets");
84}
85#endif
86
87PhsString StdLib::io_puts_error(const std::vector<Value> &args, VM *vm)
88{
89 checkArgCount(args, 1, "puts_error", true);
90 PhsString input = args[0].toString();
91 vm->regRun(OpCode::PRINTERROR_R, input.str() + "\n");
92 return "";
93}
94
95PhsString StdLib::io_putf_error(const std::vector<Value> &args, VM *vm)
96{
97 checkArgCount(args, 1, "putf_error", true);
98 std::vector<Value> formatArgs(args.begin(), args.end());
99 PhsString input = io_c_format(formatArgs, vm);
100 vm->regRun(OpCode::PRINTERROR_R, input.str() + "\n");
101 return "";
102}
103} // namespace Phasor
#define REGISTER1
Definition VM.hpp:154
const char * c_str() const noexcept
std::string str() const
static Value io_clear(const std::vector< Value > &args, VM *vm)
Clear the console.
Definition io.cpp:23
static PhsString io_prints(const std::vector< Value > &args, VM *vm)
Print string without newline.
Definition io.cpp:47
static void registerIOFunctions(VM *vm)
Definition io.cpp:7
static void checkArgCount(const std::vector< Value > &args, size_t minimumArguments, const std::string &name, bool allowMoreArguments=false)
Definition StdLib.cpp:44
static PhsString io_printf(const std::vector< Value > &args, VM *vm)
Print formatted string.
Definition io.cpp:54
static PhsString io_putf_error(const std::vector< Value > &args, VM *vm)
Print formatted string with newline to error output.
Definition io.cpp:95
static PhsString io_puts(const std::vector< Value > &args, VM *vm)
Print string with newline.
Definition io.cpp:62
static PhsString io_putf(const std::vector< Value > &args, VM *vm)
Print formatted string with newline.
Definition io.cpp:70
static PhsString io_c_format(const std::vector< Value > &args, VM *vm)
Format string.
Definition io.cpp:31
static Value io_gets(const std::vector< Value > &args, VM *vm)
Get string.
Definition io.cpp:80
static PhsString io_puts_error(const std::vector< Value > &args, VM *vm)
Print string with newline to error output.
Definition io.cpp:87
Virtual Machine.
Definition VM.hpp:36
void registerNativeFunction(const std::string &name, NativeFunction fn)
Register a native function.
Definition Native.cpp:5
Value regRun(OpCode opcode, Args &&...args)
Run an opcode with arguments pre-loaded into registers.
Definition VM.hpp:212
A value in the Phasor VM.
Definition Value.hpp:59
The Phasor Programming Language and Runtime.
Definition AST.hpp:13
@ PRINTERROR_R
Print register to stderr: printerror(R[rA]).
Definition ISA.hpp:155
@ READLINE_R
Read line into register: readline(R[rA]).
Definition ISA.hpp:156
@ PRINT_R
Print register: print(R[rA]).
Definition ISA.hpp:154
std::string str_format_v(const char *fmt, const std::vector< Phasor::Value > &args)
Definition vformat.hpp:419