src/{builtin,final,frontent}.lisp: `clear-the-decks' makes builtin module.
[sod] / src / final.lisp
CommitLineData
e33ea301
MW
1;;; -*-lisp-*-
2;;;
a9cffac1 3;;; Finishing touches for Sod
e33ea301
MW
4;;;
5;;; (c) 2015 Straylight/Edgeware
6;;;
7
8;;;----- Licensing notice ---------------------------------------------------
9;;;
10;;; This file is part of the Sensble Object Design, an object system for C.
11;;;
12;;; SOD is free software; you can redistribute it and/or modify
13;;; it under the terms of the GNU General Public License as published by
14;;; the Free Software Foundation; either version 2 of the License, or
15;;; (at your option) any later version.
16;;;
17;;; SOD is distributed in the hope that it will be useful,
18;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
19;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20;;; GNU General Public License for more details.
21;;;
22;;; You should have received a copy of the GNU General Public License
23;;; along with SOD; if not, write to the Free Software Foundation,
24;;; Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
25
26(cl:in-package #:sod)
27
a9cffac1
MW
28;;;--------------------------------------------------------------------------
29;;; Debugging utilities.
30
76618d28
MW
31(export '*debugout-pathname*)
32(defvar *debugout-pathname* #p"debugout.c")
33
e33ea301
MW
34(export 'test-module)
35(defun test-module (path reason)
36 "Reset the translator's state, read a module from PATH and output it with
37 REASON, returning the result as a string."
e33ea301
MW
38 (clear-the-decks)
39 (setf *module-map* (make-hash-table :test #'equal))
76618d28
MW
40 (with-open-file (out *debugout-pathname*
41 :direction :output
42 :if-exists :supersede
43 :if-does-not-exist :create)
e33ea301
MW
44 (output-module (read-module path) reason out)))
45
180bfa7c
MW
46;;;--------------------------------------------------------------------------
47;;; Calisthenics.
48
49(export 'exercise)
50(defun exercise ()
51 "Exercise the pieces of the metaobject protocol.
52
53 In some Lisps, the compiler is run the first time methods are called, to
54 do fancy just-in-time optimization things. This is great, only the
55 program doesn't actually run for very long and a lot of that work is
56 wasted because we're going to have to do it again next time the program
57 starts. Only, if we exercise the various methods, or at least a large
58 fraction of them, before we dump an image, then everything will be fast.
59
60 That's the theory anyway. Call this function before you dump an image and
61 see what happens."
62
63 (clear-the-decks)
64 (dolist (reason '(:h :c))
65 (with-output-to-string (bitbucket)
66 (output-module *builtin-module* reason bitbucket)))
67
68 (clear-the-decks))
69
e33ea301 70;;;----- That's all, folks --------------------------------------------------