diff --git a/funstacker/funstacker-test.rkt b/funstacker/funstacker-test.rkt new file mode 100644 index 0000000..512373a --- /dev/null +++ b/funstacker/funstacker-test.rkt @@ -0,0 +1,6 @@ +#lang reader "funstacker.rkt" +4 +8 ++ +3 +* diff --git a/funstacker/funstacker-test.rkt~ b/funstacker/funstacker-test.rkt~ new file mode 100644 index 0000000..4b957b0 --- /dev/null +++ b/funstacker/funstacker-test.rkt~ @@ -0,0 +1,6 @@ +#lang reader "stacker.rkt" +4 +8 ++ +3 +* diff --git a/funstacker/funstacker.rkt b/funstacker/funstacker.rkt new file mode 100644 index 0000000..3405e2f --- /dev/null +++ b/funstacker/funstacker.rkt @@ -0,0 +1,29 @@ +#lang br/quicklang + +(define (read-syntax path port) + (define src-lines (port->lines port)) + (define src-datums (format-datums '~a src-lines)) + (define module-datum `(module stacker-mod "funstacker.rkt" + (handle-args ,@src-datums))) + (datum->syntax #f module-datum)) + +(provide read-syntax) + +(define-macro (stacker-module-begin HANDLE-ARGS-EXPR) + #'(#%module-begin + (display (first HANDLE-ARGS-EXPR)))) + +(provide (rename-out [stacker-module-begin #%module-begin])) + +(define (handle-args . args) + (for/fold ([stack-acc empty]) + ([arg (in-list args)] + #:unless (void? arg)) + (cond + [(number? arg) (cons arg stack-acc)] + [(or (equal? * arg) (equal? + arg)) + (define op-result + (arg (first stack-acc) (second stack-acc))) + (cons op-result (drop stack-acc 2))]))) +(provide handle-args) +(provide + *) \ No newline at end of file diff --git a/funstacker/funstacker.rkt~ b/funstacker/funstacker.rkt~ new file mode 100644 index 0000000..bdd5c02 --- /dev/null +++ b/funstacker/funstacker.rkt~ @@ -0,0 +1,37 @@ +#lang br/quicklang + +(define (read-syntax path port) + (define src-lines (port->lines port)) + (define src-datums (format-datums '(handle ~a) src-lines)) + (define module-datum `(module stacker-mod "stacker.rkt" + ,@src-datums)) + (datum->syntax #f module-datum)) + +(provide read-syntax) + +(define-macro (stacker-module-begin HANDLE-EXPR ...) + #'(#%module-begin + HANDLE-EXPR ... + (display (first stack)))) + +(provide (rename-out [stacker-module-begin #%module-begin])) + +(define stack empty) + +(define (pop-stack!) + (define arg (first stack)) + (set! stack (rest stack)) + arg) + +(define (push-stack! arg) + (set! stack (cons arg stack))) + +(define (handle [arg #f]) + (cond + [(number? arg) (push-stack! arg)] + [(or (equal? + arg) (equal? * arg)) + (define op-result (arg (pop-stack!) (pop-stack!))) + (push-stack! op-result)])) + +(provide handle) +(provide + *) \ No newline at end of file diff --git a/stacker/compiled/drracket/errortrace/stacker_rkt.dep b/stacker/compiled/drracket/errortrace/stacker_rkt.dep deleted file mode 100644 index 5b503af..0000000 --- a/stacker/compiled/drracket/errortrace/stacker_rkt.dep +++ /dev/null @@ -1 +0,0 @@ -("7.5" racket ("7f677926d966a8cec92cb8a8b1e1bd44f09f4aab" . "f00a81ce44a6ee4c31b492d8e2e91c13a4a1e5aa") (collects #"br" #"quicklang.rkt") (collects #"errortrace" #"errortrace-key.rkt") (collects #"racket" #"runtime-config.rkt")) diff --git a/stacker/compiled/drracket/errortrace/stacker_rkt.zo b/stacker/compiled/drracket/errortrace/stacker_rkt.zo deleted file mode 100644 index accb392..0000000 Binary files a/stacker/compiled/drracket/errortrace/stacker_rkt.zo and /dev/null differ