From 2a564ef51f84601c52fdeecc4430d406f430023e Mon Sep 17 00:00:00 2001 From: Richard Ore Date: Thu, 22 Aug 2024 08:14:18 +0100 Subject: [PATCH] critical sqlite bug fix and stack size increase --- packages/json/json.c | 4 ++-- packages/sqlite/sqlite.c | 3 ++- src/common.h | 2 +- src/compiler.c | 7 ++----- src/compiler.h | 2 +- src/file.c | 2 +- src/standard/reflect.c | 5 +---- src/vm.c | 6 +----- 8 files changed, 11 insertions(+), 20 deletions(-) diff --git a/packages/json/json.c b/packages/json/json.c index 80483d35..33f22215 100644 --- a/packages/json/json.c +++ b/packages/json/json.c @@ -9,9 +9,9 @@ b_value get_blade_value(b_vm *vm, json_value * data) { b_obj_dict *dict = (b_obj_dict*)GC(new_dict(vm)); value = OBJ_VAL(dict); for (int i = 0; i < data->u.object.length; i++) { - b_obj_string *name = (b_obj_string *)GC(copy_string(vm, data->u.object.values[i].name, strlen(data->u.object.values[i].name))); + b_value name = GC_STRING(data->u.object.values[i].name); b_value _value = get_blade_value(vm, data->u.object.values[i].value); - dict_set_entry(vm, dict, OBJ_VAL(name), _value); + dict_set_entry(vm, dict, name, _value); } break; } diff --git a/packages/sqlite/sqlite.c b/packages/sqlite/sqlite.c index 48c73246..b982b129 100644 --- a/packages/sqlite/sqlite.c +++ b/packages/sqlite/sqlite.c @@ -112,7 +112,8 @@ DECLARE_MODULE_METHOD(sqlite__exec) { } if(sqlite3_step(stmt) != SQLITE_DONE) { - RETURN_STRING("exec failed!"); + const char *error = sqlite3_errmsg(db); + RETURN_STRING(error); } sqlite3_finalize(stmt); diff --git a/src/common.h b/src/common.h index dbd1c8c4..84991ca6 100644 --- a/src/common.h +++ b/src/common.h @@ -50,7 +50,7 @@ #define UINT8_COUNT (UINT8_MAX + 1) #define UINT16_COUNT (UINT16_MAX + 1) -#define STACK_MAX (FRAMES_MAX * UINT8_COUNT) +#define STACK_MAX (FRAMES_MAX * UINT16_COUNT) #if defined(__unix__) || (defined(__APPLE__) && defined(__MACH__)) #define IS_UNIX diff --git a/src/compiler.c b/src/compiler.c index 9a1955b9..72d8269e 100644 --- a/src/compiler.c +++ b/src/compiler.c @@ -2223,13 +2223,10 @@ static void import_statement(b_parser *p) { return; } - b_blob blob; - init_blob(&blob); - b_obj_module *module = new_module(p->vm, module_name, module_path); push(p->vm, OBJ_VAL(module)); - b_obj_func *function = compile(p->vm, module, source, &blob); + b_obj_func *function = compile(p->vm, module, source); pop(p->vm); free(source); @@ -2566,7 +2563,7 @@ static void statement(b_parser *p) { ignore_whitespace(p); } -b_obj_func *compile(b_vm *vm, b_obj_module *module, const char *source, b_blob *blob) { +b_obj_func *compile(b_vm *vm, b_obj_module *module, const char *source) { b_scanner scanner; init_scanner(&scanner, source); diff --git a/src/compiler.h b/src/compiler.h index 002192e9..00ffaf11 100644 --- a/src/compiler.h +++ b/src/compiler.h @@ -88,7 +88,7 @@ typedef struct { b_precedence precedence; } b_parse_rule; -b_obj_func *compile(b_vm *vm, b_obj_module *module, const char *source, b_blob *blob); +b_obj_func *compile(b_vm *vm, b_obj_module *module, const char *source); void mark_compiler_roots(b_vm *vm); diff --git a/src/file.c b/src/file.c index 35e6b9ef..89836f6b 100644 --- a/src/file.c +++ b/src/file.c @@ -107,7 +107,7 @@ DECLARE_NATIVE(file) { ENFORCE_ARG_TYPE(file, 1, IS_STRING); mode = AS_STRING(args[1]); } else { - mode = (b_obj_string *) GC(copy_string(vm, "r", 1)); + mode = (b_obj_string *) GC(take_string(vm, strdup("r"), 1)); } b_obj_file *file = (b_obj_file*)GC(new_file(vm, path, mode)); diff --git a/src/standard/reflect.c b/src/standard/reflect.c index d927af2c..eddd2c87 100644 --- a/src/standard/reflect.c +++ b/src/standard/reflect.c @@ -280,14 +280,11 @@ DECLARE_MODULE_METHOD(reflect__runscript) { char *path = AS_C_STRING(args[0]); char *source = AS_C_STRING(args[1]); - b_blob blob; - init_blob(&blob); - b_obj_module *module = vm->current_frame->closure->function->module; char *module_file = module->file; module->file = path; - b_obj_func *fn = compile(vm, module, source, &blob); + b_obj_func *fn = compile(vm, module, source); module->file = module_file; if(fn != NULL) { diff --git a/src/vm.c b/src/vm.c index 599d8788..152e5168 100644 --- a/src/vm.c +++ b/src/vm.c @@ -2541,21 +2541,17 @@ bool queue_closure(b_vm *vm, b_obj_closure *closure) { } b_ptr_result interpret(b_vm *vm, b_obj_module *module, const char *source) { - b_blob blob; - init_blob(&blob); - if(vm->exception_class == NULL) { initialize_exceptions(vm, module); } - b_obj_func *function = compile(vm, module, source, &blob); + b_obj_func *function = compile(vm, module, source); if (vm->should_exit_after_bytecode) { return PTR_OK; } if (function == NULL) { - free_blob(vm, &blob); return PTR_COMPILE_ERR; }