diff options
author | Ian Price <ianprice90@googlemail.com> | 2013-10-24 05:51:47 +0100 |
---|---|---|
committer | Ian Price <ianprice90@googlemail.com> | 2014-01-09 03:12:05 +0000 |
commit | 306cc01d3981feaa11aa0d866ff1d99128f0ace3 (patch) | |
tree | d16593dadc515fae17adad9e29393b8bbcf0ee7b | |
parent | 793e8a9317d24298c82389bdf86b8ca17b4ee2f0 (diff) | |
download | guile-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.
-rw-r--r-- | module/system/vm/traps.scm | 21 |
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. ;; |