8.6 RunJobs ( )

抽象操作 RunJobs 执行以下步骤:

  1. 执行 ? InitializeHostDefinedRealm()。
  2. 以一种内置系统依赖的方式,获取 ECMAScript源文本(见第10节)和零个或多个 ECMAScript 脚本 和/或 ECMAScript 模块的任何相关的主机定义的值。 对于每个这样的 sourceText hostDefined

a. 如果sourceText是脚本的源代码,那么 i. 执行 EnqueueJob("ScriptJobs", ScriptEvaluationJob, « sourceText, hostDefined »)。

b. 否则 sourceText是模块的源代码,

i. 执行 EnqueueJob("ScriptJobs", TopLevelModuleEvaluationJob, « sourceText, hostDefined »)。

3.重复

a. 中止(Suspend )正在运行的执行上下文并将其从执行上下文堆栈中删除。

b. 断言:执行上下文堆栈现在为空。

c. 让 nextQueue 是以内置系统定义的方式选择的非空作业队列。 如果所有作业队列为空,则结果为内置系统定义。

d. 让 nextPending nextQueue 前面的 PendingJob 记录。 从 nextQueue 中删除该记录。

e. 让 newContext 成为一个新的执行上下文

f. 设置 newContext's _Function 为 null_。

g. 设置 newContext's _Realm 为 _nextPending.[[Realm]]。

h. 设置 newContext's _ScriptOrModule 为 _nextPending.[[ScriptOrModule]]。

i. 将 newContext 推送到执行上下文堆栈; newContext 现在是运行的执行上下文。

j. 使用 nextPending 执行任何内置系统或主机环境定义的作业初始化。

k. 让 result 是执行由 nextPending 命名的抽象操作的结果 [[Job]],使用 nextPending 的元素 [[Arguments]] 作为其参数。

l. 如果 result 是 abrupt completion,请执行HostReportErrors(«result。[[Value]]»)。

results matching ""

    No results matching ""