From 4a20aa14f441e65c41f0b648f5465fa50a6679f9 Mon Sep 17 00:00:00 2001 From: Marius Gerbershagen Date: Sat, 16 Jun 2018 15:26:38 +0200 Subject: [PATCH] reader: signal error on invalid macro dispatch characters Before the recent changes to be more ANSI compliant with *read-suppress* (commit 07391b9cedac1aee00234f99682cdb10bd4a92dd), dispatch_macro_character would complain that no dispatch function was defined. Now we explicitely signal an error. --- src/c/read.d | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/c/read.d b/src/c/read.d index 9c72a7015..7ec1448af 100644 --- a/src/c/read.d +++ b/src/c/read.d @@ -635,6 +635,13 @@ semicolon_reader(cl_object in, cl_object c) sharpmacro routines */ +static cl_object +sharp_generic_error(cl_object in, cl_object c, cl_object n) +{ + FEreader_error("The character ~:C is not a valid dispatch macro character", + in, 1, c); +} + static cl_object sharp_C_reader(cl_object in, cl_object c, cl_object d) { @@ -2110,6 +2117,24 @@ init_read(void) make_cf3(sharp_minus_reader), r); cl_set_dispatch_macro_character(4, ECL_CODE_CHAR('#'), ECL_CODE_CHAR('|'), make_cf3(sharp_vertical_bar_reader), r); + cl_set_dispatch_macro_character(4, ECL_CODE_CHAR('#'), ECL_CODE_CHAR('\b'), + make_cf3(sharp_generic_error), r); + cl_set_dispatch_macro_character(4, ECL_CODE_CHAR('#'), ECL_CODE_CHAR('\t'), + make_cf3(sharp_generic_error), r); + cl_set_dispatch_macro_character(4, ECL_CODE_CHAR('#'), ECL_CODE_CHAR(ECL_CHAR_CODE_NEWLINE), + make_cf3(sharp_generic_error), r); + cl_set_dispatch_macro_character(4, ECL_CODE_CHAR('#'), ECL_CODE_CHAR(ECL_CHAR_CODE_LINEFEED), + make_cf3(sharp_generic_error), r); + cl_set_dispatch_macro_character(4, ECL_CODE_CHAR('#'), ECL_CODE_CHAR('\f'), + make_cf3(sharp_generic_error), r); + cl_set_dispatch_macro_character(4, ECL_CODE_CHAR('#'), ECL_CODE_CHAR(ECL_CHAR_CODE_RETURN), + make_cf3(sharp_generic_error), r); + cl_set_dispatch_macro_character(4, ECL_CODE_CHAR('#'), ECL_CODE_CHAR(' '), + make_cf3(sharp_generic_error), r); + cl_set_dispatch_macro_character(4, ECL_CODE_CHAR('#'), ECL_CODE_CHAR(')'), + make_cf3(sharp_generic_error), r); + cl_set_dispatch_macro_character(4, ECL_CODE_CHAR('#'), ECL_CODE_CHAR('<'), + make_cf3(sharp_generic_error), r); /* This is specific to this implementation */ cl_set_dispatch_macro_character(4, ECL_CODE_CHAR('#'), ECL_CODE_CHAR('$'), make_cf3(sharp_dollar_reader), r);