[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Chicken-hackers] [PATCH] Change how unbound variables are checked for
From: |
Evan Hanson |
Subject: |
[Chicken-hackers] [PATCH] Change how unbound variables are checked for |
Date: |
Fri, 29 Apr 2016 15:14:41 +1200 |
From: LemonBoy <address@hidden>
The previous method checks if the object 'x' we want to check is equal
to the value contained in the first slot of a symbol that's supposed to
always be undefined.
This patch replaces the code above with the use of the C_boundp and
C_unboundvaluep macros with no functional effect.
Signed-off-by: Evan Hanson <address@hidden>
---
csi.scm | 4 ++--
eval.scm | 6 +-----
extras.scm | 2 +-
library.scm | 5 ++---
4 files changed, 6 insertions(+), 11 deletions(-)
diff --git a/csi.scm b/csi.scm
index 5466deb..9eabeb6 100644
--- a/csi.scm
+++ b/csi.scm
@@ -621,8 +621,8 @@ EOF
((bignum? x)
(fprintf out "exact large integer ~S~% #x~X~% #o~O~% #b~B~%"
x x x x) )
- ((eq? x (##sys#slot '##sys#arbitrary-unbound-symbol 0))
- (fprintf out "unbound value~%") )
+ ((##core#inline "C_unboundvaluep" x)
+ (fprintf out "unbound value~%"))
((flonum? x) (fprintf out "inexact rational number ~S~%" x))
((ratnum? x) (fprintf out "exact ratio ~S~%" x))
((cplxnum? x) (fprintf out "~A complex number ~S~%"
diff --git a/eval.scm b/eval.scm
index b426d11..c4755c5 100644
--- a/eval.scm
+++ b/eval.scm
@@ -206,11 +206,7 @@
(define ##sys#eval-debug-level (make-parameter 1))
(define compile-to-closure
- (let ([write write]
- [reverse reverse]
- [with-input-from-file with-input-from-file]
- [unbound (##sys#slot '##sys#arbitrary-unbound-symbol 0)]
- [display display] )
+ (let ((reverse reverse))
(lambda (exp env se #!optional cntr evalenv static)
(define (find-id id se) ; ignores macro bindings
diff --git a/extras.scm b/extras.scm
index 6f0455c..c04f9ef 100644
--- a/extras.scm
+++ b/extras.scm
@@ -359,7 +359,7 @@
[else (out (make-string 1 obj)
col)] ) ) ) )
((##core#inline "C_undefinedp" obj) (out "#<unspecified>" col))
((##core#inline "C_anypointerp" obj) (out (##sys#pointer->string
obj) col))
- ((eq? obj (##sys#slot '##sys#arbitrary-unbound-symbol 0))
+ ((##core#inline "C_unboundvaluep" obj)
(out "#<unbound value>" col) )
((##sys#generic-structure? obj)
(let ([o (open-output-string)])
diff --git a/library.scm b/library.scm
index e0b3004..292554e 100644
--- a/library.scm
+++ b/library.scm
@@ -3978,8 +3978,7 @@ EOF
[else (outchr port x)] ) ) ]
[else (outchr port x)] ) )
((##core#inline "C_fixnump" x) (outstr port
(##sys#number->string x)))
- ((eq? x (##sys#slot '##sys#arbitrary-unbound-symbol 0))
- (outstr port "#<unbound value>") )
+ ((##core#inline "C_unboundvaluep" x) (outstr port "#<unbound
value>"))
((not (##core#inline "C_blockp" x)) (outstr port "#<invalid
immediate object>"))
((##core#inline "C_forwardedp" x) (outstr port "#<invalid
forwarded object>"))
((##core#inline "C_symbolp" x)
@@ -5034,7 +5033,7 @@ EOF
(##core#inline "C_update_pointer" addr vec) )
(define (##sys#symbol-has-toplevel-binding? s)
- (not (eq? (##sys#slot s 0) (##sys#slot '##sys#arbitrary-unbound-symbol 0))) )
+ (##core#inline "C_boundp" s))
(define (##sys#copy-bytes from to offset1 offset2 bytes)
(##core#inline
--
2.7.0