diff --git a/src/glfw/main.c b/src/glfw/main.c index 09429bb2..acb9ab64 100644 --- a/src/glfw/main.c +++ b/src/glfw/main.c @@ -286,13 +286,13 @@ static void parseCommandLineArgs(CommandLineArgs* args, int argc, char* argv[]) break; case 'f': { char* endPtr; - long frame = strtol(optarg, &endPtr, 10); + int frame = strtol(optarg, &endPtr, 10); if (*endPtr != '\0' || 0 > frame) { fprintf(stderr, "Error: Invalid frame number '%s'\n", optarg); exit(1); } - hmput(args->screenshotFrames, (int) frame, true); + hmput(args->screenshotFrames, frame, true); break; } case 'U': @@ -300,12 +300,12 @@ static void parseCommandLineArgs(CommandLineArgs* args, int argc, char* argv[]) break; case 'V': { char* endPtr; - long frame = strtol(optarg, &endPtr, 10); + int frame = strtol(optarg, &endPtr, 10); if (*endPtr != '\0' || 0 > frame) { fprintf(stderr, "Error: Invalid frame number '%s' for --screenshot-surfaces-at-frame\n", optarg); exit(1); } - hmput(args->screenshotSurfacesFrames, (int) frame, true); + hmput(args->screenshotSurfacesFrames, frame, true); break; } case 'h': @@ -361,42 +361,42 @@ static void parseCommandLineArgs(CommandLineArgs* args, int argc, char* argv[]) break; case 'x': { char* endPtr; - long frame = strtol(optarg, &endPtr, 10); + int frame = strtol(optarg, &endPtr, 10); if (*endPtr != '\0' || 0 > frame) { fprintf(stderr, "Error: Invalid frame number '%s' for --exit-at-frame\n", optarg); exit(1); } - args->exitAtFrame = (int) frame; + args->exitAtFrame = frame; break; } case 'F': { char* endPtr; - long frame = strtol(optarg, &endPtr, 10); + int frame = strtol(optarg, &endPtr, 10); if (*endPtr != '\0' || 0 > frame) { fprintf(stderr, "Error: Invalid frame number '%s' for --trace-bytecode-after-frame\n", optarg); exit(1); } - args->traceBytecodeAfterFrame = (int) frame; + args->traceBytecodeAfterFrame = frame; break; } case 'd': { char* endPtr; - long frame = strtol(optarg, &endPtr, 10); + int frame = strtol(optarg, &endPtr, 10); if (*endPtr != '\0' || 0 > frame) { fprintf(stderr, "Error: Invalid frame number '%s' for --dump-frame\n", optarg); exit(1); } - hmput(args->dumpFrames, (int) frame, true); + hmput(args->dumpFrames, frame, true); break; } case 'j': { char* endPtr; - long frame = strtol(optarg, &endPtr, 10); + int frame = strtol(optarg, &endPtr, 10); if (*endPtr != '\0' || 0 > frame) { fprintf(stderr, "Error: Invalid frame number '%s' for --dump-frame-json\n", optarg); exit(1); } - hmput(args->dumpJsonFrames, (int) frame, true); + hmput(args->dumpJsonFrames, frame, true); break; } case 'J': @@ -445,12 +445,12 @@ static void parseCommandLineArgs(CommandLineArgs* args, int argc, char* argv[]) break; case 'Z': { char* endPtr; - long seedVal = strtol(optarg, &endPtr, 10); + int seedVal = strtol(optarg, &endPtr, 10); if (*endPtr != '\0') { fprintf(stderr, "Error: Invalid seed value '%s' for --seed\n", optarg); exit(1); } - args->seed = (int) seedVal; + args->seed = seedVal; args->hasSeed = true; break; } @@ -462,12 +462,12 @@ static void parseCommandLineArgs(CommandLineArgs* args, int argc, char* argv[]) break; case 'q': { char* endPtr; - long framesBetween = strtol(optarg, &endPtr, 10); + int framesBetween = strtol(optarg, &endPtr, 10); if (*endPtr != '\0' || framesBetween <= 0) { fprintf(stderr, "Error: Invalid frame count '%s' for --profile-gml-scripts (must be > 0)\n", optarg); exit(1); } - args->profilerFramesBetween = (int) framesBetween; + args->profilerFramesBetween = framesBetween; break; } case 'B': diff --git a/src/renderer.h b/src/renderer.h index 453abac5..4f2e4e1b 100644 --- a/src/renderer.h +++ b/src/renderer.h @@ -45,7 +45,10 @@ // ===[ Renderer Vtable ]=== typedef struct Renderer Renderer; +#ifndef RUNNER_DEFINED +#define RUNNER_DEFINED typedef struct Runner Runner; +#endif typedef struct { void (*init)(Renderer* renderer, DataWin* dataWin); diff --git a/src/sdl/main.c b/src/sdl/main.c index 3a837a22..66758f55 100644 --- a/src/sdl/main.c +++ b/src/sdl/main.c @@ -220,13 +220,13 @@ static void parseCommandLineArgs(CommandLineArgs* args, int argc, char* argv[]) break; case 'f': { char* endPtr; - long frame = strtol(optarg, &endPtr, 10); + int frame = strtol(optarg, &endPtr, 10); if (*endPtr != '\0' || 0 > frame) { fprintf(stderr, "Error: Invalid frame number '%s'\n", optarg); exit(1); } - hmput(args->screenshotFrames, (int) frame, true); + hmput(args->screenshotFrames, frame, true); break; } case 'U': @@ -234,12 +234,12 @@ static void parseCommandLineArgs(CommandLineArgs* args, int argc, char* argv[]) break; case 'V': { char* endPtr; - long frame = strtol(optarg, &endPtr, 10); + int frame = strtol(optarg, &endPtr, 10); if (*endPtr != '\0' || 0 > frame) { fprintf(stderr, "Error: Invalid frame number '%s' for --screenshot-surfaces-at-frame\n", optarg); exit(1); } - hmput(args->screenshotSurfacesFrames, (int) frame, true); + hmput(args->screenshotSurfacesFrames, frame, true); break; } case 'h': @@ -289,42 +289,42 @@ static void parseCommandLineArgs(CommandLineArgs* args, int argc, char* argv[]) break; case 'x': { char* endPtr; - long frame = strtol(optarg, &endPtr, 10); + int frame = strtol(optarg, &endPtr, 10); if (*endPtr != '\0' || 0 > frame) { fprintf(stderr, "Error: Invalid frame number '%s' for --exit-at-frame\n", optarg); exit(1); } - args->exitAtFrame = (int) frame; + args->exitAtFrame = frame; break; } case 'F': { char* endPtr; - long frame = strtol(optarg, &endPtr, 10); + int frame = strtol(optarg, &endPtr, 10); if (*endPtr != '\0' || 0 > frame) { fprintf(stderr, "Error: Invalid frame number '%s' for --trace-bytecode-after-frame\n", optarg); exit(1); } - args->traceBytecodeAfterFrame = (int) frame; + args->traceBytecodeAfterFrame = frame; break; } case 'd': { char* endPtr; - long frame = strtol(optarg, &endPtr, 10); + int frame = strtol(optarg, &endPtr, 10); if (*endPtr != '\0' || 0 > frame) { fprintf(stderr, "Error: Invalid frame number '%s' for --dump-frame\n", optarg); exit(1); } - hmput(args->dumpFrames, (int) frame, true); + hmput(args->dumpFrames, frame, true); break; } case 'j': { char* endPtr; - long frame = strtol(optarg, &endPtr, 10); + int frame = strtol(optarg, &endPtr, 10); if (*endPtr != '\0' || 0 > frame) { fprintf(stderr, "Error: Invalid frame number '%s' for --dump-frame-json\n", optarg); exit(1); } - hmput(args->dumpJsonFrames, (int) frame, true); + hmput(args->dumpJsonFrames, frame, true); break; } case 'J': @@ -373,12 +373,12 @@ static void parseCommandLineArgs(CommandLineArgs* args, int argc, char* argv[]) break; case 'Z': { char* endPtr; - long seedVal = strtol(optarg, &endPtr, 10); + int seedVal = strtol(optarg, &endPtr, 10); if (*endPtr != '\0') { fprintf(stderr, "Error: Invalid seed value '%s' for --seed\n", optarg); exit(1); } - args->seed = (int) seedVal; + args->seed = seedVal; args->hasSeed = true; break; } @@ -390,12 +390,12 @@ static void parseCommandLineArgs(CommandLineArgs* args, int argc, char* argv[]) break; case 'q': { char* endPtr; - long framesBetween = strtol(optarg, &endPtr, 10); + int framesBetween = strtol(optarg, &endPtr, 10); if (*endPtr != '\0' || framesBetween <= 0) { fprintf(stderr, "Error: Invalid frame count '%s' for --profile-gml-scripts (must be > 0)\n", optarg); exit(1); } - args->profilerFramesBetween = (int) framesBetween; + args->profilerFramesBetween = framesBetween; break; } case 'B': diff --git a/src/spatial_grid.h b/src/spatial_grid.h index 2795c99b..44e04e51 100644 --- a/src/spatial_grid.h +++ b/src/spatial_grid.h @@ -2,7 +2,10 @@ #include // Forward declarations +#ifndef RUNNER_DEFINED +#define RUNNER_DEFINED typedef struct Runner Runner; +#endif #include "instance.h" #include "real_type.h" @@ -82,4 +85,4 @@ typedef struct { uint32_t queryId; } SpatialGridQuery; -SpatialGridQuery SpatialGrid_prepareQuery(Runner* runner, GMLReal x1, GMLReal y1, GMLReal x2, GMLReal y2, int32_t target); \ No newline at end of file +SpatialGridQuery SpatialGrid_prepareQuery(Runner* runner, GMLReal x1, GMLReal y1, GMLReal x2, GMLReal y2, int32_t target); diff --git a/src/vm.c b/src/vm.c index 14c585d2..cddfda38 100644 --- a/src/vm.c +++ b/src/vm.c @@ -1207,9 +1207,7 @@ static void handlePush(VMContext* ctx, uint32_t instr, const uint8_t* extraData, RValue_free(topSlot); GMLArray* sub = GMLArray_create(0); sub->owner = top->owner; - RValue rv = { .type = RVALUE_ARRAY, .ownsReference = true, .gmlStackType = GML_TYPE_VARIABLE }; - rv.array = sub; - *topSlot = rv; + *topSlot = RValue_makeArray(sub); } // Push a weak ref to the sub-array — short-lived, consumed by the next BREAK op. stackPush(ctx, RValue_makeArrayWeak(topSlot->array)); @@ -2631,9 +2629,7 @@ static void handleBreakPushAC(VMContext* ctx, uint32_t instrAddr) { RValue_free(parentSlot); GMLArray* sub = GMLArray_create(0); sub->owner = parent->owner; - RValue rv = { .type = RVALUE_ARRAY, .ownsReference = true, .gmlStackType = GML_TYPE_VARIABLE }; - rv.array = sub; - *parentSlot = rv; + *parentSlot = RValue_makeArray(sub); } stackPush(ctx, RValue_makeArrayWeak(parentSlot->array)); RValue_free(&arrayRef); diff --git a/src/vm_builtins.c b/src/vm_builtins.c index 3a0cf58a..4471aef9 100644 --- a/src/vm_builtins.c +++ b/src/vm_builtins.c @@ -7234,6 +7234,7 @@ static RValue builtin_draw_healthbar(VMContext* ctx, RValue* args, MAYBE_UNUSED } runner->renderer->vtable->drawRectangle(runner->renderer,x1,y1,healthbarX,y2,intermediateColor, runner->renderer->drawAlpha, false); + return RValue_makeUndefined(); } static RValue builtin_draw_set_color(VMContext* ctx, RValue* args, MAYBE_UNUSED int32_t argCount) { diff --git a/vendor/stb/ds/stb_ds.h b/vendor/stb/ds/stb_ds.h index b7bdd52b..4b3a5185 100644 --- a/vendor/stb/ds/stb_ds.h +++ b/vendor/stb/ds/stb_ds.h @@ -513,7 +513,7 @@ extern void * stbds_shmode_func(size_t elemsize, int mode); #endif #if !defined(__cplusplus) -#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L +#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L && (!defined(__GNUC__) || (__GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1))) #define STBDS_HAS_LITERAL_ARRAY #endif #endif