// This file is part of the Luau programming language and is licensed under MIT License; see LICENSE.txt for details #pragma once #include "Luau/Common.h" #include <string.h> template<typename T> struct ScopedFValue { private: Luau::FValue<T>* value = nullptr; T oldValue = T(); public: ScopedFValue(const char* name, T newValue) { for (Luau::FValue<T>* v = Luau::FValue<T>::list; v; v = v->next) if (strcmp(v->name, name) == 0) { value = v; oldValue = v->value; v->value = newValue; break; } LUAU_ASSERT(value); } ScopedFValue(const ScopedFValue&) = delete; ScopedFValue& operator=(const ScopedFValue&) = delete; ScopedFValue(ScopedFValue&& rhs) { value = rhs.value; oldValue = rhs.oldValue; rhs.value = nullptr; } ScopedFValue& operator=(ScopedFValue&& rhs) { value = rhs.value; oldValue = rhs.oldValue; rhs.value = nullptr; return *this; } ~ScopedFValue() { if (value) value->value = oldValue; } }; using ScopedFastFlag = ScopedFValue<bool>; using ScopedFastInt = ScopedFValue<int>;