Phasor 3.3.0
Stack VM based Programming Language
Loading...
Searching...
No Matches
Array.cpp
Go to the documentation of this file.
1#ifndef CMAKE_PCH
2#include "VM.hpp"
3#endif
4
5namespace Phasor {
6
13
14Value VM::native_array_literal(const std::vector<Value>& args, VM* /*vm*/)
15{
16 return Value::createArray(std::vector<Value>(args.begin(), args.end()));
17}
18
19Value VM::native_get_elem(const std::vector<Value>& args, VM* /*vm*/)
20{
21 if (args.size() < 2)
22 throw std::runtime_error("__get_elem requires array and index");
23
24 auto arr = args[0].asArray();
25 if (!arr)
26 throw std::runtime_error("__get_elem called on non-array");
27
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");
31
32 return (*arr)[static_cast<size_t>(idx)];
33}
34
35Value VM::native_set_elem(const std::vector<Value>& args, VM* /*vm*/)
36{
37 if (args.size() < 3)
38 throw std::runtime_error("__set_elem requires array, index, value");
39
40 auto arr = std::const_pointer_cast<Value::ArrayInstance>(args[0].asArray());
41 if (!arr)
42 throw std::runtime_error("__set_elem called on non-array");
43
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");
47
48 (*arr)[static_cast<size_t>(idx)] = args[2];
49 return args[2];
50}
51
52} // namespace Phasor
VM()
Definition VM.cpp:8
void registerArrayFunctions()
Definition Array.cpp:7
void registerNativeFunction(const std::string &name, NativeFunction fn)
Register a native function.
Definition Native.cpp:5
static Value native_array_literal(const std::vector< Value > &args, VM *vm)
Definition Array.cpp:14
static Value native_set_elem(const std::vector< Value > &args, VM *vm)
Definition Array.cpp:35
static Value native_get_elem(const std::vector< Value > &args, VM *vm)
Definition Array.cpp:19
A value in the Phasor VM.
Definition Value.hpp:59
static Value createArray(std::vector< Value > elements={})
Definition Value.hpp:572
The Phasor Programming Language and Runtime.
Definition AST.hpp:13
int64_t i64
Definition phsint.hpp:16