From 3b15c46dec7783016c997906a88e10dd54232409 Mon Sep 17 00:00:00 2001 From: Danny Yoo Date: Mon, 21 Feb 2011 21:43:42 -0500 Subject: [PATCH] code cleanup --- browser-evaluate.rkt | 5 +++++ runtime.js | 27 +++++++++++++++++++++++---- test-browser-evaluate.rkt | 25 ++++++++++++++++++------- 3 files changed, 46 insertions(+), 11 deletions(-) diff --git a/browser-evaluate.rkt b/browser-evaluate.rkt index 15402ff..1c0c117 100644 --- a/browser-evaluate.rkt +++ b/browser-evaluate.rkt @@ -7,6 +7,11 @@ "package.rkt") ;; A hacky way to test the evaluation. +;; +;; TODO: figure out how to do this without so many urls. Push-style from the server +;; should be able to work. + + (provide evaluate) (define port (+ 8000 (random 8000))) diff --git a/runtime.js b/runtime.js index b162e98..f456e44 100644 --- a/runtime.js +++ b/runtime.js @@ -7,7 +7,16 @@ // function closures are Closures // primitive procedures are regular functions. + +// No error trapping at the moment. var Primitives = { + 'display': function(argl) { + MACHINE.params.currentDisplayer(argl[0]); + }, + 'newline': function(argl) { + MACHINE.params.currentDisplayer("\n"); + }, + '=': function(argl) { return argl[0] === argl[1][0]; }, @@ -27,11 +36,21 @@ var Primitives = { '/': function(argl) { return argl[0] / argl[1][0]; }, - 'display': function(argl) { - MACHINE.params.currentDisplayer(argl[0]); + + 'cons': function(argl) { + return [argl[0], argl[1][0]]; }, - 'newline': function(argl) { - MACHINE.params.currentDisplayer("\n"); + 'list': function(argl) { + return argl; + }, + 'car': function(argl) { + return argl[0][0]; + }, + 'cdr': function(argl) { + return argl[0][1]; + }, + 'null?': function(argl) { + return argl[0] === undefined; } }; diff --git a/test-browser-evaluate.rkt b/test-browser-evaluate.rkt index f5a4f02..ca27581 100644 --- a/test-browser-evaluate.rkt +++ b/test-browser-evaluate.rkt @@ -7,10 +7,14 @@ [(_ s exp) (with-syntax ([stx stx]) (syntax/loc #'stx - (let-values ([(output time) (evaluate s)]) - (unless (string=? output exp) - (raise-syntax-error #f (format "Expected ~s, got ~s" exp output) - #'stx)))))])) + (begin + (printf "running test...") + (let-values ([(output time) (evaluate s)]) + (unless (string=? output exp) + (printf " error!\n") + (raise-syntax-error #f (format "Expected ~s, got ~s" exp output) + #'stx))) + (printf " ok\n"))))])) (test '(begin (define (f x) @@ -24,6 +28,13 @@ (display (f 10000))) "6\n10\n50005000") - - -"ok" \ No newline at end of file +(test '(begin (define (length l) + (if (null? l) + 0 + (+ 1 (length (cdr l))))) + (display (length (list 1 2 3 4 5 6))) + (newline) + (display (length (list "hello" "world"))) + (newline)) + + "6\n2\n") \ No newline at end of file