diff --git a/js-assembler/runtime-src/baselib-contmarks.js b/js-assembler/runtime-src/baselib-contmarks.js index 11851d5..23c1f5f 100644 --- a/js-assembler/runtime-src/baselib-contmarks.js +++ b/js-assembler/runtime-src/baselib-contmarks.js @@ -31,7 +31,8 @@ return '#'; }; - ContinuationMarkSet.prototype.ref = function(key) { + ContinuationMarkSet.prototype.ref = function(key, promptTag) { + // FIXME: ref needs to watch the promptTag as well and capture up to it. var i, j; var result = []; var kvlist; diff --git a/js-assembler/runtime-src/baselib-primitives.js b/js-assembler/runtime-src/baselib-primitives.js index d66267d..81367e4 100644 --- a/js-assembler/runtime-src/baselib-primitives.js +++ b/js-assembler/runtime-src/baselib-primitives.js @@ -2206,6 +2206,21 @@ return contMarks; }); + installPrimitiveProcedure( + 'continuation-mark-set->list', + makeList(2, 3), + function(M) { + var marks = checkContinuationMarkSet(M, 'continuation-mark-set->list', 0); + var key = checkAny(M, 'continuation-mark-set->list', 1); + var promptTag; + if (M.a === 3) { + promptTag = checkContinuationPromptTag(M, 'current-continuation-marks', 2); + } + return marks.ref(key, promptTag); + }); + + + installPrimitiveClosure( 'make-struct-type', makeList(4, 5, 6, 7, 8, 9, 10, 11), diff --git a/lang/kernel.rkt b/lang/kernel.rkt index 3af3789..d954864 100644 --- a/lang/kernel.rkt +++ b/lang/kernel.rkt @@ -257,7 +257,8 @@ current-continuation-marks - + continuation-mark-set->list + ;; continuation-mark-set? ;; continuation-mark-set->list diff --git a/tests/more-tests/cont-marks-1.rkt b/tests/more-tests/cont-marks-1.rkt new file mode 100644 index 0000000..6438292 --- /dev/null +++ b/tests/more-tests/cont-marks-1.rkt @@ -0,0 +1,11 @@ +#lang planet dyoo/whalesong + +(define (puzzle n) + (if (= n 0) + (continuation-mark-set->list (current-continuation-marks) 'secret) + (with-continuation-mark 'secret + (* n (first (continuation-mark-set->list (current-continuation-marks) 'secret))) + (puzzle (sub1 n))))) + +(with-continuation-mark 'secret 1 + (puzzle 10))