mirror of
https://github.com/DoneJS-Runtime/quickjs-done-nextgen.git
synced 2025-01-09 17:43:15 +00:00
Add Atomics.pause
This commit is contained in:
parent
42f0945114
commit
407683bd98
2 changed files with 28 additions and 1 deletions
27
quickjs.c
27
quickjs.c
|
@ -55047,6 +55047,32 @@ static js_mutex_t js_atomics_mutex;
|
||||||
static struct list_head js_atomics_waiter_list =
|
static struct list_head js_atomics_waiter_list =
|
||||||
LIST_HEAD_INIT(js_atomics_waiter_list);
|
LIST_HEAD_INIT(js_atomics_waiter_list);
|
||||||
|
|
||||||
|
// no-op: Atomics.pause() is not allowed to block or yield to another
|
||||||
|
// thread, only to hint the CPU that it should back off for a bit;
|
||||||
|
// the amount of work we do here is a good enough substitute
|
||||||
|
static JSValue js_atomics_pause(JSContext *ctx, JSValue this_obj,
|
||||||
|
int argc, JSValue *argv)
|
||||||
|
{
|
||||||
|
double d;
|
||||||
|
|
||||||
|
if (argc > 0) {
|
||||||
|
switch (JS_VALUE_GET_TAG(argv[0])) {
|
||||||
|
case JS_TAG_FLOAT64: // accepted if and only if fraction == 0.0
|
||||||
|
d = JS_VALUE_GET_FLOAT64(argv[0]);
|
||||||
|
if (isfinite(d))
|
||||||
|
if (0 == modf(d, &d))
|
||||||
|
break;
|
||||||
|
// fallthru
|
||||||
|
default:
|
||||||
|
return JS_ThrowTypeError(ctx, "not an integral number");
|
||||||
|
case JS_TAG_UNDEFINED:
|
||||||
|
case JS_TAG_INT:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return JS_UNDEFINED;
|
||||||
|
}
|
||||||
|
|
||||||
static JSValue js_atomics_wait(JSContext *ctx,
|
static JSValue js_atomics_wait(JSContext *ctx,
|
||||||
JSValue this_obj,
|
JSValue this_obj,
|
||||||
int argc, JSValue *argv)
|
int argc, JSValue *argv)
|
||||||
|
@ -55176,6 +55202,7 @@ static const JSCFunctionListEntry js_atomics_funcs[] = {
|
||||||
JS_CFUNC_MAGIC_DEF("load", 2, js_atomics_op, ATOMICS_OP_LOAD ),
|
JS_CFUNC_MAGIC_DEF("load", 2, js_atomics_op, ATOMICS_OP_LOAD ),
|
||||||
JS_CFUNC_DEF("store", 3, js_atomics_store ),
|
JS_CFUNC_DEF("store", 3, js_atomics_store ),
|
||||||
JS_CFUNC_DEF("isLockFree", 1, js_atomics_isLockFree ),
|
JS_CFUNC_DEF("isLockFree", 1, js_atomics_isLockFree ),
|
||||||
|
JS_CFUNC_DEF("pause", 0, js_atomics_pause ),
|
||||||
JS_CFUNC_DEF("wait", 4, js_atomics_wait ),
|
JS_CFUNC_DEF("wait", 4, js_atomics_wait ),
|
||||||
JS_CFUNC_DEF("notify", 3, js_atomics_notify ),
|
JS_CFUNC_DEF("notify", 3, js_atomics_notify ),
|
||||||
JS_PROP_STRING_DEF("[Symbol.toStringTag]", "Atomics", JS_PROP_CONFIGURABLE ),
|
JS_PROP_STRING_DEF("[Symbol.toStringTag]", "Atomics", JS_PROP_CONFIGURABLE ),
|
||||||
|
|
|
@ -64,7 +64,7 @@ async-functions
|
||||||
async-iteration
|
async-iteration
|
||||||
# atomics are broken in recent versions of tcc
|
# atomics are broken in recent versions of tcc
|
||||||
Atomics=!tcc
|
Atomics=!tcc
|
||||||
Atomics.pause=skip
|
Atomics.pause=!tcc
|
||||||
Atomics.waitAsync=skip
|
Atomics.waitAsync=skip
|
||||||
BigInt
|
BigInt
|
||||||
caller
|
caller
|
||||||
|
|
Loading…
Reference in a new issue