mirror of
https://github.com/krgamestudios/Toy.git
synced 2026-04-15 14:54:07 +10:00
Fixed buffer overflow, bytecode is WIP
This commit is contained in:
@@ -1,13 +1,14 @@
|
||||
#include "toy_bytecode.h"
|
||||
|
||||
#include "toy_memory.h"
|
||||
#include "toy_routine.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
//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
|
||||
|
||||
@@ -6,8 +6,8 @@
|
||||
#include <string.h>
|
||||
|
||||
//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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user