Convert UncompiledData class to Torque

I removed the padding field because I couldn't see a reason why we would
want to pad to system pointer size. I'm guessing that the intent was to
pad to tagged pointer size, which was once relevant but isn't anymore
since one of the int32 fields got removed.

Bug: v8:8952
Change-Id: Ic191d783efd8d686f6920e6e7ce2d3dacba883c5
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1776847
Reviewed-by: Tobias Tebbi <tebbi@chromium.org>
Commit-Queue: Seth Brenith <seth.brenith@microsoft.com>
Cr-Commit-Position: refs/heads/master@{#63556}
This commit is contained in:
Seth Brenith 2019-08-29 15:27:09 -07:00 committed by Commit Bot
parent 2314928b3a
commit e4e86b53cf
5 changed files with 37 additions and 92 deletions

View File

@ -697,6 +697,23 @@ extern class SharedFunctionInfo extends HeapObject {
@if(V8_SFI_HAS_UNIQUE_ID) unique_id: int32;
}
@abstract
@generateCppClass
extern class UncompiledData extends HeapObject {
inferred_name: String;
start_position: int32;
end_position: int32;
}
@generateCppClass
extern class UncompiledDataWithoutPreparseData extends UncompiledData {
}
@generateCppClass
extern class UncompiledDataWithPreparseData extends UncompiledData {
preparse_data: PreparseData;
}
@generateCppClass
extern class JSBoundFunction extends JSObject {
// The wrapped function object.

View File

@ -1749,19 +1749,6 @@ void PreparseData::PreparseDataVerify(Isolate* isolate) {
}
}
void UncompiledDataWithPreparseData::UncompiledDataWithPreparseDataVerify(
Isolate* isolate) {
CHECK(IsUncompiledDataWithPreparseData());
VerifyPointer(isolate, inferred_name());
VerifyPointer(isolate, preparse_data());
}
void UncompiledDataWithoutPreparseData::UncompiledDataWithoutPreparseDataVerify(
Isolate* isolate) {
CHECK(IsUncompiledDataWithoutPreparseData());
VerifyPointer(isolate, inferred_name());
}
USE_TORQUE_VERIFIER(InterpreterData)
#ifdef V8_INTL_SUPPORT

View File

@ -84,26 +84,9 @@ void PreparseData::set_child(int index, PreparseData value,
CONDITIONAL_WRITE_BARRIER(*this, offset, value, mode);
}
OBJECT_CONSTRUCTORS_IMPL(UncompiledData, HeapObject)
OBJECT_CONSTRUCTORS_IMPL(UncompiledDataWithoutPreparseData, UncompiledData)
OBJECT_CONSTRUCTORS_IMPL(UncompiledDataWithPreparseData, UncompiledData)
CAST_ACCESSOR(UncompiledData)
ACCESSORS(UncompiledData, inferred_name, String, kInferredNameOffset)
INT32_ACCESSORS(UncompiledData, start_position, kStartPositionOffset)
INT32_ACCESSORS(UncompiledData, end_position, kEndPositionOffset)
void UncompiledData::clear_padding() {
if (FIELD_SIZE(kOptionalPaddingOffset) == 0) return;
DCHECK_EQ(4, FIELD_SIZE(kOptionalPaddingOffset));
memset(reinterpret_cast<void*>(address() + kOptionalPaddingOffset), 0,
FIELD_SIZE(kOptionalPaddingOffset));
}
CAST_ACCESSOR(UncompiledDataWithoutPreparseData)
CAST_ACCESSOR(UncompiledDataWithPreparseData)
ACCESSORS(UncompiledDataWithPreparseData, preparse_data, PreparseData,
kPreparseDataOffset)
TQ_OBJECT_CONSTRUCTORS_IMPL(UncompiledData)
TQ_OBJECT_CONSTRUCTORS_IMPL(UncompiledDataWithoutPreparseData)
TQ_OBJECT_CONSTRUCTORS_IMPL(UncompiledDataWithPreparseData)
DEF_GETTER(HeapObject, IsUncompiledData, bool) {
return IsUncompiledDataWithoutPreparseData(isolate) ||
@ -618,7 +601,7 @@ void SharedFunctionInfo::ClearPreparseData() {
STATIC_ASSERT(UncompiledDataWithoutPreparseData::kSize <
UncompiledDataWithPreparseData::kSize);
STATIC_ASSERT(UncompiledDataWithoutPreparseData::kSize ==
UncompiledData::kSize);
UncompiledData::kHeaderSize);
data.synchronized_set_map(
GetReadOnlyRoots().uncompiled_data_without_preparse_data_map());
@ -644,7 +627,6 @@ void UncompiledData::Initialize(
data, data.RawField(UncompiledData::kInferredNameOffset), inferred_name);
data.set_start_position(start_position);
data.set_end_position(end_position);
data.clear_padding();
}
void UncompiledDataWithPreparseData::Initialize(

View File

@ -100,14 +100,9 @@ class PreparseData : public HeapObject {
// Abstract class representing extra data for an uncompiled function, which is
// not stored in the SharedFunctionInfo.
class UncompiledData : public HeapObject {
class UncompiledData
: public TorqueGeneratedUncompiledData<UncompiledData, HeapObject> {
public:
DECL_ACCESSORS(inferred_name, String)
DECL_INT32_ACCESSORS(start_position)
DECL_INT32_ACCESSORS(end_position)
DECL_CAST(UncompiledData)
inline static void Initialize(
UncompiledData data, String inferred_name, int start_position,
int end_position,
@ -115,56 +110,35 @@ class UncompiledData : public HeapObject {
gc_notify_updated_slot =
[](HeapObject object, ObjectSlot slot, HeapObject target) {});
// Layout description.
#define UNCOMPILED_DATA_FIELDS(V) \
V(kStartOfStrongFieldsOffset, 0) \
V(kInferredNameOffset, kTaggedSize) \
V(kEndOfStrongFieldsOffset, 0) \
/* Raw data fields. */ \
V(kStartPositionOffset, kInt32Size) \
V(kEndPositionOffset, kInt32Size) \
V(kOptionalPaddingOffset, POINTER_SIZE_PADDING(kOptionalPaddingOffset)) \
/* Header size. */ \
V(kSize, 0)
using BodyDescriptor =
FixedBodyDescriptor<kStartOfStrongFieldsOffset, kEndOfStrongFieldsOffset,
kHeaderSize>;
DEFINE_FIELD_OFFSET_CONSTANTS(HeapObject::kHeaderSize, UNCOMPILED_DATA_FIELDS)
#undef UNCOMPILED_DATA_FIELDS
using BodyDescriptor = FixedBodyDescriptor<kStartOfStrongFieldsOffset,
kEndOfStrongFieldsOffset, kSize>;
// Clear uninitialized padding space.
inline void clear_padding();
OBJECT_CONSTRUCTORS(UncompiledData, HeapObject);
TQ_OBJECT_CONSTRUCTORS(UncompiledData)
};
// Class representing data for an uncompiled function that does not have any
// data from the pre-parser, either because it's a leaf function or because the
// pre-parser bailed out.
class UncompiledDataWithoutPreparseData : public UncompiledData {
class UncompiledDataWithoutPreparseData
: public TorqueGeneratedUncompiledDataWithoutPreparseData<
UncompiledDataWithoutPreparseData, UncompiledData> {
public:
DECL_CAST(UncompiledDataWithoutPreparseData)
DECL_PRINTER(UncompiledDataWithoutPreparseData)
DECL_VERIFIER(UncompiledDataWithoutPreparseData)
static const int kSize = UncompiledData::kSize;
// No extra fields compared to UncompiledData.
using BodyDescriptor = UncompiledData::BodyDescriptor;
OBJECT_CONSTRUCTORS(UncompiledDataWithoutPreparseData, UncompiledData);
TQ_OBJECT_CONSTRUCTORS(UncompiledDataWithoutPreparseData)
};
// Class representing data for an uncompiled function that has pre-parsed scope
// data.
class UncompiledDataWithPreparseData : public UncompiledData {
class UncompiledDataWithPreparseData
: public TorqueGeneratedUncompiledDataWithPreparseData<
UncompiledDataWithPreparseData, UncompiledData> {
public:
DECL_ACCESSORS(preparse_data, PreparseData)
DECL_CAST(UncompiledDataWithPreparseData)
DECL_PRINTER(UncompiledDataWithPreparseData)
DECL_VERIFIER(UncompiledDataWithPreparseData)
inline static void Initialize(
UncompiledDataWithPreparseData data, String inferred_name,
@ -173,28 +147,12 @@ class UncompiledDataWithPreparseData : public UncompiledData {
gc_notify_updated_slot =
[](HeapObject object, ObjectSlot slot, HeapObject target) {});
// Layout description.
#define UNCOMPILED_DATA_WITH_PREPARSE_DATA_FIELDS(V) \
V(kStartOfStrongFieldsOffset, 0) \
V(kPreparseDataOffset, kTaggedSize) \
V(kEndOfStrongFieldsOffset, 0) \
/* Total size. */ \
V(kSize, 0)
DEFINE_FIELD_OFFSET_CONSTANTS(UncompiledData::kSize,
UNCOMPILED_DATA_WITH_PREPARSE_DATA_FIELDS)
#undef UNCOMPILED_DATA_WITH_PREPARSE_DATA_FIELDS
// Make sure the size is aligned
STATIC_ASSERT(IsAligned(kSize, kTaggedSize));
using BodyDescriptor = SubclassBodyDescriptor<
UncompiledData::BodyDescriptor,
FixedBodyDescriptor<kStartOfStrongFieldsOffset, kEndOfStrongFieldsOffset,
kSize>>;
OBJECT_CONSTRUCTORS(UncompiledDataWithPreparseData, UncompiledData);
TQ_OBJECT_CONSTRUCTORS(UncompiledDataWithPreparseData)
};
class InterpreterData : public Struct {

View File

@ -3316,7 +3316,8 @@ void ImplementationVisitor::GenerateClassDefinitions(
inline_header << "#include \"src/objects/js-promise.h\"\n";
inline_header << "#include \"src/objects/module.h\"\n";
inline_header << "#include \"src/objects/objects-inl.h\"\n";
inline_header << "#include \"src/objects/script.h\"\n\n";
inline_header << "#include \"src/objects/script.h\"\n";
inline_header << "#include \"src/objects/shared-function-info.h\"\n\n";
IncludeObjectMacrosScope inline_header_macros(inline_header);
NamespaceScope inline_header_namespaces(inline_header, {"v8", "internal"});