diff --git a/nova_vm/src/ecmascript/builtins/ecmascript_function.rs b/nova_vm/src/ecmascript/builtins/ecmascript_function.rs index d2ebc374b..78a534cb9 100644 --- a/nova_vm/src/ecmascript/builtins/ecmascript_function.rs +++ b/nova_vm/src/ecmascript/builtins/ecmascript_function.rs @@ -1095,15 +1095,19 @@ pub(crate) fn set_function_name<'a>( // a. Let description be name's [[Description]] value. // b. If description is undefined, set name to the empty String. // c. Else, set name to the string-concatenation of "[", description, and "]". - s.description(agent) - .map_or(String::EMPTY_STRING, |descriptor| { - let descriptor = descriptor.to_string_lossy_(agent); - String::from_string( - agent, - format!("{}[{descriptor}]", prefix_into_str(prefix)), - gc, - ) - }) + if let Some(descriptor) = s.description(agent) { + let descriptor = descriptor.to_string_lossy_(agent); + String::from_string( + agent, + format!("{}[{descriptor}]", prefix_into_str(prefix)), + gc, + ) + } else if let Some(prefix) = prefix { + // Step 5 applies even when description is None + String::from_static_str(agent, prefix.into_str(), gc) + } else { + String::EMPTY_STRING + } } PropertyKey::Integer(integer) => String::from_string( diff --git a/tests/expectations.json b/tests/expectations.json index e1ee137e2..d104ae2b5 100644 --- a/tests/expectations.json +++ b/tests/expectations.json @@ -6614,8 +6614,6 @@ "language/expressions/logical-or/tco-right.js": "FAIL", "language/expressions/multiplication/S11.5.1_A4_T7.js": "FAIL", "language/expressions/object/computed-property-name-topropertykey-before-value-evaluation.js": "FAIL", - "language/expressions/object/fn-name-accessor-get.js": "FAIL", - "language/expressions/object/fn-name-accessor-set.js": "FAIL", "language/expressions/object/identifier-shorthand-static-init-await-valid.js": "FAIL", "language/expressions/object/method-definition/generator-prototype-prop.js": "FAIL", "language/expressions/object/method-definition/static-init-await-binding-accessor.js": "FAIL", @@ -7101,8 +7099,6 @@ "language/statements/class/decorator/syntax/valid/decorator-member-expr-identifier-reference.js": "FAIL", "language/statements/class/decorator/syntax/valid/decorator-parenthesized-expr-identifier-reference.js": "FAIL", "language/statements/class/definition/constructor-strict-by-default.js": "FAIL", - "language/statements/class/definition/fn-name-accessor-get.js": "FAIL", - "language/statements/class/definition/fn-name-accessor-set.js": "FAIL", "language/statements/class/elements/arrow-body-derived-cls-direct-eval-contains-superproperty-1.js": "FAIL", "language/statements/class/elements/arrow-body-derived-cls-direct-eval-contains-superproperty-2.js": "FAIL", "language/statements/class/elements/arrow-body-direct-eval-err-contains-arguments.js": "FAIL", @@ -7472,7 +7468,6 @@ "staging/sm/Function/function-caller-restrictions.js": "FAIL", "staging/sm/Function/function-name-assignment.js": "FAIL", "staging/sm/Function/function-name-for.js": "FAIL", - "staging/sm/Function/function-name-method.js": "FAIL", "staging/sm/Function/function-name-property.js": "FAIL", "staging/sm/Function/function-toString-builtin-name.js": "FAIL", "staging/sm/Function/function-toString-builtin.js": "FAIL", diff --git a/tests/metrics.json b/tests/metrics.json index e6cd3a4c6..64570d3a7 100644 --- a/tests/metrics.json +++ b/tests/metrics.json @@ -1,11 +1,11 @@ { "results": { "crash": 162, - "fail": 7577, - "pass": 40687, + "fail": 7572, + "pass": 40692, "skip": 5127, "timeout": 22, "unresolved": 41 }, "total": 53616 -} \ No newline at end of file +}