aboutsummaryrefslogtreecommitdiffhomepage
path: root/main.c
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2025-07-13 19:55:56 +0900
committernsfisis <nsfisis@gmail.com>2025-08-15 10:04:20 +0900
commit286a9b6254e88ac5ee6537ef3a11db8060ce06c5 (patch)
treefeeb5707a3b3e79c882d21536406aedb2cf322f7 /main.c
parent64a77c44a5316c19bbc2486e462095f36c718314 (diff)
downloadducc-286a9b6254e88ac5ee6537ef3a11db8060ce06c5.tar.gz
ducc-286a9b6254e88ac5ee6537ef3a11db8060ce06c5.tar.zst
ducc-286a9b6254e88ac5ee6537ef3a11db8060ce06c5.zip
feat: implement single line comment
Diffstat (limited to 'main.c')
-rw-r--r--main.c23
1 files changed, 18 insertions, 5 deletions
diff --git a/main.c b/main.c
index 2067de1..ac5484d 100644
--- a/main.c
+++ b/main.c
@@ -223,9 +223,22 @@ void pp_tokenize_all(Preprocessor* pp) {
tok->raw.len = 1;
tok->raw.data = pp->src + pp->pos - tok->raw.len;
} else if (c == '/') {
- tok->kind = PpTokenKind_punctuator;
- tok->raw.len = 1;
- tok->raw.data = pp->src + pp->pos - tok->raw.len;
+ if (pp->src[pp->pos] == '/') {
+ start = pp->pos - 1;
+ ++pp->pos;
+ while (pp->src[pp->pos] && pp->src[pp->pos] != '\n' && pp->src[pp->pos] != '\r') {
+ ++pp->pos;
+ }
+ tok->kind = PpTokenKind_whitespace;
+ tok->raw.len = pp->pos - start;
+ tok->raw.data = pp->src + pp->pos - tok->raw.len;
+ } else if (pp->src[pp->pos] == '*') {
+ fatal_error("unimplemented");
+ } else {
+ tok->kind = PpTokenKind_punctuator;
+ tok->raw.len = 1;
+ tok->raw.data = pp->src + pp->pos - tok->raw.len;
+ }
} else if (c == '%') {
tok->kind = PpTokenKind_punctuator;
tok->raw.len = 1;
@@ -368,8 +381,8 @@ void pp_execute_pp_directive(Preprocessor* pp) {
PpToken* tok = pp->pp_tokens;
PpToken* define_dest;
while (tok->kind != PpTokenKind_eof) {
- "TODO: check if the token is at the beginning of line.";
- "TODO: check if skipped whitespaces do not contain line breaks.";
+ // TODO: check if the token is at the beginning of line.
+ // TODO: check if skipped whitespaces do not contain line breaks.
if (tok->kind == PpTokenKind_punctuator && string_equals_cstr(&tok->raw, "#")) {
PpToken* tok2 = tok + 1;
while (tok2->kind != PpTokenKind_eof && tok2->kind == PpTokenKind_whitespace)