Source code

Revision control

Copy as Markdown

Other Tools

// Copyright (C) 2019 Caio Lima (Igalia SL). All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
description: Private method contains proper HomeObject
esid: sec-method-definitions-runtime-semantics-classelementevaluation
info: |
MethodDefinition : ClassElementName ( UniqueFormalParameters ) { FunctionBody }
1. Let methodDef be DefineMethod of MethodDefinition with argument homeObject.
2. ReturnIfAbrupt(methodDef).
3. Perform ? DefineOrdinaryMethod(methodDef.[[Key]], homeObject, methodDef.[[Closure]], _enumerable).
MethodDefinition : PropertyName ( UniqueFormalParameters ) { FunctionBody }
1. Let propKey be the result of evaluating PropertyName.
2. ReturnIfAbrupt(propKey).
3. Let scope be the running execution context's LexicalEnvironment.
4. If functionPrototype is present as a parameter, then
a. Let kind be Normal.
b. Let prototype be functionPrototype.
5. Else,
a. Let kind be Method.
b. Let prototype be the intrinsic object %FunctionPrototype%.
6. Let closure be FunctionCreate(kind, UniqueFormalParameters, FunctionBody, scope, prototype).
7. Perform MakeMethod(closure, object).
8. Set closure.[[SourceText]] to the source text matched by MethodDefinition.
9. Return the Record { [[Key]]: propKey, [[Closure]]: closure }.
features: [class-methods-private, class]
---*/
class A {
method() {
return "Test262";
}
}
class C extends A {
#m() {
return super.method();
}
access(o) {
return this.#m.call(o);
}
}
let c = new C();
assert.sameValue(c.access(c), "Test262");
let o = {};
assert.sameValue(c.access(o), "Test262");
reportCompare(0, 0);