forked from LeenkxTeam/Kmake
232 lines
5.7 KiB
Plaintext
232 lines
5.7 KiB
Plaintext
|
|
Evaluate private class member out of class scope in Debugger.evaluateOnCallFrame()
|
||
|
|
|
||
|
|
class Klass {
|
||
|
|
#field = "string";
|
||
|
|
get #getterOnly() { return "getterOnly"; }
|
||
|
|
set #setterOnly(val) { this.#field = "setterOnlyCalled"; }
|
||
|
|
get #accessor() { return this.#field }
|
||
|
|
set #accessor(val) { this.#field = val; }
|
||
|
|
#method() { return "method"; }
|
||
|
|
}
|
||
|
|
const obj = new Klass();
|
||
|
|
debugger;
|
||
|
|
|
||
|
|
Running test: evaluatePrivateMembers
|
||
|
|
Checking private fields
|
||
|
|
Debugger.evaluateOnCallFrame: `obj.#field`
|
||
|
|
{
|
||
|
|
type : string
|
||
|
|
value : string
|
||
|
|
}
|
||
|
|
Debugger.evaluateOnCallFrame: `obj.#field = 1`
|
||
|
|
{
|
||
|
|
description : 1
|
||
|
|
type : number
|
||
|
|
value : 1
|
||
|
|
}
|
||
|
|
Debugger.evaluateOnCallFrame: `obj.#field`
|
||
|
|
{
|
||
|
|
description : 1
|
||
|
|
type : number
|
||
|
|
value : 1
|
||
|
|
}
|
||
|
|
Debugger.evaluateOnCallFrame: `obj.#field++`
|
||
|
|
{
|
||
|
|
description : 1
|
||
|
|
type : number
|
||
|
|
value : 1
|
||
|
|
}
|
||
|
|
Debugger.evaluateOnCallFrame: `obj.#field`
|
||
|
|
{
|
||
|
|
description : 2
|
||
|
|
type : number
|
||
|
|
value : 2
|
||
|
|
}
|
||
|
|
Debugger.evaluateOnCallFrame: `++obj.#field`
|
||
|
|
{
|
||
|
|
description : 3
|
||
|
|
type : number
|
||
|
|
value : 3
|
||
|
|
}
|
||
|
|
Debugger.evaluateOnCallFrame: `obj.#field`
|
||
|
|
{
|
||
|
|
description : 3
|
||
|
|
type : number
|
||
|
|
value : 3
|
||
|
|
}
|
||
|
|
Debugger.evaluateOnCallFrame: `obj.#field -= 3`
|
||
|
|
{
|
||
|
|
description : 0
|
||
|
|
type : number
|
||
|
|
value : 0
|
||
|
|
}
|
||
|
|
Debugger.evaluateOnCallFrame: `obj.#field`
|
||
|
|
{
|
||
|
|
description : 0
|
||
|
|
type : number
|
||
|
|
value : 0
|
||
|
|
}
|
||
|
|
Checking private getter-only accessors
|
||
|
|
Debugger.evaluateOnCallFrame: `obj.#getterOnly`
|
||
|
|
{
|
||
|
|
type : string
|
||
|
|
value : getterOnly
|
||
|
|
}
|
||
|
|
Debugger.evaluateOnCallFrame: `obj.#getterOnly = 1`
|
||
|
|
{
|
||
|
|
className : Error
|
||
|
|
description : Error: '#getterOnly' was defined without a setter at eval (eval at <anonymous> (:11:1), <anonymous>:1:17) at <anonymous>:11:1
|
||
|
|
objectId : <objectId>
|
||
|
|
subtype : error
|
||
|
|
type : object
|
||
|
|
}
|
||
|
|
Debugger.evaluateOnCallFrame: `obj.#getterOnly++`
|
||
|
|
{
|
||
|
|
className : Error
|
||
|
|
description : Error: '#getterOnly' was defined without a setter at eval (eval at <anonymous> (:11:1), <anonymous>:1:16) at <anonymous>:11:1
|
||
|
|
objectId : <objectId>
|
||
|
|
subtype : error
|
||
|
|
type : object
|
||
|
|
}
|
||
|
|
Debugger.evaluateOnCallFrame: `obj.#getterOnly -= 3`
|
||
|
|
{
|
||
|
|
className : Error
|
||
|
|
description : Error: '#getterOnly' was defined without a setter at eval (eval at <anonymous> (:11:1), <anonymous>:1:17) at <anonymous>:11:1
|
||
|
|
objectId : <objectId>
|
||
|
|
subtype : error
|
||
|
|
type : object
|
||
|
|
}
|
||
|
|
Debugger.evaluateOnCallFrame: `obj.#getterOnly`
|
||
|
|
{
|
||
|
|
type : string
|
||
|
|
value : getterOnly
|
||
|
|
}
|
||
|
|
Checking private setter-only accessors
|
||
|
|
Debugger.evaluateOnCallFrame: `obj.#setterOnly`
|
||
|
|
{
|
||
|
|
className : Error
|
||
|
|
description : Error: '#setterOnly' was defined without a getter at eval (eval at <anonymous> (:11:1), <anonymous>:1:1) at <anonymous>:11:1
|
||
|
|
objectId : <objectId>
|
||
|
|
subtype : error
|
||
|
|
type : object
|
||
|
|
}
|
||
|
|
Debugger.evaluateOnCallFrame: `obj.#setterOnly = 1`
|
||
|
|
{
|
||
|
|
description : 1
|
||
|
|
type : number
|
||
|
|
value : 1
|
||
|
|
}
|
||
|
|
Debugger.evaluateOnCallFrame: `obj.#setterOnly++`
|
||
|
|
{
|
||
|
|
className : Error
|
||
|
|
description : Error: '#setterOnly' was defined without a getter at eval (eval at <anonymous> (:11:1), <anonymous>:1:1) at <anonymous>:11:1
|
||
|
|
objectId : <objectId>
|
||
|
|
subtype : error
|
||
|
|
type : object
|
||
|
|
}
|
||
|
|
Debugger.evaluateOnCallFrame: `obj.#setterOnly -= 3`
|
||
|
|
{
|
||
|
|
className : Error
|
||
|
|
description : Error: '#setterOnly' was defined without a getter at eval (eval at <anonymous> (:11:1), <anonymous>:1:1) at <anonymous>:11:1
|
||
|
|
objectId : <objectId>
|
||
|
|
subtype : error
|
||
|
|
type : object
|
||
|
|
}
|
||
|
|
Debugger.evaluateOnCallFrame: `obj.#field`
|
||
|
|
{
|
||
|
|
type : string
|
||
|
|
value : setterOnlyCalled
|
||
|
|
}
|
||
|
|
Checking private accessors
|
||
|
|
Debugger.evaluateOnCallFrame: `obj.#accessor`
|
||
|
|
{
|
||
|
|
type : string
|
||
|
|
value : setterOnlyCalled
|
||
|
|
}
|
||
|
|
Debugger.evaluateOnCallFrame: `obj.#accessor = 1`
|
||
|
|
{
|
||
|
|
description : 1
|
||
|
|
type : number
|
||
|
|
value : 1
|
||
|
|
}
|
||
|
|
Debugger.evaluateOnCallFrame: `obj.#field`
|
||
|
|
{
|
||
|
|
description : 1
|
||
|
|
type : number
|
||
|
|
value : 1
|
||
|
|
}
|
||
|
|
Debugger.evaluateOnCallFrame: `obj.#accessor++`
|
||
|
|
{
|
||
|
|
description : 1
|
||
|
|
type : number
|
||
|
|
value : 1
|
||
|
|
}
|
||
|
|
Debugger.evaluateOnCallFrame: `obj.#field`
|
||
|
|
{
|
||
|
|
description : 2
|
||
|
|
type : number
|
||
|
|
value : 2
|
||
|
|
}
|
||
|
|
Debugger.evaluateOnCallFrame: `++obj.#accessor`
|
||
|
|
{
|
||
|
|
type : undefined
|
||
|
|
}
|
||
|
|
Debugger.evaluateOnCallFrame: `obj.#field`
|
||
|
|
{
|
||
|
|
description : 3
|
||
|
|
type : number
|
||
|
|
value : 3
|
||
|
|
}
|
||
|
|
Debugger.evaluateOnCallFrame: `obj.#accessor -= 3`
|
||
|
|
{
|
||
|
|
description : 0
|
||
|
|
type : number
|
||
|
|
value : 0
|
||
|
|
}
|
||
|
|
Debugger.evaluateOnCallFrame: `obj.#field`
|
||
|
|
{
|
||
|
|
description : 0
|
||
|
|
type : number
|
||
|
|
value : 0
|
||
|
|
}
|
||
|
|
Checking private methods
|
||
|
|
Debugger.evaluateOnCallFrame: `obj.#method`
|
||
|
|
{
|
||
|
|
className : Function
|
||
|
|
description : #method() { return "method"; }
|
||
|
|
objectId : <objectId>
|
||
|
|
type : function
|
||
|
|
}
|
||
|
|
Debugger.evaluateOnCallFrame: `obj.#method = 1`
|
||
|
|
{
|
||
|
|
className : Error
|
||
|
|
description : Error: Private method '#method' is not writable at eval (eval at <anonymous> (:11:1), <anonymous>:1:13) at <anonymous>:11:1
|
||
|
|
objectId : <objectId>
|
||
|
|
subtype : error
|
||
|
|
type : object
|
||
|
|
}
|
||
|
|
Debugger.evaluateOnCallFrame: `obj.#method++`
|
||
|
|
{
|
||
|
|
className : Error
|
||
|
|
description : Error: Private method '#method' is not writable at eval (eval at <anonymous> (:11:1), <anonymous>:1:12) at <anonymous>:11:1
|
||
|
|
objectId : <objectId>
|
||
|
|
subtype : error
|
||
|
|
type : object
|
||
|
|
}
|
||
|
|
Debugger.evaluateOnCallFrame: `++obj.#method`
|
||
|
|
{
|
||
|
|
className : Error
|
||
|
|
description : Error: Private method '#method' is not writable at eval (eval at <anonymous> (:11:1), <anonymous>:1:7) at <anonymous>:11:1
|
||
|
|
objectId : <objectId>
|
||
|
|
subtype : error
|
||
|
|
type : object
|
||
|
|
}
|
||
|
|
Debugger.evaluateOnCallFrame: `obj.#method -= 3`
|
||
|
|
{
|
||
|
|
className : Error
|
||
|
|
description : Error: Private method '#method' is not writable at eval (eval at <anonymous> (:11:1), <anonymous>:1:13) at <anonymous>:11:1
|
||
|
|
objectId : <objectId>
|
||
|
|
subtype : error
|
||
|
|
type : object
|
||
|
|
}
|