~ chicken-core (chicken-5) a1cd6afd5f38fb21c5fdfe2073fd2210bd2392ad
commit a1cd6afd5f38fb21c5fdfe2073fd2210bd2392ad
Author: Peter Bex <peter@more-magic.net>
AuthorDate: Sat Apr 6 18:50:09 2019 +0200
Commit: felix <felix@call-with-current-continuation.org>
CommitDate: Thu May 2 15:38:42 2019 +0200
Drop backwards compat support for keywords-as-NUL-prefixed-symbols
Bump binary compatibility version to 11.
After this change, #1576 has been fully fixed.
diff --git a/defaults.make b/defaults.make
index 4da4d633..9ea214c1 100644
--- a/defaults.make
+++ b/defaults.make
@@ -27,7 +27,7 @@
# basic parameters
-BINARYVERSION = 10
+BINARYVERSION = 11
STACKDIRECTION ?= 1
CROSS_CHICKEN ?= 0
diff --git a/runtime.c b/runtime.c
index 4ba8dda1..842f8645 100644
--- a/runtime.c
+++ b/runtime.c
@@ -2295,21 +2295,13 @@ void C_unregister_lf(void *handle)
C_regparm C_word C_fcall C_intern(C_word **ptr, int len, C_char *str)
{
- if (*str == '\0') { /* OBSOLETE: Backwards compatibility */
- return C_intern_kw(ptr, len-1, str+1);
- } else {
- return C_intern_in(ptr, len, str, symbol_table);
- }
+ return C_intern_in(ptr, len, str, symbol_table);
}
C_regparm C_word C_fcall C_h_intern(C_word *slot, int len, C_char *str)
{
- if (*str == '\0') { /* OBSOLETE: Backwards compatibility */
- return C_h_intern_kw(slot, len-1, str+1);
- } else {
- return C_h_intern_in(slot, len, str, symbol_table);
- }
+ return C_h_intern_in(slot, len, str, symbol_table);
}
@@ -10631,20 +10623,9 @@ void C_ccall C_string_to_symbol(C_word c, C_word *av)
len = C_header_size(string);
name = (C_char *)C_data_pointer(string);
- if (*name == '\0' && len > 1) { /* OBSOLETE: Backwards compatibility */
- key = hash_string(len-1, name+1, keyword_table->size, keyword_table->rand, 0);
- if(!C_truep(s = lookup(key, len-1, name+1, keyword_table))) {
- C_word *a2 = C_alloc(C_bytestowords(len-1)+1);
- C_word string2 = C_string(&a2, len-1, name+1);
- s = add_symbol(&a, key, string, keyword_table);
- C_set_block_item(s, 0, s); /* Keywords evaluate to themselves */
- C_set_block_item(s, 2, C_SCHEME_FALSE); /* Keywords have no plists */
- }
- } else {
- key = hash_string(len, name, symbol_table->size, symbol_table->rand, 0);
- if(!C_truep(s = lookup(key, len, name, symbol_table)))
- s = add_symbol(&a, key, string, symbol_table);
- }
+ key = hash_string(len, name, symbol_table->size, symbol_table->rand, 0);
+ if(!C_truep(s = lookup(key, len, name, symbol_table)))
+ s = add_symbol(&a, key, string, symbol_table);
C_kontinue(k, s);
}
@@ -12648,8 +12629,8 @@ static C_regparm C_word C_fcall decode_literal2(C_word **ptr, C_char **str,
} else if (**str == '\2') {
val = C_h_intern_kw(dest, size, ++*str);
} else {
- /* Backwards compatibility */
- val = C_h_intern(dest, size, *str);
+ C_snprintf(buffer, sizeof(buffer), C_text("Unknown symbol subtype: %d"), (int)**str);
+ panic(buffer);
}
*str += size;
break;
diff --git a/tests/library-tests.scm b/tests/library-tests.scm
index f7a1d3ff..1e19a632 100644
--- a/tests/library-tests.scm
+++ b/tests/library-tests.scm
@@ -328,8 +328,9 @@
(assert (eq? '##foo#bar '|##foo#bar|))
(assert (string=? "|\\x0a|" (with-output-to-string (lambda () (write '|\n|)))))
-;; NOT YET, keywords are still prefixed with \000:
-; (assert (string=? "|\000foo|" (with-output-to-string (lambda () (write '|\000foo|)))))
+;; #1576
+(assert (string=? "|\\x00foo|" (with-output-to-string (lambda () (write '|\000foo|)))))
+(assert (not (keyword? '|\000foo|)))
(assert (string=? "|###foo#bar|" (with-output-to-string (lambda () (write '|###foo#bar|)))))
;;; Paren synonyms
Trap