From 9ef4e5ef4598a63d5175b08052ec1220e4010b63 Mon Sep 17 00:00:00 2001 From: Danny Yoo Date: Fri, 19 Aug 2011 15:05:07 -0400 Subject: [PATCH] adding some more primitives --- .../runtime-src/baselib-primitives.js | 30 +++++++++++++++++++ lang/kernel.rkt | 4 +-- tests/more-tests/booleans.expected | 13 ++++++++ tests/more-tests/booleans.rkt | 17 +++++++++++ tests/run-more-tests.rkt | 1 + 5 files changed, 63 insertions(+), 2 deletions(-) create mode 100644 tests/more-tests/booleans.expected create mode 100644 tests/more-tests/booleans.rkt diff --git a/js-assembler/runtime-src/baselib-primitives.js b/js-assembler/runtime-src/baselib-primitives.js index 274ca49..0334d0e 100644 --- a/js-assembler/runtime-src/baselib-primitives.js +++ b/js-assembler/runtime-src/baselib-primitives.js @@ -809,6 +809,36 @@ }); + installPrimitiveProcedure( + 'boolean?', + 1, + function(MACHINE) { + var v = MACHINE.env[MACHINE.env.length - 1]; + return (v === true || v === false); + }); + + + installPrimitiveProcedure( + 'char?', + 1, + function(MACHINE) { + return baselib.chars.isChar(MACHINE.env[MACHINE.env.length -1 ]); + }); + + + installPrimitiveProcedure( + 'char=?', + baselib.arity.makeArityAtLeast(2), + function(MACHINE) { + var s = checkChar(MACHINE, 'char=?', 0).val; + var i; + for (i = 1; i < MACHINE.argcount; i++) { + if (checkChar(MACHINE, 'char=?', i).val !== s) { + return false; + } + } + return true; + }); diff --git a/lang/kernel.rkt b/lang/kernel.rkt index 36f5cb2..46c04a6 100644 --- a/lang/kernel.rkt +++ b/lang/kernel.rkt @@ -266,8 +266,8 @@ raise-mismatch-error ;; void? symbol? string? -;; char? -;; boolean? +char? +boolean? vector? ;; struct? ;; eof-object? diff --git a/tests/more-tests/booleans.expected b/tests/more-tests/booleans.expected new file mode 100644 index 0000000..e0a017a --- /dev/null +++ b/tests/more-tests/booleans.expected @@ -0,0 +1,13 @@ +false +true +false +false +false +false +false +true +false +true +false +false +true diff --git a/tests/more-tests/booleans.rkt b/tests/more-tests/booleans.rkt new file mode 100644 index 0000000..93fd1bc --- /dev/null +++ b/tests/more-tests/booleans.rkt @@ -0,0 +1,17 @@ +#lang planet dyoo/whalesong + +(boolean? "t") +(boolean? #t) +(boolean? 0) +(boolean? #\t) + +(char? "t") +(char? #t) +(char? 0) +(char? #\t) + +(char=? #\a #\b) +(char=? #\a #\a) +(char=? #\a #\a #\b) +(char=? #\a #\b #\a) +(char=? #\a #\a #\a) diff --git a/tests/run-more-tests.rkt b/tests/run-more-tests.rkt index 9a4f3bb..ffd7f0c 100644 --- a/tests/run-more-tests.rkt +++ b/tests/run-more-tests.rkt @@ -6,6 +6,7 @@ ;; content vs. a text file with the same name, but with the .rkt file ;; type replaced with .expected. +(test "more-tests/booleans.rkt") (test "more-tests/string-tests.rkt") (test "more-tests/numbers.rkt") (test "more-tests/hello.rkt")