Both array mutation and array reference now work.
[sixpic.git] / six-comp.scm
blobf12056ba4e25c2e5c6ca474595a35b25b5ea31e4
1 #! gsi-script -:dar
3 (include "pic18-sim.scm")
4 (include "utilities.scm")
5 (include "ast.scm")
6 (include "operators.scm")
7 (include "cte.scm")
8 (include "parser.scm")
9 (include "cfg.scm")
10 (include "optimizations.scm")
11 (include "code-generation.scm")
14 ;------------------------------------------------------------------------------
16 (define (read-source filename)
17   (shell-command (string-append "cpp -P " filename " > " filename ".tmp"))
18 ;;   (##read-all-as-a-begin-expr-from-path ;; TODO use vectorized notation to have info on errors (where in the source)
19 ;;    (string-append filename ".tmp")
20 ;;    (readtable-start-syntax-set (current-readtable) 'six)
21 ;;    ##wrap-datum
22 ;;    ##unwrap-datum)
23   (with-input-from-file
24       (string-append filename ".tmp")
25     (lambda ()
26       (input-port-readtable-set!
27        (current-input-port)
28        (readtable-start-syntax-set
29         (input-port-readtable (current-input-port))
30         'six))
31       (read-all)))
32   )
34 (define (main filename)
36   (output-port-readtable-set!
37    (current-output-port)
38    (readtable-sharing-allowed?-set
39     (output-port-readtable (current-output-port))
40     #t))
42   (let ((source (read-source filename)))
43     (pretty-print source)
44     (let ((ast (parse source)))
45       (pretty-print ast)
46       (let ((cfg (generate-cfg ast)))
47         '(print-cfg-bbs cfg)
48         (pretty-print cfg)
49         (remove-branch-cascades-and-dead-code cfg)
50         (remove-converging-branches cfg)
51         (remove-dead-instructions cfg)
52         '(pp "AFTER")
53         '(print-cfg-bbs cfg)
54         '(pretty-print cfg)
55         (let ((code (code-gen filename cfg)))
56           (pretty-print code)
57           '(display "------------------ EXECUTION USING SIMULATOR\n")
58           (execute-hex-file (string-append filename ".hex")))))))