diff --git a/js-assembler/runtime-src/baselib-contmarks.js b/js-assembler/runtime-src/baselib-contmarks.js index 696d88c..9a81a43 100644 --- a/js-assembler/runtime-src/baselib-contmarks.js +++ b/js-assembler/runtime-src/baselib-contmarks.js @@ -1,5 +1,5 @@ /*global plt*/ -/*jslint browser: true, unparam: true, vars: true, white: true, maxerr: 50, indent: 4 */ +/*jslint browser: true, unparam: true, vars: true, white: true, maxerr: 50, indent: 4 , plusplus: true */ // Continuation marks (function(baselib) { @@ -71,21 +71,33 @@ return result; }; + var isContinuationMarkSet = baselib.makeClassPredicate(ContinuationMarkSet); // A continuation prompt tag labels a prompt frame. var ContinuationPromptTag = function(name) { - this.name = name; + this.name = name; // String + }; + var isContinuationPromptTag = baselib.makeClassPredicate(ContinuationPromptTag); + + + + var DEFAULT_CONTINUATION_PROMPT_TAG = + new ContinuationPromptTag("default-continuation-prompt-tag"); exports.ContinuationMarkSet = ContinuationMarkSet; + exports.isContinuationMarkSet = isContinuationMarkSet; exports.ContinuationPromptTag = ContinuationPromptTag; + exports.isContinuationPromptTag = isContinuationPromptTag; + exports.DEFAULT_CONTINUATION_PROMPT_TAG = DEFAULT_CONTINUATION_PROMPT_TAG; + }(this.plt.baselib)); \ No newline at end of file diff --git a/js-assembler/runtime-src/baselib-primitives.js b/js-assembler/runtime-src/baselib-primitives.js index 6a7cb09..5f1df65 100644 --- a/js-assembler/runtime-src/baselib-primitives.js +++ b/js-assembler/runtime-src/baselib-primitives.js @@ -2058,6 +2058,7 @@ return baselib.srclocs.srclocColumn(checkSrcloc(M, 'srcloc-column', 0)); }); + installPrimitiveProcedure( 'srcloc-position', 1, @@ -2065,6 +2066,7 @@ return baselib.srclocs.srclocPosition(checkSrcloc(M, 'srcloc-position', 0)); }); + installPrimitiveProcedure( 'srcloc-span', 1, @@ -2072,6 +2074,37 @@ return baselib.srclocs.srclocSpan(checkSrcloc(M, 'srcloc-span', 0)); }); + + + installPrimitiveProcedure( + 'make-continuation-prompt-tag', + makeList(0, 1), + function(M) { + var sym; + if (M.a === 1) { + sym = checkSymbol(M, "make-continuation-prompt-tag", 0); + return new baselib.contmarks.ContinuationPromptTag(sym.toString()); + } + return new baselib.contmarks.ContinuationPromptTag(undefined); + }); + + installPrimitiveProcedure( + 'continuation-prompt-tag?', + 1, + function(M) { + return baselib.contmarks.isContinuationPromptTag(M.e[M.e.length - 1]); + }); + + + + installPrimitiveProcedure( + 'default-continuation-prompt-tag', + 0, + function(M) { + return baselib.contmarks.DEFAULT_CONTINUATION_PROMPT_TAG; + }); + + exports['Primitives'] = Primitives; exports['installPrimitiveProcedure'] = installPrimitiveProcedure; exports['installPrimitiveClosure'] = installPrimitiveClosure; diff --git a/js-assembler/runtime-src/runtime.js b/js-assembler/runtime-src/runtime.js index 0464715..3a9fd80 100644 --- a/js-assembler/runtime-src/runtime.js +++ b/js-assembler/runtime-src/runtime.js @@ -565,8 +565,8 @@ // There is a single, distinguished default continuation prompt tag // that's used to wrap around toplevel prompts. - var DEFAULT_CONTINUATION_PROMPT_TAG = - new ContinuationPromptTag("default-continuation-prompt-tag"); + var DEFAULT_CONTINUATION_PROMPT_TAG = + baselib.contmarks.DEFAULT_CONTINUATION_PROMPT_TAG; diff --git a/lang/kernel.rkt b/lang/kernel.rkt index e7fa65b..ab5c85e 100644 --- a/lang/kernel.rkt +++ b/lang/kernel.rkt @@ -449,14 +449,16 @@ char=? char-upcase char-downcase - -;; call-with-current-continuation + + ;; these are defined in bootstrapped-primitives in Whalesong's compiler package + call-with-current-continuation call/cc -;; call-with-continuation-prompt -;; abort-current-continuation -;; default-continuation-prompt-tag -;; make-continuation-prompt-tag -;; continuation-prompt-tag? + + ;; call-with-continuation-prompt + ;; abort-current-continuation + default-continuation-prompt-tag + make-continuation-prompt-tag + continuation-prompt-tag? make-reader-graph make-placeholder