Skip to content

Commit e290fb0

Browse files
committed
wasm: prevent macros from mutating functions
1 parent 62b9ea6 commit e290fb0

File tree

3 files changed

+15
-6
lines changed

3 files changed

+15
-6
lines changed

impls/wasm/step8_macros.wam

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -293,12 +293,15 @@
293293
(then
294294
(local.set $a1 ($MAL_GET_A1 $ast))
295295
(local.set $a2 ($MAL_GET_A2 $ast))
296-
(local.set $res ($EVAL $a2 $env))
296+
(local.set $f ($EVAL $a2 $env))
297+
(local.set $res ($MALFUNC ($MEM_VAL0_ptr $f)
298+
($MEM_VAL1_ptr $f) ($MEM_VAL2_ptr $f)))
297299
($SET_TYPE $res (global.get $MACRO_T))
298300
(br_if $EVAL_return (global.get $error_type))
301+
($RELEASE $f)
299302

300303
;; set a1 in env to a2
301-
(local.set $res ($ENV_SET $env $a1 $res))
304+
(drop ($ENV_SET $env $a1 $res))
302305
(br $EVAL_return))
303306
)
304307
(if (i32.eqz ($strcmp "if" $a0sym))

impls/wasm/step9_try.wam

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -293,12 +293,15 @@
293293
(then
294294
(local.set $a1 ($MAL_GET_A1 $ast))
295295
(local.set $a2 ($MAL_GET_A2 $ast))
296-
(local.set $res ($EVAL $a2 $env))
296+
(local.set $f ($EVAL $a2 $env))
297+
(local.set $res ($MALFUNC ($MEM_VAL0_ptr $f)
298+
($MEM_VAL1_ptr $f) ($MEM_VAL2_ptr $f)))
297299
($SET_TYPE $res (global.get $MACRO_T))
298300
(br_if $EVAL_return (global.get $error_type))
301+
($RELEASE $f)
299302

300303
;; set a1 in env to a2
301-
(local.set $res ($ENV_SET $env $a1 $res))
304+
(drop ($ENV_SET $env $a1 $res))
302305
(br $EVAL_return))
303306
)
304307
(if (i32.eqz ($strcmp "try*" $a0sym))

impls/wasm/stepA_mal.wam

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -293,12 +293,15 @@
293293
(then
294294
(local.set $a1 ($MAL_GET_A1 $ast))
295295
(local.set $a2 ($MAL_GET_A2 $ast))
296-
(local.set $res ($EVAL $a2 $env))
296+
(local.set $f ($EVAL $a2 $env))
297+
(local.set $res ($MALFUNC ($MEM_VAL0_ptr $f)
298+
($MEM_VAL1_ptr $f) ($MEM_VAL2_ptr $f)))
297299
($SET_TYPE $res (global.get $MACRO_T))
298300
(br_if $EVAL_return (global.get $error_type))
301+
($RELEASE $f)
299302

300303
;; set a1 in env to a2
301-
(local.set $res ($ENV_SET $env $a1 $res))
304+
(drop ($ENV_SET $env $a1 $res))
302305
(br $EVAL_return))
303306
)
304307
(if (i32.eqz ($strcmp "try*" $a0sym))

0 commit comments

Comments
 (0)