aboutsummaryrefslogtreecommitdiffstats
path: root/clox/src/compiler.c
diff options
context:
space:
mode:
Diffstat (limited to 'clox/src/compiler.c')
-rw-r--r--clox/src/compiler.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/clox/src/compiler.c b/clox/src/compiler.c
index 0fc41b8..6a20a20 100644
--- a/clox/src/compiler.c
+++ b/clox/src/compiler.c
@@ -38,7 +38,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() { return compilingChunk; }
@@ -122,6 +134,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
@@ -398,6 +416,8 @@ static ParseRule *getRule(TokenType type) { return &rules[type]; }
bool compile(const char *source, Chunk *chunk) {
initScanner(source);
+ Compiler compiler;
+ initCompiler(&compiler);
compilingChunk = chunk;
parser.hadError = false;