v8/test/inspector/debugger/class-fields-scopes-expected.txt
Joyee Cheung 4e8c62819a [class] implement static private methods
This patch refactors the declaration and allocation of the class variable, and
implements static private methods:


- The class variable is declared in the class scope with an explicit
  reference through class_scope->class_variable(). Anonymous classes
  whose class variable may be accessed transitively through static
  private method access use the dot string as the class name. Whether
  the class variable is allocated depending on whether it is used.
  Other references of the class variable in the ClassLiteral AST node
  and the ClassInfo structure are removed in favor of the reference
  through the class scope.
- Previously the class variable was always (stack- or context-)
  allocated if the class is named. Now if the class variable is only
  referenced by name, it's stack allocated. If it's used transitively
  by access to static private methods, or may be used through eval,
  it's context allocated. Therefore we now use 1 less context slots
  in the class context if it's a named class without anyone referencing
  it by name in inner scopes.
- Explicit access to static private methods or potential access to
  static private methods through eval results in forced context
  allocation of the class variables. In those cases, we save its index
  in context locals in the ScopeInfo and deserialize it later, so that
  we can check that the receiver of static private methods is the class
  constructor at run time. This flag is recorded as
  HasSavedClassVariableIndexField in the scope info.
- Classes that need the class variable to be saved due to
  access to static private methods now save a
  ShouldSaveClassVariableIndexField in the preparse data so that the
  bits on the variables can be updated during a reparse. In the case
  of anonymous classes that need the class variables to be saved,
  we also re-declare the class variable after the reparse since
  the inner functions are skipped and we need to rely on the preparse
  data flags to remember declaring it.

Design doc: https://docs.google.com/document/d/1rgGRw5RdzaRrM-GrIMhsn-DLULtADV2dmIdh_iIZxlc/edit

Bug: v8:8330
Change-Id: Idd07803f47614e97ad202de3b7faa9f71105eac5
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1781011
Commit-Queue: Joyee Cheung <joyee@igalia.com>
Reviewed-by: Mythri Alle <mythria@chromium.org>
Reviewed-by: Toon Verwaest <verwaest@chromium.org>
Cr-Commit-Position: refs/heads/master@{#64219}
2019-10-10 15:34:44 +00:00

978 lines
26 KiB
Plaintext

Test class fields scopes
Running test: testScopesPaused
[
[0] : {
callFrameId : <callFrameId>
functionLocation : {
columnNumber : 14
lineNumber : 2
scriptId : <scriptId>
}
functionName : foo
location : {
columnNumber : 4
lineNumber : 3
scriptId : <scriptId>
}
scopeChain : [
[0] : {
endLocation : {
columnNumber : 3
lineNumber : 5
scriptId : <scriptId>
}
name : foo
object : {
className : Object
description : Object
objectId : <objectId>
type : object
}
startLocation : {
columnNumber : 14
lineNumber : 2
scriptId : <scriptId>
}
type : local
}
[1] : {
endLocation : {
columnNumber : 1
lineNumber : 19
scriptId : <scriptId>
}
name : run
object : {
className : Object
description : Object
objectId : <objectId>
type : object
}
startLocation : {
columnNumber : 12
lineNumber : 1
scriptId : <scriptId>
}
type : closure
}
[2] : {
object : {
className : global
description : global
objectId : <objectId>
type : object
}
type : global
}
]
this : {
className : global
description : global
objectId : <objectId>
type : object
}
url :
}
[1] : {
callFrameId : <callFrameId>
functionLocation : {
columnNumber : 12
lineNumber : 1
scriptId : <scriptId>
}
functionName : run
location : {
columnNumber : 5
lineNumber : 13
scriptId : <scriptId>
}
scopeChain : [
[0] : {
endLocation : {
columnNumber : 13
lineNumber : 14
scriptId : <scriptId>
}
name : run
object : {
className : Object
description : Object
objectId : <objectId>
type : object
}
startLocation : {
columnNumber : 4
lineNumber : 12
scriptId : <scriptId>
}
type : local
}
[1] : {
endLocation : {
columnNumber : 1
lineNumber : 19
scriptId : <scriptId>
}
name : run
object : {
className : Object
description : Object
objectId : <objectId>
type : object
}
startLocation : {
columnNumber : 12
lineNumber : 1
scriptId : <scriptId>
}
type : local
}
[2] : {
object : {
className : global
description : global
objectId : <objectId>
type : object
}
type : global
}
]
this : {
className : global
description : global
objectId : <objectId>
type : object
}
url :
}
[2] : {
callFrameId : <callFrameId>
functionLocation : {
columnNumber : 0
lineNumber : 0
scriptId : <scriptId>
}
functionName :
location : {
columnNumber : 0
lineNumber : 0
scriptId : <scriptId>
}
scopeChain : [
[0] : {
object : {
className : global
description : global
objectId : <objectId>
type : object
}
type : global
}
]
this : {
className : global
description : global
objectId : <objectId>
type : object
}
url :
}
]
[
[0] : {
callFrameId : <callFrameId>
functionLocation : {
columnNumber : 4
lineNumber : 12
scriptId : <scriptId>
}
functionName : <instance_members_initializer>
location : {
columnNumber : 8
lineNumber : 12
scriptId : <scriptId>
}
scopeChain : [
]
this : {
className : X
description : X
objectId : <objectId>
type : object
}
url :
}
[1] : {
callFrameId : <callFrameId>
functionLocation : {
columnNumber : 2
lineNumber : 11
scriptId : <scriptId>
}
functionName : X
location : {
columnNumber : 2
lineNumber : 11
scriptId : <scriptId>
}
scopeChain : [
[0] : {
endLocation : {
columnNumber : 2
lineNumber : 11
scriptId : <scriptId>
}
name : X
object : {
className : Object
description : Object
objectId : <objectId>
type : object
}
startLocation : {
columnNumber : 2
lineNumber : 11
scriptId : <scriptId>
}
type : local
}
[1] : {
endLocation : {
columnNumber : 1
lineNumber : 19
scriptId : <scriptId>
}
name : run
object : {
className : Object
description : Object
objectId : <objectId>
type : object
}
startLocation : {
columnNumber : 12
lineNumber : 1
scriptId : <scriptId>
}
type : closure
}
[2] : {
object : {
className : global
description : global
objectId : <objectId>
type : object
}
type : global
}
]
this : {
className : X
description : X
objectId : <objectId>
type : object
}
url :
}
[2] : {
callFrameId : <callFrameId>
functionLocation : {
columnNumber : 12
lineNumber : 1
scriptId : <scriptId>
}
functionName : run
location : {
columnNumber : 2
lineNumber : 18
scriptId : <scriptId>
}
scopeChain : [
[0] : {
endLocation : {
columnNumber : 1
lineNumber : 19
scriptId : <scriptId>
}
name : run
object : {
className : Object
description : Object
objectId : <objectId>
type : object
}
startLocation : {
columnNumber : 12
lineNumber : 1
scriptId : <scriptId>
}
type : local
}
[1] : {
object : {
className : global
description : global
objectId : <objectId>
type : object
}
type : global
}
]
this : {
className : global
description : global
objectId : <objectId>
type : object
}
url :
}
[3] : {
callFrameId : <callFrameId>
functionLocation : {
columnNumber : 0
lineNumber : 0
scriptId : <scriptId>
}
functionName :
location : {
columnNumber : 0
lineNumber : 0
scriptId : <scriptId>
}
scopeChain : [
[0] : {
object : {
className : global
description : global
objectId : <objectId>
type : object
}
type : global
}
]
this : {
className : global
description : global
objectId : <objectId>
type : object
}
url :
}
]
[
[0] : {
callFrameId : <callFrameId>
functionLocation : {
columnNumber : 4
lineNumber : 12
scriptId : <scriptId>
}
functionName : <instance_members_initializer>
location : {
columnNumber : 14
lineNumber : 13
scriptId : <scriptId>
}
scopeChain : [
]
this : {
className : X
description : X
objectId : <objectId>
type : object
}
url :
}
[1] : {
callFrameId : <callFrameId>
functionLocation : {
columnNumber : 2
lineNumber : 11
scriptId : <scriptId>
}
functionName : X
location : {
columnNumber : 2
lineNumber : 11
scriptId : <scriptId>
}
scopeChain : [
[0] : {
endLocation : {
columnNumber : 2
lineNumber : 11
scriptId : <scriptId>
}
name : X
object : {
className : Object
description : Object
objectId : <objectId>
type : object
}
startLocation : {
columnNumber : 2
lineNumber : 11
scriptId : <scriptId>
}
type : local
}
[1] : {
endLocation : {
columnNumber : 1
lineNumber : 19
scriptId : <scriptId>
}
name : run
object : {
className : Object
description : Object
objectId : <objectId>
type : object
}
startLocation : {
columnNumber : 12
lineNumber : 1
scriptId : <scriptId>
}
type : closure
}
[2] : {
object : {
className : global
description : global
objectId : <objectId>
type : object
}
type : global
}
]
this : {
className : X
description : X
objectId : <objectId>
type : object
}
url :
}
[2] : {
callFrameId : <callFrameId>
functionLocation : {
columnNumber : 12
lineNumber : 1
scriptId : <scriptId>
}
functionName : run
location : {
columnNumber : 2
lineNumber : 18
scriptId : <scriptId>
}
scopeChain : [
[0] : {
endLocation : {
columnNumber : 1
lineNumber : 19
scriptId : <scriptId>
}
name : run
object : {
className : Object
description : Object
objectId : <objectId>
type : object
}
startLocation : {
columnNumber : 12
lineNumber : 1
scriptId : <scriptId>
}
type : local
}
[1] : {
object : {
className : global
description : global
objectId : <objectId>
type : object
}
type : global
}
]
this : {
className : global
description : global
objectId : <objectId>
type : object
}
url :
}
[3] : {
callFrameId : <callFrameId>
functionLocation : {
columnNumber : 0
lineNumber : 0
scriptId : <scriptId>
}
functionName :
location : {
columnNumber : 0
lineNumber : 0
scriptId : <scriptId>
}
scopeChain : [
[0] : {
object : {
className : global
description : global
objectId : <objectId>
type : object
}
type : global
}
]
this : {
className : global
description : global
objectId : <objectId>
type : object
}
url :
}
]
[
[0] : {
callFrameId : <callFrameId>
functionLocation : {
columnNumber : 4
lineNumber : 12
scriptId : <scriptId>
}
functionName : <instance_members_initializer>
location : {
columnNumber : 8
lineNumber : 14
scriptId : <scriptId>
}
scopeChain : [
]
this : {
className : X
description : X
objectId : <objectId>
type : object
}
url :
}
[1] : {
callFrameId : <callFrameId>
functionLocation : {
columnNumber : 2
lineNumber : 11
scriptId : <scriptId>
}
functionName : X
location : {
columnNumber : 2
lineNumber : 11
scriptId : <scriptId>
}
scopeChain : [
[0] : {
endLocation : {
columnNumber : 2
lineNumber : 11
scriptId : <scriptId>
}
name : X
object : {
className : Object
description : Object
objectId : <objectId>
type : object
}
startLocation : {
columnNumber : 2
lineNumber : 11
scriptId : <scriptId>
}
type : local
}
[1] : {
endLocation : {
columnNumber : 1
lineNumber : 19
scriptId : <scriptId>
}
name : run
object : {
className : Object
description : Object
objectId : <objectId>
type : object
}
startLocation : {
columnNumber : 12
lineNumber : 1
scriptId : <scriptId>
}
type : closure
}
[2] : {
object : {
className : global
description : global
objectId : <objectId>
type : object
}
type : global
}
]
this : {
className : X
description : X
objectId : <objectId>
type : object
}
url :
}
[2] : {
callFrameId : <callFrameId>
functionLocation : {
columnNumber : 12
lineNumber : 1
scriptId : <scriptId>
}
functionName : run
location : {
columnNumber : 2
lineNumber : 18
scriptId : <scriptId>
}
scopeChain : [
[0] : {
endLocation : {
columnNumber : 1
lineNumber : 19
scriptId : <scriptId>
}
name : run
object : {
className : Object
description : Object
objectId : <objectId>
type : object
}
startLocation : {
columnNumber : 12
lineNumber : 1
scriptId : <scriptId>
}
type : local
}
[1] : {
object : {
className : global
description : global
objectId : <objectId>
type : object
}
type : global
}
]
this : {
className : global
description : global
objectId : <objectId>
type : object
}
url :
}
[3] : {
callFrameId : <callFrameId>
functionLocation : {
columnNumber : 0
lineNumber : 0
scriptId : <scriptId>
}
functionName :
location : {
columnNumber : 0
lineNumber : 0
scriptId : <scriptId>
}
scopeChain : [
[0] : {
object : {
className : global
description : global
objectId : <objectId>
type : object
}
type : global
}
]
this : {
className : global
description : global
objectId : <objectId>
type : object
}
url :
}
]
[
[0] : {
callFrameId : <callFrameId>
functionLocation : {
columnNumber : 14
lineNumber : 7
scriptId : <scriptId>
}
functionName : bar
location : {
columnNumber : 4
lineNumber : 8
scriptId : <scriptId>
}
scopeChain : [
[0] : {
endLocation : {
columnNumber : 3
lineNumber : 9
scriptId : <scriptId>
}
name : bar
object : {
className : Object
description : Object
objectId : <objectId>
type : object
}
startLocation : {
columnNumber : 14
lineNumber : 7
scriptId : <scriptId>
}
type : local
}
[1] : {
endLocation : {
columnNumber : 1
lineNumber : 19
scriptId : <scriptId>
}
name : run
object : {
className : Object
description : Object
objectId : <objectId>
type : object
}
startLocation : {
columnNumber : 12
lineNumber : 1
scriptId : <scriptId>
}
type : closure
}
[2] : {
object : {
className : global
description : global
objectId : <objectId>
type : object
}
type : global
}
]
this : {
className : global
description : global
objectId : <objectId>
type : object
}
url :
}
[1] : {
callFrameId : <callFrameId>
functionLocation : {
columnNumber : 4
lineNumber : 12
scriptId : <scriptId>
}
functionName : <instance_members_initializer>
location : {
columnNumber : 8
lineNumber : 14
scriptId : <scriptId>
}
scopeChain : [
]
this : {
className : X
description : X
objectId : <objectId>
type : object
}
url :
}
[2] : {
callFrameId : <callFrameId>
functionLocation : {
columnNumber : 2
lineNumber : 11
scriptId : <scriptId>
}
functionName : X
location : {
columnNumber : 2
lineNumber : 11
scriptId : <scriptId>
}
scopeChain : [
[0] : {
endLocation : {
columnNumber : 2
lineNumber : 11
scriptId : <scriptId>
}
name : X
object : {
className : Object
description : Object
objectId : <objectId>
type : object
}
startLocation : {
columnNumber : 2
lineNumber : 11
scriptId : <scriptId>
}
type : local
}
[1] : {
endLocation : {
columnNumber : 1
lineNumber : 19
scriptId : <scriptId>
}
name : run
object : {
className : Object
description : Object
objectId : <objectId>
type : object
}
startLocation : {
columnNumber : 12
lineNumber : 1
scriptId : <scriptId>
}
type : closure
}
[2] : {
object : {
className : global
description : global
objectId : <objectId>
type : object
}
type : global
}
]
this : {
className : X
description : X
objectId : <objectId>
type : object
}
url :
}
[3] : {
callFrameId : <callFrameId>
functionLocation : {
columnNumber : 12
lineNumber : 1
scriptId : <scriptId>
}
functionName : run
location : {
columnNumber : 2
lineNumber : 18
scriptId : <scriptId>
}
scopeChain : [
[0] : {
endLocation : {
columnNumber : 1
lineNumber : 19
scriptId : <scriptId>
}
name : run
object : {
className : Object
description : Object
objectId : <objectId>
type : object
}
startLocation : {
columnNumber : 12
lineNumber : 1
scriptId : <scriptId>
}
type : local
}
[1] : {
object : {
className : global
description : global
objectId : <objectId>
type : object
}
type : global
}
]
this : {
className : global
description : global
objectId : <objectId>
type : object
}
url :
}
[4] : {
callFrameId : <callFrameId>
functionLocation : {
columnNumber : 0
lineNumber : 0
scriptId : <scriptId>
}
functionName :
location : {
columnNumber : 0
lineNumber : 0
scriptId : <scriptId>
}
scopeChain : [
[0] : {
object : {
className : global
description : global
objectId : <objectId>
type : object
}
type : global
}
]
this : {
className : global
description : global
objectId : <objectId>
type : object
}
url :
}
]