~ 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 synonymsTrap