// Copyright 2018 the V8 project authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef V8_WASM_WASM_FEATURES_H_ #define V8_WASM_WASM_FEATURES_H_ // The feature flags are declared in their own header. #include "src/base/macros.h" #include "src/wasm/wasm-feature-flags.h" // All features, including features that do not have flags. #define FOREACH_WASM_FEATURE FOREACH_WASM_FEATURE_FLAG namespace v8 { namespace internal { class Isolate; namespace wasm { #define COMMA , #define SPACE #define DECL_FIELD(feat, desc, val) bool feat = false; #define JUST_TRUE(feat, desc, val) true #define JUST_FALSE(feat, desc, val) false #define DECL_PARAM(feat, desc, val) bool p##feat #define DO_INIT(feat, desc, val) feat(p##feat) // Enabled or detected features. struct WasmFeatures { FOREACH_WASM_FEATURE(DECL_FIELD, SPACE) constexpr WasmFeatures() = default; explicit constexpr WasmFeatures(FOREACH_WASM_FEATURE(DECL_PARAM, COMMA)) : FOREACH_WASM_FEATURE(DO_INIT, COMMA) {} }; static constexpr WasmFeatures kAllWasmFeatures{ FOREACH_WASM_FEATURE(JUST_TRUE, COMMA)}; static constexpr WasmFeatures kNoWasmFeatures{ FOREACH_WASM_FEATURE(JUST_FALSE, COMMA)}; #undef JUST_TRUE #undef JUST_FALSE #undef DECL_FIELD #undef DECL_PARAM #undef DO_INIT #undef COMMA #undef SPACE static constexpr WasmFeatures kAsmjsWasmFeatures = kNoWasmFeatures; V8_EXPORT_PRIVATE WasmFeatures WasmFeaturesFromFlags(); // Enables features based on both commandline flags and the isolate. // Precondition: A valid context must be set in {isolate->context()}. V8_EXPORT_PRIVATE WasmFeatures WasmFeaturesFromIsolate(Isolate* isolate); V8_EXPORT_PRIVATE void UnionFeaturesInto(WasmFeatures* dst, const WasmFeatures& src); } // namespace wasm } // namespace internal } // namespace v8 #endif // V8_WASM_WASM_FEATURES_H_