[slime-devel] fancy inspector problems

When I inspect the object from lispworks it works ------------------ CL-USER> (inspect <http://www.lispworks.com/reference/HyperSpec/Body/f_inspec.htm> k2::*current-hushe* ) #<HUSHE-CLIENT:HUSHE-CLIENT 118742AB> is a HUSHE-CLIENT:HUSHE-CLIENT TIMESTAMP 3398596745 TIMEOUT 1200 I/O-PACKAGE #<The HUSHE-CLIENT package, 135/256 internal, 101/256 external> LOCK #<MP:LOCK "Hushe-client serializer" Unlocked NIL 0 118742DF> TCPCLIENT-STREAM #<COMM:SOCKET-STREAM 11875E87> HOST "localhost" PORT 11116 ERROR-FORMAT "GENERIC-TCP-CLIENT ERROR: ~a" ---------------- But when I inspect with slime I get this: (note I use all contib mocules, and <http://www.lispworks.com/reference/HyperSpec/Body/a_and.htm> it is latest cvs) ---------------------- The slot #<STANDARD-EFFECTIVE-SLOT-DEFINITION GENERIC-TCPCLIENT::ERROR-FORMAT 1121052F> is missing from #<HUSHE-CLIENT:HUSHE-CLIENT 11A11963> (of class <http://www.lispworks.com/reference/HyperSpec/Body/t_class.htm> #<STANDARD-CLASS <http://www.lispworks.com/reference/HyperSpec/Body/t_std_cl.htm> HUSHE-CLIENT:HUSHE-CLIENT 10A27AEB>), when reading the value. [Condition of type CONDITIONS::SLOT-MISSING-ERROR] Restarts: 0: [ABORT] Return to SLIME's top level. 1: [ABORT] Quit process. Backtrace: 0: CONDITIONS::CONDITIONS-ERROR (:INVISIBLEP T <http://www.lispworks.com/reference/HyperSpec/Body/a_t.htm> CONDITIONS::SLOT-MISSING-ERROR (:NAME #<STANDARD-EFFECTIVE-SLOT-DEFINITION GENERIC-TCPCLIENT::ERROR-FORMAT 1121052F> :INSTANCE #<HUSHE-CLIENT:HUSHE-CLIENT 11A11963> :CLASS #<STANDARD-CLASS <http://www.lispworks.com/reference/HyperSpec/Body/t_std_cl.htm> HUSHE-CLIENT:HUSHE-CLIENT 10A27AEB> :OPERATION ..)) 1: ERROR (CONDITIONS::SLOT-MISSING-ERROR &REST (:NAME #<STANDARD-EFFECTIVE-SLOT-DEFINITION GENERIC-TCPCLIENT::ERROR-FORMAT 1121052F> :INSTANCE #<HUSHE-CLIENT:HUSHE-CLIENT 11A11963> :CLASS #<STANDARD-CLASS <http://www.lispworks.com/reference/HyperSpec/Body/t_std_cl.htm> HUSHE-CLIENT:HUSHE-CLIENT 10A27AEB> :OPERATION SLOT-BOUNDP <http://www.lispworks.com/reference/HyperSpec/Body/f_slt_bo.htm> ..)) 2: (METHOD <http://www.lispworks.com/reference/HyperSpec/Body/t_method.htm> SLOT-MISSING <http://www.lispworks.com/reference/HyperSpec/Body/f_slt_mi.htm> (T <http://www.lispworks.com/reference/HyperSpec/Body/a_t.htm> T <http://www.lispworks.com/reference/HyperSpec/Body/a_t.htm> T <http://www.lispworks.com/reference/HyperSpec/Body/a_t.htm> T <http://www.lispworks.com/reference/HyperSpec/Body/a_t.htm>)) (#<STANDARD-CLASS <http://www.lispworks.com/reference/HyperSpec/Body/t_std_cl.htm> HUSHE-CLIENT:HUSHE-CLIENT 10A27AEB> #<HUSHE-CLIENT:HUSHE-CLIENT 11A11963> #<STANDARD-EFFECTIVE-SLOT-DEFINITION GENERIC-TCPCLIENT::ERROR-FORMAT 1121052F> SLOT-BOUNDP <http://www.lispworks.com/reference/HyperSpec/Body/f_slt_bo.htm> &OPTIONAL NIL <http://www.lispworks.com/reference/HyperSpec/Body/a_nil.htm>) 3: CLOS::GENERIC-FUNCTION-NON-DISCRIMINATOR NIL 4: CLOS::SLOT-BOUNDP-MISSING (#(1571 (GENERIC-TCPCLIENT::TCPCLIENT-STREAM GENERIC-TCPCLIENT::HOST GENERIC-TCPCLIENT::PORT GENERIC-TCPCLIENT::TIMEOUT GENERIC-TCPCLIENT::I/O-PACKAGE GENERIC-TCPCLIENT::ERROR-FORMAT HUSHE-CLIENT::TIMESTAMP HUSHE-CLIENT::LOCK) NIL <http://www.lispworks.com/reference/HyperSpec/Body/a_nil.htm> ..)) 5: (METHOD <http://www.lispworks.com/reference/HyperSpec/Body/t_method.htm> SWANK:INSPECT-SLOT-FOR-EMACS (T <http://www.lispworks.com/reference/HyperSpec/Body/a_t.htm> T <http://www.lispworks.com/reference/HyperSpec/Body/a_t.htm> T <http://www.lispworks.com/reference/HyperSpec/Body/a_t.htm>)) (#<STANDARD-CLASS <http://www.lispworks.com/reference/HyperSpec/Body/t_std_cl.htm> HUSHE-CLIENT:HUSHE-CLIENT 10A27AEB> #<HUSHE-CLIENT:HUSHE-CLIENT 11A11963> #<STANDARD-EFFECTIVE-SLOT-DEFINITION GENERIC-TCPCLIENT::ERROR-FORMAT 1121052F>) 6: (SUBFUNCTION 1 (METHOD <http://www.lispworks.com/reference/HyperSpec/Body/t_method.htm> CLOS::UPDATE-DISCRIMINATOR-CODE (STANDARD-GENERIC-FUNCTION <http://www.lispworks.com/reference/HyperSpec/Body/t_std_ge.htm>))) (:INVISIBLEP T <http://www.lispworks.com/reference/HyperSpec/Body/a_t.htm> &REST (#<STANDARD-CLASS <http://www.lispworks.com/reference/HyperSpec/Body/t_std_cl.htm> HUSHE-CLIENT:HUSHE-CLIENT 10A27AEB> #<HUSHE-CLIENT:HUSHE-CLIENT 11A11963> #<STANDARD-EFFECTIVE-SLOT-DEFINITION GENERIC-TCPCLIENT::ERROR-FORMAT 1121052F>)) 7: (METHOD <http://www.lispworks.com/reference/HyperSpec/Body/t_method.htm> SWANK::ALL-SLOTS-FOR-INSPECTOR (STANDARD-OBJECT <http://www.lispworks.com/reference/HyperSpec/Body/t_std_ob.htm> T <http://www.lispworks.com/reference/HyperSpec/Body/a_t.htm>)) (#<HUSHE-CLIENT:HUSHE-CLIENT 11A11963> :DONT-KNOW) 8: CLOS::CACHE-MISS-FUNCTION (:INVISIBLEP T <http://www.lispworks.com/reference/HyperSpec/Body/a_t.htm> &REST (#<HUSHE-CLIENT:HUSHE-CLIENT 11A11963> #<SWANK::FANCY-INSPECTOR 1188D817>)) 9: (SUBFUNCTION 1 (METHOD <http://www.lispworks.com/reference/HyperSpec/Body/t_method.htm> CLOS::UPDATE-DISCRIMINATOR-CODE (STANDARD-GENERIC-FUNCTION <http://www.lispworks.com/reference/HyperSpec/Body/t_std_ge.htm>))) (:INVISIBLEP T <http://www.lispworks.com/reference/HyperSpec/Body/a_t.htm> &REST (#<HUSHE-CLIENT:HUSHE-CLIENT 11A11963> #<SWANK::FANCY-INSPECTOR 1188D817>)) 10: (METHOD <http://www.lispworks.com/reference/HyperSpec/Body/t_method.htm> SWANK-BACKEND:INSPECT-FOR-EMACS (STANDARD-OBJECT <http://www.lispworks.com/reference/HyperSpec/Body/t_std_ob.htm> SWANK::FANCY-INSPECTOR)) (#<HUSHE-CLIENT:HUSHE-CLIENT 11A11963> #<SWANK::FANCY-INSPECTOR 1188D817>) 11: CLOS::CACHE-MISS-FUNCTION (:INVISIBLEP T <http://www.lispworks.com/reference/HyperSpec/Body/a_t.htm> &REST (#<HUSHE-CLIENT:HUSHE-CLIENT 11A11963> #<SWANK::FANCY-INSPECTOR 1188D817>)) 12: (SUBFUNCTION 1 (METHOD <http://www.lispworks.com/reference/HyperSpec/Body/t_method.htm> CLOS::UPDATE-DISCRIMINATOR-CODE (STANDARD-GENERIC-FUNCTION <http://www.lispworks.com/reference/HyperSpec/Body/t_std_ge.htm>))) (:INVISIBLEP T <http://www.lispworks.com/reference/HyperSpec/Body/a_t.htm> &REST (#<HUSHE-CLIENT:HUSHE-CLIENT 11A11963> #<SWANK::FANCY-INSPECTOR 1188D817>)) 13: SWANK::INSPECT-OBJECT (#<HUSHE-CLIENT:HUSHE-CLIENT 11A11963> &OPTIONAL "<(INSPECTOR *DEFAULT-INSPECTOR*)>") 14: (SUBFUNCTION 1 SWANK:INIT-INSPECTOR) NIL 15: SWANK-BACKEND:CALL-WITH-SYNTAX-HOOKS (#<Closure 1 subfunction of SWANK:INIT-INSPECTOR>) 16: SWANK::CALL-WITH-BUFFER-SYNTAX (#<Closure 1 subfunction of SWANK:INIT-INSPECTOR>) 17: SYSTEM::%INVOKE (:INVISIBLEP T <http://www.lispworks.com/reference/HyperSpec/Body/a_t.htm>) 18: SYSTEM::%EVAL ((SWANK:INIT-INSPECTOR "k2::*current-hushe*")) 19: EVAL ((SWANK:INIT-INSPECTOR "k2::*current-hushe*")) 20: (SUBFUNCTION 1 SWANK::EVAL-FOR-EMACS) NIL 21: (SUBFUNCTION 1 (TOP-LEVEL-FORM 52)) (#</Function/ <http://www.lispworks.com/reference/HyperSpec/Body/a_fn.htm> SWANK:SWANK-DEBUGGER-HOOK> #<Closure 1 subfunction of SWANK::EVAL-FOR-EMACS>) 22: SWANK-BACKEND:CALL-WITH-DEBUGGER-HOOK (#</Function/ <http://www.lispworks.com/reference/HyperSpec/Body/a_fn.htm> SWANK:SWANK-DEBUGGER-HOOK> #<Closure 1 subfunction of SWANK::EVAL-FOR-EMACS>) 23: FUNCALL (SWANK::EVAL-FOR-EMACS &REST ((SWANK:INIT-INSPECTOR "k2::*current-hushe*") "COMMON-LISP-USER" 13)) 24: SWANK::READ-FROM-EMACS NIL 25: (SUBFUNCTION 1 SWANK::HANDLE-REQUEST) NIL 26: (SUBFUNCTION 1 (TOP-LEVEL-FORM 52)) (#</Function/ <http://www.lispworks.com/reference/HyperSpec/Body/a_fn.htm> SWANK:SWANK-DEBUGGER-HOOK> #</Function/ <http://www.lispworks.com/reference/HyperSpec/Body/a_fn.htm> 1 subfunction of SWANK::HANDLE-REQUEST>) 27: SWANK-BACKEND:CALL-WITH-DEBUGGER-HOOK (#</Function/ <http://www.lispworks.com/reference/HyperSpec/Body/a_fn.htm> SWANK:SWANK-DEBUGGER-HOOK> #</Function/ <http://www.lispworks.com/reference/HyperSpec/Body/a_fn.htm> 1 subfunction of SWANK::HANDLE-REQUEST>) 28: (SUBFUNCTION 1 SWANK::CALL-WITH-CONNECTION) NIL 29: SWANK::CALL-WITH-REDIRECTED-IO (#<SWANK::CONNECTION 1192C3E7> #<Closure 1 subfunction of SWANK::CALL-WITH-CONNECTION>) 30: SWANK::CALL-WITH-CONNECTION (#<SWANK::CONNECTION 1192C3E7> #</Function/ <http://www.lispworks.com/reference/HyperSpec/Body/a_fn.htm> 1 subfunction of SWANK::HANDLE-REQUEST>) 31: SWANK::HANDLE-REQUEST (#<SWANK::CONNECTION 1192C3E7>) 32: SWANK::REPL-LOOP (#<SWANK::CONNECTION 1192C3E7>) 33: (SUBFUNCTION 1 SWANK::SPAWN-REPL-THREAD) NIL 34: SWANK::CALL-WITH-BINDINGS (NIL <http://www.lispworks.com/reference/HyperSpec/Body/a_nil.htm> #<Closure 1 subfunction of SWANK::SPAWN-REPL-THREAD>) 35: (SUBFUNCTION 1 SWANK::SPAWN-REPL-THREAD) NIL 36: (SUBFUNCTION MP::PROCESS-SG-FUNCTION MP::INITIALIZE-PROCESS-STACK) (:DONT-KNOW) 37: SYSTEM::%%FIRST-CALL-TO-STACK NIL 38: SYSTEM::%%FIRST-CALL-TO-STACK NIL -- Free Software Consultant Cell: +47 - 47 34 40 08 Phone: +47 - 21 53 69 00, Fax: +47 - 21 53 69 09 Addr: Slemdalsveien 70, PB 1 Vinderen, 0319 Oslo <http://www.freecode.no/>

* Knut Olav Bøhmer <knobo@online.no>:
When I inspect the object from lispworks it works
It appears to be Lispworks-specific, by the way. (Yes, I got the same error, but not with CLISP or SBCL.) -- Johannes Grødem

* Johannes Groedem <johs@netfonds.no>:
When I inspect the object from lispworks it works It appears to be Lispworks-specific, by the way. (Yes, I got the same error, but not with CLISP or SBCL.)
I'm not entirely sure that this is the proper fix, but if anyone wants to take a look, here's a patch that fixes it. (WFM, anyway...) -- Johannes Grødem

After some further testing I got it working. Looks like some files was not recompiled. Johannes Groedem wrote:
* Johannes Groedem <johs@netfonds.no>:
When I inspect the object from lispworks it works
It appears to be Lispworks-specific, by the way. (Yes, I got the same error, but not with CLISP or SBCL.)
I'm not entirely sure that this is the proper fix, but if anyone wants to take a look, here's a patch that fixes it. (WFM, anyway...)
------------------------------------------------------------------------
Index: swank-lispworks.lisp =================================================================== RCS file: /project/slime/cvsroot/slime/swank-lispworks.lisp,v retrieving revision 1.92 diff -u -r1.92 swank-lispworks.lisp --- swank-lispworks.lisp 23 Aug 2007 19:03:37 -0000 1.92 +++ swank-lispworks.lisp 17 Sep 2007 13:32:35 -0000 @@ -17,7 +17,9 @@ (import-swank-mop-symbols :clos '(:slot-definition-documentation :eql-specializer :eql-specializer-object - :compute-applicable-methods-using-classes)) + :compute-applicable-methods-using-classes + :slot-boundp-using-class + :slot-value-using-class))
(defun swank-mop:slot-definition-documentation (slot) (documentation slot t)) @@ -25,6 +27,12 @@ (defun swank-mop:compute-applicable-methods-using-classes (gf classes) (clos::compute-applicable-methods-from-classes gf classes))
+(defun swank-mop:slot-boundp-using-class (class object slotd) + (clos::slot-boundp-using-class class object (clos:slot-definition-name slotd))) + +(defun swank-mop:slot-value-using-class (class object slotd) + (clos::slot-value-using-class class object (clos:slot-definition-name slotd))) + ;; lispworks doesn't have the eql-specializer class, it represents ;; them as a list of `(EQL ,OBJECT) (deftype swank-mop:eql-specializer () 'cons)
------------------------------------------------------------------------
_______________________________________________ slime-devel site list slime-devel@common-lisp.net http://common-lisp.net/mailman/listinfo/slime-devel
-- Free Software Consultant Cell: +47 - 47 34 40 08 Phone: +47 - 21 53 69 00, Fax: +47 - 21 53 69 09 Addr: Slemdalsveien 70, PB 1 Vinderen, 0319 Oslo <http://www.freecode.no/>

I got this warning/error though: The following function is undefined: (SETF SWANK-MOP:SLOT-VALUE-USING-CLASS) which is referenced by INSPECT-SLOT-FOR-EMACS And slime-read-object looks like it is undefined.
From ChangeLog: 2007-08-23 Helmut Eller <heller@common-lisp.net> Some inspector cleanups. * slime.el (slime-inspect): Remove dwim stuff and drop keyword args. (slime-read-object): Killed.
Johannes Groedem wrote:
* Johannes Groedem <johs@netfonds.no>:
When I inspect the object from lispworks it works
It appears to be Lispworks-specific, by the way. (Yes, I got the same error, but not with CLISP or SBCL.)
I'm not entirely sure that this is the proper fix, but if anyone wants to take a look, here's a patch that fixes it. (WFM, anyway...)
------------------------------------------------------------------------
Index: swank-lispworks.lisp =================================================================== RCS file: /project/slime/cvsroot/slime/swank-lispworks.lisp,v retrieving revision 1.92 diff -u -r1.92 swank-lispworks.lisp --- swank-lispworks.lisp 23 Aug 2007 19:03:37 -0000 1.92 +++ swank-lispworks.lisp 17 Sep 2007 13:32:35 -0000 @@ -17,7 +17,9 @@ (import-swank-mop-symbols :clos '(:slot-definition-documentation :eql-specializer :eql-specializer-object - :compute-applicable-methods-using-classes)) + :compute-applicable-methods-using-classes + :slot-boundp-using-class + :slot-value-using-class))
(defun swank-mop:slot-definition-documentation (slot) (documentation slot t)) @@ -25,6 +27,12 @@ (defun swank-mop:compute-applicable-methods-using-classes (gf classes) (clos::compute-applicable-methods-from-classes gf classes))
+(defun swank-mop:slot-boundp-using-class (class object slotd) + (clos::slot-boundp-using-class class object (clos:slot-definition-name slotd))) + +(defun swank-mop:slot-value-using-class (class object slotd) + (clos::slot-value-using-class class object (clos:slot-definition-name slotd))) + ;; lispworks doesn't have the eql-specializer class, it represents ;; them as a list of `(EQL ,OBJECT) (deftype swank-mop:eql-specializer () 'cons)
------------------------------------------------------------------------
_______________________________________________ slime-devel site list slime-devel@common-lisp.net http://common-lisp.net/mailman/listinfo/slime-devel
-- Free Software Consultant Cell: +47 - 47 34 40 08 Phone: +47 - 21 53 69 00, Fax: +47 - 21 53 69 09 Addr: Slemdalsveien 70, PB 1 Vinderen, 0319 Oslo <http://www.freecode.no/>

* Knut Olav Bøhmer <knobo@online.no>:
I got this warning/error though: The following function is undefined: (SETF SWANK-MOP:SLOT-VALUE-USING-CLASS) which is referenced by INSPECT-SLOT-FOR-EMACS
Ah, yes, I forgot to define the corresponding setf-function. -- Johannes Grødem

.-- Knut Olav B?hmer: | And slime-read-object looks like it is undefined. | | >From ChangeLog: | 2007-08-23 Helmut Eller <heller@common-lisp.net> | Some inspector cleanups. | * slime.el (slime-inspect): Remove dwim stuff and drop keyword args. | (slime-read-object): Killed. This seems to be outstanding still. The patch fixes it. Thanks, Sasha

How about doing something like this in inspect-slot-for-emacs file: cvs/slime/contrib/swank-fancy-inspector.lisp function: inspect-slot-for-emacs (eval (read-from-string value-string)))))))) + (:action ,(custom-inspect-name class object slot) + ,(lambda () (custom-inspect-call class object slot))) ,@(when boundp `(" " (:action "[make unbound]" With the following methods something like this: (defmethod custom-inspect-name (class object slot) "[No custom inspections]") (defmethod custom-inspect-call (class object slot) nil) And then one could make own methods specializing on your own classes and slots. (defmethod custom-inspect-name ((class person) object (slot company)) (format nil "[boss of ~a]" (name-of person)) (defmethod custom-inspect-call ((class person) object (slot company)) (slime-inspect (boss-of person)) Or whatever object models you have. Maybe make custom-inspect-call to follow relations in cl-sql.... (and add necessary checks, restarts and handler-cases) -- Free Software Consultant Cell: +47 - 47 34 40 08 Phone: +47 - 21 53 69 00, Fax: +47 - 21 53 69 09 Addr: Slemdalsveien 70, PB 1 Vinderen, 0319 Oslo <http://www.freecode.no/>

.-- Sasha Kovar: | .-- Knut Olav B?hmer: | | And slime-read-object looks like it is undefined. | | | | >From ChangeLog: | | 2007-08-23 Helmut Eller <heller@common-lisp.net> | | Some inspector cleanups. | | * slime.el (slime-inspect): Remove dwim stuff and drop keyword args. | | (slime-read-object): Killed. | | This seems to be outstanding still. The patch fixes it. Hi. Do the slime gods approve this patch? Perhaps someone with the commit bit would like to add it. Thanks, Sasha

Johannes Groedem wrote:
* Johannes Groedem <johs@netfonds.no>:
When I inspect the object from lispworks it works
It appears to be Lispworks-specific, by the way. (Yes, I got the same error, but not with CLISP or SBCL.)
I'm not entirely sure that this is the proper fix, but if anyone wants to take a look, here's a patch that fixes it. (WFM, anyway...)
The patch is not in CVS yet. Could someone put it inn? It's to bad to have a lisp that does not work with slime.
------------------------------------------------------------------------
Index: swank-lispworks.lisp =================================================================== RCS file: /project/slime/cvsroot/slime/swank-lispworks.lisp,v retrieving revision 1.92 diff -u -r1.92 swank-lispworks.lisp --- swank-lispworks.lisp 23 Aug 2007 19:03:37 -0000 1.92 +++ swank-lispworks.lisp 17 Sep 2007 13:32:35 -0000 @@ -17,7 +17,9 @@ (import-swank-mop-symbols :clos '(:slot-definition-documentation :eql-specializer :eql-specializer-object - :compute-applicable-methods-using-classes)) + :compute-applicable-methods-using-classes + :slot-boundp-using-class + :slot-value-using-class))
(defun swank-mop:slot-definition-documentation (slot) (documentation slot t)) @@ -25,6 +27,12 @@ (defun swank-mop:compute-applicable-methods-using-classes (gf classes) (clos::compute-applicable-methods-from-classes gf classes))
+(defun swank-mop:slot-boundp-using-class (class object slotd) + (clos::slot-boundp-using-class class object (clos:slot-definition-name slotd))) + +(defun swank-mop:slot-value-using-class (class object slotd) + (clos::slot-value-using-class class object (clos:slot-definition-name slotd))) + ;; lispworks doesn't have the eql-specializer class, it represents ;; them as a list of `(EQL ,OBJECT) (deftype swank-mop:eql-specializer () 'cons)
------------------------------------------------------------------------
_______________________________________________ slime-devel site list slime-devel@common-lisp.net http://common-lisp.net/mailman/listinfo/slime-devel
-- Free Software Consultant Cell: +47 - 47 34 40 08 Phone: +47 - 21 53 69 00, Fax: +47 - 21 53 69 09 Addr: Slemdalsveien 70, PB 1 Vinderen, 0319 Oslo <http://www.freecode.no/>

Johannes Groedem <johs@netfonds.no> writes:
* Johannes Groedem <johs@netfonds.no>:
When I inspect the object from lispworks it works It appears to be Lispworks-specific, by the way. (Yes, I got the same error, but not with CLISP or SBCL.)
I'm not entirely sure that this is the proper fix, but if anyone wants to take a look, here's a patch that fixes it. (WFM, anyway...)
It seems this has still not been included. Oh, well -- Sløv uten dop.

[sorry for the dupe. Hit send too soon.] Johannes Groedem <johs@netfonds.no> writes:
* Johannes Groedem <johs@netfonds.no>:
When I inspect the object from lispworks it works It appears to be Lispworks-specific, by the way. (Yes, I got the same error, but not with CLISP or SBCL.)
I'm not entirely sure that this is the proper fix, but if anyone wants to take a look, here's a patch that fixes it. (WFM, anyway...)
It seems this has still not been included. Oh, well, what a pity. Meanwhile, here's an updated patch that makes both the "set value" and the "make unbound" buttons in the fancy inspector work. ...Peder... -- Sløv uten dop.
participants (4)
-
Johannes Groedem
-
Knut Olav Bøhmer
-
peder@klingenberg.no
-
Sasha Kovar