fix gc bug

This commit is contained in:
2026-02-25 23:26:04 -06:00
parent 15adefbad2
commit 5bfae42ceb
2 changed files with 26 additions and 15 deletions

View File

@@ -70,7 +70,8 @@ JSC_CCALL(clipboard_get_mime_types,
JS_FRAME(js);
JS_LOCAL(arr, JS_NewArray(js));
for (size_t i = 0; i < count; i++) {
JS_SetPropertyNumber(js, arr, i, JS_NewString(js, types[i]));
JSValue s = JS_NewString(js, types[i]);
JS_SetPropertyNumber(js, arr, i, s);
}
SDL_free(types);
JS_RETURN(arr);

38
gpu.c
View File

@@ -882,12 +882,13 @@ JSC_CCALL(gpu_shader_format,
JS_FRAME(js);
JS_LOCAL(arr, JS_NewArray(js));
int i = 0;
if (fmt & SDL_GPU_SHADERFORMAT_PRIVATE) JS_SetPropertyNumber(js, arr, i++, JS_NewString(js, ".private"));
if (fmt & SDL_GPU_SHADERFORMAT_SPIRV) JS_SetPropertyNumber(js, arr, i++, JS_NewString(js, "spv"));
if (fmt & SDL_GPU_SHADERFORMAT_DXBC) JS_SetPropertyNumber(js, arr, i++, JS_NewString(js, "dxbc"));
if (fmt & SDL_GPU_SHADERFORMAT_DXIL) JS_SetPropertyNumber(js, arr, i++, JS_NewString(js, "dxil"));
if (fmt & SDL_GPU_SHADERFORMAT_MSL) JS_SetPropertyNumber(js, arr, i++, JS_NewString(js, "msl"));
if (fmt & SDL_GPU_SHADERFORMAT_METALLIB) JS_SetPropertyNumber(js, arr, i++, JS_NewString(js, "metallib"));
JSValue tmp;
if (fmt & SDL_GPU_SHADERFORMAT_PRIVATE) { tmp = JS_NewString(js, ".private"); JS_SetPropertyNumber(js, arr, i++, tmp); }
if (fmt & SDL_GPU_SHADERFORMAT_SPIRV) { tmp = JS_NewString(js, "spv"); JS_SetPropertyNumber(js, arr, i++, tmp); }
if (fmt & SDL_GPU_SHADERFORMAT_DXBC) { tmp = JS_NewString(js, "dxbc"); JS_SetPropertyNumber(js, arr, i++, tmp); }
if (fmt & SDL_GPU_SHADERFORMAT_DXIL) { tmp = JS_NewString(js, "dxil"); JS_SetPropertyNumber(js, arr, i++, tmp); }
if (fmt & SDL_GPU_SHADERFORMAT_MSL) { tmp = JS_NewString(js, "msl"); JS_SetPropertyNumber(js, arr, i++, tmp); }
if (fmt & SDL_GPU_SHADERFORMAT_METALLIB) { tmp = JS_NewString(js, "metallib"); JS_SetPropertyNumber(js, arr, i++, tmp); }
JS_RestoreFrame(_js_ctx, _js_gc_frame, _js_local_frame);
ret = arr;
)
@@ -1804,16 +1805,25 @@ CELL_USE_INIT(
JS_LOCAL(ret, JS_NewObject(js));
// Create GPU constructor
JS_SetPropertyStr(js, ret, "gpu", JS_NewCFunction2(js, js_gpu_constructor, "gpu", 1, JS_CFUNC_generic, 0));
JSValue fn;
fn = JS_NewCFunction2(js, js_gpu_constructor, "gpu", 1, JS_CFUNC_generic, 0);
JS_SetPropertyStr(js, ret, "gpu", fn);
// Add GPU object constructors
JS_SetPropertyStr(js, ret, "sampler", JS_NewCFunction2(js, js_gpu_sampler_constructor, "sampler", 2, JS_CFUNC_generic, 0));
JS_SetPropertyStr(js, ret, "shader", JS_NewCFunction2(js, js_gpu_shader_constructor, "shader", 2, JS_CFUNC_generic, 0));
JS_SetPropertyStr(js, ret, "graphics_pipeline", JS_NewCFunction2(js, js_gpu_graphics_pipeline_constructor, "graphics_pipeline", 2, JS_CFUNC_generic, 0));
JS_SetPropertyStr(js, ret, "compute_pipeline", JS_NewCFunction2(js, js_gpu_compute_pipeline_constructor, "compute_pipeline", 2, JS_CFUNC_generic, 0));
JS_SetPropertyStr(js, ret, "buffer", JS_NewCFunction2(js, js_gpu_buffer_constructor, "buffer", 2, JS_CFUNC_generic, 0));
JS_SetPropertyStr(js, ret, "transfer_buffer", JS_NewCFunction2(js, js_gpu_transfer_buffer_constructor, "transfer_buffer", 2, JS_CFUNC_generic, 0));
JS_SetPropertyStr(js, ret, "texture", JS_NewCFunction2(js, js_gpu_texture_constructor, "texture", 2, JS_CFUNC_generic, 0));
fn = JS_NewCFunction2(js, js_gpu_sampler_constructor, "sampler", 2, JS_CFUNC_generic, 0);
JS_SetPropertyStr(js, ret, "sampler", fn);
fn = JS_NewCFunction2(js, js_gpu_shader_constructor, "shader", 2, JS_CFUNC_generic, 0);
JS_SetPropertyStr(js, ret, "shader", fn);
fn = JS_NewCFunction2(js, js_gpu_graphics_pipeline_constructor, "graphics_pipeline", 2, JS_CFUNC_generic, 0);
JS_SetPropertyStr(js, ret, "graphics_pipeline", fn);
fn = JS_NewCFunction2(js, js_gpu_compute_pipeline_constructor, "compute_pipeline", 2, JS_CFUNC_generic, 0);
JS_SetPropertyStr(js, ret, "compute_pipeline", fn);
fn = JS_NewCFunction2(js, js_gpu_buffer_constructor, "buffer", 2, JS_CFUNC_generic, 0);
JS_SetPropertyStr(js, ret, "buffer", fn);
fn = JS_NewCFunction2(js, js_gpu_transfer_buffer_constructor, "transfer_buffer", 2, JS_CFUNC_generic, 0);
JS_SetPropertyStr(js, ret, "transfer_buffer", fn);
fn = JS_NewCFunction2(js, js_gpu_texture_constructor, "texture", 2, JS_CFUNC_generic, 0);
JS_SetPropertyStr(js, ret, "texture", fn);
JS_RETURN(ret);
)