summaryrefslogtreecommitdiff
path: root/src/wasm.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/wasm.h')
-rw-r--r--src/wasm.h40
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;