[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Bug in DCODE and/or Caching.



Hello,

I think the following is indicative of a bug in DCode/Caching.
I don't have time to look for it (I'm off on holiday, whoopee)
so I thought I'd just broadcast it.

The symptom is (apparently) unnecessary consing when using
an accessor for a shared slot from somewhere outside of a method.

So:

(defclass foo () ((a :Allocation :Class :Accessor a :Initform 42)))


(defun bar (x)
  (a x))

(setq inst (make-instance 'foo))


(meter:test '(bar inst) #o16)

-> (sorry about the long lines)

DCODE-CACHE-MISS                                                       1
1,269      1,269    480      1,269
(:INTERNAL (:INTERNAL #:F0533 0) 0)                                    1
358        358      0        358
LOOKUP-METHOD-1                                                        1
357        357      0        357
SYS:*EVAL                                                              2
323        161      0        323
ALL-STD-CLASS-READERS-TERTIARY-MISS                                    1
279        279      0        279
LOOKUP-METHOD-INTERNAL                                                 1
260        260      0        260
COMPUTE-WRAPPER-CACHE-LOCATION-1                                       1
258        258     32        258
GET-CPL-1                                                              1
217        217      0        217
(:INTERNAL (:INTERNAL #:F3600 0) 0)                                    1
206        206      0        206
BAR                                                                    1
144        144      0        144
(:INTERNAL LOOKUP-METHOD-1 0)                                          1
137        137      0        137
(:INTERNAL (:INTERNAL #:F2107 0) 0)                                    1
134        134      0        134
SLOT-VALUE                                                             1
114        114      0        114
EVAL                                                                   1
113        113      0        113
(METHOD READER/WRITER-METHOD-SLOT-NAME (STANDARD-READER/WRITER-METHOD) 1
106        106      0        106
(:INTERNAL (:INTERNAL #:F2207 0) 0)                                    1
91         91      0         91
(METHOD SLOT-VALUE-USING-CLASS (STANDARD-CLASS T T))                   1
76         76      0         76
GET-CLASS-SLOT-VALUE-1                                                 1
50         50      0         50
GET-CLASS-1                                                            1
48         48      0         48
CLASS-OF                                                               1
38         38      0         38
WRAPPER-OF                                                             1
35         35      0         35
(METHOD ALL-STD-CLASS-READERS-MISS-1 (STANDARD-CLASS T T))             1
31         31      0         31
INTEGER-LENGTH                                                         1
27         27      0         27
METER::TEST                                                            1
0          0      0          0

total                                                                 25
4,671        186    512      4,671

As you can see, DCODE-CACHE-MISS and COMPUTE-WRAPPER-CACHE-LOCATION-1
both cons a fair bit.  This problem happens on every call, so
class slots can cons pretty heroically if you're not careful.

This is for "5/22/89  Victoria Day PCL"

on a TI Explorer I running release 5.


Have fun,


Rice.