Home | History | Annotate | Download | only in wasm
      1 // Copyright 2018 the V8 project authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef V8_WASM_WASM_FEATURES_H_
      6 #define V8_WASM_WASM_FEATURES_H_
      7 
      8 // The feature flags are declared in their own header.
      9 #include "src/base/macros.h"
     10 #include "src/wasm/wasm-feature-flags.h"
     11 
     12 // All features, including features that do not have flags.
     13 #define FOREACH_WASM_FEATURE FOREACH_WASM_FEATURE_FLAG
     14 
     15 namespace v8 {
     16 namespace internal {
     17 class Isolate;
     18 namespace wasm {
     19 
     20 #define COMMA ,
     21 #define SPACE
     22 #define DECL_FIELD(feat, desc, val) bool feat = false;
     23 #define JUST_TRUE(feat, desc, val) true
     24 #define JUST_FALSE(feat, desc, val) false
     25 #define DECL_PARAM(feat, desc, val) bool p##feat
     26 #define DO_INIT(feat, desc, val) feat(p##feat)
     27 
     28 // Enabled or detected features.
     29 struct WasmFeatures {
     30   FOREACH_WASM_FEATURE(DECL_FIELD, SPACE)
     31 
     32   constexpr WasmFeatures() = default;
     33 
     34   explicit constexpr WasmFeatures(FOREACH_WASM_FEATURE(DECL_PARAM, COMMA))
     35       : FOREACH_WASM_FEATURE(DO_INIT, COMMA) {}
     36 };
     37 
     38 static constexpr WasmFeatures kAllWasmFeatures{
     39     FOREACH_WASM_FEATURE(JUST_TRUE, COMMA)};
     40 
     41 static constexpr WasmFeatures kNoWasmFeatures{
     42     FOREACH_WASM_FEATURE(JUST_FALSE, COMMA)};
     43 
     44 #undef JUST_TRUE
     45 #undef JUST_FALSE
     46 #undef DECL_FIELD
     47 #undef DECL_PARAM
     48 #undef DO_INIT
     49 #undef COMMA
     50 #undef SPACE
     51 
     52 static constexpr WasmFeatures kAsmjsWasmFeatures = kNoWasmFeatures;
     53 
     54 V8_EXPORT_PRIVATE WasmFeatures WasmFeaturesFromFlags();
     55 
     56 // Enables features based on both commandline flags and the isolate.
     57 // Precondition: A valid context must be set in {isolate->context()}.
     58 V8_EXPORT_PRIVATE WasmFeatures WasmFeaturesFromIsolate(Isolate* isolate);
     59 
     60 V8_EXPORT_PRIVATE void UnionFeaturesInto(WasmFeatures* dst,
     61                                          const WasmFeatures& src);
     62 
     63 }  // namespace wasm
     64 }  // namespace internal
     65 }  // namespace v8
     66 
     67 #endif  // V8_WASM_WASM_FEATURES_H_
     68