Skip to content

Commit 14274bb

Browse files
sethbrenithCommit Bot
authored and
Commit Bot
committed
[torque] Use @generateCppClass in some simple cases
This change is mostly mechanical, but it's worth mentioning a few slightly interesting cases: - A couple of field definitions didn't match the signedness of their corresponding accessors. - The generated accessors for Smi data use Smi values directly, but usually we want C++ accessors to use ints instead. I added a macro that hides the generated Smi accessors and exposes int accessors, but we might consider generating int accessors directly. - The data held in some fields is described in comments next to the accessor definition for those fields. With automatically generated accessors, those comments need a new home. In this change I put them in the Torque object definition, but I'm open to other suggestions. - gen-postmortem-metadata couldn't find updated class definitions after they got split across multiple lines, so I changed its matching logic. (Ideally debug-support.cc should be a Torque compiler output rather than something that involves parsing C++ with regexes, but this makes it correctly report subclass relationships for now.) - The end offsets generated by Torque were off by one from the values that would be generated by DEFINE_FIELD_OFFSET_CONSTANTS. Change-Id: I3df4fcd27997b46c41ca879065b9d97f6c939f07 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1692192 Reviewed-by: Tobias Tebbi <tebbi@chromium.org> Reviewed-by: Michael Lippautz <mlippautz@chromium.org> Commit-Queue: Seth Brenith <seth.brenith@microsoft.com> Cr-Commit-Position: refs/heads/master@{#62719}
1 parent ab2ebc2 commit 14274bb

19 files changed

+145
-292
lines changed

Diff for: src/builtins/base.tq

+52-9
Original file line numberDiff line numberDiff line change
@@ -93,20 +93,24 @@ type Number = Smi | HeapNumber;
9393
type Numeric = Number | BigInt;
9494

9595
@abstract
96+
@generateCppClass
9697
extern class Name extends HeapObject {
97-
hash_field: int32;
98+
hash_field: uint32;
9899
}
99100

101+
@generateCppClass
100102
extern class Symbol extends Name {
101103
flags: int32;
102-
name: Object;
104+
name: Object; // The print name of a symbol, or undefined if none.
103105
}
104106

105107
@abstract
108+
@generateCppClass
106109
extern class String extends Name {
107-
length: uint32;
110+
length: int32;
108111
}
109112

113+
@generateCppClass
110114
extern class ConsString extends String {
111115
first: String;
112116
second: String;
@@ -121,21 +125,32 @@ extern class ExternalString extends String {
121125
extern class ExternalOneByteString extends ExternalString {}
122126
extern class ExternalTwoByteString extends ExternalString {}
123127

124-
extern class InternalizedString extends String {}
128+
@generateCppClass
129+
extern class InternalizedString extends String {
130+
}
125131

126132
// TODO(v8:8983): Add declaration for variable-sized region.
127133
@abstract
134+
@generateCppClass
128135
extern class SeqString extends String {
129136
}
130-
extern class SeqOneByteString extends SeqString {}
131-
extern class SeqTwoByteString extends SeqString {}
137+
@generateCppClass
138+
extern class SeqOneByteString extends SeqString {
139+
}
140+
@generateCppClass
141+
extern class SeqTwoByteString extends SeqString {
142+
}
132143

144+
@generateCppClass
133145
extern class SlicedString extends String {
134146
parent: String;
135147
offset: Smi;
136148
}
137149

138-
extern class ThinString extends String { actual: String; }
150+
@generateCppClass
151+
extern class ThinString extends String {
152+
actual: String;
153+
}
139154

140155
// The HeapNumber value NaN
141156
type NaN extends HeapNumber;
@@ -219,12 +234,14 @@ extern class Map extends HeapObject {
219234
}
220235

221236
@generatePrint
237+
@generateCppClass
222238
extern class EnumCache extends Struct {
223239
keys: FixedArray;
224240
indices: FixedArray;
225241
}
226242

227243
@generatePrint
244+
@generateCppClass
228245
extern class SourcePositionTableWithFrameCache extends Struct {
229246
source_position_table: ByteArray;
230247
stack_frame_cache: Object;
@@ -287,7 +304,24 @@ type Constructor extends JSReceiver;
287304

288305
@abstract
289306
@dirtyInstantiatedAbstractClass
307+
@generateCppClass
290308
extern class JSObject extends JSReceiver {
309+
// [elements]: The elements (properties with names that are integers).
310+
//
311+
// Elements can be in two general modes: fast and slow. Each mode
312+
// corresponds to a set of object representations of elements that
313+
// have something in common.
314+
//
315+
// In the fast mode elements is a FixedArray and so each element can be
316+
// quickly accessed. The elements array can have one of several maps in this
317+
// mode: fixed_array_map, fixed_double_array_map,
318+
// sloppy_arguments_elements_map or fixed_cow_array_map (for copy-on-write
319+
// arrays). In the latter case the elements array may be shared by a few
320+
// objects and so before writing to any element the array must be copied. Use
321+
// EnsureWritableFastElements in this case.
322+
//
323+
// In the slow mode the elements is either a NumberDictionary or a
324+
// FixedArray parameter map for a (sloppy) arguments object.
291325
elements: FixedArrayBase;
292326
}
293327

@@ -339,6 +373,7 @@ extern class JSFunction extends JSObject {
339373
@noVerifier weak prototype_or_initial_map: JSReceiver | Map;
340374
}
341375

376+
@generateCppClass
342377
extern class JSProxy extends JSReceiver {
343378
target: JSReceiver | Null;
344379
handler: JSReceiver | Null;
@@ -362,9 +397,17 @@ macro NewJSProxyRevocableResult(implicit context: Context)(
362397
};
363398
}
364399

365-
extern class JSGlobalProxy extends JSObject { native_context: Object; }
400+
@generateCppClass
401+
extern class JSGlobalProxy extends JSObject {
402+
// [native_context]: the owner native context of this global proxy object.
403+
// It is null value if this object is not used by any context.
404+
native_context: Object;
405+
}
366406

367-
extern class JSPrimitiveWrapper extends JSObject { value: Object; }
407+
@generateCppClass
408+
extern class JSPrimitiveWrapper extends JSObject {
409+
value: Object;
410+
}
368411

369412
extern class JSArgumentsObject extends JSObject {}
370413

Diff for: src/diagnostics/objects-debug.cc

-10
Original file line numberDiff line numberDiff line change
@@ -711,8 +711,6 @@ void EmbedderDataArray::EmbedderDataArrayVerify(Isolate* isolate) {
711711
}
712712
}
713713

714-
USE_TORQUE_VERIFIER(Struct)
715-
716714
USE_TORQUE_VERIFIER(FixedArrayBase)
717715

718716
USE_TORQUE_VERIFIER(FixedArray)
@@ -928,8 +926,6 @@ void JSAsyncGeneratorObject::JSAsyncGeneratorObjectVerify(Isolate* isolate) {
928926
queue().HeapObjectVerify(isolate);
929927
}
930928

931-
USE_TORQUE_VERIFIER(JSPrimitiveWrapper)
932-
933929
void JSDate::JSDateVerify(Isolate* isolate) {
934930
TorqueGeneratedClassVerifiers::JSDateVerify(*this, isolate);
935931

@@ -965,8 +961,6 @@ void JSDate::JSDateVerify(Isolate* isolate) {
965961

966962
USE_TORQUE_VERIFIER(JSMessageObject)
967963

968-
USE_TORQUE_VERIFIER(Name)
969-
970964
void String::StringVerify(Isolate* isolate) {
971965
TorqueGeneratedClassVerifiers::StringVerify(*this, isolate);
972966
CHECK(length() >= 0 && length() <= Smi::kMaxValue);
@@ -1001,8 +995,6 @@ void SlicedString::SlicedStringVerify(Isolate* isolate) {
1001995
CHECK_GE(this->length(), SlicedString::kMinLength);
1002996
}
1003997

1004-
USE_TORQUE_VERIFIER(SeqString)
1005-
1006998
USE_TORQUE_VERIFIER(ExternalString)
1007999

10081000
void JSBoundFunction::JSBoundFunctionVerify(Isolate* isolate) {
@@ -1645,8 +1637,6 @@ void EnumCache::EnumCacheVerify(Isolate* isolate) {
16451637
}
16461638
}
16471639

1648-
USE_TORQUE_VERIFIER(SourcePositionTableWithFrameCache)
1649-
16501640
USE_TORQUE_VERIFIER(ClassPositions)
16511641

16521642
void ObjectBoilerplateDescription::ObjectBoilerplateDescriptionVerify(

Diff for: src/heap/factory.cc

+1-1
Original file line numberDiff line numberDiff line change
@@ -1314,7 +1314,7 @@ Handle<String> Factory::NewProperSubString(Handle<String> str, int begin,
13141314

13151315
slice->set_hash_field(String::kEmptyHashField);
13161316
slice->set_length(length);
1317-
slice->set_parent(isolate(), *str);
1317+
slice->set_parent(*str);
13181318
slice->set_offset(offset);
13191319
return slice;
13201320
}

Diff for: src/objects/code-inl.h

+1-7
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ OBJECT_CONSTRUCTORS_IMPL(BytecodeArray, FixedArrayBase)
2929
OBJECT_CONSTRUCTORS_IMPL(AbstractCode, HeapObject)
3030
OBJECT_CONSTRUCTORS_IMPL(DependentCode, WeakFixedArray)
3131
OBJECT_CONSTRUCTORS_IMPL(CodeDataContainer, HeapObject)
32-
OBJECT_CONSTRUCTORS_IMPL(SourcePositionTableWithFrameCache, Struct)
32+
TQ_OBJECT_CONSTRUCTORS_IMPL(SourcePositionTableWithFrameCache)
3333

3434
NEVER_READ_ONLY_SPACE_IMPL(AbstractCode)
3535

@@ -39,12 +39,6 @@ CAST_ACCESSOR(Code)
3939
CAST_ACCESSOR(CodeDataContainer)
4040
CAST_ACCESSOR(DependentCode)
4141
CAST_ACCESSOR(DeoptimizationData)
42-
CAST_ACCESSOR(SourcePositionTableWithFrameCache)
43-
44-
ACCESSORS(SourcePositionTableWithFrameCache, source_position_table, ByteArray,
45-
kSourcePositionTableOffset)
46-
ACCESSORS(SourcePositionTableWithFrameCache, stack_frame_cache,
47-
SimpleNumberDictionary, kStackFrameCacheOffset)
4842

4943
int AbstractCode::raw_instruction_size() {
5044
if (IsCode()) {

Diff for: src/objects/code.h

+4-15
Original file line numberDiff line numberDiff line change
@@ -935,22 +935,11 @@ class DeoptimizationData : public FixedArray {
935935
OBJECT_CONSTRUCTORS(DeoptimizationData, FixedArray);
936936
};
937937

938-
class SourcePositionTableWithFrameCache : public Struct {
938+
class SourcePositionTableWithFrameCache
939+
: public TorqueGeneratedSourcePositionTableWithFrameCache<
940+
SourcePositionTableWithFrameCache, Struct> {
939941
public:
940-
DECL_ACCESSORS(source_position_table, ByteArray)
941-
DECL_ACCESSORS(stack_frame_cache, SimpleNumberDictionary)
942-
943-
DECL_CAST(SourcePositionTableWithFrameCache)
944-
945-
DECL_PRINTER(SourcePositionTableWithFrameCache)
946-
DECL_VERIFIER(SourcePositionTableWithFrameCache)
947-
948-
// Layout description.
949-
DEFINE_FIELD_OFFSET_CONSTANTS(
950-
Struct::kHeaderSize,
951-
TORQUE_GENERATED_SOURCE_POSITION_TABLE_WITH_FRAME_CACHE_FIELDS)
952-
953-
OBJECT_CONSTRUCTORS(SourcePositionTableWithFrameCache, Struct);
942+
TQ_OBJECT_CONSTRUCTORS(SourcePositionTableWithFrameCache)
954943
};
955944

956945
} // namespace internal

Diff for: src/objects/descriptor-array-inl.h

+1-5
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,9 @@ namespace v8 {
2525
namespace internal {
2626

2727
OBJECT_CONSTRUCTORS_IMPL(DescriptorArray, HeapObject)
28-
OBJECT_CONSTRUCTORS_IMPL(EnumCache, Struct)
28+
TQ_OBJECT_CONSTRUCTORS_IMPL(EnumCache)
2929

3030
CAST_ACCESSOR(DescriptorArray)
31-
CAST_ACCESSOR(EnumCache)
32-
33-
ACCESSORS(EnumCache, keys, FixedArray, kKeysOffset)
34-
ACCESSORS(EnumCache, indices, FixedArray, kIndicesOffset)
3531

3632
ACCESSORS(DescriptorArray, enum_cache, EnumCache, kEnumCacheOffset)
3733
RELAXED_INT16_ACCESSORS(DescriptorArray, number_of_all_descriptors,

Diff for: src/objects/descriptor-array.h

+2-12
Original file line numberDiff line numberDiff line change
@@ -22,21 +22,11 @@ class Handle;
2222
class Isolate;
2323

2424
// An EnumCache is a pair used to hold keys and indices caches.
25-
class EnumCache : public Struct {
25+
class EnumCache : public TorqueGeneratedEnumCache<EnumCache, Struct> {
2626
public:
27-
DECL_ACCESSORS(keys, FixedArray)
28-
DECL_ACCESSORS(indices, FixedArray)
29-
30-
DECL_CAST(EnumCache)
31-
32-
DECL_PRINTER(EnumCache)
3327
DECL_VERIFIER(EnumCache)
3428

35-
// Layout description.
36-
DEFINE_FIELD_OFFSET_CONSTANTS(Struct::kHeaderSize,
37-
TORQUE_GENERATED_ENUM_CACHE_FIELDS)
38-
39-
OBJECT_CONSTRUCTORS(EnumCache, Struct);
29+
TQ_OBJECT_CONSTRUCTORS(EnumCache)
4030
};
4131

4232
// A DescriptorArray is a custom array that holds instance descriptors.

Diff for: src/objects/js-objects-inl.h

+3-12
Original file line numberDiff line numberDiff line change
@@ -30,16 +30,16 @@ namespace v8 {
3030
namespace internal {
3131

3232
OBJECT_CONSTRUCTORS_IMPL(JSReceiver, HeapObject)
33-
OBJECT_CONSTRUCTORS_IMPL(JSObject, JSReceiver)
33+
TQ_OBJECT_CONSTRUCTORS_IMPL(JSObject)
3434
OBJECT_CONSTRUCTORS_IMPL(JSAsyncFromSyncIterator, JSObject)
3535
OBJECT_CONSTRUCTORS_IMPL(JSBoundFunction, JSObject)
3636
OBJECT_CONSTRUCTORS_IMPL(JSDate, JSObject)
3737
OBJECT_CONSTRUCTORS_IMPL(JSFunction, JSObject)
3838
OBJECT_CONSTRUCTORS_IMPL(JSGlobalObject, JSObject)
39-
OBJECT_CONSTRUCTORS_IMPL(JSGlobalProxy, JSObject)
39+
TQ_OBJECT_CONSTRUCTORS_IMPL(JSGlobalProxy)
4040
JSIteratorResult::JSIteratorResult(Address ptr) : JSObject(ptr) {}
4141
OBJECT_CONSTRUCTORS_IMPL(JSMessageObject, JSObject)
42-
OBJECT_CONSTRUCTORS_IMPL(JSPrimitiveWrapper, JSObject)
42+
TQ_OBJECT_CONSTRUCTORS_IMPL(JSPrimitiveWrapper)
4343
OBJECT_CONSTRUCTORS_IMPL(JSStringIterator, JSObject)
4444

4545
NEVER_READ_ONLY_SPACE_IMPL(JSReceiver)
@@ -49,11 +49,8 @@ CAST_ACCESSOR(JSBoundFunction)
4949
CAST_ACCESSOR(JSDate)
5050
CAST_ACCESSOR(JSFunction)
5151
CAST_ACCESSOR(JSGlobalObject)
52-
CAST_ACCESSOR(JSGlobalProxy)
5352
CAST_ACCESSOR(JSIteratorResult)
5453
CAST_ACCESSOR(JSMessageObject)
55-
CAST_ACCESSOR(JSObject)
56-
CAST_ACCESSOR(JSPrimitiveWrapper)
5754
CAST_ACCESSOR(JSReceiver)
5855
CAST_ACCESSOR(JSStringIterator)
5956

@@ -131,8 +128,6 @@ bool JSObject::PrototypeHasNoElements(Isolate* isolate, JSObject object) {
131128

132129
ACCESSORS(JSReceiver, raw_properties_or_hash, Object, kPropertiesOrHashOffset)
133130

134-
ACCESSORS(JSObject, elements, FixedArrayBase, kElementsOffset)
135-
136131
void JSObject::EnsureCanContainHeapObjectElements(Handle<JSObject> object) {
137132
JSObject::ValidateElements(*object);
138133
ElementsKind elements_kind = object->map().elements_kind();
@@ -465,8 +460,6 @@ ACCESSORS(JSFunction, raw_feedback_cell, FeedbackCell, kFeedbackCellOffset)
465460
ACCESSORS(JSGlobalObject, native_context, NativeContext, kNativeContextOffset)
466461
ACCESSORS(JSGlobalObject, global_proxy, JSGlobalProxy, kGlobalProxyOffset)
467462

468-
ACCESSORS(JSGlobalProxy, native_context, Object, kNativeContextOffset)
469-
470463
FeedbackVector JSFunction::feedback_vector() const {
471464
DCHECK(has_feedback_vector());
472465
return FeedbackVector::cast(raw_feedback_cell().value());
@@ -719,8 +712,6 @@ void JSFunction::ResetIfBytecodeFlushed() {
719712
}
720713
}
721714

722-
ACCESSORS(JSPrimitiveWrapper, value, Object, kValueOffset)
723-
724715
ACCESSORS(JSDate, value, Object, kValueOffset)
725716
ACCESSORS(JSDate, cache_stamp, Object, kCacheStampOffset)
726717
ACCESSORS(JSDate, year, Object, kYearOffset)

0 commit comments

Comments
 (0)