implement CEILING and FLOOR in terms of %CEILING and %FLOOR
[sbcl.git] / src / code / early-full-eval.lisp
1 ;;;; An interpreting EVAL
2
3 ;;;; This software is part of the SBCL system. See the README file for
4 ;;;; more information.
5 ;;;;
6 ;;;; This software is derived from the CMU CL system, which was
7 ;;;; written at Carnegie Mellon University and released into the
8 ;;;; public domain. The software is in the public domain and is
9 ;;;; provided with absolutely no warranty. See the COPYING and CREDITS
10 ;;;; files for more information.
11
12 (in-package "SB!EVAL")
13
14 (defparameter *eval-level* -1)
15 (defparameter *eval-verbose* nil)
16
17 ;; !defstruct-with-alternate-metaclass is unslammable and the
18 ;; RECOMPILE restart doesn't work on it.  This is the main reason why
19 ;; this stuff is split out into its own file.  Also, it lets the
20 ;; INTERPRETED-FUNCTION type be declared before it is used in
21 ;; compiler/main and code/deftypes-for-target.
22 (sb!kernel::!defstruct-with-alternate-metaclass
23  interpreted-function
24  ;; DEBUG-NAME and DEBUG-LAMBDA-LIST are initially a copies of the proper
25  ;; ones, but is analogous to SIMPLE-FUN-NAME and ARGLIST in the sense that it
26  ;; is they are there only for debugging, and do not affect behaviour of the
27  ;; function -- so DEFMACRO can set them to more informative values.
28  :slot-names (name debug-name lambda-list debug-lambda-list env
29                    declarations documentation body source-location)
30  :boa-constructor %make-interpreted-function
31  :superclass-name function
32  :metaclass-name static-classoid
33  :metaclass-constructor make-static-classoid
34  :dd-type funcallable-structure
35  :runtime-type-checks-p nil)
36
37 #-sb-xc-host
38 (progn
39   (defun make-interpreted-function
40       (&key name lambda-list env declarations documentation body source-location)
41     (let ((function (%make-interpreted-function
42                      name name lambda-list lambda-list env
43                      declarations documentation body source-location)))
44       (setf (sb!kernel:funcallable-instance-fun function)
45             #'(lambda (&rest args)
46                 (interpreted-apply function args)))
47       function))
48
49   (defun interpreted-function-p (function)
50     (typep function 'interpreted-function))
51
52   (sb!int:def!method print-object ((obj interpreted-function) stream)
53     (print-unreadable-object (obj stream
54                               :identity (not (interpreted-function-name obj)))
55       (format stream "~A ~A" '#:interpreted-function
56               (interpreted-function-name obj)))))