diff --git a/iniquity-plus/compile-ops.rkt b/iniquity-plus/compile-ops.rkt index a0ae02e..4dd9235 100644 --- a/iniquity-plus/compile-ops.rkt +++ b/iniquity-plus/compile-ops.rkt @@ -1,5 +1,5 @@ #lang racket -(provide compile-op0 compile-op1 compile-op2 compile-op3 pad-stack) +(provide compile-op0 compile-op1 compile-op2 compile-op3 pad-stack assert-cons) (require "ast.rkt") (require "types.rkt") (require a86/ast) diff --git a/iniquity-plus/compile-stdin.rkt b/iniquity-plus/compile-stdin.rkt new file mode 100644 index 0000000..82d4583 --- /dev/null +++ b/iniquity-plus/compile-stdin.rkt @@ -0,0 +1,14 @@ +#lang racket +(provide main) +(require "parse.rkt") +(require "compile.rkt") +(require "read-all.rkt") +(require a86/printer) + +;; -> Void +;; Compile contents of stdin, +;; emit asm code on stdout +(define (main) + (read-line) ; ignore #lang racket line + (asm-display (compile (apply parse (read-all))))) + diff --git a/iniquity-plus/compile.rkt b/iniquity-plus/compile.rkt index 69b0e26..53da62f 100644 --- a/iniquity-plus/compile.rkt +++ b/iniquity-plus/compile.rkt @@ -172,6 +172,7 @@ (seq (Lea rax r) (Push rax) (compile-es es (cons #f c)) + ;; TODO: communicate argument count to called function (Jmp (symbol->label f)) (Label r)))) diff --git a/iniquity-plus/interp-stdin.rkt b/iniquity-plus/interp-stdin.rkt new file mode 100644 index 0000000..ae13b54 --- /dev/null +++ b/iniquity-plus/interp-stdin.rkt @@ -0,0 +1,13 @@ +#lang racket +(provide main) +(require "parse.rkt") +(require "interp.rkt") +(require "read-all.rkt") + +;; -> Void +;; Parse and interpret contents of stdin, +;; print result on stdout +(define (main) + (read-line) ; ignore #lang racket line + (println (interp (apply parse (read-all))))) + diff --git a/iniquity-plus/read-all.rkt b/iniquity-plus/read-all.rkt new file mode 100644 index 0000000..a83fe69 --- /dev/null +++ b/iniquity-plus/read-all.rkt @@ -0,0 +1,9 @@ +#lang racket +(provide read-all) +;; read all s-expression until eof +(define (read-all) + (let ((r (read))) + (if (eof-object? r) + '() + (cons r (read-all))))) +