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