changeset 698: | 96958d3eb5b0 |
parent: | efb4a19ff530 |
author: | Richard Westhaver <ellis@rwest.io> |
date: | Fri, 04 Oct 2024 22:04:59 -0400 |
permissions: | -rw-r--r-- |
description: | fixes |
234 | 1 | ;;; obj/meta/pkg.lisp --- Meta-objects |
2 | ||
3 | ;; |
|
4 | ||
575
efb4a19ff530
color palettes, obj/query upgrades and q/sql parsing - successfully parsing SQL-SELECT
Richard Westhaver <ellis@rwest.io>
parents:
373
diff
changeset
|
5 | ;;; Commentary: |
efb4a19ff530
color palettes, obj/query upgrades and q/sql parsing - successfully parsing SQL-SELECT
Richard Westhaver <ellis@rwest.io>
parents:
373
diff
changeset
|
6 | |
efb4a19ff530
color palettes, obj/query upgrades and q/sql parsing - successfully parsing SQL-SELECT
Richard Westhaver <ellis@rwest.io>
parents:
373
diff
changeset
|
7 | |
efb4a19ff530
color palettes, obj/query upgrades and q/sql parsing - successfully parsing SQL-SELECT
Richard Westhaver <ellis@rwest.io>
parents:
373
diff
changeset
|
8 | ;;;; Notes: |
efb4a19ff530
color palettes, obj/query upgrades and q/sql parsing - successfully parsing SQL-SELECT
Richard Westhaver <ellis@rwest.io>
parents:
373
diff
changeset
|
9 | |
efb4a19ff530
color palettes, obj/query upgrades and q/sql parsing - successfully parsing SQL-SELECT
Richard Westhaver <ellis@rwest.io>
parents:
373
diff
changeset
|
10 | ;; ordered? https://www.reddit.com/r/lisp/comments/n88x59/metaclasses_using_structures_or_speeding_up_slot/ |
efb4a19ff530
color palettes, obj/query upgrades and q/sql parsing - successfully parsing SQL-SELECT
Richard Westhaver <ellis@rwest.io>
parents:
373
diff
changeset
|
11 | |
efb4a19ff530
color palettes, obj/query upgrades and q/sql parsing - successfully parsing SQL-SELECT
Richard Westhaver <ellis@rwest.io>
parents:
373
diff
changeset
|
12 | ;;;; Ref: |
efb4a19ff530
color palettes, obj/query upgrades and q/sql parsing - successfully parsing SQL-SELECT
Richard Westhaver <ellis@rwest.io>
parents:
373
diff
changeset
|
13 | |
efb4a19ff530
color palettes, obj/query upgrades and q/sql parsing - successfully parsing SQL-SELECT
Richard Westhaver <ellis@rwest.io>
parents:
373
diff
changeset
|
14 | ;; https://franz.com/support/documentation/11.0/mop/concepts.html |
efb4a19ff530
color palettes, obj/query upgrades and q/sql parsing - successfully parsing SQL-SELECT
Richard Westhaver <ellis@rwest.io>
parents:
373
diff
changeset
|
15 | |
234 | 16 | ;;; Code: |
17 | (defpackage :obj/meta/stealth |
|
356
aac665e2f5bf
stashed and revert some obj/color changes. added x/wayland feature splits, WITH-TCP-CLIENT and WITH-UDP-CLIENT impl (no tests)
Richard Westhaver <ellis@rwest.io>
parents:
305
diff
changeset
|
18 | (:use :cl :std :obj/meta :sb-mop)) |
234 | 19 | |
20 | (defpackage :obj/meta/typed |
|
356
aac665e2f5bf
stashed and revert some obj/color changes. added x/wayland feature splits, WITH-TCP-CLIENT and WITH-UDP-CLIENT impl (no tests)
Richard Westhaver <ellis@rwest.io>
parents:
305
diff
changeset
|
21 | (:use :cl :std :obj/meta :sb-mop)) |
234 | 22 | |
23 | (defpackage :obj/meta/filtered |
|
356
aac665e2f5bf
stashed and revert some obj/color changes. added x/wayland feature splits, WITH-TCP-CLIENT and WITH-UDP-CLIENT impl (no tests)
Richard Westhaver <ellis@rwest.io>
parents:
305
diff
changeset
|
24 | (:use :cl :std :obj/meta :sb-mop) |
236 | 25 | (:export |
26 | :define-filtered-function :filtered :filtered-function :filtered-method |
|
27 | :generic-function-filter-expression :generic-function-filters :method-filter :simple-filtered-function)) |
|
234 | 28 | |
29 | (defpackage :obj/meta/sealed |
|
30 | (:use :cl :std :obj/meta) |
|
31 | (:import-from :sb-pcl :eql-specializer :intern-eql-specializer |
|
32 | :eql-specializer-object :funcallable-standard-class) |
|
33 | (:import-from :sb-mop :class-finalized-p :finalize-inheritance |
|
34 | :class-precedence-list :class-direct-superclasses :specializer :method-specializers |
|
35 | :generic-function-argument-precedence-order :generic-function-name :generic-function-methods :class-direct-subclasses |
|
36 | :class-prototype) |
|
37 | (:export |
|
38 | :ensure-specializer |
|
39 | :specializer-type |
|
40 | :specializer-prototype |
|
41 | :specializer-direct-superspecializers |
|
42 | :specializer-intersectionp |
|
43 | :specializer-subsetp |
|
44 | :domain |
|
45 | :ensure-domain |
|
46 | :method-domain |
|
47 | :domain-specializers |
|
48 | :domain-arity |
|
49 | :domain-equal |
|
50 | :domain-intersectionp |
|
51 | :domain-subsetp |
|
52 | ||
53 | :metaobject-sealable-p |
|
54 | :class-sealable-p |
|
55 | :generic-function-sealable-p |
|
56 | :method-sealable-p |
|
57 | :specializer-sealable-p |
|
58 | ||
59 | :metaobject-sealed-p |
|
60 | :class-sealed-p |
|
61 | :generic-function-sealed-p |
|
62 | :method-sealed-p |
|
63 | :specializer-sealed-p |
|
64 | ||
65 | :seal-class |
|
66 | :seal-generic-function |
|
67 | :seal-method |
|
68 | :seal-domain |
|
69 | :seal-specializer |
|
70 | ||
71 | :method-properties |
|
72 | :validate-method-property |
|
73 | ||
74 | :static-call-signature |
|
75 | :static-call-signature-types |
|
76 | :static-call-signature-prototypes |
|
77 | ||
78 | :sealed-domains |
|
79 | :compute-static-call-signatures |
|
80 | :externalizable-object-p |
|
81 | :sealable-class |
|
82 | :sealable-generic-function |
|
83 | :sealable-standard-generic-function |
|
84 | :potentially-sealable-method |
|
85 | :potentially-sealable-standard-method)) |
|
86 | ||
277
10faf95f90dd
stream and basic type upgrades. fixed some bugs and improved csv parsing
Richard Westhaver <ellis@rwest.io>
parents:
276
diff
changeset
|
87 | (defpackage :obj/meta/fast |
356
aac665e2f5bf
stashed and revert some obj/color changes. added x/wayland feature splits, WITH-TCP-CLIENT and WITH-UDP-CLIENT impl (no tests)
Richard Westhaver <ellis@rwest.io>
parents:
305
diff
changeset
|
88 | (:use :cl :std :obj/meta/sealed :obj/meta) |
236 | 89 | (:import-from :sb-int :gensymify) |
90 | (:import-from :sb-walker :macroexpand-all) |
|
277
10faf95f90dd
stream and basic type upgrades. fixed some bugs and improved csv parsing
Richard Westhaver <ellis@rwest.io>
parents:
276
diff
changeset
|
91 | (:export :fast-generic-function :fast-method :inlineable)) |
234 | 92 | |
93 | (defpackage :obj/meta/lazy |
|
356
aac665e2f5bf
stashed and revert some obj/color changes. added x/wayland feature splits, WITH-TCP-CLIENT and WITH-UDP-CLIENT impl (no tests)
Richard Westhaver <ellis@rwest.io>
parents:
305
diff
changeset
|
94 | (:use :cl :std :obj/meta)) |
236 | 95 | |
96 | (defpackage :obj/meta/overloaded |
|
356
aac665e2f5bf
stashed and revert some obj/color changes. added x/wayland feature splits, WITH-TCP-CLIENT and WITH-UDP-CLIENT impl (no tests)
Richard Westhaver <ellis@rwest.io>
parents:
305
diff
changeset
|
97 | (:use :cl :std :obj/meta)) |
aac665e2f5bf
stashed and revert some obj/color changes. added x/wayland feature splits, WITH-TCP-CLIENT and WITH-UDP-CLIENT impl (no tests)
Richard Westhaver <ellis@rwest.io>
parents:
305
diff
changeset
|
98 | |
373 | 99 | (defpackage :obj/meta/storable |
100 | (:use :cl :std :obj/meta :obj/id) |
|
101 | (:export |
|
102 | :storable-class :initialize-storable-class |
|
103 | :storable-slot-mixin :storable-direct-slot-definition |
|
104 | :storable-effective-slot-definition)) |
|
105 | |
|
356
aac665e2f5bf
stashed and revert some obj/color changes. added x/wayland feature splits, WITH-TCP-CLIENT and WITH-UDP-CLIENT impl (no tests)
Richard Westhaver <ellis@rwest.io>
parents:
305
diff
changeset
|
106 | (in-package :obj/meta) |
305
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
107 | |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
108 | (defun class-equalp (c1 c2) |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
109 | (when (symbolp c1) (setf c1 (find-class c1))) |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
110 | (when (symbolp c2) (setf c2 (find-class c2))) |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
111 | (eq c1 c2)) |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
112 | |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
113 | (defun type-specifier-and (&rest type-specifiers) |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
114 | (let ((relevant (remove t type-specifiers))) |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
115 | (cond ((null relevant) t) |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
116 | ((null (cdr relevant)) (first relevant)) |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
117 | (t `(and ,@relevant))))) |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
118 | |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
119 | (defun type-specifier-or (&rest type-specifiers) |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
120 | (let ((relevant (remove nil type-specifiers))) |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
121 | (cond ((null relevant) nil) |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
122 | ((null (cdr relevant)) (first relevant)) |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
123 | (t `(or ,@relevant))))) |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
124 | |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
125 | (defun type-specifier-not (type-specifier) |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
126 | (cond ((eql type-specifier t) nil) |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
127 | ((eql type-specifier nil) t) |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
128 | (t `(not ,type-specifier)))) |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
129 | |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
130 | (defparameter *standard-metaobjects* |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
131 | (list (find-class 'standard-object) |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
132 | (find-class 'standard-class) |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
133 | (find-class 'standard-generic-function) |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
134 | (find-class 'standard-method) |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
135 | (find-class 'built-in-class))) |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
136 | |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
137 | ;;; From ARNESI - Messing with the MOP |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
138 | |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
139 | ;; https://bese.common-lisp.dev/docs/arnesi/html/Messing_0020with_0020the_0020MOP.html#wrapping-standard_0020method_0020combination |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
140 | |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
141 | (define-method-combination wrapping-standard |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
142 | (&key (around-order :most-specific-first) |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
143 | (before-order :most-specific-first) |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
144 | (primary-order :most-specific-first) |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
145 | (after-order :most-specific-last) |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
146 | (wrapping-order :most-specific-last) |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
147 | (wrap-around-order :most-specific-last)) |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
148 | ((wrap-around (:wrap-around)) |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
149 | (around (:around)) |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
150 | (before (:before)) |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
151 | (wrapping (:wrapping)) |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
152 | (primary () :required t) |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
153 | (after (:after))) |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
154 | "Same semantics as standard method combination but allows |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
155 | \"wrapping\" methods. Ordering of methods: |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
156 | |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
157 | (wrap-around |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
158 | (around |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
159 | (before) |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
160 | (wrapping |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
161 | (primary)) |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
162 | (after))) |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
163 | |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
164 | :warp-around, :around, :wrapping and :primary methods call the |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
165 | next least/most specific method via call-next-method (as in |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
166 | standard method combination). |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
167 | |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
168 | The various WHATEVER-order keyword arguments set the order in |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
169 | which the methods are called and be set to either |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
170 | :most-specific-last or :most-specific-first." |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
171 | (labels ((effective-order (methods order) |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
172 | (ecase order |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
173 | (:most-specific-first methods) |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
174 | (:most-specific-last (reverse methods)))) |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
175 | (call-methods (methods) |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
176 | (mapcar (lambda (meth) `(call-method ,meth)) |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
177 | methods))) |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
178 | (let* (;; reorder the methods based on the -order arguments |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
179 | (wrap-around (effective-order wrap-around wrap-around-order)) |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
180 | (around (effective-order around around-order)) |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
181 | (wrapping (effective-order wrapping wrapping-order)) |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
182 | (before (effective-order before before-order)) |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
183 | (primary (effective-order primary primary-order)) |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
184 | (after (effective-order after after-order)) |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
185 | ;; inital value of the effective call is a call its primary |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
186 | ;; method(s) |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
187 | (form (case (length primary) |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
188 | (1 `(call-method ,(first primary))) |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
189 | (t `(call-method ,(first primary) ,(rest primary)))))) |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
190 | (when wrapping |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
191 | ;; wrap form in call to the wrapping methods |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
192 | (setf form `(call-method ,(first wrapping) |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
193 | (,@(rest wrapping) (make-method ,form))))) |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
194 | (when before |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
195 | ;; wrap FORM in calls to its before methods |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
196 | (setf form `(progn |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
197 | ,@(call-methods before) |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
198 | ,form))) |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
199 | (when after |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
200 | ;; wrap FORM in calls to its after methods |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
201 | (setf form `(multiple-value-prog1 |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
202 | ,form |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
203 | ,@(call-methods after)))) |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
204 | (when around |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
205 | ;; wrap FORM in calls to its around methods |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
206 | (setf form `(call-method ,(first around) |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
207 | (,@(rest around) |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
208 | (make-method ,form))))) |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
209 | (when wrap-around |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
210 | (setf form `(call-method ,(first wrap-around) |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
211 | (,@(rest wrap-around) |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
212 | (make-method ,form))))) |
ac705fd55056
add base64 and wrapping-standard
Richard Westhaver <ellis@rwest.io>
parents:
277
diff
changeset
|
213 | form))) |