6b8f261b5b79d3e4610f37c7949805909b59876d
[sbcl.git] / src / code / defsetfs.lisp
1 ;;;; various DEFSETFs, pulled into one file for convenience in doing
2 ;;;; them as early in the build process as possible so as to avoid
3 ;;;; hassles with invoking SETF FOO before DEFSETF FOO and thus
4 ;;;; compiling a call to some nonexistent function #'(SETF FOO)
5
6 ;;;; This software is part of the SBCL system. See the README file for
7 ;;;; more information.
8 ;;;;
9 ;;;; This software is derived from the CMU CL system, which was
10 ;;;; written at Carnegie Mellon University and released into the
11 ;;;; public domain. The software is in the public domain and is
12 ;;;; provided with absolutely no warranty. See the COPYING and CREDITS
13 ;;;; files for more information.
14
15 (sb!int:file-comment
16   "$Header$")
17
18 (sb!int:/show0 "entering defsetfs.lisp")
19
20 ;;; from alieneval.lisp
21 (in-package "SB!ALIEN")
22 (defsetf slot %set-slot)
23 (defsetf deref (alien &rest indices) (value)
24   `(%set-deref ,alien ,value ,@indices))
25 (defsetf %heap-alien %set-heap-alien)
26
27 ;;; from bignum.lisp
28 (in-package "SB!BIGNUM")
29 (defsetf %bignum-ref %bignum-set)
30
31 ;;; from bit-bash.lisp
32 (in-package "SB!VM")
33 (defsetf word-sap-ref %set-word-sap-ref)
34
35 ;;; from debug-int.lisp
36 (in-package "SB!DI")
37 (defsetf stack-ref %set-stack-ref)
38 (defsetf debug-var-value %set-debug-var-value)
39 (defsetf debug-var-value %set-debug-var-value)
40 (defsetf breakpoint-info %set-breakpoint-info)
41
42 ;;; from defstruct.lisp
43 (in-package "SB!KERNEL")
44 (defsetf %instance-ref %instance-set)
45 (defsetf %raw-ref-single %raw-set-single)
46 (defsetf %raw-ref-double %raw-set-double)
47 #!+long-float
48 (defsetf %raw-ref-long %raw-set-long)
49 (defsetf %raw-ref-complex-single %raw-set-complex-single)
50 (defsetf %raw-ref-complex-double %raw-set-complex-double)
51 #!+long-float
52 (defsetf %raw-ref-complex-long %raw-set-complex-long)
53 (defsetf %instance-layout %set-instance-layout)
54 (defsetf %funcallable-instance-info %set-funcallable-instance-info)
55
56 ;;; from early-setf.lisp
57 (in-package "SB!IMPL")
58
59 ;;; KLUDGE: Various of these (e.g. AREF and BIT) have DEFUN (SETF FOO) versions
60 ;;; too. Do we really need both? -- WHN 19990921
61 #-sb-xc-host (defsetf car %rplaca)
62 #-sb-xc-host (defsetf cdr %rplacd)
63 #-sb-xc-host (defsetf caar (x) (v) `(%rplaca (car ,x) ,v))
64 #-sb-xc-host (defsetf cadr (x) (v) `(%rplaca (cdr ,x) ,v))
65 #-sb-xc-host (defsetf cdar (x) (v) `(%rplacd (car ,x) ,v))
66 #-sb-xc-host (defsetf cddr (x) (v) `(%rplacd (cdr ,x) ,v))
67 #-sb-xc-host (defsetf caaar (x) (v) `(%rplaca (caar ,x) ,v))
68 #-sb-xc-host (defsetf cadar (x) (v) `(%rplaca (cdar ,x) ,v))
69 #-sb-xc-host (defsetf cdaar (x) (v) `(%rplacd (caar ,x) ,v))
70 #-sb-xc-host (defsetf cddar (x) (v) `(%rplacd (cdar ,x) ,v))
71 #-sb-xc-host (defsetf caadr (x) (v) `(%rplaca (cadr ,x) ,v))
72 #-sb-xc-host (defsetf caddr (x) (v) `(%rplaca (cddr ,x) ,v))
73 #-sb-xc-host (defsetf cdadr (x) (v) `(%rplacd (cadr ,x) ,v))
74 #-sb-xc-host (defsetf cdddr (x) (v) `(%rplacd (cddr ,x) ,v))
75 #-sb-xc-host (defsetf caaaar (x) (v) `(%rplaca (caaar ,x) ,v))
76 #-sb-xc-host (defsetf cadaar (x) (v) `(%rplaca (cdaar ,x) ,v))
77 #-sb-xc-host (defsetf cdaaar (x) (v) `(%rplacd (caaar ,x) ,v))
78 #-sb-xc-host (defsetf cddaar (x) (v) `(%rplacd (cdaar ,x) ,v))
79 #-sb-xc-host (defsetf caadar (x) (v) `(%rplaca (cadar ,x) ,v))
80 #-sb-xc-host (defsetf caddar (x) (v) `(%rplaca (cddar ,x) ,v))
81 #-sb-xc-host (defsetf cdadar (x) (v) `(%rplacd (cadar ,x) ,v))
82 #-sb-xc-host (defsetf cdddar (x) (v) `(%rplacd (cddar ,x) ,v))
83 #-sb-xc-host (defsetf caaadr (x) (v) `(%rplaca (caadr ,x) ,v))
84 #-sb-xc-host (defsetf cadadr (x) (v) `(%rplaca (cdadr ,x) ,v))
85 #-sb-xc-host (defsetf cdaadr (x) (v) `(%rplacd (caadr ,x) ,v))
86 #-sb-xc-host (defsetf cddadr (x) (v) `(%rplacd (cdadr ,x) ,v))
87 #-sb-xc-host (defsetf caaddr (x) (v) `(%rplaca (caddr ,x) ,v))
88 #-sb-xc-host (defsetf cadddr (x) (v) `(%rplaca (cdddr ,x) ,v))
89 #-sb-xc-host (defsetf cdaddr (x) (v) `(%rplacd (caddr ,x) ,v))
90 #-sb-xc-host (defsetf cddddr (x) (v) `(%rplacd (cdddr ,x) ,v))
91 #-sb-xc-host (defsetf first %rplaca)
92 #-sb-xc-host (defsetf second (x) (v) `(%rplaca (cdr ,x) ,v))
93 #-sb-xc-host (defsetf third (x) (v) `(%rplaca (cddr ,x) ,v))
94 #-sb-xc-host (defsetf fourth (x) (v) `(%rplaca (cdddr ,x) ,v))
95 #-sb-xc-host (defsetf fifth (x) (v) `(%rplaca (cddddr ,x) ,v))
96 #-sb-xc-host (defsetf sixth (x) (v) `(%rplaca (cdr (cddddr ,x)) ,v))
97 #-sb-xc-host (defsetf seventh (x) (v) `(%rplaca (cddr (cddddr ,x)) ,v))
98 #-sb-xc-host (defsetf eighth (x) (v) `(%rplaca (cdddr (cddddr ,x)) ,v))
99 #-sb-xc-host (defsetf ninth (x) (v) `(%rplaca (cddddr (cddddr ,x)) ,v))
100 #-sb-xc-host (defsetf tenth (x) (v) `(%rplaca (cdr (cddddr (cddddr ,x))) ,v))
101 #-sb-xc-host (defsetf rest %rplacd)
102 #-sb-xc-host (defsetf elt %setelt)
103 #-sb-xc-host (defsetf aref %aset)
104 #-sb-xc-host (defsetf row-major-aref %set-row-major-aref)
105 #-sb-xc-host (defsetf svref %svset)
106 #-sb-xc-host (defsetf char %charset)
107 #-sb-xc-host (defsetf bit %bitset)
108 #-sb-xc-host (defsetf schar %scharset)
109 #-sb-xc-host (defsetf sbit %sbitset)
110 (defsetf %array-dimension %set-array-dimension)
111 (defsetf sb!kernel:%raw-bits sb!kernel:%set-raw-bits)
112 #-sb-xc-host (defsetf symbol-value set)
113 #-sb-xc-host (defsetf symbol-function fset)
114 #-sb-xc-host (defsetf symbol-plist %set-symbol-plist)
115 #-sb-xc-host (defsetf nth %setnth)
116 #-sb-xc-host (defsetf fill-pointer %set-fill-pointer)
117 (defsetf search-list %set-search-list)
118 (defsetf sap-ref-8 %set-sap-ref-8)
119 (defsetf signed-sap-ref-8 %set-signed-sap-ref-8)
120 (defsetf sap-ref-16 %set-sap-ref-16)
121 (defsetf signed-sap-ref-16 %set-signed-sap-ref-16)
122 (defsetf sap-ref-32 %set-sap-ref-32)
123 (defsetf signed-sap-ref-32 %set-signed-sap-ref-32)
124 #!+alpha (defsetf sap-ref-64 %set-sap-ref-64)
125 #!+alpha (defsetf signed-sap-ref-64 %set-signed-sap-ref-64)
126 (defsetf sap-ref-sap %set-sap-ref-sap)
127 (defsetf sap-ref-single %set-sap-ref-single)
128 (defsetf sap-ref-double %set-sap-ref-double)
129 #!+long-float (defsetf sap-ref-long %set-sap-ref-long)
130 #-sb-xc-host (defsetf subseq (sequence start &optional (end nil)) (v)
131             `(progn (replace ,sequence ,v :start1 ,start :end1 ,end)
132                     ,v))
133
134 ;;; from fdefinition.lisp
135 (in-package "SB!IMPL")
136 #-sb-xc-host (defsetf fdefinition %set-fdefinition)
137
138 ;;; from filesys.lisp
139 (in-package "SB!IMPL")
140 (defsetf default-directory %set-default-directory)
141
142 ;;; from kernel.lisp
143 (in-package "SB!KERNEL")
144 (defsetf code-header-ref code-header-set)
145 (defsetf %raw-bits %set-raw-bits)
146
147 ;;; from serve-event.lisp
148 (in-package "SB!IMPL")
149 (defsetf object-set-operation %set-object-set-operation
150   #!+sb-doc
151   "Set the handler function for an object set operation.")
152
153 ;;; from unix.lisp
154 (in-package "SB!UNIX")
155 (defsetf tty-process-group (&optional fd) (pgrp)
156   #!+sb-doc
157   "Set the tty-process-group for the unix file-descriptor FD to PGRP. If not
158   supplied, FD defaults to /dev/tty."
159   `(%set-tty-process-group ,pgrp ,fd))
160
161 ;;; from x86-vm.lisp
162 (in-package "SB!VM")
163 (defsetf context-register %set-context-register)
164 (defsetf context-float-register %set-context-float-register)
165
166 (sb!int:/show0 "leaving defsetfs.lisp")