From d78026ac0523e43232501f45f3aab1f43e17bd06 Mon Sep 17 00:00:00 2001 From: Yuichi Nishiwaki Date: Tue, 12 Aug 2014 10:52:35 +0900 Subject: [PATCH] refactor comma reader --- src/read.c | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/src/read.c b/src/read.c index 5b6ab58b..a01a9ab8 100644 --- a/src/read.c +++ b/src/read.c @@ -178,15 +178,19 @@ read_quasiquote(pic_state *pic, struct pic_port *port, int c) } static pic_value -read_comma(pic_state *pic, struct pic_port *port, int c) +read_unquote(pic_state *pic, struct pic_port *port, int c) { - c = next(port); + UNUSED(c); - if (c == '@') { - return pic_list2(pic, pic_sym_value(pic->sUNQUOTE_SPLICING), read(pic, port, next(port))); - } else { - return pic_list2(pic, pic_sym_value(pic->sUNQUOTE), read(pic, port, c)); - } + return pic_list2(pic, pic_sym_value(pic->sUNQUOTE), read(pic, port, next(port))); +} + +static pic_value +read_unquote_splicing(pic_state *pic, struct pic_port *port, int c) +{ + UNUSED(c); + + return pic_list2(pic, pic_sym_value(pic->sUNQUOTE_SPLICING), read(pic, port, next(port))); } static pic_value @@ -763,7 +767,8 @@ DEFINE_READER(read_unmatch) DEFINE_READER(read_comment) DEFINE_READER(read_quote) DEFINE_READER(read_quasiquote) -DEFINE_READER(read_comma) +DEFINE_READER(read_unquote) +DEFINE_READER(read_unquote_splicing) DEFINE_READER(read_string) DEFINE_READER(read_pipe) DEFINE_READER(read_plus) @@ -792,7 +797,8 @@ pic_init_reader(pic_state *pic) pic_define_reader(pic, ";", pic_read_comment); pic_define_reader(pic, "'", pic_read_quote); pic_define_reader(pic, "`", pic_read_quasiquote); - pic_define_reader(pic, ",", pic_read_comma); + pic_define_reader(pic, ",", pic_read_unquote); + pic_define_reader(pic, ",@", pic_read_unquote_splicing); pic_define_reader(pic, "\"", pic_read_string); pic_define_reader(pic, "|", pic_read_pipe); pic_define_reader(pic, "+", pic_read_plus);