From 8d238e65a88502b897f1944b7844afffdbc0d761 Mon Sep 17 00:00:00 2001 From: olpc user Date: Mon, 9 Dec 2019 02:49:25 -0800 Subject: level 1 subref operator --- starts/meaning-vm/level-1/baseref.hpp | 1 + starts/meaning-vm/level1.cpp | 10 +++++----- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/starts/meaning-vm/level-1/baseref.hpp b/starts/meaning-vm/level-1/baseref.hpp index 187b5df..e97db2d 100644 --- a/starts/meaning-vm/level-1/baseref.hpp +++ b/starts/meaning-vm/level-1/baseref.hpp @@ -28,6 +28,7 @@ struct baseref : public level0::baseref explicit operator char const *() const { return getname(self)->data.c_str(); } ref operator-(ref other) const { return hyphenate(self, other); } + ref operator[](ref subref) const { return self.get(subref); } template void vset(ref const & type, T const & v) { self.set(type, level1::alloc(v)); } diff --git a/starts/meaning-vm/level1.cpp b/starts/meaning-vm/level1.cpp index 2e005e2..9498ddf 100644 --- a/starts/meaning-vm/level1.cpp +++ b/starts/meaning-vm/level1.cpp @@ -38,11 +38,11 @@ int main() ); (make-linked).fset( act, - (std::function)[](ref args) + (std::function)[&](ref args) { - ref source = args.get("A"); - ref type = args.get("B"); - ref target = args.get("C"); + ref source = args[A]; + ref type = args[B]; + ref target = args[C]; std::cout << "Linking " << source.name() << " by " << type.name() << " to " << target.name() << std::endl; source.link(type, target); } @@ -51,7 +51,7 @@ int main() std::cout << (make-linked).dump("dumped", true) << std::endl; decls(apple, fruit); - (make-linked).get(act) + (make-linked)[act] (a(function-argument) .link( A, apple, -- cgit v1.2.3