X-Git-Url: http://git.lukelau.me/?a=blobdiff_plain;f=main.scm;h=ce9241ac11537abaf0766e6876e138b24645efd3;hb=91145e54f41ee88f1e279a80430b3f5ed4e7a8c6;hp=29c03e5c9c6cfc8a97e63cd44f2d0b16aff5e9eb;hpb=05e0f42eb4a44694b96297ce50b5a27eb6bb9f71;p=scheme.git diff --git a/main.scm b/main.scm index 29c03e5..ce9241a 100644 --- a/main.scm +++ b/main.scm @@ -1,6 +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))) + (if (eqv? file 'stdin) + (read) + (call-with-input-file file read)) + "a.out" target)