77d50cd8e7
This patch implements the declaration of private accessors. When iterating over the class properties, we track private accessors associated with the same name in a ZoneHashMap. Once we get to all the necessary components for a private name (we know statically whether we should expect only a setter, only a getter, or both), we emit a call to a runtime function `CreatePrivateAccessors` that creates an AccessorPair, and store the components in it. The AccessorPair is then associated with the private name variable and stored in the context for later retrieval when the private accessors are accessed. Design doc: https://docs.google.com/document/d/10W4begYfs7lmldSqBoQBBt_BKamgT8igqxF9u50RGrI/edit Bug: v8:8330 Change-Id: Ie6d3882507d143b1f645d7ae82b21b7358656e89 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1725670 Commit-Queue: Joyee Cheung <joyee@igalia.com> Reviewed-by: Ross McIlroy <rmcilroy@chromium.org> Cr-Commit-Position: refs/heads/master@{#63284}
399 lines
12 KiB
Plaintext
399 lines
12 KiB
Plaintext
#
|
|
# Autogenerated by generate-bytecode-expectations.
|
|
#
|
|
|
|
---
|
|
wrap: yes
|
|
private methods: yes
|
|
|
|
---
|
|
snippet: "
|
|
{
|
|
class A {
|
|
get #a() { return 1; }
|
|
set #a(val) { }
|
|
}
|
|
}
|
|
"
|
|
frame size: 8
|
|
parameter count: 1
|
|
bytecode array length: 68
|
|
bytecodes: [
|
|
/* 30 E> */ B(StackCheck),
|
|
B(CreateBlockContext), U8(0),
|
|
B(PushContext), R(2),
|
|
B(LdaTheHole),
|
|
B(Star), R(6),
|
|
B(CreateClosure), U8(2), U8(0), U8(2),
|
|
B(Star), R(3),
|
|
B(LdaConstant), U8(1),
|
|
B(Star), R(4),
|
|
B(Mov), R(3), R(5),
|
|
B(CallRuntime), U16(Runtime::kDefineClass), R(4), U8(3),
|
|
B(Star), R(4),
|
|
B(Mov), R(5), R(1),
|
|
B(LdaConstant), U8(3),
|
|
B(Star), R(5),
|
|
B(CallRuntime), U16(Runtime::kCreatePrivateNameSymbol), R(5), U8(1),
|
|
B(StaCurrentContextSlot), U8(5),
|
|
B(CreateClosure), U8(4), U8(1), U8(2),
|
|
B(Star), R(6),
|
|
B(CreateClosure), U8(5), U8(2), U8(2),
|
|
B(Star), R(7),
|
|
B(CallRuntime), U16(Runtime::kCreatePrivateAccessors), R(6), U8(2),
|
|
B(StaCurrentContextSlot), U8(4),
|
|
B(PopContext), R(2),
|
|
B(Mov), R(1), R(0),
|
|
B(LdaUndefined),
|
|
/* 101 S> */ B(Return),
|
|
]
|
|
constant pool: [
|
|
SCOPE_INFO_TYPE,
|
|
FIXED_ARRAY_TYPE,
|
|
SHARED_FUNCTION_INFO_TYPE,
|
|
ONE_BYTE_INTERNALIZED_STRING_TYPE ["A"],
|
|
SHARED_FUNCTION_INFO_TYPE,
|
|
SHARED_FUNCTION_INFO_TYPE,
|
|
]
|
|
handlers: [
|
|
]
|
|
|
|
---
|
|
snippet: "
|
|
{
|
|
class B {
|
|
get #b() { return 1; }
|
|
}
|
|
}
|
|
"
|
|
frame size: 8
|
|
parameter count: 1
|
|
bytecode array length: 65
|
|
bytecodes: [
|
|
/* 30 E> */ B(StackCheck),
|
|
B(CreateBlockContext), U8(0),
|
|
B(PushContext), R(2),
|
|
B(LdaTheHole),
|
|
B(Star), R(6),
|
|
B(CreateClosure), U8(2), U8(0), U8(2),
|
|
B(Star), R(3),
|
|
B(LdaConstant), U8(1),
|
|
B(Star), R(4),
|
|
B(Mov), R(3), R(5),
|
|
B(CallRuntime), U16(Runtime::kDefineClass), R(4), U8(3),
|
|
B(Star), R(4),
|
|
B(Mov), R(5), R(1),
|
|
B(LdaConstant), U8(3),
|
|
B(Star), R(5),
|
|
B(CallRuntime), U16(Runtime::kCreatePrivateNameSymbol), R(5), U8(1),
|
|
B(StaCurrentContextSlot), U8(5),
|
|
B(CreateClosure), U8(4), U8(1), U8(2),
|
|
B(Star), R(6),
|
|
B(LdaNull),
|
|
B(Star), R(7),
|
|
B(CallRuntime), U16(Runtime::kCreatePrivateAccessors), R(6), U8(2),
|
|
B(StaCurrentContextSlot), U8(4),
|
|
B(PopContext), R(2),
|
|
B(Mov), R(1), R(0),
|
|
B(LdaUndefined),
|
|
/* 81 S> */ B(Return),
|
|
]
|
|
constant pool: [
|
|
SCOPE_INFO_TYPE,
|
|
FIXED_ARRAY_TYPE,
|
|
SHARED_FUNCTION_INFO_TYPE,
|
|
ONE_BYTE_INTERNALIZED_STRING_TYPE ["B"],
|
|
SHARED_FUNCTION_INFO_TYPE,
|
|
]
|
|
handlers: [
|
|
]
|
|
|
|
---
|
|
snippet: "
|
|
{
|
|
class C {
|
|
set #c(val) { }
|
|
}
|
|
}
|
|
"
|
|
frame size: 8
|
|
parameter count: 1
|
|
bytecode array length: 65
|
|
bytecodes: [
|
|
/* 30 E> */ B(StackCheck),
|
|
B(CreateBlockContext), U8(0),
|
|
B(PushContext), R(2),
|
|
B(LdaTheHole),
|
|
B(Star), R(6),
|
|
B(CreateClosure), U8(2), U8(0), U8(2),
|
|
B(Star), R(3),
|
|
B(LdaConstant), U8(1),
|
|
B(Star), R(4),
|
|
B(Mov), R(3), R(5),
|
|
B(CallRuntime), U16(Runtime::kDefineClass), R(4), U8(3),
|
|
B(Star), R(4),
|
|
B(Mov), R(5), R(1),
|
|
B(LdaConstant), U8(3),
|
|
B(Star), R(5),
|
|
B(CallRuntime), U16(Runtime::kCreatePrivateNameSymbol), R(5), U8(1),
|
|
B(StaCurrentContextSlot), U8(5),
|
|
B(LdaNull),
|
|
B(Star), R(6),
|
|
B(CreateClosure), U8(4), U8(1), U8(2),
|
|
B(Star), R(7),
|
|
B(CallRuntime), U16(Runtime::kCreatePrivateAccessors), R(6), U8(2),
|
|
B(StaCurrentContextSlot), U8(4),
|
|
B(PopContext), R(2),
|
|
B(Mov), R(1), R(0),
|
|
B(LdaUndefined),
|
|
/* 74 S> */ B(Return),
|
|
]
|
|
constant pool: [
|
|
SCOPE_INFO_TYPE,
|
|
FIXED_ARRAY_TYPE,
|
|
SHARED_FUNCTION_INFO_TYPE,
|
|
ONE_BYTE_INTERNALIZED_STRING_TYPE ["C"],
|
|
SHARED_FUNCTION_INFO_TYPE,
|
|
]
|
|
handlers: [
|
|
]
|
|
|
|
---
|
|
snippet: "
|
|
{
|
|
class D {
|
|
get #d() { return 1; }
|
|
set #d(val) { }
|
|
}
|
|
|
|
class E extends D {
|
|
get #e() { return 2; }
|
|
set #e(val) { }
|
|
}
|
|
}
|
|
"
|
|
frame size: 10
|
|
parameter count: 1
|
|
bytecode array length: 133
|
|
bytecodes: [
|
|
/* 30 E> */ B(StackCheck),
|
|
B(CreateBlockContext), U8(0),
|
|
B(PushContext), R(4),
|
|
B(LdaTheHole),
|
|
B(Star), R(8),
|
|
B(CreateClosure), U8(2), U8(0), U8(2),
|
|
B(Star), R(5),
|
|
B(LdaConstant), U8(1),
|
|
B(Star), R(6),
|
|
B(Mov), R(5), R(7),
|
|
B(CallRuntime), U16(Runtime::kDefineClass), R(6), U8(3),
|
|
B(Star), R(6),
|
|
B(Mov), R(7), R(3),
|
|
B(LdaConstant), U8(3),
|
|
B(Star), R(7),
|
|
B(CallRuntime), U16(Runtime::kCreatePrivateNameSymbol), R(7), U8(1),
|
|
B(StaCurrentContextSlot), U8(5),
|
|
B(CreateClosure), U8(4), U8(1), U8(2),
|
|
B(Star), R(8),
|
|
B(CreateClosure), U8(5), U8(2), U8(2),
|
|
B(Star), R(9),
|
|
B(CallRuntime), U16(Runtime::kCreatePrivateAccessors), R(8), U8(2),
|
|
B(StaCurrentContextSlot), U8(4),
|
|
B(PopContext), R(4),
|
|
B(Mov), R(3), R(0),
|
|
/* 38 E> */ B(CreateBlockContext), U8(6),
|
|
B(PushContext), R(4),
|
|
/* 118 E> */ B(CreateClosure), U8(8), U8(3), U8(2),
|
|
B(Star), R(5),
|
|
B(LdaConstant), U8(7),
|
|
B(Star), R(6),
|
|
B(Mov), R(5), R(7),
|
|
B(Mov), R(3), R(8),
|
|
B(CallRuntime), U16(Runtime::kDefineClass), R(6), U8(3),
|
|
B(Star), R(6),
|
|
B(Mov), R(7), R(2),
|
|
B(LdaConstant), U8(9),
|
|
B(Star), R(7),
|
|
B(CallRuntime), U16(Runtime::kCreatePrivateNameSymbol), R(7), U8(1),
|
|
B(StaCurrentContextSlot), U8(5),
|
|
B(CreateClosure), U8(10), U8(4), U8(2),
|
|
B(Star), R(8),
|
|
B(CreateClosure), U8(11), U8(5), U8(2),
|
|
B(Star), R(9),
|
|
B(CallRuntime), U16(Runtime::kCreatePrivateAccessors), R(8), U8(2),
|
|
B(StaCurrentContextSlot), U8(4),
|
|
B(PopContext), R(4),
|
|
B(Mov), R(2), R(1),
|
|
B(LdaUndefined),
|
|
/* 175 S> */ B(Return),
|
|
]
|
|
constant pool: [
|
|
SCOPE_INFO_TYPE,
|
|
FIXED_ARRAY_TYPE,
|
|
SHARED_FUNCTION_INFO_TYPE,
|
|
ONE_BYTE_INTERNALIZED_STRING_TYPE ["D"],
|
|
SHARED_FUNCTION_INFO_TYPE,
|
|
SHARED_FUNCTION_INFO_TYPE,
|
|
SCOPE_INFO_TYPE,
|
|
FIXED_ARRAY_TYPE,
|
|
SHARED_FUNCTION_INFO_TYPE,
|
|
ONE_BYTE_INTERNALIZED_STRING_TYPE ["E"],
|
|
SHARED_FUNCTION_INFO_TYPE,
|
|
SHARED_FUNCTION_INFO_TYPE,
|
|
]
|
|
handlers: [
|
|
]
|
|
|
|
---
|
|
snippet: "
|
|
{
|
|
class A { foo() {} }
|
|
class C extends A {
|
|
get #a() { return super.foo; }
|
|
}
|
|
new C();
|
|
}
|
|
"
|
|
frame size: 10
|
|
parameter count: 1
|
|
bytecode array length: 119
|
|
bytecodes: [
|
|
/* 30 E> */ B(StackCheck),
|
|
B(CreateBlockContext), U8(0),
|
|
B(PushContext), R(4),
|
|
B(LdaTheHole),
|
|
B(Star), R(8),
|
|
B(CreateClosure), U8(2), U8(0), U8(2),
|
|
B(Star), R(5),
|
|
B(LdaConstant), U8(1),
|
|
B(Star), R(6),
|
|
B(CreateClosure), U8(3), U8(1), U8(2),
|
|
B(Star), R(9),
|
|
B(Mov), R(5), R(7),
|
|
B(CallRuntime), U16(Runtime::kDefineClass), R(6), U8(4),
|
|
B(Star), R(6),
|
|
B(Mov), R(7), R(3),
|
|
B(PopContext), R(4),
|
|
B(Mov), R(3), R(0),
|
|
/* 38 E> */ B(CreateBlockContext), U8(4),
|
|
B(PushContext), R(4),
|
|
/* 77 E> */ B(CreateClosure), U8(6), U8(2), U8(2),
|
|
B(Star), R(5),
|
|
B(LdaConstant), U8(5),
|
|
B(Star), R(6),
|
|
B(Mov), R(5), R(7),
|
|
B(Mov), R(3), R(8),
|
|
B(CallRuntime), U16(Runtime::kDefineClass), R(6), U8(3),
|
|
B(Star), R(6),
|
|
B(Mov), R(7), R(2),
|
|
B(LdaConstant), U8(7),
|
|
B(Star), R(7),
|
|
B(CallRuntime), U16(Runtime::kCreatePrivateNameSymbol), R(7), U8(1),
|
|
B(StaCurrentContextSlot), U8(5),
|
|
B(CreateClosure), U8(8), U8(3), U8(2),
|
|
B(Star), R(8),
|
|
B(Ldar), R(6),
|
|
B(StaNamedProperty), R(8), U8(9), U8(0),
|
|
B(LdaNull),
|
|
B(Star), R(9),
|
|
B(CallRuntime), U16(Runtime::kCreatePrivateAccessors), R(8), U8(2),
|
|
B(StaCurrentContextSlot), U8(4),
|
|
B(PopContext), R(4),
|
|
B(Mov), R(2), R(1),
|
|
/* 122 S> */ B(Ldar), R(1),
|
|
/* 122 E> */ B(Construct), R(1), R(0), U8(0), U8(2),
|
|
B(LdaUndefined),
|
|
/* 133 S> */ B(Return),
|
|
]
|
|
constant pool: [
|
|
SCOPE_INFO_TYPE,
|
|
FIXED_ARRAY_TYPE,
|
|
SHARED_FUNCTION_INFO_TYPE,
|
|
SHARED_FUNCTION_INFO_TYPE,
|
|
SCOPE_INFO_TYPE,
|
|
FIXED_ARRAY_TYPE,
|
|
SHARED_FUNCTION_INFO_TYPE,
|
|
ONE_BYTE_INTERNALIZED_STRING_TYPE ["C"],
|
|
SHARED_FUNCTION_INFO_TYPE,
|
|
SYMBOL_TYPE,
|
|
]
|
|
handlers: [
|
|
]
|
|
|
|
---
|
|
snippet: "
|
|
{
|
|
class A { foo(val) {} }
|
|
class C extends A {
|
|
set #a(val) { super.foo(val); }
|
|
}
|
|
new C();
|
|
}
|
|
"
|
|
frame size: 10
|
|
parameter count: 1
|
|
bytecode array length: 119
|
|
bytecodes: [
|
|
/* 30 E> */ B(StackCheck),
|
|
B(CreateBlockContext), U8(0),
|
|
B(PushContext), R(4),
|
|
B(LdaTheHole),
|
|
B(Star), R(8),
|
|
B(CreateClosure), U8(2), U8(0), U8(2),
|
|
B(Star), R(5),
|
|
B(LdaConstant), U8(1),
|
|
B(Star), R(6),
|
|
B(CreateClosure), U8(3), U8(1), U8(2),
|
|
B(Star), R(9),
|
|
B(Mov), R(5), R(7),
|
|
B(CallRuntime), U16(Runtime::kDefineClass), R(6), U8(4),
|
|
B(Star), R(6),
|
|
B(Mov), R(7), R(3),
|
|
B(PopContext), R(4),
|
|
B(Mov), R(3), R(0),
|
|
/* 38 E> */ B(CreateBlockContext), U8(4),
|
|
B(PushContext), R(4),
|
|
/* 80 E> */ B(CreateClosure), U8(6), U8(2), U8(2),
|
|
B(Star), R(5),
|
|
B(LdaConstant), U8(5),
|
|
B(Star), R(6),
|
|
B(Mov), R(5), R(7),
|
|
B(Mov), R(3), R(8),
|
|
B(CallRuntime), U16(Runtime::kDefineClass), R(6), U8(3),
|
|
B(Star), R(6),
|
|
B(Mov), R(7), R(2),
|
|
B(LdaConstant), U8(7),
|
|
B(Star), R(7),
|
|
B(CallRuntime), U16(Runtime::kCreatePrivateNameSymbol), R(7), U8(1),
|
|
B(StaCurrentContextSlot), U8(5),
|
|
B(LdaNull),
|
|
B(Star), R(8),
|
|
B(CreateClosure), U8(8), U8(3), U8(2),
|
|
B(Star), R(9),
|
|
B(Ldar), R(6),
|
|
B(StaNamedProperty), R(9), U8(9), U8(0),
|
|
B(CallRuntime), U16(Runtime::kCreatePrivateAccessors), R(8), U8(2),
|
|
B(StaCurrentContextSlot), U8(4),
|
|
B(PopContext), R(4),
|
|
B(Mov), R(2), R(1),
|
|
/* 126 S> */ B(Ldar), R(1),
|
|
/* 126 E> */ B(Construct), R(1), R(0), U8(0), U8(2),
|
|
B(LdaUndefined),
|
|
/* 137 S> */ B(Return),
|
|
]
|
|
constant pool: [
|
|
SCOPE_INFO_TYPE,
|
|
FIXED_ARRAY_TYPE,
|
|
SHARED_FUNCTION_INFO_TYPE,
|
|
SHARED_FUNCTION_INFO_TYPE,
|
|
SCOPE_INFO_TYPE,
|
|
FIXED_ARRAY_TYPE,
|
|
SHARED_FUNCTION_INFO_TYPE,
|
|
ONE_BYTE_INTERNALIZED_STRING_TYPE ["C"],
|
|
SHARED_FUNCTION_INFO_TYPE,
|
|
SYMBOL_TYPE,
|
|
]
|
|
handlers: [
|
|
]
|
|
|