execute_visitor value types fixed

This commit is contained in:
ProgramSnail 2023-05-22 18:33:56 +03:00
parent 9aaac90ef6
commit 6bf64acc4d
5 changed files with 146 additions and 128 deletions

View file

@ -49,11 +49,30 @@ public:
return value_manager_.GetValueType(value_id);
}
void ModifiyValue(utils::IdType value_id, utils::ValueType new_value_type) {
GetValueType(value_id) = new_value_type;
}
utils::IdType ToModifiedValue(utils::IdType value_id, utils::ValueType new_value_type) {
Value value = *GetAnyValue(value_id);
return AddAnyValue(std::move(value), new_value_type);
}
utils::IdType ToModifiedValueCopy(utils::IdType value_id,
utils::ValueType new_value_type) {
Value* value = GetAnyValue(value_id);
return value->DeepCopy(value_manager_, new_value_type);
}
// make deep copy if not temporary
utils::IdType ToTemporaryValue(utils::IdType value_id) {
if (GetValueType(value_id) == utils::ValueType::Tmp) {
return value_id;
}
return ToModifiedValueCopy(value_id, utils::ValueType::Tmp);
}
ValueManager* GetValueManager() {
return &value_manager_;
}