11 m_scope(std::make_shared<ClosureScope>(scope)),
22 return std::ranges::any_of(std::ranges::views::keys(
m_scope->m_data), [&vm, &end](
const auto&
id) {
23 return end.ends_with(
":" + vm.m_state.m_symbols[id]);
29 std::string out =
"(";
30 for (std::size_t i = 0, end = m_scope->m_data.size(); i < end; ++i)
35 out +=
'.' + vm.m_state.m_symbols[m_scope->m_data[i].first] +
'=';
36 out += m_scope->m_data[i].second.toString(vm);
44 if (A.m_page_addr != B.m_page_addr)
47 return *A.m_scope == *B.m_scope;
Subtype of the value type, handling closures.
Subtype of the value type, handling closures.
The ArkScript virtual machine.
The ArkScript virtual machine, executing ArkScript bytecode.
A class to store fields captured by a closure.
std::string toString(VM &vm) const noexcept
Print the closure to a string.
bool hasFieldEndingWith(const std::string &end, const VM &vm) const
Used when generating error messages in the VM, to see if a symbol might have been wrongly fully quali...
std::shared_ptr< ClosureScope > m_scope
Closure(const ClosureScope &scope, PageAddr_t pa) noexcept
Construct a new Closure object.
bool operator==(const Namespace &A, const Namespace &B)