build: Install and installed-run fixes.
[mes.git] / module / language / c99 / info.scm
1 ;;; -*-scheme-*-
2
3 ;;; Mes --- Maxwell Equations of Software
4 ;;; Copyright © 2016,2017 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   #:use-module (system base pmatch)
30   #:export (<info>
31             make
32             make-<info>
33             info?
34
35             .types
36             .constants
37             .functions
38             .globals
39             .locals
40             .function
41             .text
42             .break
43             .continue
44
45             make-type
46             type?
47             type:type
48             type:size
49             type:pointer
50             type:description
51
52             make-global
53             global?
54             global:type
55             global:pointer
56             global:value
57
58             make-local
59             local?
60             local:type
61             local:pointer
62             local:id))
63
64 (cond-expand
65  (guile-2)
66  (guile
67   (use-modules (ice-9 syncase)))
68  (mes))
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))