Commit e97dfa67 authored by Seth Brenith's avatar Seth Brenith Committed by Commit Bot

[torque] convert a handful of simple class layout definitions to Torque

I tried to use more specific union types where appropriate, even though
many of these fields are accessed as Object from C++.

Bug: v8:7793
Change-Id: I771d9b6459bdc1413019f8ff5ddfd611d1adf61f
Reviewed-on: https://chromium-review.googlesource.com/c/1490573
Commit-Queue: Tobias Tebbi <tebbi@chromium.org>
Reviewed-by: 's avatarClemens Hammacher <clemensh@chromium.org>
Reviewed-by: 's avatarTobias Tebbi <tebbi@chromium.org>
Cr-Commit-Position: refs/heads/master@{#59975}
parent d71374b1
......@@ -10,6 +10,10 @@
#include 'src/objects.h'
#include 'src/objects/arguments.h'
#include 'src/objects/bigint.h'
#include 'src/objects/js-generator.h'
#include 'src/objects/js-promise.h'
#include 'src/objects/module.h'
#include 'src/objects/stack-frame-info.h'
type Arguments constexpr 'CodeStubArguments*';
type void;
......@@ -21,6 +25,9 @@ type Smi extends Tagged generates 'TNode<Smi>' constexpr 'Smi';
// A Smi that is greater than or equal to 0. See TaggedIsPositiveSmi.
type PositiveSmi extends Smi;
// The Smi value zero, which is often used as null for HeapObject types.
type Zero extends PositiveSmi;
extern class HeapObject extends Tagged { map: Map; }
type Object = Smi | HeapObject;
......@@ -59,6 +66,15 @@ type Number = Smi | HeapNumber;
type BigInt extends HeapObject generates 'TNode<BigInt>';
type Numeric = Number | BigInt;
extern class Struct extends HeapObject {}
extern class Tuple2 extends Struct {
value_1: Object;
value_2: Object;
}
extern class Tuple3 extends Tuple2 { value_3: Object; }
// A direct string can be accessed directly through CSA without going into the
// C++ runtime. See also: ToDirectStringAssembler.
type DirectString extends String;
......@@ -298,6 +314,79 @@ type ToIntegerTruncationMode
constexpr 'CodeStubAssembler::ToIntegerTruncationMode';
type AllocationFlags constexpr 'AllocationFlags';
extern class Foreign extends HeapObject { foreign_address: RawPtr; }
extern class InterceptorInfo extends Struct {
getter: Foreign | Zero;
setter: Foreign | Zero;
query: Foreign | Zero;
descriptor: Foreign | Zero;
deleter: Foreign | Zero;
enumerator: Foreign | Zero;
definer: Foreign | Zero;
data: Object;
flags: Smi;
}
extern class AccessCheckInfo extends Struct {
callback: Foreign | Zero;
named_interceptor: InterceptorInfo | Zero;
indexed_interceptor: InterceptorInfo | Zero;
data: Object;
}
extern class ArrayBoilerplateDescription extends Struct {
flags: Smi;
constant_elements: FixedArrayBase;
}
extern class AliasedArgumentsEntry extends Struct { aliased_context_slot: Smi; }
extern class Cell extends HeapObject { value: Object; }
extern class DataHandler extends Struct {
smi_handler: Smi | Code;
validity_cell: Smi | Cell;
weak data_1: Object;
weak data_2: Object;
weak data_3: Object;
}
extern class JSPromise extends JSObject {
reactions_or_result: Object;
flags: Smi;
}
extern class Microtask extends Struct {}
extern class CallbackTask extends Microtask {
callback: Foreign;
data: Foreign;
}
extern class CallableTask extends Microtask {
callable: JSReceiver;
context: Context;
}
extern class StackFrameInfo extends Struct {
line_number: Smi;
column_number: Smi;
script_id: Smi;
script_name: Object;
script_name_or_source_url: Object;
function_name: Object;
flag: Smi;
id: Smi;
}
extern class ClassPositions extends Struct {
start: Smi;
end: Smi;
}
extern class WasmExceptionTag extends Struct { index: Smi; }
const kSmiTagSize: constexpr int31 generates 'kSmiTagSize';
const NO_ELEMENTS: constexpr ElementsKind generates 'NO_ELEMENTS';
......@@ -480,6 +569,36 @@ const INTPTR_PARAMETERS: constexpr ParameterMode
const SKIP_WRITE_BARRIER:
constexpr WriteBarrierMode generates 'SKIP_WRITE_BARRIER';
extern class AsyncGeneratorRequest extends Struct {
next: AsyncGeneratorRequest | Undefined;
resume_mode: Smi;
value: Object;
promise: JSPromise;
}
extern class ModuleInfoEntry extends Struct {
export_name: String | Undefined;
local_name: String | Undefined;
import_name: String | Undefined;
module_request: Smi;
cell_index: Smi;
beg_pos: Smi;
end_pos: Smi;
}
extern class PromiseCapability extends Struct {
promise: JSReceiver | Undefined;
resolve: Object;
reject: Object;
}
extern class PromiseReaction extends Struct {
next: PromiseReaction | Zero;
reject_handler: Callable | Undefined;
fulfill_handler: Callable | Undefined;
promise_or_capability: JSPromise | PromiseCapability | Undefined;
}
extern macro Is64(): constexpr bool;
extern macro SelectBooleanConstant(bool): Boolean;
......
......@@ -692,7 +692,7 @@ void Map::DictionaryMapVerify(Isolate* isolate) {
}
void AliasedArgumentsEntry::AliasedArgumentsEntryVerify(Isolate* isolate) {
VerifySmiField(kAliasedContextSlot);
VerifySmiField(kAliasedContextSlotOffset);
}
void EmbedderDataArray::EmbedderDataArrayVerify(Isolate* isolate) {
......
......@@ -126,17 +126,8 @@ class AccessCheckInfo : public Struct {
static AccessCheckInfo Get(Isolate* isolate, Handle<JSObject> receiver);
// Layout description.
#define ACCESS_CHECK_INFO_FIELDS(V) \
V(kCallbackOffset, kTaggedSize) \
V(kNamedInterceptorOffset, kTaggedSize) \
V(kIndexedInterceptorOffset, kTaggedSize) \
V(kDataOffset, kTaggedSize) \
V(kSize, 0)
DEFINE_FIELD_OFFSET_CONSTANTS(HeapObject::kHeaderSize,
ACCESS_CHECK_INFO_FIELDS)
#undef ACCESS_CHECK_INFO_FIELDS
OBJECT_CONSTRUCTORS(AccessCheckInfo, Struct);
};
......@@ -166,22 +157,8 @@ class InterceptorInfo : public Struct {
DECL_PRINTER(InterceptorInfo)
DECL_VERIFIER(InterceptorInfo)
// Layout description.
#define INTERCEPTOR_INFO_FIELDS(V) \
V(kGetterOffset, kTaggedSize) \
V(kSetterOffset, kTaggedSize) \
V(kQueryOffset, kTaggedSize) \
V(kDescriptorOffset, kTaggedSize) \
V(kDeleterOffset, kTaggedSize) \
V(kEnumeratorOffset, kTaggedSize) \
V(kDefinerOffset, kTaggedSize) \
V(kDataOffset, kTaggedSize) \
V(kFlagsOffset, kTaggedSize) \
V(kSize, 0)
DEFINE_FIELD_OFFSET_CONSTANTS(HeapObject::kHeaderSize,
INTERCEPTOR_INFO_FIELDS)
#undef INTERCEPTOR_INFO_FIELDS
static const int kCanInterceptSymbolsBit = 0;
static const int kAllCanReadBit = 1;
......
......@@ -26,7 +26,8 @@ CAST_ACCESSOR(AliasedArgumentsEntry)
CAST_ACCESSOR(SloppyArgumentsElements)
CAST_ACCESSOR(JSArgumentsObject)
SMI_ACCESSORS(AliasedArgumentsEntry, aliased_context_slot, kAliasedContextSlot)
SMI_ACCESSORS(AliasedArgumentsEntry, aliased_context_slot,
kAliasedContextSlotOffset)
Context SloppyArgumentsElements::context() {
return Context::cast(get(kContextIndex));
......
......@@ -140,15 +140,8 @@ class AliasedArgumentsEntry : public Struct {
DECL_PRINTER(AliasedArgumentsEntry)
DECL_VERIFIER(AliasedArgumentsEntry)
// Layout description.
#define ALIASED_ARGUMENTS_FIELDS(V) \
V(kAliasedContextSlot, kTaggedSize) \
/* Total size. */ \
V(kSize, 0)
DEFINE_FIELD_OFFSET_CONSTANTS(HeapObject::kHeaderSize,
ALIASED_ARGUMENTS_FIELDS)
#undef ALIASED_ARGUMENTS_FIELDS
ALIASED_ARGUMENTS_ENTRY_FIELDS)
OBJECT_CONSTRUCTORS(AliasedArgumentsEntry, Struct);
};
......
......@@ -6,6 +6,7 @@
#define V8_OBJECTS_CELL_H_
#include "src/objects/heap-object.h"
#include "torque-generated/class-definitions-from-dsl.h"
// Has to be the last include (doesn't have include guards):
#include "src/objects/object-macros.h"
......@@ -28,14 +29,7 @@ class Cell : public HeapObject {
DECL_PRINTER(Cell)
DECL_VERIFIER(Cell)
// Layout description.
#define CELL_FIELDS(V) \
V(kValueOffset, kTaggedSize) \
/* Total size. */ \
V(kSize, 0)
DEFINE_FIELD_OFFSET_CONSTANTS(HeapObject::kHeaderSize, CELL_FIELDS)
#undef CELL_FIELDS
typedef FixedBodyDescriptor<kValueOffset, kSize, kSize> BodyDescriptor;
......
......@@ -35,20 +35,12 @@ class DataHandler : public Struct {
DECL_ACCESSORS(data2, MaybeObject)
DECL_ACCESSORS(data3, MaybeObject)
// Layout description.
#define DATA_HANDLER_FIELDS(V) \
V(kSmiHandlerOffset, kTaggedSize) \
V(kValidityCellOffset, kTaggedSize) \
V(kSizeWithData0, 0) \
V(kData1Offset, kTaggedSize) \
V(kSizeWithData1, 0) \
V(kData2Offset, kTaggedSize) \
V(kSizeWithData2, 0) \
V(kData3Offset, kTaggedSize) \
V(kSizeWithData3, 0)
DEFINE_FIELD_OFFSET_CONSTANTS(HeapObject::kHeaderSize, DATA_HANDLER_FIELDS)
#undef DATA_HANDLER_FIELDS
static const int kSizeWithData0 = kData1Offset;
static const int kSizeWithData1 = kData2Offset;
static const int kSizeWithData2 = kData3Offset;
static const int kSizeWithData3 = kSize;
DECL_CAST(DataHandler)
......
......@@ -6,6 +6,7 @@
#define V8_OBJECTS_FOREIGN_H_
#include "src/objects/heap-object.h"
#include "torque-generated/class-definitions-from-dsl.h"
// Has to be the last include (doesn't have include guards):
#include "src/objects/object-macros.h"
......@@ -27,14 +28,7 @@ class Foreign : public HeapObject {
DECL_PRINTER(Foreign)
DECL_VERIFIER(Foreign)
// Layout description.
#define FOREIGN_FIELDS(V) \
V(kForeignAddressOffset, kSystemPointerSize) \
/* Total size. */ \
V(kSize, 0)
DEFINE_FIELD_OFFSET_CONSTANTS(HeapObject::kHeaderSize, FOREIGN_FIELDS)
#undef FOREIGN_FIELDS
STATIC_ASSERT(IsAligned(kForeignAddressOffset, kSystemPointerSize));
STATIC_ASSERT(kForeignAddressOffset == Internals::kForeignAddressOffset);
......
......@@ -146,18 +146,8 @@ class AsyncGeneratorRequest : public Struct {
DECL_ACCESSORS(value, Object)
DECL_ACCESSORS(promise, Object)
// Layout description.
#define ASYNC_GENERATOR_REQUEST_FIELDS(V) \
V(kNextOffset, kTaggedSize) \
V(kResumeModeOffset, kTaggedSize) \
V(kValueOffset, kTaggedSize) \
V(kPromiseOffset, kTaggedSize) \
/* Total size. */ \
V(kSize, 0)
DEFINE_FIELD_OFFSET_CONSTANTS(Struct::kHeaderSize,
ASYNC_GENERATOR_REQUEST_FIELDS)
#undef ASYNC_GENERATOR_REQUEST_FIELDS
DECL_CAST(AsyncGeneratorRequest)
DECL_PRINTER(AsyncGeneratorRequest)
......
......@@ -68,14 +68,7 @@ class JSPromise : public JSObject {
DECL_PRINTER(JSPromise)
DECL_VERIFIER(JSPromise)
#define JS_PROMISE_FIELDS(V) \
V(kReactionsOrResultOffset, kTaggedSize) \
V(kFlagsOffset, kTaggedSize) \
/* Header size. */ \
V(kSize, 0)
DEFINE_FIELD_OFFSET_CONSTANTS(JSObject::kHeaderSize, JS_PROMISE_FIELDS)
#undef JS_PROMISE_FIELDS
DEFINE_FIELD_OFFSET_CONSTANTS(JSObject::kHeaderSize, JSPROMISE_FIELDS)
static const int kSizeWithEmbedderFields =
kSize + v8::Promise::kEmbedderFieldCount * kEmbedderDataSlotSize;
......
......@@ -68,15 +68,8 @@ class ArrayBoilerplateDescription : public Struct {
DECL_VERIFIER(ArrayBoilerplateDescription)
void BriefPrintDetails(std::ostream& os);
#define ARRAY_BOILERPLATE_DESCRIPTION_FIELDS(V) \
V(kFlagsOffset, kTaggedSize) \
V(kConstantElementsOffset, kTaggedSize) \
/* Total size. */ \
V(kSize, 0)
DEFINE_FIELD_OFFSET_CONSTANTS(HeapObject::kHeaderSize,
ARRAY_BOILERPLATE_DESCRIPTION_FIELDS)
#undef ARRAY_BOILERPLATE_DESCRIPTION_FIELDS
private:
DECL_INT_ACCESSORS(flags)
......
......@@ -34,15 +34,7 @@ class CallbackTask : public Microtask {
DECL_ACCESSORS(callback, Foreign)
DECL_ACCESSORS(data, Foreign)
// Layout description.
#define CALLBACK_TASK_FIELDS(V) \
V(kCallbackOffset, kTaggedSize) \
V(kDataOffset, kTaggedSize) \
/* Total size. */ \
V(kSize, 0)
DEFINE_FIELD_OFFSET_CONSTANTS(Microtask::kHeaderSize, CALLBACK_TASK_FIELDS)
#undef CALLBACK_TASK_FIELDS
// Dispatched behavior.
DECL_CAST(CallbackTask)
......@@ -60,15 +52,7 @@ class CallableTask : public Microtask {
DECL_ACCESSORS(callable, JSReceiver)
DECL_ACCESSORS(context, Context)
// Layout description.
#define CALLABLE_TASK_FIELDS(V) \
V(kCallableOffset, kTaggedSize) \
V(kContextOffset, kTaggedSize) \
/* Total size. */ \
V(kSize, 0)
DEFINE_FIELD_OFFSET_CONSTANTS(Microtask::kHeaderSize, CALLABLE_TASK_FIELDS)
#undef CALLABLE_TASK_FIELDS
// Dispatched behavior.
DECL_CAST(CallableTask)
......
......@@ -333,20 +333,7 @@ class ModuleInfoEntry : public Struct {
int module_request, int cell_index,
int beg_pos, int end_pos);
// Layout description.
#define MODULE_INFO_FIELDS(V) \
V(kExportNameOffset, kTaggedSize) \
V(kLocalNameOffset, kTaggedSize) \
V(kImportNameOffset, kTaggedSize) \
V(kModuleRequestOffset, kTaggedSize) \
V(kCellIndexOffset, kTaggedSize) \
V(kBegPosOffset, kTaggedSize) \
V(kEndPosOffset, kTaggedSize) \
/* Total size. */ \
V(kSize, 0)
DEFINE_FIELD_OFFSET_CONSTANTS(Struct::kHeaderSize, MODULE_INFO_FIELDS)
#undef MODULE_INFO_FIELDS
DEFINE_FIELD_OFFSET_CONSTANTS(Struct::kHeaderSize, MODULE_INFO_ENTRY_FIELDS)
OBJECT_CONSTRUCTORS(ModuleInfoEntry, Struct);
};
......
......@@ -111,16 +111,7 @@ class PromiseCapability : public Struct {
DECL_ACCESSORS(resolve, Object)
DECL_ACCESSORS(reject, Object)
// Layout description.
#define PROMISE_CAPABILITY_FIELDS(V) \
V(kPromiseOffset, kTaggedSize) \
V(kResolveOffset, kTaggedSize) \
V(kRejectOffset, kTaggedSize) \
/* Total size. */ \
V(kSize, 0)
DEFINE_FIELD_OFFSET_CONSTANTS(Struct::kHeaderSize, PROMISE_CAPABILITY_FIELDS)
#undef PROMISE_CAPABILITY_FIELDS
// Dispatched behavior.
DECL_CAST(PromiseCapability)
......@@ -158,17 +149,7 @@ class PromiseReaction : public Struct {
// a PromiseCapability (general case), or undefined (in case of await).
DECL_ACCESSORS(promise_or_capability, HeapObject)
// Layout description.
#define PROMISE_REACTION_FIELDS(V) \
V(kNextOffset, kTaggedSize) \
V(kRejectHandlerOffset, kTaggedSize) \
V(kFulfillHandlerOffset, kTaggedSize) \
V(kPromiseOrCapabilityOffset, kTaggedSize) \
/* Total size. */ \
V(kSize, 0)
DEFINE_FIELD_OFFSET_CONSTANTS(Struct::kHeaderSize, PROMISE_REACTION_FIELDS)
#undef PROMISE_REACTION_FIELDS
// Dispatched behavior.
DECL_CAST(PromiseReaction)
......
......@@ -36,21 +36,7 @@ class StackFrameInfo : public Struct {
DECL_PRINTER(StackFrameInfo)
DECL_VERIFIER(StackFrameInfo)
// Layout description.
#define STACK_FRAME_INFO_FIELDS(V) \
V(kLineNumberOffset, kTaggedSize) \
V(kColumnNumberOffset, kTaggedSize) \
V(kScriptIdOffset, kTaggedSize) \
V(kScriptNameOffset, kTaggedSize) \
V(kScriptNameOrSourceUrlOffset, kTaggedSize) \
V(kFunctionNameOffset, kTaggedSize) \
V(kFlagOffset, kTaggedSize) \
V(kIdOffset, kTaggedSize) \
/* Total size. */ \
V(kSize, 0)
DEFINE_FIELD_OFFSET_CONSTANTS(Struct::kHeaderSize, STACK_FRAME_INFO_FIELDS)
#undef STACK_FRAME_INFO_FIELDS
private:
// Bit position in the flag, from least significant bit position.
......
......@@ -7,6 +7,7 @@
#include "src/objects.h"
#include "src/objects/heap-object.h"
#include "torque-generated/class-definitions-from-dsl.h"
// Has to be the last include (doesn't have include guards):
#include "src/objects/object-macros.h"
......@@ -38,15 +39,8 @@ class Tuple2 : public Struct {
DECL_VERIFIER(Tuple2)
void BriefPrintDetails(std::ostream& os);
// Layout description.
#define TUPLE2_FIELDS(V) \
V(kValue1Offset, kTaggedSize) \
V(kValue2Offset, kTaggedSize) \
/* Total size. */ \
V(kSize, 0)
DEFINE_FIELD_OFFSET_CONSTANTS(HeapObject::kHeaderSize, TUPLE2_FIELDS)
#undef TUPLE2_FIELDS
OBJECT_CONSTRUCTORS(Tuple2, Struct);
};
......@@ -62,14 +56,7 @@ class Tuple3 : public Tuple2 {
DECL_VERIFIER(Tuple3)
void BriefPrintDetails(std::ostream& os);
// Layout description.
#define TUPLE3_FIELDS(V) \
V(kValue3Offset, kTaggedSize) \
/* Total size. */ \
V(kSize, 0)
DEFINE_FIELD_OFFSET_CONSTANTS(Tuple2::kSize, TUPLE3_FIELDS)
#undef TUPLE3_FIELDS
OBJECT_CONSTRUCTORS(Tuple3, Tuple2);
};
......@@ -131,15 +118,7 @@ class ClassPositions : public Struct {
DECL_VERIFIER(ClassPositions)
void BriefPrintDetails(std::ostream& os);
// Layout description.
#define CLASS_POSITIONS_FIELDS(V) \
V(kStartOffset, kTaggedSize) \
V(kEndOffset, kTaggedSize) \
/* Total size. */ \
V(kSize, 0)
DEFINE_FIELD_OFFSET_CONSTANTS(HeapObject::kHeaderSize, CLASS_POSITIONS_FIELDS)
#undef CLASS_POSITIONS_FIELDS
OBJECT_CONSTRUCTORS(ClassPositions, Struct);
};
......
......@@ -107,8 +107,8 @@ void ImplementationVisitor::EndNamespaceFile(Namespace* nspace) {
header << " private:\n"
<< " compiler::CodeAssemblerState* const state_;\n"
<< " compiler::CodeAssembler ca_;"
<< "}; \n\n";
<< " compiler::CodeAssembler ca_;\n"
<< "};\n\n";
header << "} // namespace internal\n"
<< "} // namespace v8\n"
<< "\n";
......
......@@ -758,14 +758,7 @@ class WasmExceptionTag : public Struct {
DECL_PRINTER(WasmExceptionTag)
DECL_VERIFIER(WasmExceptionTag)
// Layout description.
#define WASM_EXCEPTION_TAG_FIELDS(V) \
V(kIndexOffset, kTaggedSize) \
/* Total size. */ \
V(kSize, 0)
DEFINE_FIELD_OFFSET_CONSTANTS(Struct::kHeaderSize, WASM_EXCEPTION_TAG_FIELDS)
#undef WASM_EXCEPTION_TAG_FIELDS
OBJECT_CONSTRUCTORS(WasmExceptionTag, Struct);
};
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment