aboutsummaryrefslogtreecommitdiffhomepage
path: root/preprocess.c
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2025-08-13 23:37:08 +0900
committernsfisis <nsfisis@gmail.com>2025-08-15 10:06:21 +0900
commitcefe477fdf8c8a7a081e08add9cafbe1d8a2acf0 (patch)
treeeb0e53cfebe273636ebaf3d6b5e50936903302ad /preprocess.c
parent7685bff588632a486a9e677c63ae7123b112ba9e (diff)
downloadducc-cefe477fdf8c8a7a081e08add9cafbe1d8a2acf0.tar.gz
ducc-cefe477fdf8c8a7a081e08add9cafbe1d8a2acf0.tar.zst
ducc-cefe477fdf8c8a7a081e08add9cafbe1d8a2acf0.zip
feat: implement shift operators
Diffstat (limited to 'preprocess.c')
-rw-r--r--preprocess.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/preprocess.c b/preprocess.c
index 776fe4b..cfc8659 100644
--- a/preprocess.c
+++ b/preprocess.c
@@ -68,6 +68,7 @@ enum TokenKind {
TokenKind_keyword__Imaginary,
TokenKind_le,
+ TokenKind_lshift,
TokenKind_lt,
TokenKind_literal_int,
TokenKind_literal_str,
@@ -82,6 +83,7 @@ enum TokenKind {
TokenKind_percent,
TokenKind_plus,
TokenKind_plusplus,
+ TokenKind_rshift,
TokenKind_semicolon,
TokenKind_slash,
TokenKind_star,
@@ -220,6 +222,8 @@ const char* token_kind_stringify(TokenKind k) {
return "_Imaginary";
else if (k == TokenKind_le)
return "le";
+ else if (k == TokenKind_lshift)
+ return "<<";
else if (k == TokenKind_lt)
return "lt";
else if (k == TokenKind_literal_int)
@@ -248,6 +252,8 @@ const char* token_kind_stringify(TokenKind k) {
return "+";
else if (k == TokenKind_plusplus)
return "++";
+ else if (k == TokenKind_rshift)
+ return ">>";
else if (k == TokenKind_semicolon)
return ";";
else if (k == TokenKind_slash)
@@ -616,6 +622,9 @@ void pp_tokenize_all(Preprocessor* pp) {
if (pp->src[pp->pos] == '=') {
++pp->pos;
tok->kind = TokenKind_le;
+ } else if (pp->src[pp->pos] == '<') {
+ ++pp->pos;
+ tok->kind = TokenKind_lshift;
} else {
tok->kind = TokenKind_lt;
}
@@ -623,6 +632,9 @@ void pp_tokenize_all(Preprocessor* pp) {
if (pp->src[pp->pos] == '=') {
++pp->pos;
tok->kind = TokenKind_ge;
+ } else if (pp->src[pp->pos] == '>') {
+ ++pp->pos;
+ tok->kind = TokenKind_rshift;
} else {
tok->kind = TokenKind_gt;
}