From 5e1901105acb5b3e9a44c7380b36bd670c1616d3 Mon Sep 17 00:00:00 2001 From: retoor Date: Sun, 23 Nov 2025 00:17:01 +0100 Subject: [PATCH] Update. --- Makefile | 13 ++++++++++--- build/globals.o | Bin 1424 -> 0 bytes build/interpreter.o | Bin 12496 -> 0 bytes build/main.o | Bin 3616 -> 0 bytes build/native_functions.o | Bin 14424 -> 0 bytes build/parser.o | Bin 9536 -> 0 bytes build/string_utils.o | Bin 3168 -> 0 bytes build/tokenizer.o | Bin 3448 -> 0 bytes src/parser.c | 26 ++++++++++++++++++++++++++ src/tokenizer.c | 2 ++ src/types.h | 2 +- tests/increment_decrement_test.rc | 30 ++++++++++++++++++++++++++++++ 12 files changed, 69 insertions(+), 4 deletions(-) delete mode 100644 build/globals.o delete mode 100644 build/interpreter.o delete mode 100644 build/main.o delete mode 100644 build/native_functions.o delete mode 100644 build/parser.o delete mode 100644 build/string_utils.o delete mode 100644 build/tokenizer.o create mode 100644 tests/increment_decrement_test.rc diff --git a/Makefile b/Makefile index e3c686d..a459e6c 100644 --- a/Makefile +++ b/Makefile @@ -24,13 +24,14 @@ TESTS = $(TEST_DIR)/feature_test.rc \ $(TEST_DIR)/endless_loop_test.rc \ $(TEST_DIR)/math_test.rc \ $(TEST_DIR)/string_test.rc \ - $(TEST_DIR)/string_manip_test.rc + $(TEST_DIR)/string_manip_test.rc \ + $(TEST_DIR)/increment_decrement_test.rc EXAMPLES = $(EXAMPLE_DIR)/http_simple.rc \ $(EXAMPLE_DIR)/http_persistent.rc \ $(EXAMPLE_DIR)/http_multi.rc -.PHONY: all clean test run-tests run-examples help dirs +.PHONY: all clean test run-tests run-examples help all: dirs $(TARGET) @@ -40,7 +41,7 @@ dirs: $(BUILD_DIR)/%.o: $(SRC_DIR)/%.c $(CC) $(CFLAGS) -c $< -o $@ -$(TARGET): $(OBJECTS) +$(TARGET): dirs $(OBJECTS) $(CC) $(OBJECTS) -o $(TARGET) $(LDFLAGS) clean: @@ -64,6 +65,9 @@ test: $(TARGET) @echo "Running string manipulation tests..." @$(TARGET) $(TEST_DIR)/string_manip_test.rc 2>&1 | grep -v "Error at token" || true @echo "" + @echo "Running increment decrement tests..." + @$(TARGET) $(TEST_DIR)/increment_decrement_test.rc 2>&1 | grep -v "Error at token" || true + @echo "" @echo "=== All Tests Completed ===" run-feature-test: $(TARGET) @@ -81,6 +85,9 @@ run-string-test: $(TARGET) run-string-manip: $(TARGET) $(TARGET) $(TEST_DIR)/string_manip_test.rc +run-increment-decrement-test: $(TARGET) + $(TARGET) $(TEST_DIR)/increment_decrement_test.rc + run-http-simple: $(TARGET) $(TARGET) $(EXAMPLE_DIR)/http_simple.rc diff --git a/build/globals.o b/build/globals.o deleted file mode 100644 index 4b83da3a018ddd9a4aac1ded57c4be011db0fce3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1424 zcmbu9&ui2`6vyAz`Wv*p30@)yD!9YiZbbwoP-{U%L|jl1(j=R<%O;tSOtgE^J$d%z zc~62jZ(e)!uaF-61N1KFd&zqwnc~R@lX>6I`!SPbl6PB=A1?KJAl8HX&?un*D<>M? zty~w*!C8Rq&CR>c^-)l!rgUztt93Q#-!3b;_I7Qk2E!YStEy$ZuHZO{WBbVnmH-Zk zwc4XPZnURm`1Qw*oJX+Qsy@RB7nqBtHOMaGpnQh}+TwkEw^z|8e#lzt`pmyEmp=EH zA2DBCM1VHLL4D>Q>%Nlzfcb*CF;j-E9TEF?lIqC zKEG4f?J_?a)=yscIbr_8;u&+;sPpHa`Hk(xI`HE{h2S4RVRA3iI`$^xMnI8=UZ}?r zq`sNFj=bG6MUa}dE+E!5#2NcRkU^0_5+ypHK^B6UR!xnbMri?{idka(0B4ie^S*c{ zIxwKdzVSf?MFA?*NfP05D%B=Zc3DYiHH^~P{a5|`dv|9}ryIac)YNleahEm4+a~MFyn#XS+j((Y zw0t{v3uC8o;D4cGbpFVk>e^i7I~79x>{^O_;Dj%{Ak|Tx)L-H_{?U#-I|{kn^bP09 WWbc0!1NO70+^<~!LJE1d>;D4tH+)P0 diff --git a/build/interpreter.o b/build/interpreter.o deleted file mode 100644 index fc628d60cf0706489a4043585f7507499637b002..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12496 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 diff --git a/build/main.o b/build/main.o deleted file mode 100644 index b21e492a2d42e15c612b5d1fa1cded42dd47374e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3616 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 l#2V+@addr]; + if (tokens[pc].type == Inc) { + memory[sym->addr]++; + } else { + memory[sym->addr]--; + } + pc++; + return val; + } + if (pc >= MAX_TOK) return 0; if (tokens[pc].type == '[') { pc++; @@ -158,6 +169,21 @@ long factor() { long unary() { if (pc >= MAX_TOK) return 0; + if (tokens[pc].type == Inc || tokens[pc].type == Dec) { + int op = tokens[pc++].type; + Token *t = &tokens[pc]; + if (t->type != Id) error("Expected identifier after ++/--"); + int idx = find_local(t->text, t->val); + if (idx == -1) error("Undefined variable"); + pc++; + long addr = locals[idx].addr; + if (op == Inc) { + memory[addr]++; + } else { + memory[addr]--; + } + return memory[addr]; + } if (tokens[pc].type == '*') { pc++; int addr = unary(); diff --git a/src/tokenizer.c b/src/tokenizer.c index e11e492..03de7bd 100644 --- a/src/tokenizer.c +++ b/src/tokenizer.c @@ -77,6 +77,8 @@ void tokenize(char *src) { if (!strncmp(s, ">=", 2)) { t->type = Ge; s += 2; continue; } if (!strncmp(s, "&&", 2)) { t->type = And; s += 2; continue; } if (!strncmp(s, "||", 2)) { t->type = Or; s += 2; continue; } + if (!strncmp(s, "++", 2)) { t->type = Inc; s += 2; continue; } + if (!strncmp(s, "--", 2)) { t->type = Dec; s += 2; continue; } if (*s == '<') { t->type = Lt; s++; continue; } if (*s == '>') { t->type = Gt; s++; continue; } diff --git a/src/types.h b/src/types.h index f77faf3..47bc28c 100644 --- a/src/types.h +++ b/src/types.h @@ -9,7 +9,7 @@ enum { Num = 128, Str, Id, Int, Char, Else, If, While, Return, Printf, - Assign, Eq, Ne, Lt, Gt, Le, Ge, Or, And + Assign, Eq, Ne, Lt, Gt, Le, Ge, Or, And, Inc, Dec }; typedef struct { diff --git a/tests/increment_decrement_test.rc b/tests/increment_decrement_test.rc new file mode 100644 index 0000000..914033c --- /dev/null +++ b/tests/increment_decrement_test.rc @@ -0,0 +1,30 @@ +int main() { + int a; + int b; + + a = 5; + b = a++; + printf("a = %d, b = %d\n", a, b); + + a = 5; + b = ++a; + printf("a = %d, b = %d\n", a, b); + + a = 5; + b = a--; + printf("a = %d, b = %d\n", a, b); + + a = 5; + b = --a; + printf("a = %d, b = %d\n", a, b); + + a = 5; + a++; + printf("a = %d\n", a); + + a = 5; + a--; + printf("a = %d\n", a); + + return 0; +}