22 throw std::runtime_error(
"__get_elem requires array and index");
24 auto arr = args[0].asArray();
26 throw std::runtime_error(
"__get_elem called on non-array");
28 i64 idx = args[1].asInt();
29 if (idx < 0 || idx >=
static_cast<i64>(arr->size()))
30 throw std::runtime_error(
"Index out of bounds");
32 return (*arr)[
static_cast<size_t>(idx)];
38 throw std::runtime_error(
"__set_elem requires array, index, value");
40 auto arr = std::const_pointer_cast<Value::ArrayInstance>(args[0].asArray());
42 throw std::runtime_error(
"__set_elem called on non-array");
44 i64 idx = args[1].asInt();
45 if (idx < 0 || idx >=
static_cast<i64>(arr->size()))
46 throw std::runtime_error(
"Index out of bounds");
48 (*arr)[
static_cast<size_t>(idx)] = args[2];
void registerArrayFunctions()
void registerNativeFunction(const std::string &name, NativeFunction fn)
Register a native function.
static Value native_array_literal(const std::vector< Value > &args, VM *vm)
static Value native_set_elem(const std::vector< Value > &args, VM *vm)
static Value native_get_elem(const std::vector< Value > &args, VM *vm)
A value in the Phasor VM.
static Value createArray(std::vector< Value > elements={})
The Phasor Programming Language and Runtime.