[armedbear-ticket] [armedbear] #200: ABCL compiler fails to produce loadable fasl for XPATH

armedbear armedbear-devel at common-lisp.net
Sun Mar 10 18:59:13 UTC 2013


#200: ABCL compiler fails to produce loadable fasl for XPATH
-------------------------------------------------------------------+--------
 Reporter:  mevenson                                               |       Owner:  ehuelsmann
     Type:  defect                                                 |      Status:  new       
 Priority:  blocker                                                |   Milestone:  1.2.0     
Component:  compiler                                               |     Version:  1.1.0     
 Keywords:  compiler-macro quicklisp xpath jvm-class-verify-error  |  
-------------------------------------------------------------------+--------

Comment(by ehuelsmann):

 I'm using the following transcript to generate a failure and analyze the
 bytecode:

 CL-USER(1): :ld c:/users/erik/quicklisp/setup.lisp
 CL-USER(2): (ql:quickload :xpath)
 [1] XPATH(3): 0  ;; aborts the exception handler of non-loadable code
 ;; Followed by pasting:
 CL-USER(4): (defun my-evaluate (xpath context &optional unordered-p)
     (xpath::evaluate-compiled
      (if (functionp xpath)
          xpath
          (xpath::compile-xpath xpath (xpath::make-dynamic-environment
 xpath::*dynamic-namespaces*)))
      context
      unordered-p))
 MY-EVALUATE
 CL-USER(5): (define-compiler-macro my-evaluate (xpath context &optional
 unordered-p)
     (xpath::once-only (xpath)
       `(xpath::evaluate-compiled
         (if (functionp ,xpath)
             ,xpath
             (xpath::with-cache ((,xpath :test equal)
                                 (xpath::*dynamic-namespaces* :test xpath
 ::namespaces-match-p)
                                 (xpath::*profiling-enabled-p* :test eql))
               (xpath::compile-xpath ,xpath
                                     (xpath::make-dynamic-environment
                                      xpath::*dynamic-namespaces*))))
         ,context
         ,unordered-p)))
 MY-EVALUATE
 CL-USER(6): (SETF JVM::*COMPILER-DEBUG* T)
 CL-USER(7): (COMPILE NIL '(LAMBDA () (xpath:with-namespaces (("" ""))
   (my-evaluate "count(html/following::text())"
                   (cxml:parse-rod "<html></html>"
                                   (cxml-dom:make-dom-builder))))))

 Search the resulting bytecode listing for output along the lines of "ALOAD
 (20)". The 20 produces consistently on my machine, but only locals 0 to 9
 have been allocated by the compiler. (To see that, evaluate "(trace jvm
 ::allocate-register)" before compilation.)

 Next question: where does that 20 come from? So far I found out that the
 "ALOAD 20" command is being emitted by EMIT-PUSH-VARIABLE for a variable
 with name "L".

-- 
Ticket URL: <http://trac.common-lisp.net/armedbear/ticket/200#comment:10>
armedbear <http://common-lisp.net/project/armedbear>
armedbear


More information about the armedbear-ticket mailing list