Commit 9c043926 authored by Eugene Zhemchugov's avatar Eugene Zhemchugov Committed by Liam M. Healy
Browse files

Make callbacks reentrant

Rebind callback dynamic variables upon entry into the callback function.
With this fix callbacks can be called recursively.
parent 24eecac1
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -369,4 +369,7 @@
  'integration-test-f454
  (grid:copy-to (vector 0.0d0 1.0d0 (sqrt 2.0d0) 3.0d0))
  0.0d0 1.0d-3 1000)
 (integration-QAWc 'integration-test-f459 -1.0d0 5.0d0 0.0d0 0.0d0 1.0d-3 1000))
 (integration-QAWc 'integration-test-f459 -1.0d0 5.0d0 0.0d0 0.0d0 1.0d-3 1000)
 (integration-QAG (lambda (x)
                    (integration-QAG (lambda (y) (* (sin x) y)) 0d0 1d0 :gauss41))
                  0d0 pi :gauss41))
+3 −1
Original line number Diff line number Diff line
@@ -235,4 +235,6 @@
       ;; CL specials to do the same job.
       (declare ,@(when (member :slug args) `((ignore ,slug)))
		(special ,dynamic-variable))
       (funcall ,dynamic-variable ,@(mapcar 'grid:st-symbol (remove :slug args))))))
       (let ((,dynamic-variable ,dynamic-variable))
         (declare (special ,dynamic-variable))
         (funcall ,dynamic-variable ,@(mapcar 'grid:st-symbol (remove :slug args)))))))
+9 −2
Original line number Diff line number Diff line
@@ -232,5 +232,12 @@
     (LIST -0.08994400695837003d0 1.18529017636488d-6)
     (MULTIPLE-VALUE-LIST
      (INTEGRATION-QAWC 'INTEGRATION-TEST-F459 -1.0d0 5.0d0
			0.0d0 0.0d0 0.001d0 1000)))))
			0.0d0 0.0d0 0.001d0 1000))))
  (LISP-UNIT:ASSERT-NUMERICAL-EQUAL (LIST 1.0d0 1.1102230246251565d-14)
                                    (MULTIPLE-VALUE-LIST
                                     (INTEGRATION-QAG
                                      (LAMBDA (X)
                                        (INTEGRATION-QAG
                                         (LAMBDA (Y) (* (SIN X) Y)) 0.0d0 1.0d0
                                         :GAUSS41))
                                      0.0d0 PI :GAUSS41))))