diff options
Diffstat (limited to 'src/wasm.h')
-rw-r--r-- | src/wasm.h | 40 |
1 files changed, 34 insertions, 6 deletions
diff --git a/src/wasm.h b/src/wasm.h index 424f89d0b..1d5677134 100644 --- a/src/wasm.h +++ b/src/wasm.h @@ -37,13 +37,41 @@ namespace wasm { -enum Feature : uint32_t { - MVP = 0, - Atomics = 1 << 0, - MutableGlobals = 1 << 1, - All = 0xffffffff, +struct FeatureSet { + enum Feature : uint32_t { + MVP = 0, + Atomics = 1 << 0, + MutableGlobals = 1 << 1, + TruncSat = 1 << 2, + All = Atomics | MutableGlobals | TruncSat + }; + + FeatureSet() : features(MVP) {} + FeatureSet(uint32_t features) : features(features) {} + + bool isMVP() const { return features == MVP; } + bool hasAtomics() const { return features & Atomics; } + bool hasMutableGlobals() const { return features & MutableGlobals; } + bool hasTruncSat() const { return features & TruncSat; } + bool hasAll() const { return features & (Atomics | MutableGlobals | TruncSat); } + + void makeMVP() { features = MVP; } + void setAtomics(bool v = true) { + features = v ? (features | Atomics) : (features & ~Atomics); + } + void setMutableGlobals(bool v = true) { + features = v ? (features | MutableGlobals) : (features & ~MutableGlobals); + } + void setTruncSat(bool v = true) { + features = v ? (features | TruncSat) : (features & ~TruncSat); + } + void setAll(bool v = true) { + features = v ? All : MVP; + } + + private: + uint32_t features; }; -typedef uint32_t FeatureSet; // An index in a wasm module typedef uint32_t Index; |