diff --git a/runtime/wasm/effect-native.wat b/runtime/wasm/effect-native.wat index a8e8694cfd..9a283dba84 100644 --- a/runtime/wasm/effect-native.wat +++ b/runtime/wasm/effect-native.wat @@ -17,6 +17,7 @@ (func $caml_wrap_exception (param externref) (result (ref eq)))) (import "stdlib" "caml_main_wrapper" (global $caml_main_wrapper (mut (ref null $wrapper_func)))) + (import "effect" "effect_allowed" (global $effect_allowed (mut i32))) (type $block (array (mut (ref eq)))) (type $string (array (mut i8))) @@ -180,6 +181,10 @@ (func (export "%perform") (param $eff (ref eq)) (result (ref eq)) (local $res (tuple (ref eq) (ref eq))) + (if (i32.eqz (global.get $effect_allowed)) + (then + (return_call $raise_unhandled + (local.get $eff) (ref.i31 (i32.const 0))))) (local.set $res (suspend $effect (local.get $eff))) (return_call_ref $function_1 (tuple.extract 2 1 (local.get $res)) (tuple.extract 2 0 (local.get $res)) diff --git a/runtime/wasm/effect.wat b/runtime/wasm/effect.wat index bc579dd9ec..cdc49ba58a 100644 --- a/runtime/wasm/effect.wat +++ b/runtime/wasm/effect.wat @@ -80,7 +80,7 @@ (call $caml_fresh_oo_id (ref.i31 (i32.const 0))))) (ref.i31 (i32.const 0))) - (global $effect_allowed (mut i32) (i32.const 1)) + (global $effect_allowed (export "effect_allowed") (mut i32) (i32.const 1)) (@if (not wasi) (@then