diff --git a/compiler/kernel-primitives.rkt b/compiler/kernel-primitives.rkt index 8f42b12..462639c 100644 --- a/compiler/kernel-primitives.rkt +++ b/compiler/kernel-primitives.rkt @@ -45,6 +45,9 @@ 'make-vector 'equal? 'member + 'memq + 'memv + 'memf 'append 'reverse 'length diff --git a/js-assembler/runtime-src/baselib-functions.js b/js-assembler/runtime-src/baselib-functions.js index 937523c..3d24b89 100644 --- a/js-assembler/runtime-src/baselib-functions.js +++ b/js-assembler/runtime-src/baselib-functions.js @@ -137,14 +137,20 @@ MACHINE.exclusiveLock.acquire( "js-as-closure", function(releaseLock) { - succ = succ || function () {}; - fail = fail || function () {}; + var wrappedSucc = function() { + releaseLock(); + (succ || function () {}).apply(null, arguments); + }; + var wrappedFail = function(err) { + releaseLock(); + (fail || function () {})(err); + }; if (!(baselib.arity.isArityMatching(v.racketArity, args.length - 2))) { var msg = baselib.format.format( "arity mismatch: ~s expected ~s argument(s) but received ~s", [v.displayName, v.racketArity, args.length - 2]); releaseLock(); - return fail(new baselib.exceptions.RacketError( + return wrappedFail(new baselib.exceptions.RacketError( msg, baselib.exceptions.makeExnFailContractArity(msg, MACHINE.captureContinuationMarks()))); @@ -163,7 +169,7 @@ MACHINE.v = oldVal; MACHINE.a = oldArgcount; MACHINE.p = oldProc; - succ(returnValue); + wrappedSucc(returnValue); }); }; afterGoodInvoke.mvr = function (MACHINE) { @@ -177,7 +183,7 @@ MACHINE.v = oldVal; MACHINE.a = oldArgcount; MACHINE.p = oldProc; - succ.apply(null, returnValues); + wrappedSucc.apply(null, returnValues); }); }; @@ -194,7 +200,7 @@ MACHINE.v = oldVal; MACHINE.a = oldArgcount; MACHINE.p = oldProc; - fail(e); + wrappedFail(e); }; MACHINE._trampoline(v.label, false, releaseLock); @@ -217,8 +223,8 @@ baselib.exceptions.raise(MACHINE, baselib.exceptions.makeExnFailContract( baselib.format.format( - "Not a procedure: ~e", - v), + "not a procedure: ~e", + [v]), MACHINE.captureContinuationMarks())); } }; @@ -248,7 +254,7 @@ fail(baselib.exceptions.makeExnFail( baselib.format.format( "Not a procedure: ~e", - proc), + [proc]), MACHINE.captureContinuationMarks())); } diff --git a/js-assembler/runtime-src/baselib-primitives.js b/js-assembler/runtime-src/baselib-primitives.js index 6dc5d8e..e670f78 100644 --- a/js-assembler/runtime-src/baselib-primitives.js +++ b/js-assembler/runtime-src/baselib-primitives.js @@ -103,7 +103,7 @@ 'caarable value'); var checkCadrPair = baselib.check.makeCheckArgumentType( function(x) { - return isPair(x) && isPair(x.first); + return isPair(x) && isPair(x.rest); }, 'cadrable value'); var checkList = baselib.check.checkList; @@ -615,7 +615,7 @@ 1, function (M) { var firstArg = checkCadrPair(M, 'cadr', 0); - return firstArg.first.rest; + return firstArg.rest.first; }); installPrimitiveProcedure( diff --git a/lang/kernel.rkt b/lang/kernel.rkt index cf87dcb..89870be 100644 --- a/lang/kernel.rkt +++ b/lang/kernel.rkt @@ -100,6 +100,7 @@ if cond else + => case quote unquote