From 8bce027f378f726ba9b25cea5020dbc7fb94d5be Mon Sep 17 00:00:00 2001 From: adnanioricce Date: Sat, 23 Nov 2024 19:26:13 -0300 Subject: [PATCH] [Chapter22&Locals] - Adding locals --- clox/Makefile | 6 +- clox/chunk.h | 2 + clox/chunk.o | Bin 7160 -> 6656 bytes clox/clox | Bin 82024 -> 77840 bytes clox/common.h | 1 + clox/compiler.c | 121 +++++++++++++++++++++++++++++++-- clox/compiler.o | Bin 24328 -> 29192 bytes clox/debug.c | 11 +++ clox/debug.o | Bin 9168 -> 9856 bytes clox/main.o | Bin 15272 -> 9440 bytes clox/scanner.o | Bin 23936 -> 17944 bytes clox/tests/chapter22/case2.lox | 4 ++ clox/tests/chapter22/case3.lox | 6 ++ clox/tests/chapter22/case4.lox | 6 ++ clox/value.o | Bin 7832 -> 6728 bytes clox/vm.c | 10 +++ clox/vm.o | Bin 21376 -> 21968 bytes 17 files changed, 160 insertions(+), 7 deletions(-) create mode 100644 clox/tests/chapter22/case2.lox create mode 100644 clox/tests/chapter22/case3.lox create mode 100644 clox/tests/chapter22/case4.lox diff --git a/clox/Makefile b/clox/Makefile index ce89574..073b0e4 100644 --- a/clox/Makefile +++ b/clox/Makefile @@ -1,5 +1,7 @@ CC = gcc -CFLAGS = -Wall -Wextra -g +INC_DIR = ./ +CFLAGS = -Wall -Wextra -g -I$(INC_DIR) +DEPS = common.h SOURCES = main.c chunk.c memory.c debug.c value.c vm.c compiler.c scanner.c object.c table.c OBJECTS = $(SOURCES:.c=.o) EXECUTABLE = clox @@ -9,7 +11,7 @@ all: $(EXECUTABLE) $(EXECUTABLE): $(OBJECTS) $(CC) $(CFLAGS) -o $@ $(OBJECTS) -%.o: %.c +%.o: %.c $(DEPS) $(CC) $(CFLAGS) -c $< -o $@ clean: diff --git a/clox/chunk.h b/clox/chunk.h index 3770c32..5a6f6ce 100644 --- a/clox/chunk.h +++ b/clox/chunk.h @@ -10,6 +10,8 @@ typedef enum { OP_TRUE, OP_FALSE, OP_POP, + OP_GET_LOCAL, + OP_SET_LOCAL, OP_GET_GLOBAL, OP_SET_GLOBAL, OP_DEFINE_GLOBAL, diff --git a/clox/chunk.o b/clox/chunk.o index ecb512552756c0beaa187977d566d6ee0130970f..1a9ea309d567d596cb125844ce2c65c7adab70ce 100644 GIT binary patch literal 6656 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 literal 7160 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 diff --git a/clox/clox b/clox/clox index 021e15ee82c0ac8a620062ebf584f73c6fa6f6d1..7730a19c9a66a06ae9bb5ff62cb27c68ae55f79a 100755 GIT binary patch literal 77840 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 literal 82024 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 Bq^|DAL1ot+&?N!otj zfAneR&bjBFd+vGN$K06-^`qJ~YOM$~tt}-c4k*%H9%))+Sx7!%)-IDxkhE)? z{Iu&7?ZHI@ih`OH7>kDtb0O=S?hF`9K24QXl~X&up*nF2mUNhp6ru^-j;dv{9a3CX ztChH15?A#K;*@rJQqNwa+Ri2?$i z{tJB_S4C{ke2eioYN2lBGnFtj?pD4I`=f3p_-4EtW&;z=(%p)BfL}f4_S-+euO8ax zr&!cO`*@t4WS}0}ui~`a*W-Q)@M`w~%2kgo`1%rlQ~`a-bI7jIeaX*o;ZU3L;66PsF*qD1y3oRodZqkzsO9`NA)XOV_D zxGzx;?z_ZSA^MURk;m=BgZoskQ6T#gTKQ7XDxfd<0G@p@qfMky z>&#Be!U!+T`nAsVh3-qnUZ=|AiU+e58xh)y-{X=AwJF?t6t4M5 z2%2CC^r)J5a&OgjRe=(`v8MtsqNjUnXho z<@YGGuO>^;l=mpggVtrVes7qVw9fQ~CKU0Ninv7-Nz7H&N|oa2oFFn0Nd<$j<}8g!gL!R@&b*?gy}YG{h!mi5 zqi~+tRKCyr@|H-cSr+Q4GY>|tk5Fz=GqYuCg2h!i^h?%pD@qmVx;(;56lJNGd6kL{ zku12}tM5RyueOSv2DJ@Z)dVdNtTU-#ZJpiB3|C=qY*7m)dex@c&T^Qw3=rDORzo5~ z-v%LsudbuAkR^JaI&j&D{JF9;-cc9H=feOHd4J z5fQMqL}?hYXz5ZG>J{atT@;B(WfDuvva-kCILF)+iGYc0{&HVKAnUtL)sz(;9P%Jh zl8!gex|Q2`RRd~~G_I&YOHfa}9|XZOuptZd7jI;VDtohFN-J5`hzm_?VcFObmK6fp zZ)WW{VEKxKGJF!B(86XdDp|W(84%7C4

YwCc#2>RheS{Bl!Cvo4R&BHCvPG(K55 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 diff --git a/clox/common.h b/clox/common.h index 7197be4..cc6808c 100644 --- a/clox/common.h +++ b/clox/common.h @@ -6,5 +6,6 @@ #include #define DEBUG_TRACE_EXECUTION +#define UINT8_COUNT (UINT8_MAX + 1) #define DEBUG_PRINT_CODE #endif diff --git a/clox/compiler.c b/clox/compiler.c index 7b7da5a..5c94f2b 100644 --- a/clox/compiler.c +++ b/clox/compiler.c @@ -1,5 +1,6 @@ #include #include +#include #include "common.h" #include "compiler.h" @@ -38,7 +39,19 @@ typedef struct { Precedence precedence; } ParseRule; +typedef struct { + Token name; + int depth; +} Local; + +typedef struct { + Local locals[UINT8_COUNT]; + int localCount; + int scopeDepth; +} Compiler; + Parser parser; +Compiler* current = NULL; Chunk* compilingChunk; static Chunk* currentChunk() { @@ -127,6 +140,12 @@ static void emitConstant(Value value) { emitBytes(OP_CONSTANT, makeConstant(value)); } +static void initCompiler(Compiler* compiler) { + compiler->localCount = 0; + compiler->scopeDepth = 0; + current = compiler; +} + static void endCompiler() { emitReturn(); #ifdef DEBUG_PRINT_CODE @@ -135,6 +154,20 @@ static void endCompiler() { } #endif } + +static void beginScope() { + current->scopeDepth++; +} + +static void endScope() { + current->scopeDepth--; + while (current->localCount > 0 && + current->locals[current->localCount - 1].depth > + current->scopeDepth) { + emitByte(OP_POP); + current->localCount--; + } +} static void expression(); static void statement(); static void declaration(); @@ -144,13 +177,69 @@ static void parsePrecedence(Precedence precedence); static uint8_t identifierConstant(Token* name) { return makeConstant(OBJ_VAL(copyString(name->start,name->length))); } +static bool identifiersEqual(Token* a, Token* b) { + if (a->length != b->length) return false; + return memcmp(a->start, b->start, a->length) == 0; +} +static int resolveLocal(Compiler* compiler, Token* name) { + for (int i = compiler->localCount - 1; i >= 0; i--) { + Local* local = &compiler->locals[i]; + if (identifiersEqual(name, &local->name)) { + if (local->depth == -1) { + error("Can't read local variable in its own initializer."); + } + return i; + } + } + + return -1; +} +static void addLocal(Token name) { + if (current->localCount == UINT8_COUNT) { + error("Too many local variables in function."); + return; + } + Local* local = ¤t->locals[current->localCount++]; + local->name = name; + local->depth = -1; + // local->depth = current->scopeDepth; +} + +static void declareVariable() { + if (current->scopeDepth == 0) return; + + Token* name = &parser.previous; + for (int i = current->localCount - 1; i >= 0; i--) { + Local* local = ¤t->locals[i]; + if (local->depth != -1 && local->depth < current->scopeDepth) { + break; + } + + if (identifiersEqual(name, &local->name)) { + error("Already a variable with this name in this scope."); + } + } + addLocal(*name); +} static uint8_t parseVariable(const char* errorMessage) { consume(TOKEN_IDENTIFIER, errorMessage); + + declareVariable(); + if (current->scopeDepth > 0) return 0; + return identifierConstant(&parser.previous); } +static void markInitialized() { + current->locals[current->localCount - 1].depth = current->scopeDepth; +} + static void defineVariable(uint8_t global) { + if (current->scopeDepth > 0) { + markInitialized(); + return; + } emitBytes(OP_DEFINE_GLOBAL, global); } @@ -188,6 +277,13 @@ static void expression() { // What goes here? parsePrecedence(PREC_ASSIGNMENT); } +static void block() { + while (!check(TOKEN_RIGHT_BRACE) && !check(TOKEN_EOF)) { + declaration(); + } + + consume(TOKEN_RIGHT_BRACE, "Expect '}' after block."); +} static void varDeclaration() { uint8_t global = parseVariable("Expect variable name."); @@ -253,6 +349,11 @@ static void statement() { if (match(TOKEN_PRINT)) { printStatement(); } + else if (match(TOKEN_LEFT_BRACE)) { + beginScope(); + block(); + endScope(); + } else { expressionStatement(); } @@ -274,13 +375,23 @@ static void string(bool canAssign) { } static void namedVariable(Token name, bool canAssign) { - uint8_t arg = identifierConstant(&name); + // uint8_t arg = identifierConstant(&name); + uint8_t getOp, setOp; + int arg = resolveLocal(current, &name); + if (arg != -1) { + getOp = OP_GET_LOCAL; + setOp = OP_SET_LOCAL; + } else { + arg = identifierConstant(&name); + getOp = OP_GET_GLOBAL; + setOp = OP_SET_GLOBAL; + } if (canAssign && match(TOKEN_EQUAL)) { expression(); - emitBytes(OP_SET_GLOBAL, arg); + emitBytes(setOp, (uint8_t)arg); } else { - emitBytes(OP_GET_GLOBAL, arg); + emitBytes(getOp, (uint8_t)arg); } } @@ -373,6 +484,8 @@ static ParseRule* getRule(TokenType type) { bool compile(const char* source, Chunk* chunk) { initScanner(source); + Compiler compiler; + initCompiler(&compiler); compilingChunk = chunk; parser.hadError = false; parser.panicMode = false; @@ -380,8 +493,6 @@ bool compile(const char* source, Chunk* chunk) { while (!match(TOKEN_EOF)) { declaration(); } - // expression(); - // consume(TOKEN_EOF, "Expect end of expression."); endCompiler(); return !parser.hadError; } diff --git a/clox/compiler.o b/clox/compiler.o index ed1032ba85f19da961c0af7522f7a0b2ea8429e8..1827e1eef3bc357dd02857c3bcec95fd8a6504a0 100644 GIT binary patch literal 29192 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 literal 24328 zcmeI42{cvR|L~8YXb?)Nr|A-s%7bVg5OtFjqETF2L%4KZQzC_O6DcL3;gK|Go|FbE z4H`A4G<%*rQBf(O{P#ZRySeQ@?{EFr`>yq_^{#iXb)CIG`@6sUyT5xl`<%0DxwY*S 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 Y8bcode[offset + 1]; + printf("%-16s %4d\n", name, slot); + return offset + 2; +} + int disassembleInstruction(Chunk* chunk, int offset) { printf("%04d ", offset); @@ -44,6 +51,10 @@ int disassembleInstruction(Chunk* chunk, int offset) { return simpleInstruction("OP_FALSE", offset); case OP_POP: return simpleInstruction("OP_POP", offset); + case OP_GET_LOCAL: + return byteInstruction("OP_GET_LOCAL", chunk, offset); + case OP_SET_LOCAL: + return byteInstruction("OP_SET_LOCAL", chunk, offset); case OP_GET_GLOBAL: return constantInstruction("OP_GET_GLOBAL", chunk, offset); case OP_DEFINE_GLOBAL: diff --git a/clox/debug.o b/clox/debug.o index 5d938b579cbbc78f49723d44ed027af72f6cc694..4ce44ec529516c9cc3a0e58ca2313c1396592e61 100644 GIT binary patch literal 9856 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 literal 9168 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 S^XI~kKtTSGpL&j@|9=5rF6njv literal 15272 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 diff --git a/clox/scanner.o b/clox/scanner.o index f4b971fadcdd0e5a5af21a7ebac1a31180d21a52..27bcf6cb61664042b25e5276ce2c3e194fe8e6aa 100644 GIT binary patch literal 17944 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 diff --git a/clox/vm.c b/clox/vm.c index d96afaf..45d1c08 100644 --- a/clox/vm.c +++ b/clox/vm.c @@ -145,6 +145,16 @@ static InterpretResult run() { push(BOOL_VAL(isFalsey(pop()))); break; case OP_POP: pop(); break; + case OP_GET_LOCAL: { + uint8_t slot = READ_BYTE(); + push(vm.stack[slot]); + break; + } + case OP_SET_LOCAL: { + uint8_t slot = READ_BYTE(); + vm.stack[slot] = peek(0); + break; + } case OP_GET_GLOBAL: { ObjString* name = READ_STRING(); Value value; diff --git a/clox/vm.o b/clox/vm.o index 7d22bfeeda2e99635743383ebcf0525f6f6fa9f5..08ee2e505709932418616b569df0bdf207d49f91 100644 GIT binary patch delta 8518 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 delta 8012 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