#include "src/wasm/wasm-features.h"
#include "src/execution/isolate-inl.h"
#include "src/flags/flags.h"
#include "src/handles/handles-inl.h"
#include "src/objects/string.h"
namespace v8 {
namespace internal {
namespace wasm {
WasmEnabledFeatures WasmEnabledFeatures::FromFlags() {
WasmEnabledFeatures features = WasmEnabledFeatures::None();
#if V8_ENABLE_DRUMBRAKE
if (v8_flags.wasm_jitless) {
features.Add(WasmEnabledFeature::legacy_eh);
}
#endif
#define CHECK_FEATURE_FLAG(feat, ...) \
if (!v8_flags.wasm_jitless && v8_flags.experimental_wasm_##feat) \
features.Add(WasmEnabledFeature::feat);
FOREACH_WASM_FEATURE_FLAG(CHECK_FEATURE_FLAG)
#undef CHECK_FEATURE_FLAG
return features;
}
WasmEnabledFeatures WasmEnabledFeatures::FromIsolate(Isolate* isolate) {
return FromContext(isolate, isolate->native_context());
}
WasmEnabledFeatures WasmEnabledFeatures::FromContext(
Isolate* isolate, DirectHandle<NativeContext> context) {
WasmEnabledFeatures features = WasmEnabledFeatures::FromFlags();
if (!v8_flags.wasm_jitless &&
isolate->IsWasmCustomDescriptorsEnabled(context)) {
features.Add(WasmEnabledFeature::custom_descriptors);
}
return features;
}
}
}
}