bd28e6690cdf6518a03c87601cda8032505359af
[mes.git] / module / mes / type-0.mes
1 ;;; -*-scheme-*-
2
3 ;;; Mes --- Maxwell Equations of Software
4 ;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
5 ;;;
6 ;;; type-0.mes: 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 ;;; Commentary:
22
23 ;;; type-0.mes - to be loaded after loop-0.mes if type.i is not
24 ;;; included in core.
25
26 ;;; This code is only loaded if environment variable TYPE0 is set.
27 ;;; There are two copies of the type enum, with manual numbering.  Not
28 ;;; good.
29
30
31 ;;; Code:
32
33 (define <char> 0)
34 (define <function> 1)
35 (define <macro> 2)
36 (define <number> 3)
37 (define <pair> 4)
38 (define <scm> 5)
39 (define <string> 6)
40 (define <symbol> 7)
41 (define <values> 8)
42 (define <vector> 9)
43
44 (define mes-type-alist
45   `((,<char> . <char>)
46     (,<function> . <function>)
47     (,<macro> . <macro>)
48     (,<number> . <number>)
49     (,<pair> . <pair>)
50     (,<scm> . <scm>)
51     (,<string> . <string>)
52     (,<symbol> . <symbol>)
53     (,<char> . <char>)
54     (,<values> . <values>)))
55   
56 (define (class-of x)
57   (assq (mes-type-of x) mes-type-alist))
58
59 (define (atom? x)
60   (not (pair? x)))
61
62 (define (boolean? x)
63   (if (eq? x #f) #t
64       (if (eq? x #t) #t
65           #f)))
66
67 (define (char? x)
68   (eq? (mes-type-of x) <char>))
69
70 ;; pair? is not needed as a primitive from C
71 ;; but it gives a factor 2 speedup
72 ;; (define (pair? x)
73 ;;   (eq? (mes-type-of x) <pair>))
74
75 (define (number? x)
76   (eq? (mes-type-of x) <number>))
77
78 (define (internal? x)
79   (eq? (mes-type-of x) <scm>))
80
81 (define (string? x)
82   (eq? (mes-type-of x) <string>))
83
84 (define (symbol? x)
85   (eq? (mes-type-of x) <symbol>))
86
87 (define (vector? x)
88   (eq? (mes-type-of x) <vector>))
89
90 (define (null? x)
91   (eq? x '()))