~ chicken-core (master) 54e9d7c65a979e21679650b6ccd102c456db5307
commit 54e9d7c65a979e21679650b6ccd102c456db5307
Author: Evan Hanson <evhan@foldling.org>
AuthorDate: Mon Jul 17 19:02:07 2017 +1200
Commit: Evan Hanson <evhan@foldling.org>
CommitDate: Mon Jul 17 19:02:07 2017 +1200
Add compatibility shims for use of 'define-record-type' within core
After 54b0d5ad, record type tags include a namespace prefix when defined
within a module. However, when bootstrapping from an older version of
CHICKEN, the compiler that's used to build the stage1 boot-chicken won't
include these prefixes and the resulting chicken will bomb out with
errors when building core. As a temporary workaround, we add a feature
as an indicator of the new behaviour and revert to the old behaviour
when it isn't registered.
diff --git a/chicken-syntax.scm b/chicken-syntax.scm
index fff681e4..c45f6c33 100644
--- a/chicken-syntax.scm
+++ b/chicken-syntax.scm
@@ -974,6 +974,9 @@
(x (r 'x))
(y (r 'y))
(slotnames (map car slots)))
+ ;; TODO OBSOLETE remove after snapshot release
+ (unless (feature? #:namespaced-record-type-tags)
+ (set! tag plain-name))
`(##core#begin
;; TODO: Maybe wrap this in an opaque object?
(,%define ,type-name (##core#quote ,tag))
diff --git a/support.scm b/support.scm
index 6f2ec807..1b4c9874 100644
--- a/support.scm
+++ b/support.scm
@@ -479,8 +479,13 @@
(define-record-printer (node n out)
(fprintf out "#<node ~a ~a>" (node-class n) (node-parameters n)))
-(define (make-node c p s)
- (##sys#make-structure 'node c p s) ) ; this kludge is for allowing the inlined `make-node'
+;; this kludge is for allowing the inlined `make-node'
+(cond-expand
+ (namespaced-record-type-tags
+ (define (make-node c p s)
+ (##sys#make-structure 'chicken.compiler.support#node c p s)))
+ (else ; TODO OBSOLETE remove after snapshot release
+ (define (make-node c p s) (##sys#make-structure 'node c p s))))
(define (varnode var) (make-node '##core#variable (list var) '()))
(define (qnode const) (make-node 'quote (list const) '()))
diff --git a/tweaks.scm b/tweaks.scm
index d473dcfe..e7d94183 100644
--- a/tweaks.scm
+++ b/tweaks.scm
@@ -38,8 +38,16 @@
(no-argc-checks)))
(else))
-(define-inline (node? x) (##sys#structure? x 'node))
-(define-inline (make-node c p s) (##sys#make-structure 'node c p s))
+;; TODO OBSOLETE remove after snapshot release
+(register-feature! #:namespaced-record-type-tags)
+
+(cond-expand
+ (namespaced-record-type-tags
+ (define-inline (node? x) (##sys#structure? x 'chicken.compiler.support#node))
+ (define-inline (make-node c p s) (##sys#make-structure 'chicken.compiler.support#node c p s)))
+ (else ; TODO OBSOLETE remove after snapshot release
+ (define-inline (node? x) (##sys#structure? x 'node))
+ (define-inline (make-node c p s) (##sys#make-structure 'node c p s))))
(cond-expand
((not debugbuild)
Trap