~ chicken-core (chicken-5) e64c0ee784f0625adfd2717a656e30f41cabb97d


commit e64c0ee784f0625adfd2717a656e30f41cabb97d
Author:     Peter Bex <peter@more-magic.net>
AuthorDate: Thu Oct 12 16:09:33 2017 +0200
Commit:     Evan Hanson <evhan@foldling.org>
CommitDate: Mon Oct 16 09:39:51 2017 +1300

    Delete things marked OBSOLETE for the pre2 snapshot
    
    We'll introduce a couple more with the (chicken base) change and
    perhaps others, too.  So let's remove the ones which are no longer
    necessary.
    
    Note: the scheduler used the flonum 0.0 as a default timeout value as
    an argument to a foreign-lambda that accepts an unsigned-int, this had
    to be changed to fixnum 0 to avoid a crash due to the removal of the
    OBSOLETE compatibility for automatically coercing flonums to these
    argument types.  This crash only happens because the scheduler has an
    `unsafe' declaration.
    
    Signed-off-by: Evan Hanson <evhan@foldling.org>

diff --git a/NEWS b/NEWS
index d976ad0a..d9f194c0 100644
--- a/NEWS
+++ b/NEWS
@@ -15,6 +15,7 @@
   - Continuations which discard additional values beyond the first now
     also accept multiple values via direct invocation after being
     captured through `call/cc`, not just via `values` (#1390)
+  - Removed the deprecated C_locative_ref C function.
 
 - Compiler
   - Fixed an off by one allocation problem in generated C code for (list ...).
diff --git a/c-platform.scm b/c-platform.scm
index bad52153..ac9bf907 100644
--- a/c-platform.scm
+++ b/c-platform.scm
@@ -66,8 +66,8 @@
      ##sys#list ##sys#cons ##sys#append ##sys#vector ##sys#foreign-char-argument ##sys#foreign-fixnum-argument
      ##sys#foreign-flonum-argument ##sys#error ##sys#peek-c-string ##sys#peek-nonnull-c-string 
      ##sys#peek-and-free-c-string ##sys#peek-and-free-nonnull-c-string
-     ##sys#foreign-block-argument ##sys#foreign-string-argument ##sys#foreign-pointer-argument ##sys#foreign-integer-argument
-     ##sys#call-with-current-continuation) ) )
+     ##sys#foreign-block-argument ##sys#foreign-string-argument
+     ##sys#foreign-pointer-argument ##sys#call-with-current-continuation)))
 
 (define default-profiling-declarations
   '((##core#declare
diff --git a/chicken-syntax.scm b/chicken-syntax.scm
index b6086a76..129648a0 100644
--- a/chicken-syntax.scm
+++ b/chicken-syntax.scm
@@ -1009,9 +1009,6 @@
 	   (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/chicken.condition.import.scm b/chicken.condition.import.scm
index 6ab6ce8b..943996c1 100644
--- a/chicken.condition.import.scm
+++ b/chicken.condition.import.scm
@@ -39,7 +39,4 @@
    (condition-predicate . chicken.condition#condition-predicate)
    (condition-property-accessor . chicken.condition#condition-property-accessor)
    (get-condition-property . chicken.condition#get-condition-property))
- ;; OBSOLETE: This can be removed after bootstrapping
- (if (##sys#symbol-has-toplevel-binding? '##sys#chicken.condition-macro-environment)
-     ##sys#chicken.condition-macro-environment
-     ##sys#chicken-macro-environment))
+ ##sys#chicken.condition-macro-environment)
diff --git a/chicken.h b/chicken.h
index 3aeb0028..b08f0de2 100644
--- a/chicken.h
+++ b/chicken.h
@@ -1113,9 +1113,6 @@ typedef void (C_ccall *C_proc)(C_word, C_word *) C_noret;
  */
 #if C_STACK_GROWS_DOWNWARD
 # define C_demand(n)              (C_stress && ((C_word)(C_stack_pointer - C_stack_limit) > ((n)+C_scratch_usage)))
-/* OBSOLETE: */
-# define C_stack_probe(p)         (C_stress && (((C_word *)(p)-C_scratch_usage) >= C_stack_limit))
-
 # define C_stack_check1(err)      if(!C_disable_overflow_check) {	\
                                     do { C_byte *_sp = (C_byte*)(C_stack_pointer); \
 				      if(_sp < (C_byte *)C_stack_hard_limit && \
@@ -1125,9 +1122,6 @@ typedef void (C_ccall *C_proc)(C_word, C_word *) C_noret;
 
 #else
 # define C_demand(n)              (C_stress && ((C_word)(C_stack_limit - C_stack_pointer) > ((n)+C_scratch_usage)))
-/* OBSOLETE: */
-# define C_stack_probe(p)         (C_stress && (((C_word *)(p)+C_scratch_usage) < C_stack_limit))
-
 # define C_stack_check1(err)      if(!C_disable_overflow_check) {	\
                                     do { C_byte *_sp = (C_byte*)(C_stack_pointer); \
 				      if(_sp > (C_byte *)C_stack_hard_limit && \
@@ -1186,16 +1180,12 @@ typedef void (C_ccall *C_proc)(C_word, C_word *) C_noret;
 #define C_setsubchar(x, i, n)     (((C_char *)C_data_pointer(x))[ C_unfix(i) ] = C_character_code(n), C_SCHEME_UNDEFINED)
 #define C_setsubbyte(x, i, n)     (((C_char *)C_data_pointer(x))[ C_unfix(i) ] = C_unfix(n), C_SCHEME_UNDEFINED)
 
-/* XXX TODO OBSOLETE, but still used by fx* */
 #define C_fixnum_times(n1, n2)          (C_fix(C_unfix(n1) * C_unfix(n2)))
-/* XXX TODO OBSOLETE, but still used by C_fixnum_plus, which is fx+ */
 #define C_u_fixnum_plus(n1, n2)         (((n1) - C_FIXNUM_BIT) + (n2))
 #define C_fixnum_plus(n1, n2)           (C_u_fixnum_plus(n1, n2) | C_FIXNUM_BIT)
-/* XXX TODO OBSOLETE, but still used by C_fixnum_difference, which is fx- */
 #define C_u_fixnum_difference(n1, n2)   ((n1) - (n2) + C_FIXNUM_BIT)
 #define C_fixnum_difference(n1, n2)     (C_u_fixnum_difference(n1, n2) | C_FIXNUM_BIT)
 #define C_u_fixnum_divide(n1, n2)       (C_fix(C_unfix(n1) / C_unfix(n2)))
-/* XXX TODO OBSOLETE, but still used in unsafe mode in c-platform.scm */
 #define C_u_fixnum_modulo(n1, n2)       (C_fix(C_unfix(n1) % C_unfix(n2)))
 #define C_u_fixnum_and(n1, n2)          ((n1) & (n2))
 #define C_fixnum_and(n1, n2)            (C_u_fixnum_and(n1, n2) | C_FIXNUM_BIT)
@@ -1205,7 +1195,6 @@ typedef void (C_ccall *C_proc)(C_word, C_word *) C_noret;
 #define C_fixnum_not(n)                 ((~(n)) | C_FIXNUM_BIT)
 #define C_fixnum_shift_left(n1, n2)     (C_fix(((C_uword)C_unfix(n1) << (C_uword)C_unfix(n2))))
 #define C_fixnum_shift_right(n1, n2)    (((n1) >> (C_uword)C_unfix(n2)) | C_FIXNUM_BIT)
-/* XXX TODO OBSOLETE, but still used by C_fixnum_negate, which is fxneg */
 #define C_u_fixnum_negate(n)            (-(n) + 2 * C_FIXNUM_BIT)
 #define C_fixnum_negate(n)              (C_u_fixnum_negate(n) | C_FIXNUM_BIT)
 #define C_fixnum_greaterp(n1, n2)       (C_mk_bool((C_word)(n1) > (C_word)(n2)))
@@ -1943,7 +1932,6 @@ C_fctexport C_cpsproc(C_register_finalizer) C_noret;
 C_fctexport C_cpsproc(C_set_dlopen_flags) C_noret;
 C_fctexport C_cpsproc(C_dload) C_noret;
 C_fctexport C_cpsproc(C_become) C_noret;
-C_fctexport C_cpsproc(C_locative_ref) C_noret; /* DEPRECATED */
 C_fctexport C_cpsproc(C_call_with_cthulhu) C_noret;
 C_fctexport C_cpsproc(C_copy_closure) C_noret;
 C_fctexport C_cpsproc(C_dump_heap_state) C_noret;
@@ -1973,12 +1961,8 @@ C_fctexport C_word C_fcall C_i_infinitep(C_word x) C_regparm;
 C_fctexport C_word C_fcall C_i_zerop(C_word x) C_regparm;
 C_fctexport C_word C_fcall C_u_i_zerop(C_word x) C_regparm;
 C_fctexport C_word C_fcall C_i_positivep(C_word x) C_regparm;
-/* XXX TODO OBSOLETE: This can be removed after recompiling c-platform.scm */
-C_fctexport C_word C_fcall C_u_i_positivep(C_word x) C_regparm;
 C_fctexport C_word C_fcall C_i_integer_positivep(C_word x) C_regparm;
 C_fctexport C_word C_fcall C_i_negativep(C_word x) C_regparm;
-/* XXX TODO OBSOLETE: This can be removed after recompiling c-platform.scm */
-C_fctexport C_word C_fcall C_u_i_negativep(C_word x) C_regparm;
 C_fctexport C_word C_fcall C_i_integer_negativep(C_word x) C_regparm;
 C_fctexport C_word C_fcall C_i_car(C_word x) C_regparm;
 C_fctexport C_word C_fcall C_i_cdr(C_word x) C_regparm;
@@ -1991,13 +1975,9 @@ C_fctexport C_word C_fcall C_i_cdddr(C_word x) C_regparm;
 C_fctexport C_word C_fcall C_i_cadddr(C_word x) C_regparm;
 C_fctexport C_word C_fcall C_i_cddddr(C_word x) C_regparm;
 C_fctexport C_word C_fcall C_i_list_tail(C_word lst, C_word i) C_regparm;
-/* XXX TODO OBSOLETE: This can be removed after recompiling c-platform.scm */
 C_fctexport C_word C_fcall C_i_evenp(C_word x) C_regparm;
-C_fctexport C_word C_fcall C_u_i_evenp(C_word x) C_regparm;
 C_fctexport C_word C_fcall C_i_integer_evenp(C_word x) C_regparm;
 C_fctexport C_word C_fcall C_i_oddp(C_word x) C_regparm;
-/* XXX TODO OBSOLETE: This can be removed after recompiling c-platform.scm */
-C_fctexport C_word C_fcall C_u_i_oddp(C_word x) C_regparm;
 C_fctexport C_word C_fcall C_i_integer_oddp(C_word x) C_regparm;
 C_fctexport C_word C_fcall C_i_vector_ref(C_word v, C_word i) C_regparm;
 C_fctexport C_word C_fcall C_i_block_ref(C_word x, C_word i) C_regparm;
@@ -2133,8 +2113,6 @@ C_fctexport C_word C_fcall C_i_foreign_symbol_argumentp(C_word x) C_regparm;
 C_fctexport C_word C_fcall C_i_foreign_tagged_pointer_argumentp(C_word x, C_word t) C_regparm;
 C_fctexport C_word C_fcall C_i_foreign_pointer_argumentp(C_word x) C_regparm;
 C_fctexport C_word C_fcall C_i_foreign_scheme_or_c_pointer_argumentp(C_word x) C_regparm;
-/* XXX TODO OBSOLETE: This can be removed after recompiling c-platform.scm */
-C_fctexport C_word C_fcall C_i_foreign_integer_argumentp(C_word x) C_regparm;
 C_fctexport C_word C_fcall C_i_foreign_ranged_integer_argumentp(C_word x, C_word bits) C_regparm;
 C_fctexport C_word C_fcall C_i_foreign_unsigned_ranged_integer_argumentp(C_word x, C_word bits) C_regparm;
 
@@ -2472,12 +2450,10 @@ inline static C_word C_num_to_int(C_word x)
 {
   if(x & C_FIXNUM_BIT) {
     return C_unfix(x);
-  } else if (C_truep(C_bignump(x))) {
+  } else {
+    C_CHECKp(x,C_bignump(C_VAL1(x)),0);
     if (C_bignum_negativep(x)) return -(C_word)C_bignum_digits(x)[0];
     else return (C_word)C_bignum_digits(x)[0];  /* should never be larger */
-  } else {
-    /* XXX OBSOLETE remove on the next round, remove check above */
-    return (C_word)C_flonum_magnitude(x);
   }
 }
 
@@ -2486,16 +2462,13 @@ inline static C_s64 C_num_to_int64(C_word x)
 {
   if(x & C_FIXNUM_BIT) {
     return (C_s64)C_unfix(x);
-  } else if (C_truep(C_bignump(x))) {
+  } else {
     C_s64 num = C_bignum_digits(x)[0];
 #ifndef C_SIXTY_FOUR
     if (C_bignum_size(x) > 1) num |= (C_s64)(((C_u64)C_bignum_digits(x)[1]) << 32);
 #endif
     if (C_bignum_negativep(x)) return -num;
     else return num;
-  } else {
-    /* XXX OBSOLETE remove on the next round, remove check above */
-    return (C_s64)C_flonum_magnitude(x);
   }
 }
 
@@ -2504,15 +2477,12 @@ inline static C_u64 C_num_to_uint64(C_word x)
 {
   if(x & C_FIXNUM_BIT) {
     return (C_u64)C_unfix(x);
-  } else if (C_truep(C_bignump(x))) {
-    C_u64 num = C_bignum_digits(x)[0];
+  } else {
+    C_s64 num = C_bignum_digits(x)[0];
 #ifndef C_SIXTY_FOUR
     if (C_bignum_size(x) > 1) num |= ((C_u64)C_bignum_digits(x)[1]) << 32;
 #endif
     return num;
-  } else {
-    /* XXX OBSOLETE remove on the next round, remove check above */
-    return (C_u64)C_flonum_magnitude(x);
   }
 }
 
@@ -2521,11 +2491,8 @@ inline static C_uword C_num_to_unsigned_int(C_word x)
 {
   if(x & C_FIXNUM_BIT) {
     return (C_uword)C_unfix(x);
-  } else if (C_truep(C_bignump(x))) {
-    return C_bignum_digits(x)[0]; /* should never be larger */
   } else {
-    /* XXX OBSOLETE remove on the next round, remove check above */
-    return (C_uword)C_flonum_magnitude(x);
+    return C_bignum_digits(x)[0]; /* should never be larger */
   }
 }
 
@@ -2632,12 +2599,9 @@ inline static C_long C_num_to_long(C_word x)
 {
   if(x & C_FIXNUM_BIT) {
     return (C_long)C_unfix(x);
-  } else if (C_truep(C_bignump(x))) {
+  } else {
     if (C_bignum_negativep(x)) return -(C_long)C_bignum_digits(x)[0];
     else return (C_long)C_bignum_digits(x)[0];
-  } else {
-    /* XXX OBSOLETE remove on the next round, remove check above */
-    return (C_long)C_flonum_magnitude(x);
   }
 }
 
@@ -2646,11 +2610,8 @@ inline static C_ulong C_num_to_unsigned_long(C_word x)
 {
   if(x & C_FIXNUM_BIT) {
     return (C_ulong)C_unfix(x);
-  } else if (C_truep(C_bignump(x))) {
-    return (C_ulong)C_bignum_digits(x)[0];
   } else {
-    /* XXX OBSOLETE remove on the next round, remove check above */
-    return (C_ulong)C_flonum_magnitude(x);
+    return (C_ulong)C_bignum_digits(x)[0];
   }
 }
 
diff --git a/chicken.import.scm b/chicken.import.scm
index 077b38f9..153a521b 100644
--- a/chicken.import.scm
+++ b/chicken.import.scm
@@ -23,16 +23,6 @@
 ; OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 ; POSSIBILITY OF SUCH DAMAGE.
 
-;; OBSOLETE: This can be removed after bootstrapping
-(if (not (##sys#symbol-has-toplevel-binding? 'chicken.syntax#expand))
-    (begin
-      (set! chicken.syntax#expand chicken.expand#expand)
-      (set! chicken.syntax#er-macro-transformer chicken.expand#er-macro-transformer)
-      (set! chicken.syntax#ir-macro-transformer chicken.expand#ir-macro-transformer)
-      (set! chicken.syntax#strip-syntax chicken.expand#strip-syntax)
-      (set! chicken.syntax#syntax-error chicken.expand#syntax-error)
-      (set! chicken.syntax#get-line-number chicken.expand#get-line-number)))
-
 ;; OBSOLETE: This can be removed after bootstrapping (needed for
 ;; macros and constant evaluation in compiler)
 (if (not (##sys#symbol-has-toplevel-binding? 'chicken.base#add1))
diff --git a/extras.scm b/extras.scm
index 6508a551..7c148cdf 100644
--- a/extras.scm
+++ b/extras.scm
@@ -183,10 +183,6 @@
 (define chicken.io#read-string/port read-string/port)
 (define chicken.io#read-string!/port read-string!/port)
 
-;; XXX TODO OBSOLETE: This can be removed after recompiling c-platform.scm
-(define ##sys#read-string/port read-string/port)
-(define ##sys#read-string!/port read-string!/port)
-
 (define (read-buffered #!optional (port ##sys#standard-input))
   (##sys#check-input-port port #t 'read-buffered)
   (let ((rb (##sys#slot (##sys#slot port 2) 9))) ; read-buffered method
diff --git a/library.scm b/library.scm
index 5b55d5b4..50f80aaa 100644
--- a/library.scm
+++ b/library.scm
@@ -5002,12 +5002,6 @@ EOF
 
 (import chicken.condition)
 
-;; OBSOLETE: This can be removed after bootstrapping, when the
-;; handle-exceptions macro won't be rewritten to a primitive alias.
-;; This is necessary because the compiler uses this macro itself.
-(define #%with-exception-handler with-exception-handler)
-
-
 ;;; Miscellaneous low-level routines:
 
 (define (##sys#structure? x s) (##core#inline "C_i_structurep" x s))
@@ -5174,9 +5168,6 @@ EOF
 (define (##sys#foreign-pointer-argument x) (##core#inline "C_i_foreign_pointer_argumentp" x))
 (define (##sys#foreign-tagged-pointer-argument x tx) (##core#inline "C_i_foreign_tagged_pointer_argumentp" x tx))
 
-;; OBSOLETE
-(define (##sys#foreign-integer-argument x) (##core#inline "C_i_foreign_integer_argumentp" x))
-
 (define (##sys#foreign-ranged-integer-argument obj size)
   (##core#inline "C_i_foreign_ranged_integer_argumentp" obj size))
 (define (##sys#foreign-unsigned-ranged-integer-argument obj size)
diff --git a/runtime.c b/runtime.c
index 12471fdf..260e660d 100644
--- a/runtime.c
+++ b/runtime.c
@@ -866,7 +866,7 @@ static C_PTABLE_ENTRY *create_initial_ptable()
 {
   /* IMPORTANT: hardcoded table size -
      this must match the number of C_pte calls + 1 (NULL terminator)! */
-  C_PTABLE_ENTRY *pt = (C_PTABLE_ENTRY *)C_malloc(sizeof(C_PTABLE_ENTRY) * 63);
+  C_PTABLE_ENTRY *pt = (C_PTABLE_ENTRY *)C_malloc(sizeof(C_PTABLE_ENTRY) * 62);
   int i = 0;
 
   if(pt == NULL)
@@ -921,7 +921,6 @@ static C_PTABLE_ENTRY *create_initial_ptable()
   C_pte(C_peek_uint64);
   C_pte(C_context_switch);
   C_pte(C_register_finalizer);
-  C_pte(C_locative_ref); /* OBSOLETE */
   C_pte(C_copy_closure);
   C_pte(C_dump_heap_state);
   C_pte(C_filter_heap_objects);
@@ -5383,13 +5382,6 @@ C_regparm C_word C_fcall C_i_integer_positivep(C_word x)
   else return C_mk_nbool(C_bignum_negativep(x));
 }
 
-/* XXX TODO OBSOLETE: This can be removed after recompiling c-platform.scm */
-C_regparm C_word C_fcall C_u_i_positivep(C_word x)
-{
-  return C_i_positivep(x);
-}
-
-
 C_regparm C_word C_fcall C_i_negativep(C_word x)
 {
   if (x & C_FIXNUM_BIT)
@@ -5409,12 +5401,6 @@ C_regparm C_word C_fcall C_i_negativep(C_word x)
 }
 
 
-/* XXX TODO OBSOLETE: This can be removed after recompiling c-platform.scm */
-C_regparm C_word C_fcall C_u_i_negativep(C_word x)
-{
-  return C_i_negativep(x);
-}
-
 C_regparm C_word C_fcall C_i_integer_negativep(C_word x)
 {
   if (x & C_FIXNUM_BIT) return C_i_fixnum_negativep(x);
@@ -5442,12 +5428,6 @@ C_regparm C_word C_fcall C_i_evenp(C_word x)
   }
 }
 
-/* XXX TODO OBSOLETE: This can be removed after recompiling c-platform.scm */
-C_regparm C_word C_fcall C_u_i_evenp(C_word x)
-{
-  return C_i_evenp(x);
-}
-
 C_regparm C_word C_fcall C_i_integer_evenp(C_word x)
 {
   if (x & C_FIXNUM_BIT) return C_i_fixnumevenp(x);
@@ -5476,12 +5456,6 @@ C_regparm C_word C_fcall C_i_oddp(C_word x)
 }
 
 
-/* XXX TODO OBSOLETE: This can be removed after recompiling c-platform.scm */
-C_regparm C_word C_fcall C_u_i_oddp(C_word x)
-{
-  return C_i_oddp(x);
-}
-
 C_regparm C_word C_fcall C_i_integer_oddp(C_word x)
 {
   if (x & C_FIXNUM_BIT) return C_i_fixnumoddp(x);
@@ -6945,30 +6919,6 @@ C_regparm C_word C_fcall C_i_foreign_unsigned_ranged_integer_argumentp(C_word x,
   }
 }
 
-/* XXX TODO OBSOLETE: This can be removed after recompiling c-platform.scm */
-C_regparm C_word C_fcall C_i_foreign_integer_argumentp(C_word x)
-{
-  double m;
-
-  if((x & C_FIXNUM_BIT) != 0) return x;
-
-  if(C_truep(C_i_bignump(x))) {
-    if (C_bignum_size(x) == 1) return x;
-    else barf(C_BAD_ARGUMENT_TYPE_FOREIGN_LIMITATION, NULL, x);
-  }
-
-  /* XXX OBSOLETE: This should be removed on the next round */
-  if(!C_immediatep(x) && C_block_header(x) == C_FLONUM_TAG) {
-    m = C_flonum_magnitude(x);
-
-    if(m >= C_WORD_MIN && m <= C_WORD_MAX) return x;
-  }
-
-  barf(C_BAD_ARGUMENT_TYPE_NO_INTEGER_ERROR, NULL, x);
-  return C_SCHEME_UNDEFINED;
-}
-
-
 /* I */
 C_regparm C_word C_fcall C_i_not_pair_p_2(C_word x)
 {
@@ -11443,49 +11393,6 @@ C_regparm C_word C_fcall C_a_i_make_locative(C_word **a, int c, C_word type, C_w
   return (C_word)loc;
 }
 
-/* DEPRECATED */
-void C_ccall C_locative_ref(C_word c, C_word *av)
-{
-  C_word
-    /* closure = av[ 0 ] */
-    k = av[ 1 ],
-    loc,
-    *ptr, val,
-#ifdef C_SIXTY_FOUR
-    ab[nmax(C_SIZEOF_BIGNUM(2), WORDS_PER_FLONUM)],
-#else
-    ab[nmax(C_SIZEOF_BIGNUM(1), WORDS_PER_FLONUM)],
-#endif
-    *a = ab;
-
-  if(c != 3) C_bad_argc(c, 3);
-
-  loc = av[ 2 ];
-
-  if(C_immediatep(loc) || C_block_header(loc) != C_LOCATIVE_TAG)
-    barf(C_BAD_ARGUMENT_TYPE_ERROR, "locative-ref", loc);
-
-  ptr = (C_word *)C_block_item(loc, 0);
-
-  if(ptr == NULL) barf(C_LOST_LOCATIVE_ERROR, "locative-ref", loc);
-
-  switch(C_unfix(C_block_item(loc, 2))) {
-  case C_SLOT_LOCATIVE: C_kontinue(k, *ptr);
-  case C_CHAR_LOCATIVE: C_kontinue(k, C_make_character(*((char *)ptr)));
-  case C_U8_LOCATIVE: C_kontinue(k, C_fix(*((unsigned char *)ptr)));
-  case C_S8_LOCATIVE: C_kontinue(k, C_fix(*((char *)ptr)));
-  case C_U16_LOCATIVE: C_kontinue(k, C_fix(*((unsigned short *)ptr)));
-  case C_S16_LOCATIVE: C_kontinue(k, C_fix(*((short *)ptr)));
-  case C_U32_LOCATIVE: C_kontinue(k, C_unsigned_int_to_num(&a, *((C_u32 *)ptr)));
-  case C_S32_LOCATIVE: C_kontinue(k, C_int_to_num(&a, *((C_s32 *)ptr)));
-  case C_U64_LOCATIVE: C_kontinue(k, C_uint64_to_num(&a, *((C_u64 *)ptr)));
-  case C_S64_LOCATIVE: C_kontinue(k, C_int64_to_num(&a, *((C_s64 *)ptr)));
-  case C_F32_LOCATIVE: C_kontinue(k, C_flonum(&a, *((float *)ptr)));
-  case C_F64_LOCATIVE: C_kontinue(k, C_flonum(&a, *((double *)ptr)));
-  default: panic(C_text("bad locative type"));
-  }
-}
-
 C_regparm C_word C_fcall C_a_i_locative_ref(C_word **a, int c, C_word loc)
 {
   C_word *ptr;
diff --git a/scheduler.scm b/scheduler.scm
index 1cc67536..72b8ad06 100644
--- a/scheduler.scm
+++ b/scheduler.scm
@@ -457,7 +457,7 @@ EOF
 		  (let* ((tmo1 (caar ##sys#timeout-list))
 			 (now (##core#inline_allocate ("C_a_i_current_milliseconds" 7) #f)))
 		    (max 0 (- tmo1 now)) )
-		  0.0) ) )		; otherwise immediate timeout.
+		  0))) ; otherwise immediate timeout.
     (dbg "waiting for I/O with timeout " tmo)
     (let ((n ((foreign-lambda int "C_ready_fds_timeout" bool unsigned-integer)
 	      (or rq? to?) tmo)))
diff --git a/support.scm b/support.scm
index 1c2d27c5..9d00b370 100644
--- a/support.scm
+++ b/support.scm
@@ -483,13 +483,8 @@
 (define-record-printer (node n out)
   (fprintf out "#<node ~a ~a>" (node-class n) (node-parameters n)))
 
-;; 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 (make-node c p s)
+  (##sys#make-structure 'chicken.compiler.support#node c p s))
 
 (define (varnode var) (make-node '##core#variable (list var) '()))
 (define (qnode const) (make-node 'quote (list const) '()))
diff --git a/synrules.scm b/synrules.scm
index 7fdf7fa9..d0919862 100644
--- a/synrules.scm
+++ b/synrules.scm
@@ -86,11 +86,6 @@
       (loop (- len 1) (cdr input)))
      (else input))))
 
-;; OBSOLETE
-;; These two can be removed after the next snapshot
-(define ##sys#drop-right drop-right)
-(define ##sys#take-right take-right)
-
 (define (process-syntax-rules ellipsis rules subkeywords r c)
 
   (define %append '##sys#append)
diff --git a/tweaks.scm b/tweaks.scm
index e7d94183..f252a6de 100644
--- a/tweaks.scm
+++ b/tweaks.scm
@@ -38,16 +38,8 @@
      (no-argc-checks)))
   (else))
 
-;; 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))))
+(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))
 
 (cond-expand
   ((not debugbuild)
Trap