summaryrefslogtreecommitdiffstats
path: root/host/lib/wax.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'host/lib/wax.cpp')
-rw-r--r--host/lib/wax.cpp14
1 files changed, 9 insertions, 5 deletions
diff --git a/host/lib/wax.cpp b/host/lib/wax.cpp
index c08398c50..0e2e82a3a 100644
--- a/host/lib/wax.cpp
+++ b/host/lib/wax.cpp
@@ -36,7 +36,11 @@ public:
link_args_t(const wax::obj *obj_ptr) : _obj_ptr(obj_ptr){
/* NOP */
}
- wax::obj & operator()(void){
+ wax::obj & operator()(void) const{
+ //recursively resolve link args to get at original pointer
+ if (_obj_ptr->type() == typeid(link_args_t)){
+ return _obj_ptr->as<link_args_t>()();
+ }
return *const_cast<wax::obj *>(_obj_ptr);
}
private:
@@ -56,10 +60,10 @@ public:
proxy_args_t(const wax::obj *obj_ptr, const wax::obj &key) : _key(key){
_obj_link = obj_ptr->get_link();
}
- wax::obj & operator()(void){
- return wax::cast<link_args_t>(_obj_link)();
+ wax::obj & operator()(void) const{
+ return _obj_link.as<link_args_t>()();
}
- const wax::obj & key(void){
+ const wax::obj & key(void) const{
return _key;
}
private:
@@ -90,7 +94,7 @@ wax::obj wax::obj::operator[](const obj &key){
obj val = resolve();
//check if its a special link and call
if (val.type() == typeid(link_args_t)){
- return cast<link_args_t>(val)()[key];
+ return val.as<link_args_t>()()[key];
}
//unknown obj
throw std::runtime_error("cannot use [] on non wax::obj link");