freenode/#clasp - IRC Chatlog
Search
15:28:43
Bike
with the metaclass thing, the segfault is in error reporting. i can treat the error with thick gloves
15:28:57
Bike
also it's happening in compile file rather than load, i think i had a bad version or something
15:29:47
Bike
*poison* si a type-error. the expected type is INSTANCE, and trying to print the object is death. it has a class-of of 0, so something's really hosed
15:30:54
Bike
and yeah it looks like the direct problem is Class_O::__repr__ being called on a class, which causes it to be called on NULL
16:36:12
Bike
the error only actually happens when you REdefine a class with a special metaclass. i saw it with compile-file and load because defclass is fully run at compile time, which seems weird, but maybe it's fine
16:41:45
specbot
update-instance-for-redefined-class: http://www.lispworks.com/reference/HyperSpec/Body/f_upda_1.htm
16:43:17
Bike
drmeister: I think the problem is that update-instance is being called on a class, and it doesn't like that due to the instance/class distinction
16:45:19
Bike
beach: don't know that i can work on inlining for a while, just because it seems to involve serious changes i haven't thought through
16:59:24
Bike
clasp has a print-object method for class, but it prints something different from the printer and is apparently not used. guh
17:00:52
stassats
(pprint-dispatch (find-class 'list)) => #<CLOSURE-WITH-SLOTS@0x8959808 DEFAULT-PPRINT-DISPATCH :ftype :FUNCTION lambda-list: (STREAM OBJECT) :fptr 0x2243760>
17:02:31
Bike
cleaning up print output is one of those little things that could make clasp feel much more finished (even if it's still full of segfaults)
17:04:44
Bike
probably should have it be #<FUNCTION DEFAULT-PPRINT-DISPATCH (STREAM OBJECT) {0x8959808}> at worst, i think that keeps all the information
17:05:18
stassats
#<BUILTIN-CLOSURE@0x6ff7908 WRITE :ftype :FUNCTION lambda-list: (X &KEY (:STREAM STRM) (ARRAY *PRINT-ARRAY*) (BASE *PRINT-BASE*) ((:CASE CAS) *PRINT-CASE*) (CIRCLE *PRINT-CIRCLE*) (ESCAPE *PRINT-ESCAPE*) (GENSYM *PRINT-GENSYM*) (LENGTH *PRINT-LENGTH*) (LEVEL *PRINT-LEVEL*) (LINES *PRINT-LINES*) (MISER-WIDTH *PRINT-MISER-WIDTH*) (PPRINT-DISPATCH *PRINT-PPRINT-DISPATCH*) (PRETTY *PRINT-PRETTY*) (RADIX *PRINT-RADIX*) (READABLY
17:06:40
Bike
functions seem pretty weird underneath. generic functions don't count as compiled, which is technically nonconformant
17:13:04
stassats
(compile nil #'documentation) => COMPILE doesn't know how to handle this type of function
17:15:34
stassats
i remember this being a stopper for ansi-tests, so it was just swept under the rug
17:17:52
stassats
it does (compile 'documentation), which no longer fails, but isn't actually doing anything
17:18:58
Bike
because... compiled-function is a class... and generic function isn't a subclass of it, or something
17:21:48
Bike
apparently print-unreadable-object returns nil, that makes the clhs example wrong since print-object doesn't return the object. nice
17:23:35
stassats
(let ((fun (make-instance 'sb-mop:funcallable-standard-object)) (sb-ext:*evaluator-mode* :interpret)) (sb-pcl:set-funcallable-instance-function fun (eval '(lambda ()))) (typep fun 'compiled-function)) => T
17:27:37
stassats
compiled-function in sbcl is defined as (sb!xc:deftype compiled-function () '(and function (not sb!eval:interpreted-function)))
17:39:37
Bike
as far as i can tell from the source, write only calls print-object on instances, and classes are not instances, so there's that mystery solved i guess