[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Guile-commits] 11/41: Better frame-call-representation printing of GC c
From: |
Andy Wingo |
Subject: |
[Guile-commits] 11/41: Better frame-call-representation printing of GC clobbers |
Date: |
Wed, 02 Dec 2015 08:06:48 +0000 |
wingo pushed a commit to branch master
in repository guile.
commit c960c76fe0dea22728a69923fa8cdaaaa5dc5edd
Author: Andy Wingo <address@hidden>
Date: Fri Nov 27 12:42:53 2015 +0100
Better frame-call-representation printing of GC clobbers
* module/system/vm/frame.scm (frame-call-representation): Assume that
unspecified values are GC clobbers rather than actual arguments, and
print as _.
---
module/system/vm/frame.scm | 13 +++++++++++--
1 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/module/system/vm/frame.scm b/module/system/vm/frame.scm
index 4ce4d7f..ccfc057 100644
--- a/module/system/vm/frame.scm
+++ b/module/system/vm/frame.scm
@@ -380,8 +380,17 @@
(frame-local-ref frame i 'scm))
((find-slot i bindings)
=> (lambda (binding)
- (frame-local-ref frame (binding-slot binding)
- (binding-representation binding))))
+ (let ((val (frame-local-ref frame (binding-slot binding)
+ (binding-representation binding))))
+ ;; It could be that there's a value that isn't clobbered
+ ;; by a call but that isn't live after a call either. In
+ ;; that case, if GC runs during the call, the value will
+ ;; be collected, and on the stack it will be replaced
+ ;; with the unspecified value. Assume that clobbering
+ ;; values is more likely than passing the unspecified
+ ;; value as an argument, and replace unspecified with _,
+ ;; as if the binding were not available.
+ (if (unspecified? val) '_ val))))
(else
'_)))
(define (application-arguments)
- [Guile-commits] 03/41: Remove br-if-equal opcode, (continued)
- [Guile-commits] 03/41: Remove br-if-equal opcode, Andy Wingo, 2015/12/02
- [Guile-commits] 02/41: Don't compile equal? to br-if-equal, Andy Wingo, 2015/12/02
- [Guile-commits] 04/41: Identify boot continuations by code, not closure, Andy Wingo, 2015/12/02
- [Guile-commits] 01/41: Fix miscompilation of closures allocated as vectors, Andy Wingo, 2015/12/02
- [Guile-commits] 08/41: Add frame-procedure-name, Andy Wingo, 2015/12/02
- [Guile-commits] 06/41: Apply of non-programs has IP that is not from prev frame, Andy Wingo, 2015/12/02
- [Guile-commits] 07/41: Remove primitive?, add primitive-code?, Andy Wingo, 2015/12/02
- [Guile-commits] 10/41: More robust low-level frame printer, Andy Wingo, 2015/12/02
- [Guile-commits] 05/41: All arities serialize a "closure" binding, Andy Wingo, 2015/12/02
- [Guile-commits] 12/41: ,registers doesn't use frame-procedure, Andy Wingo, 2015/12/02
- [Guile-commits] 11/41: Better frame-call-representation printing of GC clobbers,
Andy Wingo <=
- [Guile-commits] 09/41: frame-call-representation avoids frame-procedure., Andy Wingo, 2015/12/02
- [Guile-commits] 15/41: Remove frame-procedure, Andy Wingo, 2015/12/02
- [Guile-commits] 13/41: Remove `procedure' repl command, Andy Wingo, 2015/12/02
- [Guile-commits] 14/41: VM traps don't match on value of slot 0, Andy Wingo, 2015/12/02
- [Guile-commits] 17/41: Remove frame->module, Andy Wingo, 2015/12/02
- [Guile-commits] 19/41: Add bv-length instruction, Andy Wingo, 2015/12/02
- [Guile-commits] 18/41: Range inference over the full U64+S64 range, Andy Wingo, 2015/12/02
- [Guile-commits] 20/41: bv-f{32, 64}-{ref, set!} take unboxed u64 index, Andy Wingo, 2015/12/02
- [Guile-commits] 23/41: Beginning of u64 phi unboxing, Andy Wingo, 2015/12/02
- [Guile-commits] 16/41: Add low-level support for unboxed 64-bit unsigned ints, Andy Wingo, 2015/12/02