From 1b1d285297fe45b6796c3e05e67dae8c10e0c716 Mon Sep 17 00:00:00 2001 From: Danny Yoo Date: Sat, 18 Feb 2012 22:35:40 -0500 Subject: [PATCH 1/4] correcting bug with cadr: wrong contract type --- compiler/kernel-primitives.rkt | 3 +++ js-assembler/runtime-src/baselib-primitives.js | 2 +- lang/kernel.rkt | 1 + version.rkt | 2 +- 4 files changed, 6 insertions(+), 2 deletions(-) diff --git a/compiler/kernel-primitives.rkt b/compiler/kernel-primitives.rkt index ac13bab..6139ee4 100644 --- a/compiler/kernel-primitives.rkt +++ b/compiler/kernel-primitives.rkt @@ -44,6 +44,9 @@ 'make-vector 'equal? 'member + 'memq + 'memv + 'memf 'append 'reverse 'length diff --git a/js-assembler/runtime-src/baselib-primitives.js b/js-assembler/runtime-src/baselib-primitives.js index 81367e4..ae440fa 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; diff --git a/lang/kernel.rkt b/lang/kernel.rkt index d954864..fbbf04c 100644 --- a/lang/kernel.rkt +++ b/lang/kernel.rkt @@ -100,6 +100,7 @@ if cond else + => case quote unquote diff --git a/version.rkt b/version.rkt index 4d46da8..2e59647 100644 --- a/version.rkt +++ b/version.rkt @@ -7,4 +7,4 @@ (provide version) (: version String) -(define version "1.135") +(define version "1.137") From e41c505cb1a57639edb76a2302fe10589cda1ea7 Mon Sep 17 00:00:00 2001 From: Danny Yoo Date: Sat, 18 Feb 2012 22:36:13 -0500 Subject: [PATCH 2/4] correcting bug with cadr: wrong contract type and implementation --- js-assembler/runtime-src/baselib-primitives.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js-assembler/runtime-src/baselib-primitives.js b/js-assembler/runtime-src/baselib-primitives.js index ae440fa..409562b 100644 --- a/js-assembler/runtime-src/baselib-primitives.js +++ b/js-assembler/runtime-src/baselib-primitives.js @@ -615,7 +615,7 @@ 1, function (M) { var firstArg = checkCadrPair(M, 'cadr', 0); - return firstArg.first.rest; + return firstArg.rest.first; }); installPrimitiveProcedure( From 00ce581fbd50b2bafec57c8060acaae425ab1e86 Mon Sep 17 00:00:00 2001 From: Danny Yoo Date: Sat, 18 Feb 2012 22:45:40 -0500 Subject: [PATCH 3/4] fixing uses of not-a-procedure --- js-assembler/runtime-src/baselib-functions.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/js-assembler/runtime-src/baselib-functions.js b/js-assembler/runtime-src/baselib-functions.js index 937523c..a0bef67 100644 --- a/js-assembler/runtime-src/baselib-functions.js +++ b/js-assembler/runtime-src/baselib-functions.js @@ -217,8 +217,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 +248,7 @@ fail(baselib.exceptions.makeExnFail( baselib.format.format( "Not a procedure: ~e", - proc), + [proc]), MACHINE.captureContinuationMarks())); } From 21631c69599d40280c995e8275462ae703514e38 Mon Sep 17 00:00:00 2001 From: Danny Yoo Date: Sat, 18 Feb 2012 23:03:57 -0500 Subject: [PATCH 4/4] fixing issue 83: javascript-translated functions didn't release the exclusive lock upon call. Whoops. --- js-assembler/runtime-src/baselib-functions.js | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/js-assembler/runtime-src/baselib-functions.js b/js-assembler/runtime-src/baselib-functions.js index a0bef67..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);