Spec question: CompletionValue when evaluating clauses in a switch statement

In ECMAScript® 2022 Language Specification

It writes:

4. For each CaseClause C of A, do
    a. If found is false, then
        i. Set found to ? CaseClauseIsSelected(C, input).
    b. If found is true, then
        i. Let R be the result of evaluating C.
        ii. If R.[[Value]] is not empty, set V to R.[[Value]].
        iii. If R is an abrupt completion, return Completion(UpdateEmpty(R, V)).
5. Return NormalCompletion(V).

It seems like the break target, continue target and return completion will be ignored.

a: {
    switch (1) {
        case 1:
            break a;
    }
    console.log('This should be logged cause break target is ignored')
}

function a() {
    switch (1) {
        case 1:
            return 2
    }
    console.log("Should log too")
}
a()

// should be 1, 2, 3
for (const i of [1, 2, 3]) {
    switch (i) {
        case 1:
            continue;
    }
    console.log(i)
}

I’m not sure why you read that way? The key step is:

which forwards any abrupt completion (Throw, Return, Break, Continue), after having eventually set its [[Value]] field if it was empty. In particular:

  • For completions of type Break and Continue, the [[Target]] field is left untouched and the [[Value]] field is set.
  • For completion of type Return and Throw, the [[Value]] field is already non-empty, so that it is left untouched.

Oh, I thought abrupt completion only refers to Throw. Thanks!