X-Git-Url: http://git.lukelau.me/?p=scheme.git;a=blobdiff_plain;f=main.scm;h=ce9241ac11537abaf0766e6876e138b24645efd3;hp=53daa7c73b947bd85035303146778e8dfa3543b6;hb=685089345e07943eaab2eec10208ba513ca537b2;hpb=94d1c48d51bfe32aa1e14d4fb012b283ec9352ef diff --git a/main.scm b/main.scm index 53daa7c..ce9241a 100644 --- a/main.scm +++ b/main.scm @@ -1,7 +1,34 @@ (load "codegen.scm") +; returns (os filename) +(define (parse-args) + (define (parse-os x) + (if (null? x) 'darwin ; todo: replace this with the os + ; it was compiled with + (if + (or (equal? (car x) "-t") + (equal? (car x) "--target")) + (case (cadr x) + ("darwin" 'darwin) + ("linux" 'linux) + (else (error #f "unknown os"))) + (parse-os (cdr x))))) + (define (parse-file x) + (if (null? x) 'stdin + (if + (or (equal? (car x) "-t") + (equal? (car x) "--target")) + (parse-file (cddr x)) + (car x)))) + (let ((args (cdr (command-line)))) + (list (parse-os args) (parse-file args)))) + + +(define target (car (parse-args))) +(define file (cadr (parse-args))) + (compile-to-binary - (if (> (length (command-line)) 1) - (call-with-input-file (cadr (command-line)) read) - (read)) - "a.out") + (if (eqv? file 'stdin) + (read) + (call-with-input-file file read)) + "a.out" target)