23 m_vm = std::make_unique<VM>();
33 auto program = parser.
parse();
37 m_vm = std::make_unique<VM>();
50 using RawFunctionPtr =
Value (*)(
const std::vector<Value> &,
VM *);
51 RawFunctionPtr rawPtr =
reinterpret_cast<RawFunctionPtr
>(function);
53 m_vm->registerNativeFunction(name, nativeFunction);
62 auto program = parser.
parse();
65 auto bytecode = codegen.
generate(*program);
67 return vm->
run(bytecode);
79 m_vm->initFFI(
"plugins");
80#elif defined(__APPLE__)
81 m_vm->initFFI(
"/Library/Application Support/org.Phasor.Phasor/plugins");
82#elif defined(__linux__)
83 m_vm->initFFI(
"/usr/lib/phasor/plugins/");
85 m_vm->setImportHandler([](
const std::filesystem::path &path) {
86 throw std::runtime_error(
"Imports not supported in pure binary runtime yet: " + path.string());
91 catch (
const std::exception &e)
93 std::string errorMsg = std::string(e.what()) +
" | " +
m_vm->getInformation() +
"\n";
104 Lexer lexer(args[1].asString());
107 auto program = parser.
parse();
108 auto bytecode = codegen.
generate(*program);
109 return newVM.
run(bytecode);
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.
std::vector< Token > tokenize()
void addNativeFunction(const std::string &name, void *function)
static Value runScript(const std::vector< Value > &args, VM *vm)
std::unique_ptr< VM > m_vm
NativeRuntime(const std::vector< uint8_t > &bytecodeData, int argc, const char **argv)
static int eval(VM *vm, const std::string &script)
std::vector< uint8_t > m_bytecodeData
std::unique_ptr< AST::Program > parse()
static char ** argv
Command line arguments.
static void registerFunctions(VM &vm)
static void checkArgCount(const std::vector< Value > &args, size_t minimumArguments, const std::string &name, bool allowMoreArguments=false)
static int argc
Number of command line arguments.
int run(const Bytecode &bytecode)
Run the virtual machine Exits -1 on uncaught exception.
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.