Skip to content

Commit 5deb977

Browse files
pandazypci_lynx
authored andcommitted
[Optimize] optimize the ctx' initialization
issue: f-6788370273
1 parent a14f94d commit 5deb977

File tree

6 files changed

+931
-1065
lines changed

6 files changed

+931
-1065
lines changed

src/interpreter/quickjs/include/quickjs-inner.h

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2406,7 +2406,7 @@ QJS_HIDE int JS_DefineAutoInitProperty_GC(
24062406
LEPUSContext *ctx, LEPUSValueConst this_obj, JSAtom prop,
24072407
LEPUSValue (*init_func)(LEPUSContext *ctx, LEPUSObject *obj, JSAtom prop,
24082408
void *opaque),
2409-
void *opaque, int flags);
2409+
void *opaque, int flags, bool need_find_prop = true);
24102410
QJS_HIDE int js_link_module(LEPUSContext *ctx, LEPUSModuleDef *m);
24112411
QJS_HIDE int skip_spaces(const char *pc);
24122412
int JS_DefineObjectName_GC(LEPUSContext *ctx, LEPUSValueConst obj, JSAtom name,
@@ -3199,6 +3199,14 @@ inline uintptr_t get_thread_stack_limit2() {
31993199
uint32_t map_hash_key(LEPUSContext *ctx, LEPUSValueConst key,
32003200
uint32_t hash_bits);
32013201

3202+
#define JS_NEW_CTOR_NO_GLOBAL (1 << 0) /* don't create a global binding */
3203+
#define JS_NEW_CTOR_PROTO_CLASS \
3204+
(1 << 1) /* the prototype class is 'class_id' instead of JS_CLASS_OBJECT */
3205+
#define JS_NEW_CTOR_PROTO_EXIST \
3206+
(1 << 2) /* the prototype is already defined \
3207+
*/
3208+
#define JS_NEW_CTOR_READONLY (1 << 3) /* read-only constructor field */
3209+
32023210
#ifdef ENABLE_VIRTUAL_STACK
32033211

32043212
class VirtualStack {
@@ -3238,4 +3246,31 @@ class VirtualStack {
32383246
};
32393247

32403248
#endif
3249+
QJS_HIDE LEPUSValue js_throw_type_error(LEPUSContext *ctx,
3250+
LEPUSValueConst this_val, int argc,
3251+
LEPUSValueConst *argv);
3252+
inline const LEPUSCFunctionListEntry js_typed_array_funcs[] = {
3253+
LEPUS_PROP_INT32_DEF("BYTES_PER_ELEMENT", 1, 0),
3254+
LEPUS_PROP_INT32_DEF("BYTES_PER_ELEMENT", 2, 0),
3255+
LEPUS_PROP_INT32_DEF("BYTES_PER_ELEMENT", 4, 0),
3256+
LEPUS_PROP_INT32_DEF("BYTES_PER_ELEMENT", 8, 0),
3257+
};
3258+
3259+
inline const LEPUSCFunctionListEntry js_native_error_proto_funcs[] = {
3260+
#define DEF(name) \
3261+
LEPUS_PROP_ATOM_DEF("name", name, \
3262+
LEPUS_PROP_WRITABLE | LEPUS_PROP_CONFIGURABLE), \
3263+
LEPUS_PROP_STRING_DEF("message", "", \
3264+
LEPUS_PROP_WRITABLE | LEPUS_PROP_CONFIGURABLE),
3265+
3266+
DEF(JS_ATOM_EvalError) DEF(JS_ATOM_RangeError) DEF(JS_ATOM_ReferenceError)
3267+
DEF(JS_ATOM_SyntaxError) DEF(JS_ATOM_TypeError) DEF(JS_ATOM_URIError)
3268+
DEF(JS_ATOM_InternalError) LEPUS_PROP_STRING_DEF(
3269+
"name", "AggregateError",
3270+
LEPUS_PROP_WRITABLE | LEPUS_PROP_CONFIGURABLE),
3271+
LEPUS_PROP_STRING_DEF("message", "",
3272+
LEPUS_PROP_WRITABLE | LEPUS_PROP_CONFIGURABLE),
3273+
#undef DEF
3274+
};
3275+
32413276
#endif // SRC_INTERPRETER_QUICKJS_INCLUDE_QUICKJS_INNER_H_

src/interpreter/quickjs/include/quickjs.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1444,6 +1444,8 @@ typedef struct LEPUSCFunctionListEntry {
14441444
#define LEPUS_DEF_PROP_UNDEFINED 7
14451445
#define LEPUS_DEF_OBJECT 8
14461446
#define LEPUS_DEF_ALIAS 9
1447+
#define LEPUS_DEF_PROP_ATOM 10
1448+
#define LEPUS_DEF_PROP_BOOL 11
14471449

14481450
#define LEPUS_CFUNC_DEF(name, length, func1) \
14491451
{ \
@@ -1523,6 +1525,16 @@ typedef struct LEPUSCFunctionListEntry {
15231525
} \
15241526
}
15251527

1528+
#define LEPUS_PROP_ATOM_DEF(name, val, prop_flags) \
1529+
{ \
1530+
name, prop_flags, LEPUS_DEF_PROP_ATOM, 0, .u = {.i32 = val } \
1531+
}
1532+
1533+
#define LEPUS_PROP_BOOL_DEF(name, val, prop_flags) \
1534+
{ \
1535+
name, prop_flags, LEPUS_DEF_PROP_BOOL, 0, .u = {.i32 = val } \
1536+
}
1537+
15261538
void LEPUS_SetPropertyFunctionList(LEPUSContext *ctx, LEPUSValueConst obj,
15271539
const LEPUSCFunctionListEntry *tab, int len);
15281540

0 commit comments

Comments
 (0)