From 96ce1a827185f910ef622cd376bd3ea3240c698b Mon Sep 17 00:00:00 2001 From: Adnan Ioricce Date: Sun, 6 Oct 2024 13:50:40 +0000 Subject: [PATCH] [Chapter14&Chunks] - Starting the new interpreter with chunks of bytecode --- clox/Makefile | 19 +++++++++++++++++++ clox/chunk.c | 36 ++++++++++++++++++++++++++++++++++++ clox/chunk.h | 25 +++++++++++++++++++++++++ clox/chunk.o | Bin 0 -> 7160 bytes clox/clox | Bin 0 -> 27488 bytes clox/common.h | 8 ++++++++ clox/debug.c | 45 +++++++++++++++++++++++++++++++++++++++++++++ clox/debug.h | 9 +++++++++ clox/debug.o | Bin 0 -> 9896 bytes clox/main.c | 16 ++++++++++++++++ clox/main.o | Bin 0 -> 6648 bytes clox/memory.c | 14 ++++++++++++++ clox/memory.h | 18 ++++++++++++++++++ clox/memory.o | Bin 0 -> 4736 bytes clox/value.c | 28 ++++++++++++++++++++++++++++ clox/value.h | 19 +++++++++++++++++++ clox/value.o | Bin 0 -> 6528 bytes 17 files changed, 237 insertions(+) create mode 100644 clox/Makefile create mode 100644 clox/chunk.c create mode 100644 clox/chunk.h create mode 100644 clox/chunk.o create mode 100755 clox/clox create mode 100644 clox/common.h create mode 100644 clox/debug.c create mode 100644 clox/debug.h create mode 100644 clox/debug.o create mode 100644 clox/main.c create mode 100644 clox/main.o create mode 100644 clox/memory.c create mode 100644 clox/memory.h create mode 100644 clox/memory.o create mode 100644 clox/value.c create mode 100644 clox/value.h create mode 100644 clox/value.o diff --git a/clox/Makefile b/clox/Makefile new file mode 100644 index 0000000..a03fdc8 --- /dev/null +++ b/clox/Makefile @@ -0,0 +1,19 @@ +CC = gcc +CFLAGS = -Wall -Wextra -g +SOURCES = main.c chunk.c memory.c debug.c value.c +OBJECTS = $(SOURCES:.c=.o) +EXECUTABLE = clox + +all: $(EXECUTABLE) + +$(EXECUTABLE): $(OBJECTS) + $(CC) $(CFLAGS) -o $@ $(OBJECTS) + +%.o: %.c + $(CC) $(CFLAGS) -c $< -o $@ + +clean: + rm -f $(OBJECTS) $(EXECUTABLE) + +.PHONY: all clean + diff --git a/clox/chunk.c b/clox/chunk.c new file mode 100644 index 0000000..43e3889 --- /dev/null +++ b/clox/chunk.c @@ -0,0 +1,36 @@ +#include + +#include "chunk.h" +#include "memory.h" + +void initChunk(Chunk* chunk) { + chunk->count = 0; + chunk->capacity = 0; + chunk->code = NULL; + chunk->lines = NULL; + initValueArray(&chunk->constants); +} +void freeChunk(Chunk* chunk) { + FREE_ARRAY(uint8_t, chunk->code, chunk->capacity); + FREE_ARRAY(int, chunk->lines, chunk->capacity); + freeValueArray(&chunk->constants); + initChunk(chunk); +} +void writeChunk(Chunk* chunk, uint8_t byte, int line) { + if (chunk->capacity < chunk->count + 1) { + int oldCapacity = chunk->capacity; + chunk->capacity = GROW_CAPACITY(oldCapacity); + chunk->code = GROW_ARRAY(uint8_t, chunk->code, + oldCapacity, chunk->capacity); + chunk->lines = GROW_ARRAY(int, chunk->lines, + oldCapacity, chunk->capacity); + } + + chunk->code[chunk->count] = byte; + chunk->lines[chunk->count] = line; + chunk->count++; +} +int addConstant(Chunk* chunk,Value value){ + writeValueArray(&chunk->constants, value); + return chunk->constants.count - 1; +} diff --git a/clox/chunk.h b/clox/chunk.h new file mode 100644 index 0000000..466898b --- /dev/null +++ b/clox/chunk.h @@ -0,0 +1,25 @@ +#ifndef clox_chunk_h +#define clox_chunk_h + +#include "common.h" +#include "value.h" + +typedef enum { + OP_CONSTANT, + OP_RETURN, +} OpCode; + +typedef struct { + int count; + int capacity; + uint8_t* code; + int* lines; + ValueArray constants; +} Chunk; + +void initChunk(Chunk* chunk); +void freeChunk(Chunk* chunk); +void writeChunk(Chunk* chunk, uint8_t byte, int line); +int addConstant(Chunk* chunk, Value value); + +#endif diff --git a/clox/chunk.o b/clox/chunk.o new file mode 100644 index 0000000000000000000000000000000000000000..ecb512552756c0beaa187977d566d6ee0130970f GIT binary patch literal 7160 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 literal 0 HcmV?d00001 diff --git a/clox/clox b/clox/clox new file mode 100755 index 0000000000000000000000000000000000000000..62fdf89da97f166a69f912f00ae93700e01407c0 GIT binary patch literal 27488 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 literal 0 HcmV?d00001 diff --git a/clox/common.h b/clox/common.h new file mode 100644 index 0000000..c827b76 --- /dev/null +++ b/clox/common.h @@ -0,0 +1,8 @@ +#ifndef clox_common_h +#define clox_common_h + +#include +#include +#include + +#endif diff --git a/clox/debug.c b/clox/debug.c new file mode 100644 index 0000000..eb86d7b --- /dev/null +++ b/clox/debug.c @@ -0,0 +1,45 @@ +#include + +#include "debug.h" +#include "value.h" + +void disassembleChunk(Chunk* chunk, const char* name) { + printf("== %s ==\n", name); + + for (int offset = 0; offset < chunk->count;) { + offset = disassembleInstruction(chunk, offset); + } +} +static int constantInstruction(const char* name, Chunk* chunk, + int offset) { + uint8_t constant = chunk->code[offset + 1]; + printf("%-16s %4d '", name, constant); + printValue(chunk->constants.values[constant]); + printf("'\n"); + return offset + 2; +} +static int simpleInstruction(const char* name, int offset) { + printf("%s\n", name); + return offset + 1; +} +int disassembleInstruction(Chunk* chunk, int offset) { + printf("%04d ", offset); + + if (offset > 0 && + chunk->lines[offset] == chunk->lines[offset - 1]) { + printf(" | "); + } else { + printf("%4d ", chunk->lines[offset]); + } + + uint8_t instruction = chunk->code[offset]; + switch (instruction) { + case OP_CONSTANT: + return constantInstruction("OP_CONSTANT", chunk, offset); + case OP_RETURN: + return simpleInstruction("OP_RETURN", offset); + default: + printf("Unknown opcode %d\n", instruction); + return offset + 1; + } +} diff --git a/clox/debug.h b/clox/debug.h new file mode 100644 index 0000000..5731d05 --- /dev/null +++ b/clox/debug.h @@ -0,0 +1,9 @@ +#ifndef clox_debug_h +#define clox_debug_h + +#include "chunk.h" + +void disassembleChunk(Chunk* chunk, const char* name); +int disassembleInstruction(Chunk* chunk, int offset); + +#endif diff --git a/clox/debug.o b/clox/debug.o new file mode 100644 index 0000000000000000000000000000000000000000..2ac33f9a8ae0168e6ecc1908beeb62bedf708b19 GIT binary patch literal 9896 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 literal 0 HcmV?d00001 diff --git a/clox/main.c b/clox/main.c new file mode 100644 index 0000000..804bc90 --- /dev/null +++ b/clox/main.c @@ -0,0 +1,16 @@ +#include "common.h" +#include "chunk.h" +#include "debug.h" +int main(int argc,const char* argv[]){ + Chunk chunk; + initChunk(&chunk); + int constant = addConstant(&chunk, 1.2); + writeChunk(&chunk, OP_CONSTANT, 123); + writeChunk(&chunk, constant, 123); + + writeChunk(&chunk, OP_RETURN, 123); + disassembleChunk(&chunk, "test chunk"); + freeChunk(&chunk); + return 0; +} + diff --git a/clox/main.o b/clox/main.o new file mode 100644 index 0000000000000000000000000000000000000000..d4ad322ece6454a275f42bf005c427b87767594c GIT binary patch literal 6648 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 aoS)%pqN + +#include "memory.h" + +void* reallocate(void* pointer, size_t oldSize, size_t newSize) { + if (newSize == 0) { + free(pointer); + return NULL; + } + + void* result = realloc(pointer, newSize); + if (result == NULL) exit(1); + return result; +} diff --git a/clox/memory.h b/clox/memory.h new file mode 100644 index 0000000..faec02e --- /dev/null +++ b/clox/memory.h @@ -0,0 +1,18 @@ +#ifndef clox_memory_h +#define clox_memory_h + +#include "common.h" + +#define GROW_CAPACITY(capacity) \ + ((capacity) < 8 ? 8 : (capacity) * 2) + +#define GROW_ARRAY(type, pointer, oldCount, newCount) \ + (type*)reallocate(pointer, sizeof(type) * (oldCount), \ + sizeof(type) * (newCount)) + +#define FREE_ARRAY(type, pointer, oldCount) \ + reallocate(pointer, sizeof(type) * (oldCount), 0) + +void* reallocate(void* pointer, size_t oldSize, size_t newSize); + +#endif diff --git a/clox/memory.o b/clox/memory.o new file mode 100644 index 0000000000000000000000000000000000000000..94c03558ddad2e62cb39543dc66e31525f6b4cc9 GIT binary patch literal 4736 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 MKYm|g7ySJH0#@jf0RR91 literal 0 HcmV?d00001 diff --git a/clox/value.c b/clox/value.c new file mode 100644 index 0000000..5657f68 --- /dev/null +++ b/clox/value.c @@ -0,0 +1,28 @@ +#include + +#include "memory.h" +#include "value.h" + +void initValueArray(ValueArray* array) { + array->values = NULL; + array->capacity = 0; + array->count = 0; +} +void writeValueArray(ValueArray* array, Value value) { + if (array->capacity < array->count + 1) { + int oldCapacity = array->capacity; + array->capacity = GROW_CAPACITY(oldCapacity); + array->values = GROW_ARRAY(Value, array->values, + oldCapacity, array->capacity); + } + + array->values[array->count] = value; + array->count++; +} +void freeValueArray(ValueArray* array) { + FREE_ARRAY(Value, array->values, array->capacity); + initValueArray(array); +} +void printValue(Value value) { + printf("%g", value); +} diff --git a/clox/value.h b/clox/value.h new file mode 100644 index 0000000..86d4b1c --- /dev/null +++ b/clox/value.h @@ -0,0 +1,19 @@ +#ifndef clox_value_h +#define clox_value_h + +#include "common.h" + +typedef double Value; + +typedef struct { + int capacity; + int count; + Value* values; +} ValueArray; + +void initValueArray(ValueArray* array); +void writeValueArray(ValueArray* array, Value value); +void freeValueArray(ValueArray* array); +void printValue(Value value); + +#endif diff --git a/clox/value.o b/clox/value.o new file mode 100644 index 0000000000000000000000000000000000000000..96ee556fd2001884f02b3c0c0a8d918baba6c439 GIT binary patch literal 6528 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 literal 0 HcmV?d00001