Don't clone return values into vector/map

This commit is contained in:
Jason Turner 2015-07-02 22:10:09 -06:00
parent 9e93d61236
commit b270a198dc

View File

@ -1047,7 +1047,12 @@ namespace chaiscript
std::vector<Boxed_Value> vec; std::vector<Boxed_Value> vec;
if (!children.empty()) { if (!children.empty()) {
for (const auto &child : children[0]->children) { for (const auto &child : children[0]->children) {
vec.push_back(t_ss.call_function("clone", child->eval(t_ss))); auto obj = child->eval(t_ss);
if (!obj.is_return_value()) {
vec.push_back(t_ss.call_function("clone", obj));
} else {
vec.push_back(std::move(obj));
}
} }
} }
return const_var(std::move(vec)); return const_var(std::move(vec));
@ -1073,8 +1078,12 @@ namespace chaiscript
std::map<std::string, Boxed_Value> retval; std::map<std::string, Boxed_Value> retval;
for (const auto &child : children[0]->children) { for (const auto &child : children[0]->children) {
Boxed_Value bv = t_ss.call_function("clone", child->children[1]->eval(t_ss)); auto obj = child->children[1]->eval(t_ss);
retval[t_ss.boxed_cast<std::string>(child->children[0]->eval(t_ss))] = std::move(bv); if (!obj.is_return_value()) {
obj = t_ss.call_function("clone", obj);
}
retval[t_ss.boxed_cast<std::string>(child->children[0]->eval(t_ss))] = std::move(obj);
} }
return const_var(std::move(retval)); return const_var(std::move(retval));