| // 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. |
| |
| #include "src/wasm/wasm-features.h" |
| #include "src/execution/isolate.h" |
| #include "src/flags/flags.h" |
| #include "src/handles/handles-inl.h" |
| |
| namespace v8 { |
| namespace internal { |
| namespace wasm { |
| |
| #define COMMA , |
| #define SPACE |
| #define DO_UNION(feat, desc, val) dst->feat |= src.feat; |
| #define FLAG_REF(feat, desc, val) FLAG_experimental_wasm_##feat |
| |
| void UnionFeaturesInto(WasmFeatures* dst, const WasmFeatures& src) { |
| FOREACH_WASM_FEATURE(DO_UNION, SPACE); |
| } |
| |
| WasmFeatures WasmFeaturesFromFlags() { |
| return WasmFeatures{FOREACH_WASM_FEATURE(FLAG_REF, COMMA)}; |
| } |
| |
| WasmFeatures WasmFeaturesFromIsolate(Isolate* isolate) { |
| WasmFeatures features = WasmFeaturesFromFlags(); |
| features.threads |= |
| isolate->AreWasmThreadsEnabled(handle(isolate->context(), isolate)); |
| return features; |
| } |
| |
| #undef DO_UNION |
| #undef FLAG_REF |
| #undef SPACE |
| #undef COMMA |
| } // namespace wasm |
| } // namespace internal |
| } // namespace v8 |