error handling on error while reading char literal
This commit is contained in:
parent
8d623da163
commit
3f8592772f
29
src/read.c
29
src/read.c
|
@ -327,18 +327,31 @@ read_char(pic_state *pic, struct pic_port *port, char c)
|
||||||
if (! isdelim(peek(port))) {
|
if (! isdelim(peek(port))) {
|
||||||
switch (c) {
|
switch (c) {
|
||||||
default: read_error(pic, "unexpected character after char literal");
|
default: read_error(pic, "unexpected character after char literal");
|
||||||
case 'a': c = '\a'; expect(port, "lerm"); break;
|
case 'a': c = '\a'; if (! expect(port, "lerm")) goto fail; break;
|
||||||
case 'b': c = '\b'; expect(port, "ackspace"); break;
|
case 'b': c = '\b'; if (! expect(port, "ackspace")) goto fail; break;
|
||||||
case 'd': c = 0x7F; expect(port, "elete"); break;
|
case 'd': c = 0x7F; if (! expect(port, "elete")) goto fail; break;
|
||||||
case 'e': c = 0x1B; expect(port, "scape"); break;
|
case 'e': c = 0x1B; if (! expect(port, "scape")) goto fail; break;
|
||||||
case 'n': c = peek(port) == 'e' ? (expect(port, "ewline"), '\n') : (expect(port, "ull"), '\0'); break;
|
case 'n':
|
||||||
case 'r': c = '\r'; expect(port, "eturn"); break;
|
if ((c = peek(port)) == 'e') {
|
||||||
case 's': c = ' '; expect(port, "pace"); break;
|
c = '\n';
|
||||||
case 't': c = '\t'; expect(port, "ab"); break;
|
if (! expect(port, "ewline"))
|
||||||
|
goto fail;
|
||||||
|
} else {
|
||||||
|
c = '\0';
|
||||||
|
if (! expect(port, "ull"))
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'r': c = '\r'; if (! expect(port, "eturn")) goto fail; break;
|
||||||
|
case 's': c = ' '; if (! expect(port, "pace")) goto fail; break;
|
||||||
|
case 't': c = '\t'; if (! expect(port, "ab")) goto fail; break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return pic_char_value(c);
|
return pic_char_value(c);
|
||||||
|
|
||||||
|
fail:
|
||||||
|
read_error(pic, "unexpected character while reading character literal");
|
||||||
}
|
}
|
||||||
|
|
||||||
static pic_value
|
static pic_value
|
||||||
|
|
Loading…
Reference in New Issue