@@ -849,6 +849,8 @@ struct JSModuleDef {
849
849
int async_parent_modules_count;
850
850
int async_parent_modules_size;
851
851
int pending_async_dependencies;
852
+ /* true: async_evaluation_timestamp corresponds to [[AsyncEvaluationOrder]]
853
+ false: [[AsyncEvaluationOrder]] is UNSET or DONE */
852
854
bool async_evaluation;
853
855
int64_t async_evaluation_timestamp;
854
856
JSModuleDef *cycle_root;
@@ -28849,6 +28851,15 @@ static int js_execute_async_module(JSContext *ctx, JSModuleDef *m);
28849
28851
static int js_execute_sync_module(JSContext *ctx, JSModuleDef *m,
28850
28852
JSValue *pvalue);
28851
28853
28854
+ #ifdef ENABLE_DUMPS // JS_DUMP_MODULE_EXEC
28855
+ static void js_dump_module(JSContext *ctx, const char *str, JSModuleDef *m)
28856
+ {
28857
+ char buf1[ATOM_GET_STR_BUF_SIZE];
28858
+ static const char *module_status_str[] = { "unlinked", "linking", "linked", "evaluating", "evaluating_async", "evaluated" };
28859
+ printf("%s: %s status=%s\n", str, JS_AtomGetStr(ctx, buf1, sizeof(buf1), m->module_name), module_status_str[m->status]);
28860
+ }
28861
+ #endif
28862
+
28852
28863
static JSValue js_async_module_execution_rejected(JSContext *ctx, JSValueConst this_val,
28853
28864
int argc, JSValueConst *argv, int magic,
28854
28865
JSValueConst *func_data)
@@ -28857,6 +28868,12 @@ static JSValue js_async_module_execution_rejected(JSContext *ctx, JSValueConst t
28857
28868
JSValueConst error = argv[0];
28858
28869
int i;
28859
28870
28871
+ #ifdef ENABLE_DUMPS // JS_DUMP_MODULE_EXEC
28872
+ if (check_dump_flag(ctx->rt, JS_DUMP_MODULE_EXEC)) {
28873
+ js_dump_module(ctx, __func__, module);
28874
+ }
28875
+ #endif
28876
+
28860
28877
if (js_check_stack_overflow(ctx->rt, 0))
28861
28878
return JS_ThrowStackOverflow(ctx);
28862
28879
@@ -28872,6 +28889,7 @@ static JSValue js_async_module_execution_rejected(JSContext *ctx, JSValueConst t
28872
28889
module->eval_has_exception = true;
28873
28890
module->eval_exception = js_dup(error);
28874
28891
module->status = JS_MODULE_STATUS_EVALUATED;
28892
+ module->async_evaluation = false;
28875
28893
28876
28894
for(i = 0; i < module->async_parent_modules_count; i++) {
28877
28895
JSModuleDef *m = module->async_parent_modules[i];
@@ -28899,6 +28917,12 @@ static JSValue js_async_module_execution_fulfilled(JSContext *ctx, JSValueConst
28899
28917
ExecModuleList exec_list_s, *exec_list = &exec_list_s;
28900
28918
int i;
28901
28919
28920
+ #ifdef ENABLE_DUMPS // JS_DUMP_MODULE_EXEC
28921
+ if (check_dump_flag(ctx->rt, JS_DUMP_MODULE_EXEC)) {
28922
+ js_dump_module(ctx, __func__, module);
28923
+ }
28924
+ #endif
28925
+
28902
28926
if (module->status == JS_MODULE_STATUS_EVALUATED) {
28903
28927
assert(module->eval_has_exception);
28904
28928
return JS_UNDEFINED;
@@ -28924,6 +28948,11 @@ static JSValue js_async_module_execution_fulfilled(JSContext *ctx, JSValueConst
28924
28948
28925
28949
for(i = 0; i < exec_list->count; i++) {
28926
28950
JSModuleDef *m = exec_list->tab[i];
28951
+ #ifdef ENABLE_DUMPS // JS_DUMP_MODULE_EXEC
28952
+ if (check_dump_flag(ctx->rt, JS_DUMP_MODULE_EXEC)) {
28953
+ printf(" %d/%d", i, exec_list->count); js_dump_module(ctx, "", m);
28954
+ }
28955
+ #endif
28927
28956
if (m->status == JS_MODULE_STATUS_EVALUATED) {
28928
28957
assert(m->eval_has_exception);
28929
28958
} else if (m->has_tla) {
@@ -28938,6 +28967,7 @@ static JSValue js_async_module_execution_fulfilled(JSContext *ctx, JSValueConst
28938
28967
JS_FreeValue(ctx, m_obj);
28939
28968
JS_FreeValue(ctx, error);
28940
28969
} else {
28970
+ m->async_evaluation = false;
28941
28971
js_set_module_evaluated(ctx, m);
28942
28972
}
28943
28973
}
@@ -28950,6 +28980,11 @@ static int js_execute_async_module(JSContext *ctx, JSModuleDef *m)
28950
28980
{
28951
28981
JSValue promise, m_obj;
28952
28982
JSValue resolve_funcs[2], ret_val;
28983
+ #ifdef ENABLE_DUMPS // JS_DUMP_MODULE_EXEC
28984
+ if (check_dump_flag(ctx->rt, JS_DUMP_MODULE_EXEC)) {
28985
+ js_dump_module(ctx, __func__, m);
28986
+ }
28987
+ #endif
28953
28988
promise = js_async_function_call(ctx, m->func_obj, JS_UNDEFINED, 0, NULL, 0);
28954
28989
if (JS_IsException(promise))
28955
28990
return -1;
@@ -28969,6 +29004,11 @@ static int js_execute_async_module(JSContext *ctx, JSModuleDef *m)
28969
29004
static int js_execute_sync_module(JSContext *ctx, JSModuleDef *m,
28970
29005
JSValue *pvalue)
28971
29006
{
29007
+ #ifdef ENABLE_DUMPS // JS_DUMP_MODULE_EXEC
29008
+ if (check_dump_flag(ctx->rt, JS_DUMP_MODULE_EXEC)) {
29009
+ js_dump_module(ctx, __func__, m);
29010
+ }
29011
+ #endif
28972
29012
if (m->init_func) {
28973
29013
/* C module init : no asynchronous execution */
28974
29014
if (m->init_func(ctx, m) < 0)
@@ -29008,19 +29048,18 @@ static int js_inner_module_evaluation(JSContext *ctx, JSModuleDef *m,
29008
29048
JSModuleDef *m1;
29009
29049
int i;
29010
29050
29051
+ #ifdef ENABLE_DUMPS // JS_DUMP_MODULE_EXEC
29052
+ if (check_dump_flag(ctx->rt, JS_DUMP_MODULE_EXEC)) {
29053
+ js_dump_module(ctx, __func__, m);
29054
+ }
29055
+ #endif
29056
+
29011
29057
if (js_check_stack_overflow(ctx->rt, 0)) {
29012
29058
JS_ThrowStackOverflow(ctx);
29013
29059
*pvalue = JS_GetException(ctx);
29014
29060
return -1;
29015
29061
}
29016
29062
29017
- #ifdef ENABLE_DUMPS // JS_DUMP_MODULE_RESOLVE
29018
- if (check_dump_flag(ctx->rt, JS_DUMP_MODULE_RESOLVE)) {
29019
- char buf1[ATOM_GET_STR_BUF_SIZE];
29020
- printf("js_inner_module_evaluation '%s':\n", JS_AtomGetStr(ctx, buf1, sizeof(buf1), m->module_name));
29021
- }
29022
- #endif
29023
-
29024
29063
if (m->status == JS_MODULE_STATUS_EVALUATING_ASYNC ||
29025
29064
m->status == JS_MODULE_STATUS_EVALUATED) {
29026
29065
if (m->eval_has_exception) {
@@ -29121,6 +29160,12 @@ static JSValue js_evaluate_module(JSContext *ctx, JSModuleDef *m)
29121
29160
JSModuleDef *m1, *stack_top;
29122
29161
JSValue ret_val, result;
29123
29162
29163
+ #ifdef ENABLE_DUMPS // JS_DUMP_MODULE_EXEC
29164
+ if (check_dump_flag(ctx->rt, JS_DUMP_MODULE_EXEC)) {
29165
+ js_dump_module(ctx, __func__, m);
29166
+ }
29167
+ #endif
29168
+
29124
29169
assert(m->status == JS_MODULE_STATUS_LINKED ||
29125
29170
m->status == JS_MODULE_STATUS_EVALUATING_ASYNC ||
29126
29171
m->status == JS_MODULE_STATUS_EVALUATED);
@@ -29153,6 +29198,11 @@ static JSValue js_evaluate_module(JSContext *ctx, JSModuleDef *m)
29153
29198
1, vc(&m->eval_exception));
29154
29199
JS_FreeValue(ctx, ret_val);
29155
29200
} else {
29201
+ #ifdef ENABLE_DUMPS // JS_DUMP_MODULE_EXEC
29202
+ if (check_dump_flag(ctx->rt, JS_DUMP_MODULE_EXEC)) {
29203
+ js_dump_module(ctx, " done", m);
29204
+ }
29205
+ #endif
29156
29206
assert(m->status == JS_MODULE_STATUS_EVALUATING_ASYNC ||
29157
29207
m->status == JS_MODULE_STATUS_EVALUATED);
29158
29208
assert(!m->eval_has_exception);
0 commit comments