Skip to content

Commit 4fd946a

Browse files
committed
working js cart
1 parent 95208c6 commit 4fd946a

5 files changed

Lines changed: 136 additions & 31 deletions

File tree

carts/js/demo/.cartignore

Lines changed: 0 additions & 2 deletions
This file was deleted.

carts/js/input/.cartignore

Lines changed: 0 additions & 2 deletions
This file was deleted.

tools/docker/null0-cart-quickjs.Dockerfile

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,14 @@ COPY tools/docker/quickjs-cart.c /tmp/quickjs-master/qjs.c
99

1010
# build cart wasm & wipe source
1111
RUN cd /tmp/quickjs-master && \
12-
ls /usr/local/include && \
13-
/opt/wasi-sdk/bin/clang -O3 -Wl,--initial-memory=1310720 -Wl,--max-memory=13107200 -D_WASI_EMULATED_SIGNAL -DCONFIG_VERSION=wasi -DCONFIG_BIGNUM=y -DCONFIG_WASI=y -I /usr/local/include -o /usr/local/lib/main.wasm qjs.c libunicode.c cutils.c libregexp.c quickjs.c quickjs-libc.c && \
12+
cmake -B build -DCMAKE_TOOLCHAIN_FILE=/opt/wasi-sdk/share/cmake/wasi-sdk.cmake \
13+
-DCMAKE_BUILD_TYPE=Release \
14+
-DBUILD_SHARED_LIBS=OFF \
15+
-DQJS_BUILD_EXAMPLES=OFF \
16+
-DCMAKE_C_FLAGS="-I/usr/local/include" \
17+
-DCMAKE_EXE_LINKER_FLAGS="-Wl,--initial-memory=67108864,--max-memory=67108864,-z,stack-size=8388608" && \
18+
cmake --build build --target qjs_exe && \
19+
mv build/qjs /usr/local/lib/main.wasm && \
1420
rm -rf /tmp/quickjs-master /tmp/quickjs-ng.zip
1521

1622
ENTRYPOINT ["build_quickjs.sh"]

tools/docker/quickjs-cart.c

Lines changed: 65 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -54,14 +54,15 @@ int main(int argc, char* argv[]) {
5454
"cart?.load && cart.load();\n";
5555

5656
JSValue std_val = JS_Eval(ctx, str, strlen(str), "<CART>", JS_EVAL_TYPE_MODULE);
57-
std_val = js_std_await(ctx, std_val);
5857

5958
if (!JS_IsException(std_val)) {
6059
js_module_set_import_meta(ctx, std_val, true, true);
6160
std_val = JS_EvalFunction(ctx, std_val);
6261
} else {
6362
js_std_dump_error(ctx);
6463
}
64+
65+
std_val = js_std_await(ctx, std_val);
6566

6667
JS_FreeValue(ctx, std_val);
6768
}
@@ -187,8 +188,8 @@ static uint64_t u64_from_js(JSValue val) {
187188
return result;
188189
}
189190

190-
static const char* string_from_js(JSValue val) {
191-
return JS_ToCString(ctx, val);
191+
static char* string_from_js(JSValue val) {
192+
return (char*)JS_ToCString(ctx, val);
192193
}
193194

194195
static JSValue dimensions_to_js(Dimensions dims) {
@@ -223,7 +224,7 @@ static JSValue color_to_js(Color color) {
223224
return obj;
224225
}
225226

226-
static Vector* vector_array_from_js(JSValue vecArray, uint32_t* lenPointer) {
227+
static Vector* vector_array_from_js(JSValue vecArray, size_t* lenPointer) {
227228
// Check if the input is actually an array
228229
if (!JS_IsArray(vecArray)) {
229230
return NULL;
@@ -237,7 +238,7 @@ static Vector* vector_array_from_js(JSValue vecArray, uint32_t* lenPointer) {
237238

238239
if (len == 0) return NULL;
239240

240-
*lenPointer = len;
241+
*lenPointer = (size_t)len;
241242

242243
// Allocate memory for the Vector array (caller must free)
243244
Vector *vecs = malloc(len * sizeof(Vector));
@@ -268,33 +269,33 @@ static Vector* vector_array_from_js(JSValue vecArray, uint32_t* lenPointer) {
268269
}
269270

270271

271-
static Dimensions dimensions_from_js(JSValue obj) {
272+
__attribute__((unused)) static Dimensions dimensions_from_js(JSValue obj) {
272273
Dimensions dims = {0, 0}; // Default values
273-
274+
274275
JSValue width_val = JS_GetPropertyStr(ctx, obj, "width");
275276
JSValue height_val = JS_GetPropertyStr(ctx, obj, "height");
276-
277+
277278
JS_ToUint32(ctx, &dims.width, width_val);
278279
JS_ToUint32(ctx, &dims.height, height_val);
279-
280+
280281
JS_FreeValue(ctx, width_val);
281282
JS_FreeValue(ctx, height_val);
282283
return dims;
283284
}
284285

285-
static Rectangle rectangle_from_js(JSValue obj) {
286+
__attribute__((unused)) static Rectangle rectangle_from_js(JSValue obj) {
286287
Rectangle rect = {0, 0, 0, 0}; // Default values
287-
288+
288289
JSValue x_val = JS_GetPropertyStr(ctx, obj, "x");
289290
JSValue y_val = JS_GetPropertyStr(ctx, obj, "y");
290291
JSValue width_val = JS_GetPropertyStr(ctx, obj, "width");
291292
JSValue height_val = JS_GetPropertyStr(ctx, obj, "height");
292-
293+
293294
JS_ToInt32(ctx, &rect.x, x_val);
294295
JS_ToInt32(ctx, &rect.y, y_val);
295296
JS_ToInt32(ctx, &rect.width, width_val);
296297
JS_ToInt32(ctx, &rect.height, height_val);
297-
298+
298299
JS_FreeValue(ctx, x_val);
299300
JS_FreeValue(ctx, y_val);
300301
JS_FreeValue(ctx, width_val);
@@ -349,6 +350,57 @@ static SfxParams sfx_params_from_js(JSValue obj) {
349350
JSValue lpfResonance_val = JS_GetPropertyStr(ctx, obj, "lpfResonance");
350351
JSValue hpfCutoff_val = JS_GetPropertyStr(ctx, obj, "hpfCutoff");
351352
JSValue hpfCutoffSweep_val = JS_GetPropertyStr(ctx, obj, "hpfCutoffSweep");
353+
354+
JS_ToUint32(ctx, &params.randSeed, randSeed_val);
355+
JS_ToInt32(ctx, &params.waveType, waveType_val);
356+
JS_ToFloat64(ctx, (double*)&params.attackTime, attackTime_val);
357+
JS_ToFloat64(ctx, (double*)&params.sustainTime, sustainTime_val);
358+
JS_ToFloat64(ctx, (double*)&params.sustainPunch, sustainPunch_val);
359+
JS_ToFloat64(ctx, (double*)&params.decayTime, decayTime_val);
360+
JS_ToFloat64(ctx, (double*)&params.startFrequency, startFrequency_val);
361+
JS_ToFloat64(ctx, (double*)&params.minFrequency, minFrequency_val);
362+
JS_ToFloat64(ctx, (double*)&params.slide, slide_val);
363+
JS_ToFloat64(ctx, (double*)&params.deltaSlide, deltaSlide_val);
364+
JS_ToFloat64(ctx, (double*)&params.vibratoDepth, vibratoDepth_val);
365+
JS_ToFloat64(ctx, (double*)&params.vibratoSpeed, vibratoSpeed_val);
366+
JS_ToFloat64(ctx, (double*)&params.changeAmount, changeAmount_val);
367+
JS_ToFloat64(ctx, (double*)&params.changeSpeed, changeSpeed_val);
368+
JS_ToFloat64(ctx, (double*)&params.squareDuty, squareDuty_val);
369+
JS_ToFloat64(ctx, (double*)&params.dutySweep, dutySweep_val);
370+
JS_ToFloat64(ctx, (double*)&params.repeatSpeed, repeatSpeed_val);
371+
JS_ToFloat64(ctx, (double*)&params.phaserOffset, phaserOffset_val);
372+
JS_ToFloat64(ctx, (double*)&params.phaserSweep, phaserSweep_val);
373+
JS_ToFloat64(ctx, (double*)&params.lpfCutoff, lpfCutoff_val);
374+
JS_ToFloat64(ctx, (double*)&params.lpfCutoffSweep, lpfCutoffSweep_val);
375+
JS_ToFloat64(ctx, (double*)&params.lpfResonance, lpfResonance_val);
376+
JS_ToFloat64(ctx, (double*)&params.hpfCutoff, hpfCutoff_val);
377+
JS_ToFloat64(ctx, (double*)&params.hpfCutoffSweep, hpfCutoffSweep_val);
378+
379+
JS_FreeValue(ctx, randSeed_val);
380+
JS_FreeValue(ctx, waveType_val);
381+
JS_FreeValue(ctx, attackTime_val);
382+
JS_FreeValue(ctx, sustainTime_val);
383+
JS_FreeValue(ctx, sustainPunch_val);
384+
JS_FreeValue(ctx, decayTime_val);
385+
JS_FreeValue(ctx, startFrequency_val);
386+
JS_FreeValue(ctx, minFrequency_val);
387+
JS_FreeValue(ctx, slide_val);
388+
JS_FreeValue(ctx, deltaSlide_val);
389+
JS_FreeValue(ctx, vibratoDepth_val);
390+
JS_FreeValue(ctx, vibratoSpeed_val);
391+
JS_FreeValue(ctx, changeAmount_val);
392+
JS_FreeValue(ctx, changeSpeed_val);
393+
JS_FreeValue(ctx, squareDuty_val);
394+
JS_FreeValue(ctx, dutySweep_val);
395+
JS_FreeValue(ctx, repeatSpeed_val);
396+
JS_FreeValue(ctx, phaserOffset_val);
397+
JS_FreeValue(ctx, phaserSweep_val);
398+
JS_FreeValue(ctx, lpfCutoff_val);
399+
JS_FreeValue(ctx, lpfCutoffSweep_val);
400+
JS_FreeValue(ctx, lpfResonance_val);
401+
JS_FreeValue(ctx, hpfCutoff_val);
402+
JS_FreeValue(ctx, hpfCutoffSweep_val);
403+
352404
return params;
353405
}
354406

tools/gen_cart_js.js

Lines changed: 63 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -209,8 +209,8 @@ static uint64_t u64_from_js(JSValue val) {
209209
return result;
210210
}
211211
212-
static const char* string_from_js(JSValue val) {
213-
return JS_ToCString(ctx, val);
212+
static char* string_from_js(JSValue val) {
213+
return (char*)JS_ToCString(ctx, val);
214214
}
215215
216216
static JSValue dimensions_to_js(Dimensions dims) {
@@ -245,7 +245,7 @@ static JSValue color_to_js(Color color) {
245245
return obj;
246246
}
247247
248-
static Vector* vector_array_from_js(JSValue vecArray, uint32_t* lenPointer) {
248+
static Vector* vector_array_from_js(JSValue vecArray, size_t* lenPointer) {
249249
// Check if the input is actually an array
250250
if (!JS_IsArray(vecArray)) {
251251
return NULL;
@@ -259,7 +259,7 @@ static Vector* vector_array_from_js(JSValue vecArray, uint32_t* lenPointer) {
259259
260260
if (len == 0) return NULL;
261261
262-
*lenPointer = len;
262+
*lenPointer = (size_t)len;
263263
264264
// Allocate memory for the Vector array (caller must free)
265265
Vector *vecs = malloc(len * sizeof(Vector));
@@ -290,33 +290,33 @@ static Vector* vector_array_from_js(JSValue vecArray, uint32_t* lenPointer) {
290290
}
291291
292292
293-
static Dimensions dimensions_from_js(JSValue obj) {
293+
__attribute__((unused)) static Dimensions dimensions_from_js(JSValue obj) {
294294
Dimensions dims = {0, 0}; // Default values
295-
295+
296296
JSValue width_val = JS_GetPropertyStr(ctx, obj, "width");
297297
JSValue height_val = JS_GetPropertyStr(ctx, obj, "height");
298-
298+
299299
JS_ToUint32(ctx, &dims.width, width_val);
300300
JS_ToUint32(ctx, &dims.height, height_val);
301-
301+
302302
JS_FreeValue(ctx, width_val);
303303
JS_FreeValue(ctx, height_val);
304304
return dims;
305305
}
306306
307-
static Rectangle rectangle_from_js(JSValue obj) {
307+
__attribute__((unused)) static Rectangle rectangle_from_js(JSValue obj) {
308308
Rectangle rect = {0, 0, 0, 0}; // Default values
309-
309+
310310
JSValue x_val = JS_GetPropertyStr(ctx, obj, "x");
311311
JSValue y_val = JS_GetPropertyStr(ctx, obj, "y");
312312
JSValue width_val = JS_GetPropertyStr(ctx, obj, "width");
313313
JSValue height_val = JS_GetPropertyStr(ctx, obj, "height");
314-
314+
315315
JS_ToInt32(ctx, &rect.x, x_val);
316316
JS_ToInt32(ctx, &rect.y, y_val);
317317
JS_ToInt32(ctx, &rect.width, width_val);
318318
JS_ToInt32(ctx, &rect.height, height_val);
319-
319+
320320
JS_FreeValue(ctx, x_val);
321321
JS_FreeValue(ctx, y_val);
322322
JS_FreeValue(ctx, width_val);
@@ -371,6 +371,57 @@ static SfxParams sfx_params_from_js(JSValue obj) {
371371
JSValue lpfResonance_val = JS_GetPropertyStr(ctx, obj, "lpfResonance");
372372
JSValue hpfCutoff_val = JS_GetPropertyStr(ctx, obj, "hpfCutoff");
373373
JSValue hpfCutoffSweep_val = JS_GetPropertyStr(ctx, obj, "hpfCutoffSweep");
374+
375+
JS_ToUint32(ctx, &params.randSeed, randSeed_val);
376+
JS_ToInt32(ctx, &params.waveType, waveType_val);
377+
JS_ToFloat64(ctx, (double*)&params.attackTime, attackTime_val);
378+
JS_ToFloat64(ctx, (double*)&params.sustainTime, sustainTime_val);
379+
JS_ToFloat64(ctx, (double*)&params.sustainPunch, sustainPunch_val);
380+
JS_ToFloat64(ctx, (double*)&params.decayTime, decayTime_val);
381+
JS_ToFloat64(ctx, (double*)&params.startFrequency, startFrequency_val);
382+
JS_ToFloat64(ctx, (double*)&params.minFrequency, minFrequency_val);
383+
JS_ToFloat64(ctx, (double*)&params.slide, slide_val);
384+
JS_ToFloat64(ctx, (double*)&params.deltaSlide, deltaSlide_val);
385+
JS_ToFloat64(ctx, (double*)&params.vibratoDepth, vibratoDepth_val);
386+
JS_ToFloat64(ctx, (double*)&params.vibratoSpeed, vibratoSpeed_val);
387+
JS_ToFloat64(ctx, (double*)&params.changeAmount, changeAmount_val);
388+
JS_ToFloat64(ctx, (double*)&params.changeSpeed, changeSpeed_val);
389+
JS_ToFloat64(ctx, (double*)&params.squareDuty, squareDuty_val);
390+
JS_ToFloat64(ctx, (double*)&params.dutySweep, dutySweep_val);
391+
JS_ToFloat64(ctx, (double*)&params.repeatSpeed, repeatSpeed_val);
392+
JS_ToFloat64(ctx, (double*)&params.phaserOffset, phaserOffset_val);
393+
JS_ToFloat64(ctx, (double*)&params.phaserSweep, phaserSweep_val);
394+
JS_ToFloat64(ctx, (double*)&params.lpfCutoff, lpfCutoff_val);
395+
JS_ToFloat64(ctx, (double*)&params.lpfCutoffSweep, lpfCutoffSweep_val);
396+
JS_ToFloat64(ctx, (double*)&params.lpfResonance, lpfResonance_val);
397+
JS_ToFloat64(ctx, (double*)&params.hpfCutoff, hpfCutoff_val);
398+
JS_ToFloat64(ctx, (double*)&params.hpfCutoffSweep, hpfCutoffSweep_val);
399+
400+
JS_FreeValue(ctx, randSeed_val);
401+
JS_FreeValue(ctx, waveType_val);
402+
JS_FreeValue(ctx, attackTime_val);
403+
JS_FreeValue(ctx, sustainTime_val);
404+
JS_FreeValue(ctx, sustainPunch_val);
405+
JS_FreeValue(ctx, decayTime_val);
406+
JS_FreeValue(ctx, startFrequency_val);
407+
JS_FreeValue(ctx, minFrequency_val);
408+
JS_FreeValue(ctx, slide_val);
409+
JS_FreeValue(ctx, deltaSlide_val);
410+
JS_FreeValue(ctx, vibratoDepth_val);
411+
JS_FreeValue(ctx, vibratoSpeed_val);
412+
JS_FreeValue(ctx, changeAmount_val);
413+
JS_FreeValue(ctx, changeSpeed_val);
414+
JS_FreeValue(ctx, squareDuty_val);
415+
JS_FreeValue(ctx, dutySweep_val);
416+
JS_FreeValue(ctx, repeatSpeed_val);
417+
JS_FreeValue(ctx, phaserOffset_val);
418+
JS_FreeValue(ctx, phaserSweep_val);
419+
JS_FreeValue(ctx, lpfCutoff_val);
420+
JS_FreeValue(ctx, lpfCutoffSweep_val);
421+
JS_FreeValue(ctx, lpfResonance_val);
422+
JS_FreeValue(ctx, hpfCutoff_val);
423+
JS_FreeValue(ctx, hpfCutoffSweep_val);
424+
374425
return params;
375426
}
376427

0 commit comments

Comments
 (0)