summaryrefslogtreecommitdiff
path: root/module/system/vm/traps.scm
diff options
context:
space:
mode:
authorIan Price <ianprice90@googlemail.com>2013-10-24 05:51:47 +0100
committerIan Price <ianprice90@googlemail.com>2014-01-09 03:12:05 +0000
commit306cc01d3981feaa11aa0d866ff1d99128f0ace3 (patch)
treed16593dadc515fae17adad9e29393b8bbcf0ee7b /module/system/vm/traps.scm
parent793e8a9317d24298c82389bdf86b8ca17b4ee2f0 (diff)
downloadguile-306cc01d3981feaa11aa0d866ff1d99128f0ace3.tar.gz
Fix trap handlers to handle applicable structs.
Reported by Jordy Dickinson <jordy.dickinson@gmail.com>. Fixes <http://bugs.gnu.org/15691>. * module/system/vm/traps.scm (frame-matcher): Extract procedure when proc is an applicable struct.
Diffstat (limited to 'module/system/vm/traps.scm')
-rw-r--r--module/system/vm/traps.scm21
1 files changed, 12 insertions, 9 deletions
diff --git a/module/system/vm/traps.scm b/module/system/vm/traps.scm
index cccd6eac9..b65e03464 100644
--- a/module/system/vm/traps.scm
+++ b/module/system/vm/traps.scm
@@ -109,15 +109,18 @@
((new-disabled-trap vm enable disable) frame))
(define (frame-matcher proc match-objcode?)
- (if match-objcode?
- (lambda (frame)
- (let ((frame-proc (frame-procedure frame)))
- (or (eq? frame-proc proc)
- (and (program? frame-proc)
- (eq? (program-objcode frame-proc)
- (program-objcode proc))))))
- (lambda (frame)
- (eq? (frame-procedure frame) proc))))
+ (let ((proc (if (struct? proc)
+ (procedure proc)
+ proc)))
+ (if match-objcode?
+ (lambda (frame)
+ (let ((frame-proc (frame-procedure frame)))
+ (or (eq? frame-proc proc)
+ (and (program? frame-proc)
+ (eq? (program-objcode frame-proc)
+ (program-objcode proc))))))
+ (lambda (frame)
+ (eq? (frame-procedure frame) proc)))))
;; A basic trap, fires when a procedure is called.
;;