meme
This commit is contained in:
@@ -56,8 +56,6 @@ globalThis.ends_with = function(str, suffix) {
|
|||||||
var js = use_embed('js')
|
var js = use_embed('js')
|
||||||
var fd = use_embed('fd')
|
var fd = use_embed('fd')
|
||||||
|
|
||||||
os.print(fd)
|
|
||||||
|
|
||||||
// Get the shop path from HOME environment
|
// Get the shop path from HOME environment
|
||||||
var home = os.getenv('HOME') || os.getenv('USERPROFILE')
|
var home = os.getenv('HOME') || os.getenv('USERPROFILE')
|
||||||
if (!home) {
|
if (!home) {
|
||||||
|
|||||||
@@ -36572,36 +36572,61 @@ static JSValue js_cell_meme(JSContext *ctx, JSValueConst this_val,
|
|||||||
if (JS_IsException(result))
|
if (JS_IsException(result))
|
||||||
return result;
|
return result;
|
||||||
|
|
||||||
/* Apply mixins */
|
if (argc < 2)
|
||||||
for (int i = 1; i < argc; i++) {
|
return result;
|
||||||
JSValue mix = argv[i];
|
|
||||||
if (!JS_IsObject(mix) || JS_IsNull(mix) || JS_IsArray(ctx, mix))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
JSPropertyEnum *tab;
|
JSValue mixins = argv[1];
|
||||||
uint32_t len;
|
|
||||||
|
|
||||||
if (JS_GetOwnPropertyNames(ctx, &tab, &len, mix,
|
/* Helper function to apply a single mixin */
|
||||||
JS_GPN_STRING_MASK | JS_GPN_ENUM_ONLY) < 0) {
|
#define APPLY_MIXIN(mix) do { \
|
||||||
|
if (!JS_IsObject(mix) || JS_IsNull(mix) || JS_IsArray(ctx, mix)) \
|
||||||
|
break; \
|
||||||
|
JSPropertyEnum *tab; \
|
||||||
|
uint32_t len; \
|
||||||
|
if (JS_GetOwnPropertyNames(ctx, &tab, &len, mix, \
|
||||||
|
JS_GPN_STRING_MASK | JS_GPN_ENUM_ONLY) < 0) { \
|
||||||
|
JS_FreeValue(ctx, result); \
|
||||||
|
return JS_EXCEPTION; \
|
||||||
|
} \
|
||||||
|
for (uint32_t j = 0; j < len; j++) { \
|
||||||
|
JSValue val = JS_GetProperty(ctx, mix, tab[j].atom); \
|
||||||
|
if (JS_IsException(val)) { \
|
||||||
|
for (uint32_t k = j; k < len; k++) \
|
||||||
|
JS_FreeAtom(ctx, tab[k].atom); \
|
||||||
|
js_free(ctx, tab); \
|
||||||
|
JS_FreeValue(ctx, result); \
|
||||||
|
return JS_EXCEPTION; \
|
||||||
|
} \
|
||||||
|
JS_SetProperty(ctx, result, tab[j].atom, val); \
|
||||||
|
JS_FreeAtom(ctx, tab[j].atom); \
|
||||||
|
} \
|
||||||
|
js_free(ctx, tab); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
if (JS_IsArray(ctx, mixins)) {
|
||||||
|
/* Array of mixins */
|
||||||
|
int64_t len;
|
||||||
|
if (js_get_length64(ctx, &len, mixins)) {
|
||||||
JS_FreeValue(ctx, result);
|
JS_FreeValue(ctx, result);
|
||||||
return JS_EXCEPTION;
|
return JS_EXCEPTION;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (uint32_t j = 0; j < len; j++) {
|
for (int64_t i = 0; i < len; i++) {
|
||||||
JSValue val = JS_GetProperty(ctx, mix, tab[j].atom);
|
JSValue mix = JS_GetPropertyInt64(ctx, mixins, i);
|
||||||
if (JS_IsException(val)) {
|
if (JS_IsException(mix)) {
|
||||||
for (uint32_t k = j; k < len; k++)
|
|
||||||
JS_FreeAtom(ctx, tab[k].atom);
|
|
||||||
js_free(ctx, tab);
|
|
||||||
JS_FreeValue(ctx, result);
|
JS_FreeValue(ctx, result);
|
||||||
return JS_EXCEPTION;
|
return JS_EXCEPTION;
|
||||||
}
|
}
|
||||||
JS_SetProperty(ctx, result, tab[j].atom, val);
|
APPLY_MIXIN(mix);
|
||||||
JS_FreeAtom(ctx, tab[j].atom);
|
JS_FreeValue(ctx, mix);
|
||||||
}
|
}
|
||||||
js_free(ctx, tab);
|
} else if (JS_IsObject(mixins) && !JS_IsNull(mixins)) {
|
||||||
|
/* Single mixin object */
|
||||||
|
APPLY_MIXIN(mixins);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#undef APPLY_MIXIN
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user