diff --git a/fiat-html/disable-wasm-option.js b/fiat-html/disable-wasm-option.js
index 2c907f8a611..a6f8fab3223 100644
--- a/fiat-html/disable-wasm-option.js
+++ b/fiat-html/disable-wasm-option.js
@@ -1,21 +1,39 @@
document.addEventListener('DOMContentLoaded', async function() {
const wasmCheckbox = document.getElementById('wasm');
const extraWasmLabel = document.getElementById('extraWasmLabel');
- wasmCheckbox.disabled = true; // Initially disable the checkbox
+ wasmCheckbox.disabled = true; // Initially disable the checkbox
try {
- if (await wasmFeatureDetect.tailCall()) {
- wasmCheckbox.disabled = false; // Re-enable the checkbox if tail calls are supported
+ const features = {
+ tailCall: await wasmFeatureDetect.tailCall(),
+ gc: await wasmFeatureDetect.gc(),
+ exceptions: await wasmFeatureDetect.exceptions()
+ };
+
+ const unsupportedFeatures = Object.entries(features)
+ .filter(([feature, supported]) => !supported)
+ .map(([feature]) => feature);
+
+ if (unsupportedFeatures.length === 0) {
+ wasmCheckbox.disabled = false; // Re-enable the checkbox if all features are supported
} else {
wasmCheckbox.checked = false;
+ let featureText = unsupportedFeatures.join(', ');
+ let firefoxText = unsupportedFeatures.map(feature => {
+ if (feature === 'tailCall') return 'javascript.options.wasm_tail_calls';
+ if (feature === 'gc') return 'javascript.options.wasm_gc';
+ if (feature === 'exceptions') return 'javascript.options.wasm_exceptions';
+ return feature;
+ }).join(', ');
+
if (navigator.userAgent.includes('Firefox')) {
- extraWasmLabel.innerHTML = '(enable javascript.options.wasm_tail_calls
in about:config
)';
+ extraWasmLabel.innerHTML = `(enable ${firefoxText}
in about:config
)`;
} else {
- extraWasmLabel.innerHTML = '(wasm tail calls not supported)';
+ extraWasmLabel.innerHTML = `(missing wasm support for: ${featureText})`;
}
}
} catch (error) {
- console.error('Error checking wasm tail call support:', error);
+ console.error('Error checking wasm feature support:', error);
}
});