diff --git a/src/threading/SerialTypes.cc b/src/threading/SerialTypes.cc index 231f04b2d4..2804706489 100644 --- a/src/threading/SerialTypes.cc +++ b/src/threading/SerialTypes.cc @@ -557,14 +557,17 @@ Val* Value::ValueToVal(const std::string& source, const Value* val, bool& have_e } auto s = make_intrusive(std::move(set_index), nullptr); - auto* t = new TableVal(std::move(s)); + auto t = make_intrusive(std::move(s)); for ( int j = 0; j < val->val.set_val.size; j++ ) { Val* assignval = ValueToVal(source, val->val.set_val.vals[j], have_error); + if ( have_error ) + return nullptr; + t->Assign({AdoptRef{}, assignval}, nullptr); } - return t; + return t.release(); } case TYPE_VECTOR: @@ -589,6 +592,9 @@ Val* Value::ValueToVal(const std::string& source, const Value* val, bool& have_e for ( int j = 0; j < val->val.vector_val.size; j++ ) { auto el = ValueToVal(source, val->val.vector_val.vals[j], have_error); + if ( have_error ) + return nullptr; + v->Assign(j, {AdoptRef{}, el}); }