diff --git a/source/toy_bytecode.c b/source/toy_bytecode.c index a834152..8703d97 100644 --- a/source/toy_bytecode.c +++ b/source/toy_bytecode.c @@ -1,13 +1,14 @@ #include "toy_bytecode.h" #include "toy_memory.h" +#include "toy_routine.h" #include #include //utils static void expand(Toy_Bytecode* bc, int amount) { - if (bc->count + amount > bc->capacity) { + while (bc->count + amount > bc->capacity) { int oldCapacity = bc->capacity; bc->capacity = TOY_GROW_CAPACITY(oldCapacity); @@ -21,7 +22,7 @@ static void emitByte(Toy_Bytecode* bc, unsigned char byte) { } static void writeModule(Toy_Bytecode* bc, Toy_Ast* ast) { - // + //TODO: routines } //bytecode diff --git a/source/toy_routine.c b/source/toy_routine.c index 1cb346c..eaa51af 100644 --- a/source/toy_routine.c +++ b/source/toy_routine.c @@ -6,8 +6,8 @@ #include //utils -static void expand(void** handle, int* capacity, int* count) { - if ((*count) +1 > (*capacity)) { +static void expand(void** handle, int* capacity, int* count, int amount) { + while ((*count) + amount > (*capacity)) { int oldCapacity = (*capacity); (*capacity) = TOY_GROW_CAPACITY(oldCapacity); @@ -16,7 +16,7 @@ static void expand(void** handle, int* capacity, int* count) { } static void emitByte(void** handle, int* capacity, int* count, unsigned char byte) { - expand(handle, capacity, count); + expand(handle, capacity, count, 1); ((unsigned char*)(*handle))[(*count)++] = byte; } diff --git a/tests/cases/test_bytecode.c b/tests/cases/test_bytecode.c index 4694426..8fbed51 100644 --- a/tests/cases/test_bytecode.c +++ b/tests/cases/test_bytecode.c @@ -24,6 +24,9 @@ int test_bytecode_header(Toy_Bucket* bucket) { fprintf(stderr, TOY_CC_ERROR "ERROR: failed to write the bytecode header correctly:\n" TOY_CC_RESET); fprintf(stderr, TOY_CC_ERROR "\t%d.%d.%d.%s\n" TOY_CC_RESET, bc.ptr[0], bc.ptr[1], bc.ptr[2], (char*)(bc.ptr + 3)); fprintf(stderr, TOY_CC_ERROR "\t%d.%d.%d.%s\n" TOY_CC_RESET, TOY_VERSION_MAJOR, TOY_VERSION_MINOR, TOY_VERSION_PATCH, TOY_VERSION_BUILD); + + //cleanup and return + Toy_freeBytecode(bc); return -1; } @@ -35,6 +38,8 @@ int test_bytecode_header(Toy_Bucket* bucket) { } int main() { + fprintf(stderr, TOY_CC_WARN "WARNING: Bytecode implementation incomplete\n" TOY_CC_RESET); + //run each test set, returning the total errors given int total = 0, res = 0;