# HG changeset patch # User Michael Pavone # Date 1699586527 28800 # Node ID 48cc69b4c3582b7c292e72138304ec224e10a93f # Parent 1e36d8a2633cbf9882a2cd6c64728b7172a07ff2 Add some more builtin functions to debugger language diff -r 1e36d8a2633c -r 48cc69b4c358 debug.c --- a/debug.c Wed Nov 08 23:47:47 2023 -0800 +++ b/debug.c Thu Nov 09 19:22:07 2023 -0800 @@ -135,6 +135,7 @@ array->append = user_array_append; array->size = size; array->storage = size ? size : 4; + array->base = calloc(size, sizeof(debug_val)); debug_val ret; ret.type = DBG_VAL_ARRAY; ret.v.u32 = array - arrays; @@ -204,7 +205,7 @@ }; } -debug_val debug_sin(debug_val *args, int num_args) +static debug_val debug_sin(debug_val *args, int num_args) { float f; if (!debug_cast_float(args[0], &f)) { @@ -213,6 +214,86 @@ return debug_float(sinf(f)); } +static debug_val debug_cos(debug_val *args, int num_args) +{ + float f; + if (!debug_cast_float(args[0], &f)) { + return debug_float(0.0f); + } + return debug_float(cosf(f)); +} + +static debug_val debug_tan(debug_val *args, int num_args) +{ + float f; + if (!debug_cast_float(args[0], &f)) { + return debug_float(0.0f); + } + return debug_float(tanf(f)); +} + +static debug_val debug_asin(debug_val *args, int num_args) +{ + float f; + if (!debug_cast_float(args[0], &f)) { + return debug_float(0.0f); + } + return debug_float(asinf(f)); +} + +static debug_val debug_acos(debug_val *args, int num_args) +{ + float f; + if (!debug_cast_float(args[0], &f)) { + return debug_float(0.0f); + } + return debug_float(acosf(f)); +} + +static debug_val debug_atan(debug_val *args, int num_args) +{ + float f; + if (!debug_cast_float(args[0], &f)) { + return debug_float(0.0f); + } + return debug_float(atanf(f)); +} + +static debug_val debug_atan2(debug_val *args, int num_args) +{ + float f, f2; + if (!debug_cast_float(args[0], &f)) { + return debug_float(0.0f); + } + if (!debug_cast_float(args[1], &f2)) { + return debug_float(0.0f); + } + return debug_float(atan2f(f, f2)); +} + +static debug_val array_pop(debug_val *args, int num_args) +{ + debug_array *array = get_array(*args); + if (!array) { + return debug_int(0); + } + debug_val ret = array->get(array, array->size - 1); + if (array->append) { + array->size--; + } + return ret; +} + +static debug_val debug_size(debug_val *args, int num_args) +{ + debug_array *array = get_array(*args); + if (!array) { + //TODO: string support + return debug_int(0); + } + return debug_int(array->size); +} + static debug_root *roots; static uint32_t num_roots, root_storage; @@ -232,6 +313,14 @@ memset(root, 0, sizeof(debug_root)); root->cpu_context = cpu; new_readonly_variable(root, "sin", new_native_func(debug_sin, 1, 1)); + new_readonly_variable(root, "cos", new_native_func(debug_cos, 1, 1)); + new_readonly_variable(root, "tan", new_native_func(debug_tan, 1, 1)); + new_readonly_variable(root, "asin", new_native_func(debug_asin, 1, 1)); + new_readonly_variable(root, "acos", new_native_func(debug_acos, 1, 1)); + new_readonly_variable(root, "atan", new_native_func(debug_atan, 1, 1)); + new_readonly_variable(root, "atan2", new_native_func(debug_atan2, 2, 2)); + new_readonly_variable(root, "pop", new_native_func(array_pop, 1, 1)); + new_readonly_variable(root, "size", new_native_func(debug_size, 1, 1)); return root; } @@ -2699,7 +2788,7 @@ array->base = realloc(array->base, sizeof(debug_val) * array->storage); } } - for (uint32_t i = 1; i < cmd->num_args && i < array->size; i++) + for (uint32_t i = 1; i < cmd->num_args && i <= array->size; i++) { if (!eval_expr(root, cmd->args[i].parsed, &cmd->args[i].value)) { fprintf(stderr, "Failed to eval %s\n", cmd->args[i].raw);