aboutsummaryrefslogtreecommitdiffhomepage
path: root/parse.c
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2025-08-03 13:19:40 +0900
committernsfisis <nsfisis@gmail.com>2025-08-15 10:06:21 +0900
commite1de8fc36f11ac932707c7113eb4bf3ebc4b1f74 (patch)
tree65c0a362dc9343b09a6e452d5526e39da834b986 /parse.c
parent185778aa3ae35252ae992f12a9dfc39a4eab5758 (diff)
downloadducc-e1de8fc36f11ac932707c7113eb4bf3ebc4b1f74.tar.gz
ducc-e1de8fc36f11ac932707c7113eb4bf3ebc4b1f74.tar.zst
ducc-e1de8fc36f11ac932707c7113eb4bf3ebc4b1f74.zip
feat: support short type
Diffstat (limited to 'parse.c')
-rw-r--r--parse.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/parse.c b/parse.c
index b9b8700..9c05519 100644
--- a/parse.c
+++ b/parse.c
@@ -358,10 +358,10 @@ AstNode* parse_postfix_expr(Parser* p) {
}
int is_type_token(Parser* p, Token* token) {
- if (token->kind == TokenKind_keyword_int || token->kind == TokenKind_keyword_long ||
- token->kind == TokenKind_keyword_char || token->kind == TokenKind_keyword_void ||
- token->kind == TokenKind_keyword_enum || token->kind == TokenKind_keyword_struct ||
- token->kind == TokenKind_keyword_const) {
+ if (token->kind == TokenKind_keyword_int || token->kind == TokenKind_keyword_short ||
+ token->kind == TokenKind_keyword_long || token->kind == TokenKind_keyword_char ||
+ token->kind == TokenKind_keyword_void || token->kind == TokenKind_keyword_enum ||
+ token->kind == TokenKind_keyword_struct || token->kind == TokenKind_keyword_const) {
return 1;
}
if (token->kind != TokenKind_ident) {
@@ -388,12 +388,14 @@ Type* parse_type(Parser* p) {
ty = p->typedefs[typedef_idx].ty;
} else {
ty = type_new(TypeKind_unknown);
- if (t->kind == TokenKind_keyword_int) {
+ if (t->kind == TokenKind_keyword_char) {
+ ty->kind = TypeKind_char;
+ } else if (t->kind == TokenKind_keyword_short) {
+ ty->kind = TypeKind_short;
+ } else if (t->kind == TokenKind_keyword_int) {
ty->kind = TypeKind_int;
} else if (t->kind == TokenKind_keyword_long) {
ty->kind = TypeKind_long;
- } else if (t->kind == TokenKind_keyword_char) {
- ty->kind = TypeKind_char;
} else if (t->kind == TokenKind_keyword_void) {
ty->kind = TypeKind_void;
} else if (t->kind == TokenKind_keyword_enum) {