Reduce shared_ptr copies during dispatch

This commit is contained in:
Jason Turner
2016-05-03 08:51:44 -06:00
parent 9a526bc1ec
commit 17821be1e2
2 changed files with 3 additions and 3 deletions

View File

@@ -935,14 +935,14 @@ namespace chaiscript
This_Foist fi(*this, l_params.front()); This_Foist fi(*this, l_params.front());
auto func = boxed_cast<std::shared_ptr<const dispatch::Proxy_Function_Base>>(bv); auto func = boxed_cast<const dispatch::Proxy_Function_Base *>(bv);
try { try {
return (*func)({l_params.begin() + l_num_params, l_params.end()}, l_conversions); return (*func)({l_params.begin() + l_num_params, l_params.end()}, l_conversions);
} catch (const chaiscript::exception::bad_boxed_cast &) { } catch (const chaiscript::exception::bad_boxed_cast &) {
} catch (const chaiscript::exception::arity_error &) { } catch (const chaiscript::exception::arity_error &) {
} catch (const chaiscript::exception::guard_error &) { } catch (const chaiscript::exception::guard_error &) {
} }
throw chaiscript::exception::dispatch_error({l_params.begin() + l_num_params, l_params.end()}, std::vector<Const_Proxy_Function>{func}); throw chaiscript::exception::dispatch_error({l_params.begin() + l_num_params, l_params.end()}, std::vector<Const_Proxy_Function>{boxed_cast<Const_Proxy_Function>(bv)});
} else { } else {
return bv; return bv;
} }

View File

@@ -244,7 +244,7 @@ namespace chaiscript
Boxed_Value fn(this->children[0]->eval(t_ss)); Boxed_Value fn(this->children[0]->eval(t_ss));
try { try {
return (*t_ss->boxed_cast<const Const_Proxy_Function &>(fn))(params, t_ss.conversions()); return (*t_ss->boxed_cast<const dispatch::Proxy_Function_Base *>(fn))(params, t_ss.conversions());
} }
catch(const exception::dispatch_error &e){ catch(const exception::dispatch_error &e){
throw exception::eval_error(std::string(e.what()) + " with function '" + this->children[0]->text + "'", e.parameters, e.functions, false, *t_ss); throw exception::eval_error(std::string(e.what()) + " with function '" + this->children[0]->text + "'", e.parameters, e.functions, false, *t_ss);