Skip to content
Snippets Groups Projects
Commit acabd99e authored by Rui Ueyama's avatar Rui Ueyama
Browse files

Add character literal

parent 733e0dc2
Branches
No related merge requests found
#include "test.h"
int main() {
ASSERT(97, 'a');
ASSERT(10, '\n');
ASSERT(-128, '\x80');
printf("OK\n");
return 0;
}
......@@ -205,6 +205,26 @@ static Token *read_string_literal(Token *cur, char *start) {
return tok;
}
static Token *read_char_literal(Token *cur, char *start) {
char *p = start + 1;
if (*p == '\0')
error_at(start, "unclosed char literal");
char c;
if (*p == '\\')
c = read_escaped_char(&p, p + 1);
else
c = *p++;
char *end = strchr(p, '\'');
if (!end)
error_at(p, "unclosed char literal");
Token *tok = new_token(TK_NUM, cur, start, end - start + 1);
tok->val = c;
return tok;
}
static void convert_keywords(Token *tok) {
for (Token *t = tok; t->kind != TK_EOF; t = t->next)
if (is_keyword(t))
......@@ -273,6 +293,13 @@ static Token *tokenize(char *filename, char *p) {
continue;
}
// Character literal
if (*p == '\'') {
cur = read_char_literal(cur, p);
p += cur->len;
continue;
}
// Identifier or keyword
if (is_ident1(*p)) {
char *q = p++;
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment