whalesong/package.rkt
2011-02-09 19:22:05 -05:00

55 lines
1.3 KiB
Racket

#lang racket/base
(require "cm.rkt"
"structs.rkt"
"assemble.rkt"
racket/runtime-path
racket/port)
;; Packager: produce single .js files to be included.
(define-runtime-path runtime.js "runtime.js")
;; package: s-expression output-port -> void
(define (package source-code op)
(call-with-input-file* runtime.js
(lambda (ip)
(copy-port ip op)))
(newline op)
(fprintf op "var invoke = ")
(assemble/write-invoke (statements (compile source-code
'()
'val
'return))
op)
(fprintf op ";\n"))
(define (test s-exp)
(package s-exp (current-output-port)))
#;(test '(define (factorial n)
(if (= n 0)
1
(* (factorial (- n 1))
n))))
(test '(begin
(define (factorial n)
(fact-iter n 1))
(define (fact-iter n acc)
(if (= n 0)
acc
(fact-iter (- n 1) (* acc n))))))
#;(test '(define (gauss n)
(if (= n 0)
0
(+ (gauss (- n 1))
n))))
#;(test '(define (fib n)
(if (< n 2)
1
(+ (fib (- n 1))
(fib (- n 2))))))