From: Alan R. <ala...@gm...> - 2010-01-14 14:34:06
|
The Jena toolkit has antisocially defined the toString method of an important object to be computationally expensive - it triggers a description logical classification process in some cases, something which can blow out memory or take a very very long time. Therefore I need to be able to override that behavior so that if I happen to get a stack trace or other wise cause one to be printed toString is not called. As far as I can tell, it seems that the case of printing a java object is handled by public String writeToString() in JavaObject.java An approach that makes sense to me would be to have this method look for an eql method with the class of the object as specializer. (defmethod java-object-to-string ((class (eql (load-time-value (find-java-class "com.hp.hpl.jena.ontology.impl.OntModelImpl")))))) ..) and if such a method exists, call it instead of using the default implementation. Other ideas welcome. -Alan |
From: Alessio S. <ale...@gm...> - 2010-01-14 14:38:35
|
On Thu, Jan 14, 2010 at 3:33 PM, Alan Ruttenberg <ala...@gm...> wrote: > The Jena toolkit has antisocially defined the toString method of an > important object to be computationally expensive - it triggers a > description logical classification process in some cases, something > which can blow out memory or take a very very long time. > > Therefore I need to be able to override that behavior so that if I > happen to get a stack trace or other wise cause one to be printed > toString is not called. > > As far as I can tell, it seems that the case of printing a java object > is handled by > > public String writeToString() in JavaObject.java > > An approach that makes sense to me would be to have this method look > for an eql method with the class of the object as specializer. > > (defmethod java-object-to-string ((class (eql (load-time-value > (find-java-class "com.hp.hpl.jena.ontology.impl.OntModelImpl")))))) > ..) > > and if such a method exists, call it instead of using the default > implementation. > > Other ideas welcome. I believe (defmethod print-object ((obj (jclass "com.foo.whatever")) stream) ...) should do, at least when the printing is done in Lisp through the standard CL printing functions. hth, Ale |
From: Alan R. <ala...@gm...> - 2010-01-14 14:43:10
|
Where's this implemented? It doesn't work for me because jclass doesn't find classes on the dynamically extended classpath I use. Would this method be called when a backtrace used in slime is constructed? Thanks, Alan On Thu, Jan 14, 2010 at 9:38 AM, Alessio Stalla <ale...@gm...> wrote: > On Thu, Jan 14, 2010 at 3:33 PM, Alan Ruttenberg > <ala...@gm...> wrote: >> The Jena toolkit has antisocially defined the toString method of an >> important object to be computationally expensive - it triggers a >> description logical classification process in some cases, something >> which can blow out memory or take a very very long time. >> >> Therefore I need to be able to override that behavior so that if I >> happen to get a stack trace or other wise cause one to be printed >> toString is not called. >> >> As far as I can tell, it seems that the case of printing a java object >> is handled by >> >> public String writeToString() in JavaObject.java >> >> An approach that makes sense to me would be to have this method look >> for an eql method with the class of the object as specializer. >> >> (defmethod java-object-to-string ((class (eql (load-time-value >> (find-java-class "com.hp.hpl.jena.ontology.impl.OntModelImpl")))))) >> ..) >> >> and if such a method exists, call it instead of using the default >> implementation. >> >> Other ideas welcome. > > I believe > > (defmethod print-object ((obj (jclass "com.foo.whatever")) stream) ...) > > should do, at least when the printing is done in Lisp through the > standard CL printing functions. > > hth, > Ale > |
From: Alan R. <ala...@gm...> - 2010-01-14 14:44:32
|
Also, I get: (defmethod print-object ((obj (jclass "java.net.URI")) stream) (print-unreadable-object (obj stream :identity t :type t))) -> ; Evaluation aborted. -Alan 2010/1/14 Alan Ruttenberg <ala...@gm...>: > Where's this implemented? It doesn't work for me because jclass doesn't find classes on the dynamically extended classpath I use. > > Would this method be called when a backtrace used in slime is constructed? > > Thanks, > Alan > > On Thu, Jan 14, 2010 at 9:38 AM, Alessio Stalla <ale...@gm...> wrote: >> On Thu, Jan 14, 2010 at 3:33 PM, Alan Ruttenberg >> <ala...@gm...> wrote: >>> The Jena toolkit has antisocially defined the toString method of an >>> important object to be computationally expensive - it triggers a >>> description logical classification process in some cases, something >>> which can blow out memory or take a very very long time. >>> >>> Therefore I need to be able to override that behavior so that if I >>> happen to get a stack trace or other wise cause one to be printed >>> toString is not called. >>> >>> As far as I can tell, it seems that the case of printing a java object >>> is handled by >>> >>> public String writeToString() in JavaObject.java >>> >>> An approach that makes sense to me would be to have this method look >>> for an eql method with the class of the object as specializer. >>> >>> (defmethod java-object-to-string ((class (eql (load-time-value >>> (find-java-class "com.hp.hpl.jena.ontology.impl.OntModelImpl")))))) >>> ..) >>> >>> and if such a method exists, call it instead of using the default >>> implementation. >>> >>> Other ideas welcome. >> >> I believe >> >> (defmethod print-object ((obj (jclass "com.foo.whatever")) stream) ...) >> >> should do, at least when the printing is done in Lisp through the >> standard CL printing functions. >> >> hth, >> Ale >> > > |
From: Alessio S. <ale...@gm...> - 2010-01-14 14:59:40
|
On Thu, Jan 14, 2010 at 3:44 PM, Alan Ruttenberg <ala...@gm...> wrote: > Also, I get: > > (defmethod print-object ((obj (jclass "java.net.URI")) stream) > (print-unreadable-object (obj stream :identity t :type t))) > -> ; Evaluation aborted. Oh. I get this too, but it seems related to some failure in printing code; (progn (defmethod print-object ((obj (jclass "java.net.URI")) stream) (print-unreadable-object (obj stream :identity t :type t))) nil) works. > -Alan > > > 2010/1/14 Alan Ruttenberg <ala...@gm...>: >> Where's this implemented? It doesn't work for me because jclass doesn't find classes on the dynamically extended classpath I use. It should be implemented in JavaClass.java and clos.lisp, iirc. Wrt. the dynamic classpath, jclass should be extended to handle an optional "classloader" parameter. >> Would this method be called when a backtrace used in slime is constructed? I completely ignore that. Bye, Ale |
From: Alan R. <ala...@gm...> - 2010-01-14 18:20:01
|
On Thu, Jan 14, 2010 at 9:59 AM, Alessio Stalla <ale...@gm...> wrote: >> (defmethod print-object ((obj (jclass "java.net.URI")) stream) >> (print-unreadable-object (obj stream :identity t :type t))) >> -> ; Evaluation aborted. > > Oh. I get this too, but it seems related to some failure in printing code; > The problem is that the name slot of JAVA-CLASSes is not initialized, and so class-name fails. -Alan |
From: Alan R. <ala...@gm...> - 2010-01-14 18:29:14
|
Here's my patch to make this work in my environment: (defmethod print-object ((method standard-method) stream) (print-unreadable-object (method stream :identity t) (format stream "~S ~S~{ ~S~} ~S" (class-name (class-of method)) (%generic-function-name (%method-generic-function method)) (method-qualifiers method) (mapcar #'(lambda (c) (if (typep c 'mop::eql-specializer) `(eql ,(mop::eql-specializer-object c)) (if (typep c 'java::java-class) `(java::jclass ,(#"getName" (cl-user::get-java-field c "javaClass" t))) (class-name c)))) (%method-specializers method)))) method) (advise java::%find-java-class (if (cl-user::find-java-class (car arglist)) (#"findJavaClass" 'org.armedbear.lisp.JavaClass (cl-user::find-java-class (car arglist))) (:do-it)) :when :around :name :dynamic-classpath)) Now to find out why slime isn't using #'print-object ... -Alan 2010/1/14 Alan Ruttenberg <ala...@gm...>: > > > On Thu, Jan 14, 2010 at 9:59 AM, Alessio Stalla <ale...@gm...> wrote: >>> (defmethod print-object ((obj (jclass "java.net.URI")) stream) >>> (print-unreadable-object (obj stream :identity t :type t))) >>> -> ; Evaluation aborted. >> >> Oh. I get this too, but it seems related to some failure in printing code; >> > > The problem is that the name slot of JAVA-CLASSes is not initialized, and so class-name fails. > > -Alan > |
From: Alan R. <ala...@gm...> - 2010-01-14 20:43:16
|
On Thu, Jan 14, 2010 at 1:29 PM, Alan Ruttenberg <ala...@gm...> wrote: > Now to find out why slime isn't using #'print-object ... > > -Alan > That would be because print isn't calling print-object for java objects. (in-package #:system) ;; define the default method for java objects (defmethod print-object ((obj java::java-object) stream) (print-unreadable-object (obj stream :identity t) (let ((tostring (jcall "toString" obj))) (if (> (length tostring) 32) (format stream "~a ~a..." (java::jclass-name (java::jobject-class obj)) (subseq tostring 0 32) stream) (format stream "~a ~a" (java::jclass-name (java::jobject-class obj)) tostring stream))))) ;; modify so that print-object is called on java objects too. (defun output-ugly-object (object stream) (cond ((consp object) (output-list object stream)) ((and (vectorp object) (not (stringp object)) (not (bit-vector-p object))) (output-vector object stream)) ((structure-object-p object) (cond ((and (null *print-readably*) *print-level* (>= *current-print-level* *print-level*)) (write-char #\# stream)) (t (print-object object stream)))) ((standard-object-p object) (print-object object stream)) ((java::java-object-p object) (print-object object stream)) ((xp::xp-structure-p stream) (let ((s (sys::%write-to-string object))) (xp::write-string++ s stream 0 (length s)))) (t (%output-object object stream)))) |
From: Alan R. <ala...@gm...> - 2010-01-14 21:29:12
|
Well, not quite. Also, slime calls sys::frame-to-string, which doesn't respect java object's print-object method. This is inside java code and I don't know how to properly fix that. I'm patching as: (advise sys::frame-to-string (if (typep (car arglist) 'system::lisp-stack-frame) (prin1-to-string (sys::frame-to-list (car arglist))) (:do-it) ) :when :around :name :freedom) but would appreciate if someone could do the right thing. -Alan On Thu, Jan 14, 2010 at 3:43 PM, Alan Ruttenberg <ala...@gm...> wrote: > On Thu, Jan 14, 2010 at 1:29 PM, Alan Ruttenberg > <ala...@gm...> wrote: >> Now to find out why slime isn't using #'print-object ... >> >> -Alan >> > > That would be because print isn't calling print-object for java objects. > > (in-package #:system) > > ;; define the default method for java objects > (defmethod print-object ((obj java::java-object) stream) > (print-unreadable-object (obj stream :identity t) > (let ((tostring (jcall "toString" obj))) > (if (> (length tostring) 32) > (format stream "~a ~a..." (java::jclass-name (java::jobject-class > obj)) (subseq tostring 0 32) stream) > (format stream "~a ~a" (java::jclass-name (java::jobject-class obj)) > tostring stream))))) > > > ;; modify so that print-object is called on java objects too. > > (defun output-ugly-object (object stream) > (cond ((consp object) > (output-list object stream)) > ((and (vectorp object) > (not (stringp object)) > (not (bit-vector-p object))) > (output-vector object stream)) > ((structure-object-p object) > (cond > ((and (null *print-readably*) > *print-level* > (>= *current-print-level* *print-level*)) > (write-char #\# stream)) > (t > (print-object object stream)))) > ((standard-object-p object) > (print-object object stream)) > ((java::java-object-p object) > (print-object object stream)) > ((xp::xp-structure-p stream) > (let ((s (sys::%write-to-string object))) > (xp::write-string++ s stream 0 (length s)))) > (t > (%output-object object stream)))) > |
From: Alessio S. <ale...@gm...> - 2010-01-14 22:18:29
|
On Thu, Jan 14, 2010 at 10:29 PM, Alan Ruttenberg <ala...@gm...> wrote: > Well, not quite. > > Also, slime calls sys::frame-to-string, which doesn't respect java > object's print-object method. > This is inside java code and I don't know how to properly fix that. > I'm patching as: > > (advise sys::frame-to-string > (if (typep (car arglist) 'system::lisp-stack-frame) > (prin1-to-string > (sys::frame-to-list (car arglist))) > (:do-it) > ) > :when :around > :name :freedom) > > but would appreciate if someone could do the right thing. You should find that on trunk: I actually called prin1-to-string from Java; I don't think that should cause any problems, but if someone has objections, let me know. Alessio > -Alan > > > On Thu, Jan 14, 2010 at 3:43 PM, Alan Ruttenberg > <ala...@gm...> wrote: >> On Thu, Jan 14, 2010 at 1:29 PM, Alan Ruttenberg >> <ala...@gm...> wrote: >>> Now to find out why slime isn't using #'print-object ... >>> >>> -Alan >>> >> >> That would be because print isn't calling print-object for java objects. >> >> (in-package #:system) >> >> ;; define the default method for java objects >> (defmethod print-object ((obj java::java-object) stream) >> (print-unreadable-object (obj stream :identity t) >> (let ((tostring (jcall "toString" obj))) >> (if (> (length tostring) 32) >> (format stream "~a ~a..." (java::jclass-name (java::jobject-class >> obj)) (subseq tostring 0 32) stream) >> (format stream "~a ~a" (java::jclass-name (java::jobject-class obj)) >> tostring stream))))) >> >> >> ;; modify so that print-object is called on java objects too. >> >> (defun output-ugly-object (object stream) >> (cond ((consp object) >> (output-list object stream)) >> ((and (vectorp object) >> (not (stringp object)) >> (not (bit-vector-p object))) >> (output-vector object stream)) >> ((structure-object-p object) >> (cond >> ((and (null *print-readably*) >> *print-level* >> (>= *current-print-level* *print-level*)) >> (write-char #\# stream)) >> (t >> (print-object object stream)))) >> ((standard-object-p object) >> (print-object object stream)) >> ((java::java-object-p object) >> (print-object object stream)) >> ((xp::xp-structure-p stream) >> (let ((s (sys::%write-to-string object))) >> (xp::write-string++ s stream 0 (length s)))) >> (t >> (%output-object object stream)))) >> > |
From: Mark E. <ev...@pa...> - 2010-01-15 07:46:22
|
On 1/14/10 3:33 PM, Alan Ruttenberg wrote: > The Jena toolkit has antisocially defined the toString method of an > important object to be computationally expensive - it triggers a > description logical classification process in some cases, something > which can blow out memory or take a very very long time. […] Ouch! I had hoped that the the toString() "contract" in Java entailed a non-computationally expensive result, and that this was widely adopted. Then a HEADS UP is in order: I committed (~20100112) to SLIME HEAD a patch that invokes the "toString()" method on all JAVA-OBJECTs as a convenience. When I get the chance, I will revise the SLIME patch, and revisit the SYS::FRAME-TO-STRING code, but I don't think I will find time for this until much later today or tomorrow. -- "A screaming comes across the sky. It has happened before, but there is nothing to compare to it now." |
From: Mark E. <ev...@pa...> - 2010-01-28 09:57:06
|
On 1/15/10 8:46 AM, Mark Evenson wrote: > On 1/14/10 3:33 PM, Alan Ruttenberg wrote: >> The Jena toolkit has antisocially defined the toString method of an >> important object to be computationally expensive - it triggers a >> description logical classification process in some cases, something >> which can blow out memory or take a very very long time. > > […] > > Ouch! I had hoped that the the toString() "contract" in Java entailed a > non-computationally expensive result, and that this was widely adopted. > > Then a HEADS UP is in order: I committed (~20100112) to SLIME HEAD a > patch that invokes the "toString()" method on all JAVA-OBJECTs as a > convenience. […] I have (finally) committed the necessary changes to SLIME HEAD (20100128) to make the inspection of toString() results a user interactive action. -- "A screaming comes across the sky. It has happened before, but there is nothing to compare to it now." |
From: Alan R. <ala...@gm...> - 2010-01-15 20:05:51
|
Thanks Alessio. How about the other patches? http://sourceforge.net/mailarchive/message.php?msg_name=29af5e2d1001141029ved6e76ay532cd0f120614e2f%40mail.gmail.com Fixes the print-object method for close methods specialized on java classes http://sourceforge.net/mailarchive/message.php?msg_name=29af5e2d1001141243s5ff7264fg8538d4054448879%40mail.gmail.com Defines a base method for printing java objects, replicating the behavior of what is currently defined in the java code, and modifies output-ugly-object so that it gets called. Would it be possible to integrate these as well? Thanks, Alan On Thu, Jan 14, 2010 at 5:11 PM, Alessio Stalla <ale...@gm...> wrote: > On Thu, Jan 14, 2010 at 10:29 PM, Alan Ruttenberg > <ala...@gm...> wrote: >> Well, not quite. >> >> Also, slime calls sys::frame-to-string, which doesn't respect java >> object's print-object method. >> This is inside java code and I don't know how to properly fix that. >> I'm patching as: >> >> (advise sys::frame-to-string >> (if (typep (car arglist) 'system::lisp-stack-frame) >> (prin1-to-string >> (sys::frame-to-list (car arglist))) >> (:do-it) >> ) >> :when :around >> :name :freedom) >> >> but would appreciate if someone could do the right thing. > > You should find that on trunk: I actually called prin1-to-string from > Java; I don't think that should cause any problems, but if someone has > objections, let me know. > > Alessio > >> -Alan >> >> >> On Thu, Jan 14, 2010 at 3:43 PM, Alan Ruttenberg >> <ala...@gm...> wrote: >>> On Thu, Jan 14, 2010 at 1:29 PM, Alan Ruttenberg >>> <ala...@gm...> wrote: >>>> Now to find out why slime isn't using #'print-object ... >>>> >>>> -Alan >>>> >>> >>> That would be because print isn't calling print-object for java objects. >>> >>> (in-package #:system) >>> >>> ;; define the default method for java objects >>> (defmethod print-object ((obj java::java-object) stream) >>> (print-unreadable-object (obj stream :identity t) >>> (let ((tostring (jcall "toString" obj))) >>> (if (> (length tostring) 32) >>> (format stream "~a ~a..." (java::jclass-name (java::jobject-class >>> obj)) (subseq tostring 0 32) stream) >>> (format stream "~a ~a" (java::jclass-name (java::jobject-class obj)) >>> tostring stream))))) >>> >>> >>> ;; modify so that print-object is called on java objects too. >>> >>> (defun output-ugly-object (object stream) >>> (cond ((consp object) >>> (output-list object stream)) >>> ((and (vectorp object) >>> (not (stringp object)) >>> (not (bit-vector-p object))) >>> (output-vector object stream)) >>> ((structure-object-p object) >>> (cond >>> ((and (null *print-readably*) >>> *print-level* >>> (>= *current-print-level* *print-level*)) >>> (write-char #\# stream)) >>> (t >>> (print-object object stream)))) >>> ((standard-object-p object) >>> (print-object object stream)) >>> ((java::java-object-p object) >>> (print-object object stream)) >>> ((xp::xp-structure-p stream) >>> (let ((s (sys::%write-to-string object))) >>> (xp::write-string++ s stream 0 (length s)))) >>> (t >>> (%output-object object stream)))) >>> >> > |
From: Alessio S. <ale...@gm...> - 2010-01-15 21:09:51
|
On Fri, Jan 15, 2010 at 9:05 PM, Alan Ruttenberg <ala...@gm...> wrote: > Thanks Alessio. > > How about the other patches? > > http://sourceforge.net/mailarchive/message.php?msg_name=29af5e2d1001141029ved6e76ay532cd0f120614e2f%40mail.gmail.com > > Fixes the print-object method for close methods specialized on java classes > > http://sourceforge.net/mailarchive/message.php?msg_name=29af5e2d1001141243s5ff7264fg8538d4054448879%40mail.gmail.com > > Defines a base method for printing java objects, replicating the > behavior of what is currently defined in the java code, and modifies > output-ugly-object so that it gets called. > > Would it be possible to integrate these as well? [R12377] and [R12379] should do it; let me know if they work for you. A couple of notes: for method specialized on Java classes, I made what I believe to be the right thing: have the symbol slot of JavaClass initialized with an uninterned symbol named like the class, so that it's printed correctly by the existing code. Examples: CL-USER(1): (defmethod foo ((obj (jclass "java.lang.Object"))) obj) #<STANDARD-METHOD FOO (#:|java.lang.Object|) {C95DAA}> CL-USER(2): (mop::%class-name (class-of (jnew "java.lang.String"))) #:|java.lang.String| for print-object on java objects, I just made it call %write-to-string on the object, which calls the Java writeToString(), so it's only implemented once. Apparently changing output-ugly-object wasn't necessary, but if you find out it is, let me know. Additionally, I have a local patch to make jclass work with custom classloaders, if you're interested. I prefer to be cautious with this one and not to commit it immediately; I need to properly test it. Bye, Ale [R12377] http://trac.common-lisp.net/armedbear/changeset/12377 [R12379] http://trac.common-lisp.net/armedbear/changeset/12379 > Thanks, > Alan > > On Thu, Jan 14, 2010 at 5:11 PM, Alessio Stalla <ale...@gm...> wrote: >> On Thu, Jan 14, 2010 at 10:29 PM, Alan Ruttenberg >> <ala...@gm...> wrote: >>> Well, not quite. >>> >>> Also, slime calls sys::frame-to-string, which doesn't respect java >>> object's print-object method. >>> This is inside java code and I don't know how to properly fix that. >>> I'm patching as: >>> >>> (advise sys::frame-to-string >>> (if (typep (car arglist) 'system::lisp-stack-frame) >>> (prin1-to-string >>> (sys::frame-to-list (car arglist))) >>> (:do-it) >>> ) >>> :when :around >>> :name :freedom) >>> >>> but would appreciate if someone could do the right thing. >> >> You should find that on trunk: I actually called prin1-to-string from >> Java; I don't think that should cause any problems, but if someone has >> objections, let me know. >> >> Alessio >> >>> -Alan >>> >>> >>> On Thu, Jan 14, 2010 at 3:43 PM, Alan Ruttenberg >>> <ala...@gm...> wrote: >>>> On Thu, Jan 14, 2010 at 1:29 PM, Alan Ruttenberg >>>> <ala...@gm...> wrote: >>>>> Now to find out why slime isn't using #'print-object ... >>>>> >>>>> -Alan >>>>> >>>> >>>> That would be because print isn't calling print-object for java objects. >>>> >>>> (in-package #:system) >>>> >>>> ;; define the default method for java objects >>>> (defmethod print-object ((obj java::java-object) stream) >>>> (print-unreadable-object (obj stream :identity t) >>>> (let ((tostring (jcall "toString" obj))) >>>> (if (> (length tostring) 32) >>>> (format stream "~a ~a..." (java::jclass-name (java::jobject-class >>>> obj)) (subseq tostring 0 32) stream) >>>> (format stream "~a ~a" (java::jclass-name (java::jobject-class obj)) >>>> tostring stream))))) >>>> >>>> >>>> ;; modify so that print-object is called on java objects too. >>>> >>>> (defun output-ugly-object (object stream) >>>> (cond ((consp object) >>>> (output-list object stream)) >>>> ((and (vectorp object) >>>> (not (stringp object)) >>>> (not (bit-vector-p object))) >>>> (output-vector object stream)) >>>> ((structure-object-p object) >>>> (cond >>>> ((and (null *print-readably*) >>>> *print-level* >>>> (>= *current-print-level* *print-level*)) >>>> (write-char #\# stream)) >>>> (t >>>> (print-object object stream)))) >>>> ((standard-object-p object) >>>> (print-object object stream)) >>>> ((java::java-object-p object) >>>> (print-object object stream)) >>>> ((xp::xp-structure-p stream) >>>> (let ((s (sys::%write-to-string object))) >>>> (xp::write-string++ s stream 0 (length s)))) >>>> (t >>>> (%output-object object stream)))) >>>> >>> >> > |
From: Alan R. <ala...@gm...> - 2010-01-18 17:52:03
|
On Fri, Jan 15, 2010 at 4:09 PM, Alessio Stalla <ale...@gm...>wrote: > Apparently changing output-ugly-object wasn't > necessary, but if you find out it is, let me know. > It is. Transcript below, run against current trunk. ./abcl Armed Bear Common Lisp 0.18.0-dev Java 1.5.0_22 Apple Inc. Java HotSpot(TM) Client VM Low-level initialization completed in 1.093 seconds. Startup completed in 2.608 seconds. ; Loading file:/Users/alanr/repos/abcl1/dist/abcl.jar!/org/armedbear/lisp/asdf.abcl ... ; Loading file:/Users/alanr/repos/abcl1/dist/abcl.jar!/org/armedbear/lisp/delete.abcl ... ; Loaded file:/Users/alanr/repos/abcl1/dist/abcl.jar!/org/armedbear/lisp/delete.abcl (0.031 seconds) ; Loading file:/Users/alanr/repos/abcl1/dist/abcl.jar!/org/armedbear/lisp/java.abcl ... ; Loaded file:/Users/alanr/repos/abcl1/dist/abcl.jar!/org/armedbear/lisp/java.abcl (0.065 seconds) ; Loaded file:/Users/alanr/repos/abcl1/dist/abcl.jar!/org/armedbear/lisp/asdf.abcl (1.93 seconds) ; Loading /Users/alanr/repos/obi/trunk/src/tools/build/obi.asd ... ; Loaded /Users/alanr/repos/obi/trunk/src/tools/build/obi.asd (1.44 seconds) ; Loading /Users/alanr/repos/infectious-disease-ontology/trunk/src/tools/ido.asd ... ; Loaded /Users/alanr/repos/infectious-disease-ontology/trunk/src/tools/ido.asd (0.019 seconds) ; Loading /Users/alanr/repos/ogms/trunk/src/tools/ogms.asd ... ; Loaded /Users/alanr/repos/ogms/trunk/src/tools/ogms.asd (0.029 seconds) ; Loading /Users/alanr/repos/neurocommons/trunk/convert/fma/fma.asd ... ; Loaded /Users/alanr/repos/neurocommons/trunk/convert/fma/fma.asd (0.022 seconds) Type ":help" for a list of available commands. CL-USER(1): (defmethod print-object ((u (jclass "java.net.URI")) s) (print "ho!")) #<STANDARD-METHOD PRINT-OBJECT (#:|java.net.URI| T) {1AC096}> CL-USER(2): (jnew "java.net.URI" "http://foo.com/") #<java.net.URI http://foo.com/ {3F4CA6}> CL-USER(3): (in-package :system) #<PACKAGE "SYSTEM"> SYS(4): (defun output-ugly-object (object stream) (cond ((consp object) (output-list object stream)) ((and (vectorp object) (not (stringp object)) (not (bit-vector-p object))) (output-vector object stream)) ((structure-object-p object) (cond ((and (null *print-readably*) *print-level* (>= *current-print-level* *print-level*)) (write-char #\# stream)) (t (print-object object stream)))) ((standard-object-p object) (print-object object stream)) ((java::java-object-p object) (print-object object stream)) ((xp::xp-structure-p stream) (let ((s (sys::%write-to-string object))) (xp::write-string++ s stream 0 (length s)))) (t (%output-object object stream)))) STYLE-WARNING: redefining OUTPUT-UGLY-OBJECT at top level OUTPUT-UGLY-OBJECT SYS(5): (in-package :cl-user) #<PACKAGE "COMMON-LISP-USER"> CL-USER(6): (jnew "java.net.URI" "http://foo.com/") "ho!" CL-USER(7): |
From: Alessio S. <ale...@gm...> - 2010-01-18 19:09:32
|
On Mon, Jan 18, 2010 at 6:51 PM, Alan Ruttenberg <ala...@gm...> wrote: > On Fri, Jan 15, 2010 at 4:09 PM, Alessio Stalla <ale...@gm...> > wrote: >> >> Apparently changing output-ugly-object wasn't >> necessary, but if you find out it is, let me know. > > It is. Transcript below, run against current trunk. Duh! Sorry for missing the obvious. Your fix is now on trunk. Alessio |