17#define error(msg) MessageBoxA(NULL, std::string(msg).c_str(), "Phasor Runtime Error", MB_OK | MB_ICONERROR)
19#define error(msg) std::cerr << "Error: " << msg << std::endl
30 m_vm = std::make_unique<VM>();
39 auto program = parser.
parse();
43 m_vm = std::make_unique<VM>();
54 using RawFunctionPtr =
Value (*)(
const std::vector<Value> &,
VM *);
55 RawFunctionPtr rawPtr =
reinterpret_cast<RawFunctionPtr
>(function);
57 m_vm->registerNativeFunction(name, nativeFunction);
66 auto program = parser.
parse();
69 auto bytecode = codegen.
generate(*program);
84#elif defined(__APPLE__)
85 FFI ffi(
"/Library/Application Support/org.Phasor.Phasor/plugins",
m_vm.get());
86#elif defined(__linux__)
87 FFI ffi(
"/opt/Phasor/plugins",
m_vm.get());
89 m_vm->setImportHandler([](
const std::filesystem::path &path) {
90 throw std::runtime_error(
"Imports not supported in pure binary runtime yet: " + path.string());
95 catch (
const std::exception &e)
97 std::string errorMsg = std::string(e.what()) +
" | " +
m_vm->getInformation() +
"\n";
Bytecode binary format deserializer.
Bytecode deserialize(const std::vector< uint8_t > &data)
Deserialize bytecode from binary buffer.
Code generator for Phasor VM.
Bytecode generate(const AST::Program &program, const std::map< std::string, int > &existingVars={}, int nextVarIdx=0, bool replMode=false)
Generate bytecode from program.
Manages loading, registering, and unloading native FFI plugins.
std::vector< Token > tokenize()
void addNativeFunction(const std::string &name, void *function)
NativeRuntime(const std::vector< uint8_t > &bytecodeData, const int argc, const char **argv)
std::unique_ptr< VM > m_vm
static void eval(VM *vm, const std::string &script)
std::vector< uint8_t > m_bytecodeData
std::unique_ptr< AST::Program > parse()
static void registerFunctions(VM &vm)
Register all standard library functions.
static char ** argv
Command line arguments.
static int argc
Number of command line arguments.
void run(const Bytecode &bytecode)
Run the virtual machine.
A value in the Phasor VM.
The Phasor Programming Language and Runtime.
std::function< Value(const std::vector< Value > &args, VM *vm)> NativeFunction
Native function signature.