From 3a117b22b10c9577868fd22f88d1cad2e2ec32a0 Mon Sep 17 00:00:00 2001 From: Ian Price Date: Thu, 24 Oct 2013 05:51:47 +0100 Subject: [PATCH] Fix trap handlers to handle applicable structs. Reported by Jordy Dickinson . Fixes . * module/system/vm/traps.scm (frame-matcher): Extract procedure when proc is an applicable struct. --- module/system/vm/traps.scm | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/module/system/vm/traps.scm b/module/system/vm/traps.scm index cccd6ea..b65e034 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. ;; -- 1.7.11.7