Abstracted predefined routine invocation, it is now more straightforward.
[sixpic.git] / six-comp.scm
blobd1cd9aeef2a9a6579c2155d7477ef05ac460c206
1 #!/usr/bin/env gsi
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 ;; temporary solution, to support more than int
17 (set! ##six-types ;; TODO signed types ?
18   '((int    . #f)
19     (byte   . #f)
20     (int8   . #f)
21     (int16  . #f)
22     (int32  . #f)
23     (char   . #f)
24     (bool   . #f)
25     (void   . #f)
26     (float  . #f)
27     (double . #f)
28     (obj    . #f)))
29 ;; TODO typedef should add to this list
31 (define (read-source filename)
32   (shell-command (string-append "cpp -P " filename " > " filename ".tmp"))
33 ;;   (##read-all-as-a-begin-expr-from-path ;; TODO use vectorized notation to have info on errors (where in the source)
34 ;;    (string-append filename ".tmp")
35 ;;    (readtable-start-syntax-set (current-readtable) 'six)
36 ;;    ##wrap-datum
37 ;;    ##unwrap-datum)
38   (with-input-from-file
39       (string-append filename ".tmp")
40     (lambda ()
41       (input-port-readtable-set!
42        (current-input-port)
43        (readtable-start-syntax-set
44         (input-port-readtable (current-input-port))
45         'six))
46       (read-all)))
47   )
49 (define (main filename)
51   (output-port-readtable-set!
52    (current-output-port)
53    (readtable-sharing-allowed?-set
54     (output-port-readtable (current-output-port))
55     #t))
57   (let ((source (read-source filename)))
58     '(pretty-print source)
59     (let* ((ast (parse source)))
60       '(pretty-print ast)
61       (let ((cfg (generate-cfg ast)))
62         '(print-cfg-bbs cfg)
63         '(pretty-print cfg)
64         (remove-branch-cascades-and-dead-code cfg)
65         (remove-converging-branches cfg)
66         (remove-dead-instructions cfg)
67         '(pp "AFTER")
68         '(print-cfg-bbs cfg)
69         '(pretty-print cfg)
70         (let ((code (code-gen filename cfg)))
71           (asm-assemble)
72           '(display "------------------ GENERATED CODE\n")
73           (asm-display-listing (current-output-port))
74           (asm-write-hex-file (string-append filename ".hex"))
75           (asm-end!)
76           '(display "------------------ EXECUTION USING SIMULATOR\n")
77           (execute-hex-file (string-append filename ".hex"))
78           #t)))))