0ea5b5248d
When looking for private members in an object for the inspector, we check if that object is a class constructor with the a bit has_static_private_methods set on its SFI. If it is, we look for any variables in the context locals with a VariableMode associated with private methods or accessors and a IsStaticFlag being kStatic. This patch also filters out static private methods when inspecting instances. Design doc: https://docs.google.com/document/d/1N91LObhQexnB0eE7EvGe57HsvNMFX16CaWu-XCTnnmY/edit See also: https://docs.google.com/document/d/14maU596YbHcWR7XR-_iXM_ANhAAmiuRlJZysM61lqaE/edit Bug: v8:9839, v8:8330 Change-Id: Idad15349c983898de2ce632c38b0174da10e639d Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1955664 Reviewed-by: Leszek Swirski <leszeks@chromium.org> Reviewed-by: Toon Verwaest <verwaest@chromium.org> Commit-Queue: Joyee Cheung <joyee@igalia.com> Cr-Commit-Position: refs/heads/master@{#66636}
149 lines
3.4 KiB
Plaintext
149 lines
3.4 KiB
Plaintext
Test static private class methods
|
|
|
|
Running test: testScopesPaused
|
|
privateProperties on the base class
|
|
[
|
|
[0] : {
|
|
name : #writeOnly
|
|
set : {
|
|
className : Function
|
|
description : set #writeOnly(val) { this.#field = val; }
|
|
objectId : <objectId>
|
|
type : function
|
|
}
|
|
}
|
|
[1] : {
|
|
get : {
|
|
className : Function
|
|
description : get #readOnly() { return this.#field; }
|
|
objectId : <objectId>
|
|
type : function
|
|
}
|
|
name : #readOnly
|
|
}
|
|
[2] : {
|
|
get : {
|
|
className : Function
|
|
description : get #accessor() { return this.#field; }
|
|
objectId : <objectId>
|
|
type : function
|
|
}
|
|
name : #accessor
|
|
set : {
|
|
className : Function
|
|
description : set #accessor(val) { this.#field = val; }
|
|
objectId : <objectId>
|
|
type : function
|
|
}
|
|
}
|
|
[3] : {
|
|
name : #inc
|
|
value : {
|
|
className : Function
|
|
description : #inc() { return ++A.#accessor; }
|
|
objectId : <objectId>
|
|
type : function
|
|
}
|
|
}
|
|
[4] : {
|
|
name : #field
|
|
value : {
|
|
description : 2
|
|
type : number
|
|
value : 2
|
|
}
|
|
}
|
|
]
|
|
Evaluating A.#inc();
|
|
{
|
|
result : {
|
|
description : 3
|
|
type : number
|
|
value : 3
|
|
}
|
|
}
|
|
Evaluating this.#inc();
|
|
{
|
|
result : {
|
|
description : 4
|
|
type : number
|
|
value : 4
|
|
}
|
|
}
|
|
Evaluating ++this.#accessor;
|
|
{
|
|
result : {
|
|
description : 5
|
|
type : number
|
|
value : 5
|
|
}
|
|
}
|
|
Evaluating this.#readOnly;
|
|
{
|
|
result : {
|
|
description : 5
|
|
type : number
|
|
value : 5
|
|
}
|
|
}
|
|
Evaluating this.#writeOnly = 0; this.#field;
|
|
{
|
|
result : {
|
|
description : 0
|
|
type : number
|
|
value : 0
|
|
}
|
|
}
|
|
privateProperties on the subclass
|
|
[
|
|
[0] : {
|
|
get : {
|
|
className : Function
|
|
description : get #accessor() { return 'subclassAccessor'; }
|
|
objectId : <objectId>
|
|
type : function
|
|
}
|
|
name : #accessor
|
|
}
|
|
[1] : {
|
|
name : #subclassMethod
|
|
value : {
|
|
className : Function
|
|
description : #subclassMethod() { return B.#accessor; }
|
|
objectId : <objectId>
|
|
type : function
|
|
}
|
|
}
|
|
]
|
|
Evaluating this.#inc(); from the base class
|
|
{
|
|
exceptionDetails : {
|
|
columnNumber : 4
|
|
exception : {
|
|
className : SyntaxError
|
|
description : SyntaxError: Private field '#inc' must be declared in an enclosing class at Function.test (<anonymous>:24:7) at run (<anonymous>:28:5) at <anonymous>:1:1
|
|
objectId : <objectId>
|
|
subtype : error
|
|
type : object
|
|
}
|
|
exceptionId : <exceptionId>
|
|
lineNumber : 0
|
|
scriptId : <scriptId>
|
|
text : Uncaught
|
|
}
|
|
result : {
|
|
className : SyntaxError
|
|
description : SyntaxError: Private field '#inc' must be declared in an enclosing class at Function.test (<anonymous>:24:7) at run (<anonymous>:28:5) at <anonymous>:1:1
|
|
objectId : <objectId>
|
|
subtype : error
|
|
type : object
|
|
}
|
|
}
|
|
Evaluating this.#subclassMethod();
|
|
{
|
|
result : {
|
|
type : string
|
|
value : subclassAccessor
|
|
}
|
|
}
|