From a40570768a519a5b52e396184e90aaf9de783abe Mon Sep 17 00:00:00 2001 From: adnanioricce Date: Sat, 23 Nov 2024 19:06:11 -0300 Subject: [PATCH] [Chapter21&Globals] - Adding global variables --- clox/Makefile | 2 +- clox/chunk.h | 9 +- clox/clox | Bin 74184 -> 82024 bytes clox/compiler.c | 141 ++++++++++++++++++++++++++++--- clox/compiler.o | Bin 31072 -> 24328 bytes clox/debug.c | 10 +++ clox/debug.o | Bin 16216 -> 9168 bytes clox/memory.o | Bin 4736 -> 6920 bytes clox/tests/chapter21_globals.lox | 5 ++ clox/value.h | 1 + clox/vm.c | 39 ++++++++- clox/vm.h | 1 + clox/vm.o | Bin 22480 -> 21376 bytes 13 files changed, 192 insertions(+), 16 deletions(-) create mode 100644 clox/tests/chapter21_globals.lox diff --git a/clox/Makefile b/clox/Makefile index ac8ada1..ce89574 100644 --- a/clox/Makefile +++ b/clox/Makefile @@ -1,6 +1,6 @@ CC = gcc CFLAGS = -Wall -Wextra -g -SOURCES = main.c chunk.c memory.c debug.c value.c vm.c compiler.c scanner.c +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 diff --git a/clox/chunk.h b/clox/chunk.h index 34d73c4..3770c32 100644 --- a/clox/chunk.h +++ b/clox/chunk.h @@ -9,11 +9,16 @@ typedef enum { OP_NIL, OP_TRUE, OP_FALSE, + OP_POP, + OP_GET_GLOBAL, + OP_SET_GLOBAL, + OP_DEFINE_GLOBAL, OP_EQUAL, OP_GREATER, - OP_LESS, - OP_RETURN, + OP_LESS, OP_NEGATE, + OP_PRINT, + OP_RETURN, OP_ADD, OP_SUBTRACT, OP_MULTIPLY, diff --git a/clox/clox b/clox/clox index 72d7760efff1dec85c9f75f8fc6f50fa631ce339..021e15ee82c0ac8a620062ebf584f73c6fa6f6d1 100755 GIT binary patch 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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 literal 74184 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 KSrxLf#{UAC=jRmw diff --git a/clox/compiler.c b/clox/compiler.c index 2ab79d3..7b7da5a 100644 --- a/clox/compiler.c +++ b/clox/compiler.c @@ -30,7 +30,7 @@ typedef enum { PREC_PRIMARY } Precedence; -typedef void (*ParseFn)(); +typedef void (*ParseFn)(bool canAssign); typedef struct { ParseFn prefix; @@ -90,6 +90,16 @@ static void consume(TokenType type, const char* message) { errorAtCurrent(message); } +static bool check(TokenType type) { + return parser.current.type == type; +} + +static bool match(TokenType type) { + if (!check(type)) return false; + advance(); + return true; +} + static void emitByte(uint8_t byte) { writeChunk(currentChunk(), byte, parser.previous.line); } @@ -126,10 +136,25 @@ static void endCompiler() { #endif } static void expression(); +static void statement(); +static void declaration(); static ParseRule* getRule(TokenType type); static void parsePrecedence(Precedence precedence); -static void binary() { +static uint8_t identifierConstant(Token* name) { + return makeConstant(OBJ_VAL(copyString(name->start,name->length))); +} + +static uint8_t parseVariable(const char* errorMessage) { + consume(TOKEN_IDENTIFIER, errorMessage); + return identifierConstant(&parser.previous); +} + +static void defineVariable(uint8_t global) { + emitBytes(OP_DEFINE_GLOBAL, global); +} + +static void binary(bool canAssign) { TokenType operatorType = parser.previous.type; ParseRule* rule = getRule(operatorType); parsePrecedence((Precedence)(rule->precedence + 1)); @@ -150,7 +175,7 @@ static void binary() { } } -static void literal() { +static void literal(bool canAssign) { switch (parser.previous.type) { case TOKEN_FALSE: emitByte(OP_FALSE); break; case TOKEN_NIL: emitByte(OP_NIL); break; @@ -163,22 +188,107 @@ static void expression() { // What goes here? parsePrecedence(PREC_ASSIGNMENT); } -static void grouping() { + +static void varDeclaration() { + uint8_t global = parseVariable("Expect variable name."); + + if (match(TOKEN_EQUAL)) { + expression(); + } else { + emitByte(OP_NIL); + } + consume(TOKEN_SEMICOLON, + "Expect ';' after variable declaration."); + + defineVariable(global); +} + +static void expressionStatement() { + expression(); + consume(TOKEN_SEMICOLON, "Expect ';' after expression."); + emitByte(OP_POP); +} + +static void printStatement() { + expression(); + consume(TOKEN_SEMICOLON, "Expect ';' after value."); + emitByte(OP_PRINT); +} + +static void synchronize() { + parser.panicMode = false; + + while (parser.current.type != TOKEN_EOF) { + if (parser.previous.type == TOKEN_SEMICOLON) return; + switch (parser.current.type) { + case TOKEN_CLASS: + case TOKEN_FUN: + case TOKEN_VAR: + case TOKEN_FOR: + case TOKEN_IF: + case TOKEN_WHILE: + case TOKEN_PRINT: + case TOKEN_RETURN: + return; + + default: + ; // Do nothing. + } + + advance(); + } +} + +static void declaration() { + if (match(TOKEN_VAR)) { + varDeclaration(); + } else { + statement(); + } + + if (parser.panicMode) synchronize(); +} + +static void statement() { + if (match(TOKEN_PRINT)) { + printStatement(); + } + else { + expressionStatement(); + } +} + +static void grouping(bool canAssign) { expression(); consume(TOKEN_RIGHT_PAREN, "Expect ')' after expression."); } -static void number() { +static void number(bool canAssign) { double value = strtod(parser.previous.start, NULL); emitConstant(NUMBER_VAL(value)); } -static void string() { +static void string(bool canAssign) { emitConstant(OBJ_VAL(copyString(parser.previous.start + 1, parser.previous.length - 2))); } -static void unary() { +static void namedVariable(Token name, bool canAssign) { + uint8_t arg = identifierConstant(&name); + + if (canAssign && match(TOKEN_EQUAL)) { + expression(); + emitBytes(OP_SET_GLOBAL, arg); + } else { + emitBytes(OP_GET_GLOBAL, arg); + } +} + +static void variable(bool canAssign) { + namedVariable(parser.previous, canAssign); +} + +static void unary(bool canAssign) { TokenType operatorType = parser.previous.type; // Compile the operand. @@ -201,12 +311,16 @@ static void parsePrecedence(Precedence precedence) { return; } - prefixRule(); + bool canAssign = precedence <= PREC_ASSIGNMENT; + prefixRule(canAssign); while (precedence <= getRule(parser.current.type)->precedence) { advance(); ParseFn infixRule = getRule(parser.previous.type)->infix; - infixRule(); + infixRule(canAssign); + } + if (canAssign && match(TOKEN_EQUAL)) { + error("Invalid assignment target."); } } @@ -230,7 +344,7 @@ ParseRule rules[] = { [TOKEN_GREATER_EQUAL] = {NULL, binary, PREC_COMPARISON}, [TOKEN_LESS] = {NULL, binary, PREC_COMPARISON}, [TOKEN_LESS_EQUAL] = {NULL, binary, PREC_COMPARISON}, - [TOKEN_IDENTIFIER] = {NULL, NULL, PREC_NONE}, + [TOKEN_IDENTIFIER] = {variable, NULL, PREC_NONE}, [TOKEN_STRING] = {string, NULL, PREC_NONE}, [TOKEN_NUMBER] = {number, NULL, PREC_NONE}, [TOKEN_AND] = {NULL, NULL, PREC_NONE}, @@ -263,8 +377,11 @@ bool compile(const char* source, Chunk* chunk) { parser.hadError = false; parser.panicMode = false; advance(); - expression(); - consume(TOKEN_EOF, "Expect end of expression."); + 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 541d9fb85d60f3ff4bbeae001b080210eee030df..ed1032ba85f19da961c0af7522f7a0b2ea8429e8 100644 GIT binary patch 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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 Y8bv_)Edwte#eb;aO)>`}Qz0W?ZwsEo*6cAwH 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 diff --git a/clox/debug.c b/clox/debug.c index 4175c21..febedc2 100644 --- a/clox/debug.c +++ b/clox/debug.c @@ -42,6 +42,14 @@ int disassembleInstruction(Chunk* chunk, int offset) { return simpleInstruction("OP_TRUE", offset); case OP_FALSE: return simpleInstruction("OP_FALSE", offset); + case OP_POP: + return simpleInstruction("OP_POP", offset); + case OP_GET_GLOBAL: + return constantInstruction("OP_GET_GLOBAL", chunk, offset); + case OP_DEFINE_GLOBAL: + return constantInstruction("OP_DEFINE_GLOBAL", chunk,offset); + case OP_SET_GLOBAL: + return constantInstruction("OP_SET_GLOBAL", chunk, offset); case OP_EQUAL: return simpleInstruction("OP_EQUAL", offset); case OP_GREATER: @@ -60,6 +68,8 @@ int disassembleInstruction(Chunk* chunk, int offset) { return simpleInstruction("OP_NEGATE", offset); case OP_NOT: return simpleInstruction("OP_NOT", offset); + case OP_PRINT: + return simpleInstruction("OP_PRINT", offset); case OP_RETURN: return simpleInstruction("OP_RETURN", offset); default: diff --git a/clox/debug.o b/clox/debug.o index e37916ee85735123385c2c92599aa2bb857c2a1a..5d938b579cbbc78f49723d44ed027af72f6cc694 100644 GIT binary patch literal 9168 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 uSZpY9z;LdFl-PJ!X7=4f5J&$MOwXGji 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 diff --git a/clox/memory.o b/clox/memory.o index 94c03558ddad2e62cb39543dc66e31525f6b4cc9..1ed7c15ea24a5bec1d35a63b6a308cd8b4cca714 100644 GIT binary patch literal 6920 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 literal 4736 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 MKYm|g7ySJH0#@jf0RR91 diff --git a/clox/tests/chapter21_globals.lox b/clox/tests/chapter21_globals.lox new file mode 100644 index 0000000..87eed5c --- /dev/null +++ b/clox/tests/chapter21_globals.lox @@ -0,0 +1,5 @@ +var breakfast = "beignets"; +var beverage = "cafe au lait"; +breakfast = "beignets with " + beverage; + +print breakfast; \ No newline at end of file diff --git a/clox/value.h b/clox/value.h index 6a9b6bb..a5be2c6 100644 --- a/clox/value.h +++ b/clox/value.h @@ -28,6 +28,7 @@ typedef struct { #define IS_NUMBER(value) ((value).type == VAL_NUMBER) #define IS_OBJ(value) ((value).type == VAL_OBJ) +#define AS_OBJ(value) ((value).as.obj) #define AS_BOOL(value) ((value).as.boolean) #define AS_NUMBER(value) ((value).as.number) #define BOOL_VAL(value) ((Value){VAL_BOOL, {.boolean = value}}) diff --git a/clox/vm.c b/clox/vm.c index 6420f92..d96afaf 100644 --- a/clox/vm.c +++ b/clox/vm.c @@ -7,6 +7,7 @@ #include "object.h" #include "memory.h" #include "vm.h" +#include "table.h" VM vm; static void resetStack() { vm.stackTop = vm.stack; @@ -28,10 +29,12 @@ static void runtimeError(const char* format, ...) { void initVM() { resetStack(); vm.objects = NULL; + initTable(&vm.globals); initTable(&vm.strings); } void freeVM() { + freeTable(&vm.globals); freeTable(&vm.strings); freeObjects(); } @@ -69,6 +72,7 @@ static void concatenate() { static InterpretResult run() { #define READ_BYTE() (*vm.ip++) #define READ_CONSTANT() (vm.chunk->constants.values[READ_BYTE()]) +#define READ_STRING() AS_STRING(READ_CONSTANT()) #define BINARY_OP(valueType, op) \ do { \ if (!IS_NUMBER(peek(0)) || !IS_NUMBER(peek(1))) { \ @@ -103,6 +107,15 @@ static InterpretResult run() { case OP_NIL: push(NIL_VAL); break; case OP_TRUE: push(BOOL_VAL(true)); break; case OP_FALSE: push(BOOL_VAL(false)); break; + case OP_SET_GLOBAL: { + ObjString* name = READ_STRING(); + if (tableSet(&vm.globals, name, peek(0))) { + tableDelete(&vm.globals, name); + runtimeError("Undefined variable '%s'.", name->chars); + return INTERPRET_RUNTIME_ERROR; + } + break; + } case OP_EQUAL: { Value b = pop(); Value a = pop(); @@ -131,6 +144,23 @@ static InterpretResult run() { case OP_NOT: push(BOOL_VAL(isFalsey(pop()))); break; + case OP_POP: pop(); break; + case OP_GET_GLOBAL: { + ObjString* name = READ_STRING(); + Value value; + if (!tableGet(&vm.globals, name, &value)) { + runtimeError("Undefined variable '%s'.", name->chars); + return INTERPRET_RUNTIME_ERROR; + } + push(value); + break; + } + case OP_DEFINE_GLOBAL: { + ObjString* name = READ_STRING(); + tableSet(&vm.globals, name, peek(0)); + pop(); + break; + } case OP_NEGATE: if (!IS_NUMBER(peek(0))) { runtimeError("Operand must be a number."); @@ -138,14 +168,21 @@ static InterpretResult run() { } push(NUMBER_VAL(-AS_NUMBER(pop()))); break; - case OP_RETURN: { + case OP_PRINT: { printValue(pop()); printf("\n"); + break; + } + case OP_RETURN: { + // printValue(pop()); + // printf("\n"); return INTERPRET_OK; } + } } #undef READ_CONSTANT +#undef READ_STRING #undef BINARY_OP #undef READ_BYTE } diff --git a/clox/vm.h b/clox/vm.h index 6cd3374..87d8ce5 100644 --- a/clox/vm.h +++ b/clox/vm.h @@ -12,6 +12,7 @@ typedef struct { uint8_t* ip; Value stack[STACK_MAX]; Value* stackTop; + Table globals; Table strings; Obj* objects; } VM; diff --git a/clox/vm.o b/clox/vm.o index 0873f426b5c188c56dd11dea14eb423c69a7f8ad..7d22bfeeda2e99635743383ebcf0525f6f6fa9f5 100644 GIT binary patch literal 21376 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 N^si$!?SIMs{{s!+n$Z9N literal 22480 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 OXY(5kB^nS_#{U7~4g6jJ