mescc: cleanups.
[mes.git] / module / language / c99 / info.scm
1 ;;; -*-scheme-*-
2
3 ;;; Mes --- Maxwell Equations of Software
4 ;;; Copyright © 2016,2017,2018 Jan Nieuwenhuizen <janneke@gnu.org>
5 ;;;
6 ;;; This file is part of Mes.
7 ;;;
8 ;;; Mes is free software; you can redistribute it and/or modify it
9 ;;; under the terms of the GNU General Public License as published by
10 ;;; the Free Software Foundation; either version 3 of the License, or (at
11 ;;; your option) any later version.
12 ;;;
13 ;;; Mes is distributed in the hope that it will be useful, but
14 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
15 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 ;;; GNU General Public License for more details.
17 ;;;
18 ;;; You should have received a copy of the GNU General Public License
19 ;;; along with Mes.  If not, see <http://www.gnu.org/licenses/>.
20
21 ;;; info.scm defines [Guile] record data types for compiler.mes
22
23 ;;; Code:
24
25 (define-module (language c99 info)
26   #:use-module (ice-9 optargs)
27   #:use-module (srfi srfi-9)
28   #:use-module (srfi srfi-9 gnu)
29   #:export (<info>
30             make
31             make-<info>
32             info?
33
34             .types
35             .constants
36             .functions
37             .globals
38             .locals
39             .function
40             .text
41             .break
42             .continue
43
44             make-type
45             type?
46             type:type
47             type:size
48             type:pointer
49             type:description
50
51             make-global
52             global?
53             global:type
54             global:pointer
55             global:value
56
57             make-local
58             local?
59             local:type
60             local:pointer
61             local:id))
62
63 (cond-expand
64  (guile-2)
65  (guile
66   (use-modules (ice-9 syncase)))
67  (mes
68   (mes-use-module (mes optargs))))
69
70 (define-immutable-record-type <info>
71   (make-<info> types constants functions globals locals function text break continue)
72   info?
73   (types .types)
74   (constants .constants)
75   (functions .functions)
76   (globals .globals)
77   (locals .locals)
78   (function .function)
79   (text .text)
80   (break .break)
81   (continue .continue))
82
83 (define* (make o #:key (types '()) (constants '()) (functions '()) (globals '()) (locals '()) (function #f) (text '()) (break '()) (continue '()))
84   (make-<info> types constants functions globals locals function text break continue))
85
86 (define-immutable-record-type <type>
87   (make-type type size pointer description)
88   type?
89   (type type:type)
90   (size type:size)
91   (pointer type:pointer)
92   (description type:description))
93
94 (define-immutable-record-type <global>
95   (make-global type pointer value)
96   global?
97   (type global:type)
98   (pointer global:pointer)
99   (value global:value))
100
101 (define-immutable-record-type <local>
102   (make-local type pointer id)
103   local?
104   (type local:type)
105   (pointer local:pointer)
106   (id local:id))