summaryrefslogtreecommitdiff
path: root/src/wasm.h
diff options
context:
space:
mode:
authorThomas Lively <7121787+tlively@users.noreply.github.com>2019-03-18 20:38:07 -0700
committerGitHub <noreply@github.com>2019-03-18 20:38:07 -0700
commitdd3873375ca7375b79105742b30fa03f9f8a0c24 (patch)
treef07e51c24c124cc0981d1d87214aad200e67f1a8 /src/wasm.h
parenta2dd7c4feae3c4da3a1f8de90171795d12eb8879 (diff)
downloadbinaryen-dd3873375ca7375b79105742b30fa03f9f8a0c24.tar.gz
binaryen-dd3873375ca7375b79105742b30fa03f9f8a0c24.tar.bz2
binaryen-dd3873375ca7375b79105742b30fa03f9f8a0c24.zip
Validate that types match features (#1949)
Refactors features into a new wasm-features.h file and updates the validator to check that all types are allowed. Currently this is only relevant for the v128 SIMD type, but new types will be added in the future. The test for this change is in #1948.
Diffstat (limited to 'src/wasm.h')
-rw-r--r--src/wasm.h44
1 files changed, 1 insertions, 43 deletions
diff --git a/src/wasm.h b/src/wasm.h
index 258ed0f35..ab9d7c816 100644
--- a/src/wasm.h
+++ b/src/wasm.h
@@ -35,52 +35,10 @@
#include "mixed_arena.h"
#include "support/name.h"
#include "wasm-type.h"
+#include "wasm-features.h"
namespace wasm {
-struct FeatureSet {
- enum Feature : uint32_t {
- MVP = 0,
- Atomics = 1 << 0,
- MutableGlobals = 1 << 1,
- TruncSat = 1 << 2,
- SIMD = 1 << 3,
- BulkMemory = 1 << 4,
- SignExt = 1 << 5,
- All = Atomics | MutableGlobals | TruncSat | SIMD | BulkMemory | SignExt
- };
-
- FeatureSet() : features(MVP) {}
- FeatureSet(uint32_t features) : features(features) {}
-
- bool isMVP() const { return features == MVP; }
- bool has(Feature f) const { return (features & f) == f; }
- bool hasAtomics() const { return features & Atomics; }
- bool hasMutableGlobals() const { return features & MutableGlobals; }
- bool hasTruncSat() const { return features & TruncSat; }
- bool hasSIMD() const { return features & SIMD; }
- bool hasBulkMemory() const { return features & BulkMemory; }
- bool hasSignExt() const { return features & SignExt; }
- bool hasAll() const { return features & All; }
-
- void makeMVP() { features = MVP; }
- void set(Feature f, bool v = true) { features = v ? (features | f) : (features & ~f); }
- void setAtomics(bool v = true) { set(Atomics, v); }
- void setMutableGlobals(bool v = true) { set(MutableGlobals, v); }
- void setTruncSat(bool v = true) { set(TruncSat, v); }
- void setSIMD(bool v = true) { set(SIMD, v); }
- void setBulkMemory(bool v = true) { set(BulkMemory, v); }
- void setSignExt(bool v = true) { set(SignExt, v); }
- void setAll(bool v = true) { features = v ? All : MVP; }
-
- bool operator<=(const FeatureSet& other) {
- return !(features & ~other.features);
- }
-
-private:
- uint32_t features;
-};
-
// An index in a wasm module
typedef uint32_t Index;