diff options
author | Heejin Ahn <aheejin@gmail.com> | 2020-01-02 16:19:19 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-01-02 16:19:19 -0800 |
commit | 3fbec348f6de9c213d0091984305f9bb4906af47 (patch) | |
tree | 7ee30c9d695efa6dafc4790e54c836bf939c64fe /src | |
parent | bcc76146fed433cbc8ba01a9f568d979c145110b (diff) | |
download | binaryen-3fbec348f6de9c213d0091984305f9bb4906af47.tar.gz binaryen-3fbec348f6de9c213d0091984305f9bb4906af47.tar.bz2 binaryen-3fbec348f6de9c213d0091984305f9bb4906af47.zip |
Use FeatureSet instead of FeatureSet::Feature(NFC) (#2562)
This uses `FeatureSet` in place of `FeatureSet::Feature` when possible,
making it possible for functions take a set of multiple features as one
argument.
Diffstat (limited to 'src')
-rw-r--r-- | src/binaryen-c.cpp | 22 | ||||
-rw-r--r-- | src/tools/fuzzing.h | 42 | ||||
-rw-r--r-- | src/wasm-features.h | 5 |
3 files changed, 34 insertions, 35 deletions
diff --git a/src/binaryen-c.cpp b/src/binaryen-c.cpp index 826193e06..a98ff3407 100644 --- a/src/binaryen-c.cpp +++ b/src/binaryen-c.cpp @@ -453,37 +453,37 @@ BinaryenExternalKind BinaryenExternalEvent(void) { // Features BinaryenFeatures BinaryenFeatureMVP(void) { - return static_cast<BinaryenFeatures>(FeatureSet::Feature::MVP); + return static_cast<BinaryenFeatures>(FeatureSet::MVP); } BinaryenFeatures BinaryenFeatureAtomics(void) { - return static_cast<BinaryenFeatures>(FeatureSet::Feature::Atomics); + return static_cast<BinaryenFeatures>(FeatureSet::Atomics); } BinaryenFeatures BinaryenFeatureBulkMemory(void) { - return static_cast<BinaryenFeatures>(FeatureSet::Feature::BulkMemory); + return static_cast<BinaryenFeatures>(FeatureSet::BulkMemory); } BinaryenFeatures BinaryenFeatureMutableGlobals(void) { - return static_cast<BinaryenFeatures>(FeatureSet::Feature::MutableGlobals); + return static_cast<BinaryenFeatures>(FeatureSet::MutableGlobals); } BinaryenFeatures BinaryenFeatureNontrappingFPToInt(void) { - return static_cast<BinaryenFeatures>(FeatureSet::Feature::TruncSat); + return static_cast<BinaryenFeatures>(FeatureSet::TruncSat); } BinaryenFeatures BinaryenFeatureSignExt(void) { - return static_cast<BinaryenFeatures>(FeatureSet::Feature::SignExt); + return static_cast<BinaryenFeatures>(FeatureSet::SignExt); } BinaryenFeatures BinaryenFeatureSIMD128(void) { - return static_cast<BinaryenFeatures>(FeatureSet::Feature::SIMD); + return static_cast<BinaryenFeatures>(FeatureSet::SIMD); } BinaryenFeatures BinaryenFeatureExceptionHandling(void) { - return static_cast<BinaryenFeatures>(FeatureSet::Feature::ExceptionHandling); + return static_cast<BinaryenFeatures>(FeatureSet::ExceptionHandling); } BinaryenFeatures BinaryenFeatureTailCall(void) { - return static_cast<BinaryenFeatures>(FeatureSet::Feature::TailCall); + return static_cast<BinaryenFeatures>(FeatureSet::TailCall); } BinaryenFeatures BinaryenFeatureReferenceTypes(void) { - return static_cast<BinaryenFeatures>(FeatureSet::Feature::ReferenceTypes); + return static_cast<BinaryenFeatures>(FeatureSet::ReferenceTypes); } BinaryenFeatures BinaryenFeatureAll(void) { - return static_cast<BinaryenFeatures>(FeatureSet::Feature::All); + return static_cast<BinaryenFeatures>(FeatureSet::All); } // Modules diff --git a/src/tools/fuzzing.h b/src/tools/fuzzing.h index ff0888f1d..7e46a8eea 100644 --- a/src/tools/fuzzing.h +++ b/src/tools/fuzzing.h @@ -2673,21 +2673,21 @@ private: // special getters std::vector<Type> getReachableTypes() { - return items(FeatureOptions<Type>() - .add(FeatureSet::MVP, - Type::i32, - Type::i64, - Type::f32, - Type::f64, - Type::none) - .add(FeatureSet::SIMD, Type::v128) - .add(FeatureSet::ReferenceTypes, - Type::funcref, - Type::anyref, - Type::nullref) - .add((FeatureSet::Feature)(FeatureSet::ReferenceTypes | - FeatureSet::ExceptionHandling), - Type::exnref)); + return items( + FeatureOptions<Type>() + .add(FeatureSet::MVP, + Type::i32, + Type::i64, + Type::f32, + Type::f64, + Type::none) + .add(FeatureSet::SIMD, Type::v128) + .add(FeatureSet::ReferenceTypes, + Type::funcref, + Type::anyref, + Type::nullref) + .add(FeatureSet::ReferenceTypes | FeatureSet::ExceptionHandling, + Type::exnref)); } Type getReachableType() { return pick(getReachableTypes()); } @@ -2700,8 +2700,7 @@ private: Type::funcref, Type::anyref, Type::nullref) - .add((FeatureSet::Feature)(FeatureSet::ReferenceTypes | - FeatureSet::ExceptionHandling), + .add(FeatureSet::ReferenceTypes | FeatureSet::ExceptionHandling, Type::exnref)); } Type getConcreteType() { return pick(getConcreteTypes()); } @@ -2724,8 +2723,7 @@ private: .add(FeatureSet::MVP, Type::i32, Type::i64, Type::f32, Type::f64) .add(FeatureSet::SIMD, Type::v128) .add(FeatureSet::ReferenceTypes, Type::nullref) - .add((FeatureSet::Feature)(FeatureSet::ReferenceTypes | - FeatureSet::ExceptionHandling), + .add(FeatureSet::ReferenceTypes | FeatureSet::ExceptionHandling, Type::exnref)); } Type getLoggableType() { return pick(getLoggableTypes()); } @@ -2812,14 +2810,14 @@ private: template<typename T> struct FeatureOptions { template<typename... Ts> - FeatureOptions<T>& add(FeatureSet::Feature feature, T option, Ts... rest) { + FeatureOptions<T>& add(FeatureSet feature, T option, Ts... rest) { options[feature].push_back(option); return add(feature, rest...); } - FeatureOptions<T>& add(FeatureSet::Feature feature) { return *this; } + FeatureOptions<T>& add(FeatureSet feature) { return *this; } - std::map<FeatureSet::Feature, std::vector<T>> options; + std::map<FeatureSet, std::vector<T>> options; }; template<typename T> std::vector<T> items(FeatureOptions<T>& picker) { diff --git a/src/wasm-features.h b/src/wasm-features.h index ba3cb7856..e52c999c1 100644 --- a/src/wasm-features.h +++ b/src/wasm-features.h @@ -65,9 +65,10 @@ struct FeatureSet { FeatureSet() : features(MVP) {} FeatureSet(uint32_t features) : features(features) {} + constexpr operator uint32_t() const { return features; } bool isMVP() const { return features == MVP; } - bool has(Feature f) { return (features & f) == f; } + bool has(FeatureSet f) { return (features & f) == f; } bool hasAtomics() const { return (features & Atomics) != 0; } bool hasMutableGlobals() const { return (features & MutableGlobals) != 0; } bool hasTruncSat() const { return (features & TruncSat) != 0; } @@ -82,7 +83,7 @@ struct FeatureSet { bool hasAll() const { return (features & All) != 0; } void makeMVP() { features = MVP; } - void set(Feature f, bool v = true) { + void set(FeatureSet f, bool v = true) { features = v ? (features | f) : (features & ~f); } void setAtomics(bool v = true) { set(Atomics, v); } |