rosella/compiler.scm

46 lines
1.2 KiB
Scheme
Executable File

#! /usr/bin/mzscheme
#lang scheme/base
(require scheme/path)
(require scheme/pretty)
(require scheme/cmdline)
(require (file "libcompiler/reader.scm"))
(require (file "libcompiler/compiler.scm"))
(require (file "libcompiler/writer.scm"))
;(require profile)
;(profile (begin
(define map-bytecode? (make-parameter #t))
(define source-file
(command-line
#:once-each
[("-O") ol "Set the optimization level"
(optimize? (>= (string->number ol) 1))]
[("-R" "--reduce-only") "Stop before mapping forms to VM bytecode"
(map-bytecode? #f)]
#:args source-file
(if (null? source-file)
"-"
(car source-file))))
(define source-module
(if (string=? source-file "-")
(read-module)
(let* ([complete-path (path->complete-path source-file)]
[directory (path-only complete-path)])
(with-input-from-file complete-path
(lambda ()
(parameterize ([current-directory directory])
(read-module)))))))
(if (map-bytecode?)
(begin
(write-rla-value (compile-function source-module))
(write-char #\Newline))
(pretty-print (reduce-function source-module)))
;) #:delay 0.002)
; vim:set sw=2 expandtab: