[dart2bytecode, vm] Adjust bytecode file format
* Switch UInt32 from big-endian to little-endian encoding. * Reorder object kinds, constant tags, type tags and constant pool tags. * Reorder field and function flags. * Cleanup yield point marker from source positions. TEST=ci Change-Id: I05ee940b6393a478831af11ac93fee9ec1441c4e Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/384040 Reviewed-by: Slava Egorov <vegorov@google.com> Commit-Queue: Alexander Markov <alexmarkov@google.com>
This commit is contained in:
committed by
Commit Queue
parent
0e58775986
commit
fcdcdeddad
@@ -105,12 +105,6 @@ class BytecodeAssembler {
|
||||
}
|
||||
}
|
||||
|
||||
void emitYieldPointSourcePosition(int yieldSourcePosition) {
|
||||
if (!isUnreachable) {
|
||||
sourcePositions.addYieldPoint(offset, yieldSourcePosition);
|
||||
}
|
||||
}
|
||||
|
||||
void _grow() {
|
||||
final newSize = _buffer.length << 1;
|
||||
final newBuffer = new Uint8List(newSize);
|
||||
|
||||
@@ -525,7 +525,7 @@ class BytecodeGenerator extends RecursiveVisitor {
|
||||
flags |= FieldDeclaration.isCovariantFlag;
|
||||
}
|
||||
if (field.isCovariantByClass) {
|
||||
flags |= FieldDeclaration.isGenericCovariantImplFlag;
|
||||
flags |= FieldDeclaration.isCovariantByClassFlag;
|
||||
}
|
||||
if (field.isExtensionMember) {
|
||||
flags |= FieldDeclaration.isExtensionMemberFlag;
|
||||
@@ -584,9 +584,6 @@ class BytecodeGenerator extends RecursiveVisitor {
|
||||
if (member.isStatic) {
|
||||
flags |= FunctionDeclaration.isStaticFlag;
|
||||
}
|
||||
if (member.isForwardingStub) {
|
||||
flags |= FunctionDeclaration.isForwardingStubFlag;
|
||||
}
|
||||
if (member.isNoSuchMethodForwarder) {
|
||||
flags |= FunctionDeclaration.isNoSuchMethodForwarderFlag;
|
||||
}
|
||||
@@ -765,7 +762,7 @@ class BytecodeGenerator extends RecursiveVisitor {
|
||||
flags |= ParameterDeclaration.isCovariantFlag;
|
||||
}
|
||||
if (variable.isCovariantByClass) {
|
||||
flags |= ParameterDeclaration.isGenericCovariantImplFlag;
|
||||
flags |= ParameterDeclaration.isCovariantByClassFlag;
|
||||
}
|
||||
if (variable.isFinal) {
|
||||
flags |= ParameterDeclaration.isFinalFlag;
|
||||
|
||||
@@ -194,11 +194,10 @@ class BufferedWriter {
|
||||
if (_currentLength > _currentBuffer.length - 4) {
|
||||
_grow();
|
||||
}
|
||||
// TODO(alexmarkov): consider using native byte order
|
||||
_addByte((value >> 24) & 0xFF);
|
||||
_addByte((value >> 16) & 0xFF);
|
||||
_addByte((value >> 8) & 0xFF);
|
||||
_addByte(value & 0xFF);
|
||||
_addByte((value >> 8) & 0xFF);
|
||||
_addByte((value >> 16) & 0xFF);
|
||||
_addByte((value >> 24) & 0xFF);
|
||||
}
|
||||
|
||||
@pragma('vm:prefer-inline')
|
||||
@@ -291,10 +290,10 @@ class BufferedReader {
|
||||
int readByte() => bytes[_pos++];
|
||||
|
||||
int readUInt32() {
|
||||
return (readByte() << 24) |
|
||||
(readByte() << 16) |
|
||||
return readByte() |
|
||||
(readByte() << 8) |
|
||||
readByte();
|
||||
(readByte() << 16) |
|
||||
(readByte() << 24);
|
||||
}
|
||||
|
||||
int readPackedUInt30() {
|
||||
|
||||
@@ -110,16 +110,16 @@ type ConstantDynamicCall extends ConstantPoolEntry {
|
||||
|
||||
enum ConstantTag {
|
||||
kInvalid,
|
||||
kObjectRef,
|
||||
kClass,
|
||||
kType,
|
||||
kStaticField,
|
||||
kInstanceField,
|
||||
kClass,
|
||||
kTypeArgumentsField,
|
||||
kType,
|
||||
kClosureFunction,
|
||||
kEndClosureFunctionScope,
|
||||
kSubtypeTestCache,
|
||||
kEmptyTypeArguments,
|
||||
kObjectRef,
|
||||
kDirectCall,
|
||||
kInterfaceCall,
|
||||
kInstantiatedInterfaceCall,
|
||||
|
||||
@@ -313,23 +313,23 @@ class Members extends BytecodeDeclaration {
|
||||
}
|
||||
|
||||
class FieldDeclaration {
|
||||
static const hasNontrivialInitializerFlag = 1 << 0;
|
||||
static const hasGetterFlag = 1 << 1;
|
||||
static const hasSetterFlag = 1 << 2;
|
||||
static const isReflectableFlag = 1 << 3;
|
||||
static const isStaticFlag = 1 << 4;
|
||||
static const isConstFlag = 1 << 5;
|
||||
static const isFinalFlag = 1 << 6;
|
||||
static const isCovariantFlag = 1 << 7;
|
||||
static const isGenericCovariantImplFlag = 1 << 8;
|
||||
static const hasSourcePositionsFlag = 1 << 9;
|
||||
static const hasAnnotationsFlag = 1 << 10;
|
||||
static const hasPragmaFlag = 1 << 11;
|
||||
static const hasCustomScriptFlag = 1 << 12;
|
||||
static const hasInitializerCodeFlag = 1 << 13;
|
||||
static const isLateFlag = 1 << 14;
|
||||
static const isExtensionMemberFlag = 1 << 15;
|
||||
static const hasInitializerFlag = 1 << 16;
|
||||
static const isStaticFlag = 1 << 0;
|
||||
static const isConstFlag = 1 << 1;
|
||||
static const isFinalFlag = 1 << 2;
|
||||
static const isLateFlag = 1 << 3;
|
||||
static const isCovariantFlag = 1 << 4;
|
||||
static const isCovariantByClassFlag = 1 << 5;
|
||||
static const isExtensionMemberFlag = 1 << 6;
|
||||
static const isReflectableFlag = 1 << 7;
|
||||
static const hasGetterFlag = 1 << 8;
|
||||
static const hasSetterFlag = 1 << 9;
|
||||
static const hasInitializerFlag = 1 << 10;
|
||||
static const hasNontrivialInitializerFlag = 1 << 11;
|
||||
static const hasInitializerCodeFlag = 1 << 12;
|
||||
static const hasSourcePositionsFlag = 1 << 13;
|
||||
static const hasAnnotationsFlag = 1 << 14;
|
||||
static const hasPragmaFlag = 1 << 15;
|
||||
static const hasCustomScriptFlag = 1 << 16;
|
||||
|
||||
final int flags;
|
||||
final ObjectHandle name;
|
||||
@@ -472,31 +472,30 @@ class FieldDeclaration {
|
||||
}
|
||||
|
||||
class FunctionDeclaration {
|
||||
static const isConstructorFlag = 1 << 0;
|
||||
static const isGetterFlag = 1 << 1;
|
||||
static const isSetterFlag = 1 << 2;
|
||||
static const isFactoryFlag = 1 << 3;
|
||||
static const isStaticFlag = 1 << 4;
|
||||
static const isAbstractFlag = 1 << 5;
|
||||
static const isStaticFlag = 1 << 0;
|
||||
static const isAbstractFlag = 1 << 1;
|
||||
static const isGetterFlag = 1 << 2;
|
||||
static const isSetterFlag = 1 << 3;
|
||||
static const isConstructorFlag = 1 << 4;
|
||||
static const isFactoryFlag = 1 << 5;
|
||||
static const isConstFlag = 1 << 6;
|
||||
static const hasOptionalPositionalParamsFlag = 1 << 7;
|
||||
static const hasOptionalNamedParamsFlag = 1 << 8;
|
||||
static const hasTypeParamsFlag = 1 << 9;
|
||||
static const isReflectableFlag = 1 << 10;
|
||||
static const isDebuggableFlag = 1 << 11;
|
||||
static const isAsyncFlag = 1 << 12;
|
||||
static const isAsyncStarFlag = 1 << 13;
|
||||
static const isSyncStarFlag = 1 << 14;
|
||||
static const isForwardingStubFlag = 1 << 15;
|
||||
static const isNoSuchMethodForwarderFlag = 1 << 16;
|
||||
static const isNativeFlag = 1 << 17;
|
||||
static const hasParameterFlagsFlag = 1 << 10;
|
||||
static const isExtensionMemberFlag = 1 << 11;
|
||||
static const isReflectableFlag = 1 << 12;
|
||||
static const isDebuggableFlag = 1 << 13;
|
||||
static const isAsyncFlag = 1 << 14;
|
||||
static const isAsyncStarFlag = 1 << 15;
|
||||
static const isSyncStarFlag = 1 << 16;
|
||||
static const isNoSuchMethodForwarderFlag = 1 << 17;
|
||||
static const isExternalFlag = 1 << 18;
|
||||
static const hasSourcePositionsFlag = 1 << 19;
|
||||
static const hasAnnotationsFlag = 1 << 20;
|
||||
static const hasPragmaFlag = 1 << 21;
|
||||
static const hasCustomScriptFlag = 1 << 22;
|
||||
static const isExtensionMemberFlag = 1 << 23;
|
||||
static const hasParameterFlagsFlag = 1 << 24;
|
||||
static const isNativeFlag = 1 << 19;
|
||||
static const hasSourcePositionsFlag = 1 << 20;
|
||||
static const hasAnnotationsFlag = 1 << 21;
|
||||
static const hasPragmaFlag = 1 << 22;
|
||||
static const hasCustomScriptFlag = 1 << 23;
|
||||
|
||||
final int flags;
|
||||
final ObjectHandle name;
|
||||
@@ -670,9 +669,6 @@ class FunctionDeclaration {
|
||||
if ((flags & isSyncStarFlag) != 0) {
|
||||
sb.write(', sync*');
|
||||
}
|
||||
if ((flags & isForwardingStubFlag) != 0) {
|
||||
sb.write(', forwarding-stub');
|
||||
}
|
||||
if ((flags & isNoSuchMethodForwarderFlag) != 0) {
|
||||
sb.write(', no-such-method-forwarder');
|
||||
}
|
||||
@@ -751,7 +747,7 @@ class TypeParametersDeclaration {
|
||||
class ParameterDeclaration {
|
||||
// Parameter flags are written separately (in Code).
|
||||
static const isCovariantFlag = 1 << 0;
|
||||
static const isGenericCovariantImplFlag = 1 << 1;
|
||||
static const isCovariantByClassFlag = 1 << 1;
|
||||
static const isFinalFlag = 1 << 2;
|
||||
static const isRequiredFlag = 1 << 3;
|
||||
|
||||
|
||||
@@ -284,44 +284,44 @@ type BoundAndDefaultType {
|
||||
enum ObjectKind {
|
||||
kInvalid,
|
||||
kLibrary,
|
||||
kScript,
|
||||
kClass,
|
||||
kMember,
|
||||
kClosure,
|
||||
kName,
|
||||
kTypeArguments,
|
||||
kConstObject,
|
||||
kArgDesc,
|
||||
kScript,
|
||||
kType,
|
||||
kTypeArguments,
|
||||
kArgDesc,
|
||||
}
|
||||
|
||||
enum ConstTag {
|
||||
kInvalid,
|
||||
kInstance,
|
||||
kInt,
|
||||
kDouble,
|
||||
kList,
|
||||
kTearOff,
|
||||
kBool,
|
||||
kSymbol,
|
||||
kTearOffInstantiation,
|
||||
kString,
|
||||
kSymbol,
|
||||
kInstance,
|
||||
kList,
|
||||
kMap,
|
||||
kSet,
|
||||
kRecord,
|
||||
kTearOff,
|
||||
kTearOffInstantiation,
|
||||
}
|
||||
|
||||
enum TypeTag {
|
||||
kInvalid,
|
||||
kDynamic,
|
||||
kVoid,
|
||||
kSimpleType,
|
||||
kTypeParameter,
|
||||
kGenericType,
|
||||
kFunctionType,
|
||||
kRecordType,
|
||||
kNull,
|
||||
kNever,
|
||||
kSimpleType,
|
||||
kGenericType,
|
||||
kTypeParameter,
|
||||
kFunctionType,
|
||||
kRecordType,
|
||||
}
|
||||
|
||||
/// Name of artificial class containing top-level members of a library.
|
||||
|
||||
@@ -17,8 +17,6 @@ class SourcePositions extends BytecodeDeclaration {
|
||||
// Special value of fileOffset which marks synthetic code without source
|
||||
// position.
|
||||
static const syntheticCodeMarker = -1;
|
||||
// Special value of fileOffset which marks yield point.
|
||||
static const yieldPointMarker = -2;
|
||||
|
||||
final List<int> _positions = <int>[]; // Pairs (PC, fileOffset).
|
||||
int _lastPc = 0;
|
||||
@@ -37,17 +35,6 @@ class SourcePositions extends BytecodeDeclaration {
|
||||
}
|
||||
}
|
||||
|
||||
void addYieldPoint(int pc, int fileOffset) {
|
||||
assert(pc > _lastPc);
|
||||
assert((fileOffset >= 0) || (fileOffset == syntheticCodeMarker));
|
||||
_positions.add(pc);
|
||||
_positions.add(yieldPointMarker);
|
||||
_positions.add(pc);
|
||||
_positions.add(fileOffset);
|
||||
_lastPc = pc;
|
||||
_lastOffset = fileOffset;
|
||||
}
|
||||
|
||||
bool get isEmpty => _positions.isEmpty;
|
||||
bool get isNotEmpty => !isEmpty;
|
||||
|
||||
@@ -83,9 +70,7 @@ class SourcePositions extends BytecodeDeclaration {
|
||||
for (int i = 0; i < _positions.length; i += 2) {
|
||||
final int pc = _positions[i];
|
||||
final int fileOffset = _positions[i + 1];
|
||||
final entry = (fileOffset == yieldPointMarker)
|
||||
? 'yield point'
|
||||
: 'source position $fileOffset';
|
||||
final entry = 'source position $fileOffset';
|
||||
if (map[pc] == null) {
|
||||
map[pc] = entry;
|
||||
} else {
|
||||
|
||||
@@ -588,7 +588,7 @@ ConstantPool {
|
||||
}
|
||||
|
||||
|
||||
Function 'foo7', reflectable, debuggable, forwarding-stub
|
||||
Function 'foo7', reflectable, debuggable
|
||||
parameters [dart:core::num 'b', dart:core::String 'c'] (required: 2)
|
||||
return-type void
|
||||
|
||||
|
||||
@@ -438,16 +438,16 @@ intptr_t BytecodeReaderHelper::ReadConstantPool(const Function& function,
|
||||
// be kept in sync with pkg/dart2bytecode/lib/constant_pool.dart.
|
||||
enum ConstantPoolTag {
|
||||
kInvalid,
|
||||
kObjectRef,
|
||||
kClass,
|
||||
kType,
|
||||
kStaticField,
|
||||
kInstanceField,
|
||||
kClass,
|
||||
kTypeArgumentsField,
|
||||
kType,
|
||||
kClosureFunction,
|
||||
kEndClosureFunctionScope,
|
||||
kSubtypeTestCache,
|
||||
kEmptyTypeArguments,
|
||||
kObjectRef,
|
||||
kDirectCall,
|
||||
kInterfaceCall,
|
||||
kInstantiatedInterfaceCall,
|
||||
@@ -879,15 +879,15 @@ ObjectPtr BytecodeReaderHelper::ReadObjectContents(uint32_t header) {
|
||||
enum ObjectKind {
|
||||
kInvalid,
|
||||
kLibrary,
|
||||
kScript,
|
||||
kClass,
|
||||
kMember,
|
||||
kClosure,
|
||||
kName,
|
||||
kTypeArguments,
|
||||
kConstObject,
|
||||
kArgDesc,
|
||||
kScript,
|
||||
kType,
|
||||
kTypeArguments,
|
||||
kArgDesc,
|
||||
};
|
||||
|
||||
// Member flags, must be in sync with _MemberHandle constants in
|
||||
@@ -1053,18 +1053,18 @@ ObjectPtr BytecodeReaderHelper::ReadConstObject(intptr_t tag) {
|
||||
// pkg/dart2bytecode/lib/object_table.dart.
|
||||
enum ConstTag {
|
||||
kInvalid,
|
||||
kInstance,
|
||||
kInt,
|
||||
kDouble,
|
||||
kList,
|
||||
kTearOff,
|
||||
kBool,
|
||||
kSymbol,
|
||||
kTearOffInstantiation,
|
||||
kString,
|
||||
kSymbol,
|
||||
kInstance,
|
||||
kList,
|
||||
kMap,
|
||||
kSet,
|
||||
kRecord,
|
||||
kTearOff,
|
||||
kTearOffInstantiation,
|
||||
};
|
||||
|
||||
switch (tag) {
|
||||
@@ -1250,13 +1250,13 @@ ObjectPtr BytecodeReaderHelper::ReadType(intptr_t tag,
|
||||
kInvalid,
|
||||
kDynamic,
|
||||
kVoid,
|
||||
kSimpleType,
|
||||
kTypeParameter,
|
||||
kGenericType,
|
||||
kFunctionType,
|
||||
kRecordType,
|
||||
kNull,
|
||||
kNever,
|
||||
kSimpleType,
|
||||
kGenericType,
|
||||
kTypeParameter,
|
||||
kFunctionType,
|
||||
kRecordType,
|
||||
};
|
||||
|
||||
// FunctionType flags, must be in sync with _FunctionTypeHandle constants in
|
||||
@@ -1479,23 +1479,23 @@ void BytecodeReaderHelper::ReadFieldDeclarations(const Class& cls,
|
||||
bool discard_fields) {
|
||||
// Field flags, must be in sync with FieldDeclaration constants in
|
||||
// pkg/dart2bytecode/lib/declarations.dart.
|
||||
const int kHasNontrivialInitializerFlag = 1 << 0;
|
||||
const int kHasGetterFlag = 1 << 1;
|
||||
const int kHasSetterFlag = 1 << 2;
|
||||
const int kIsReflectableFlag = 1 << 3;
|
||||
const int kIsStaticFlag = 1 << 4;
|
||||
const int kIsConstFlag = 1 << 5;
|
||||
const int kIsFinalFlag = 1 << 6;
|
||||
const int kIsCovariantFlag = 1 << 7;
|
||||
const int kIsGenericCovariantImplFlag = 1 << 8;
|
||||
const int kHasSourcePositionsFlag = 1 << 9;
|
||||
const int kHasAnnotationsFlag = 1 << 10;
|
||||
const int kHasPragmaFlag = 1 << 11;
|
||||
const int kHasCustomScriptFlag = 1 << 12;
|
||||
const int kHasInitializerCodeFlag = 1 << 13;
|
||||
const int kIsLateFlag = 1 << 14;
|
||||
const int kIsExtensionMemberFlag = 1 << 15;
|
||||
const int kHasInitializerFlag = 1 << 16;
|
||||
const int kIsStaticFlag = 1 << 0;
|
||||
const int kIsConstFlag = 1 << 1;
|
||||
const int kIsFinalFlag = 1 << 2;
|
||||
const int kIsLateFlag = 1 << 3;
|
||||
const int kIsCovariantFlag = 1 << 4;
|
||||
const int kIsCovariantByClassFlag = 1 << 5;
|
||||
const int kIsExtensionMemberFlag = 1 << 6;
|
||||
const int kIsReflectableFlag = 1 << 7;
|
||||
const int kHasGetterFlag = 1 << 8;
|
||||
const int kHasSetterFlag = 1 << 9;
|
||||
const int kHasInitializerFlag = 1 << 10;
|
||||
const int kHasNontrivialInitializerFlag = 1 << 11;
|
||||
const int kHasInitializerCodeFlag = 1 << 12;
|
||||
const int kHasSourcePositionsFlag = 1 << 13;
|
||||
const int kHasAnnotationsFlag = 1 << 14;
|
||||
const int kHasPragmaFlag = 1 << 15;
|
||||
const int kHasCustomScriptFlag = 1 << 16;
|
||||
|
||||
const int num_fields = reader_.ReadListLength();
|
||||
if ((num_fields == 0) && !cls.is_enum_class()) {
|
||||
@@ -1546,8 +1546,7 @@ void BytecodeReaderHelper::ReadFieldDeclarations(const Class& cls,
|
||||
|
||||
field.set_has_pragma(has_pragma);
|
||||
field.set_is_covariant((flags & kIsCovariantFlag) != 0);
|
||||
field.set_is_generic_covariant_impl((flags & kIsGenericCovariantImplFlag) !=
|
||||
0);
|
||||
field.set_is_generic_covariant_impl((flags & kIsCovariantByClassFlag) != 0);
|
||||
field.set_has_nontrivial_initializer(has_nontrivial_initializer);
|
||||
field.set_is_extension_member(is_extension_member);
|
||||
field.set_has_initializer(has_initializer);
|
||||
@@ -1728,31 +1727,30 @@ InstancePtr BytecodeReaderHelper::Canonicalize(const Instance& instance) {
|
||||
void BytecodeReaderHelper::ReadFunctionDeclarations(const Class& cls) {
|
||||
// Function flags, must be in sync with FunctionDeclaration constants in
|
||||
// pkg/dart2bytecode/lib/declarations.dart.
|
||||
const int kIsConstructorFlag = 1 << 0;
|
||||
const int kIsGetterFlag = 1 << 1;
|
||||
const int kIsSetterFlag = 1 << 2;
|
||||
const int kIsFactoryFlag = 1 << 3;
|
||||
const int kIsStaticFlag = 1 << 4;
|
||||
const int kIsAbstractFlag = 1 << 5;
|
||||
const int kIsStaticFlag = 1 << 0;
|
||||
const int kIsAbstractFlag = 1 << 1;
|
||||
const int kIsGetterFlag = 1 << 2;
|
||||
const int kIsSetterFlag = 1 << 3;
|
||||
const int kIsConstructorFlag = 1 << 4;
|
||||
const int kIsFactoryFlag = 1 << 5;
|
||||
const int kIsConstFlag = 1 << 6;
|
||||
const int kHasOptionalPositionalParamsFlag = 1 << 7;
|
||||
const int kHasOptionalNamedParamsFlag = 1 << 8;
|
||||
const int kHasTypeParamsFlag = 1 << 9;
|
||||
const int kIsReflectableFlag = 1 << 10;
|
||||
const int kIsDebuggableFlag = 1 << 11;
|
||||
const int kIsAsyncFlag = 1 << 12;
|
||||
const int kIsAsyncStarFlag = 1 << 13;
|
||||
const int kIsSyncStarFlag = 1 << 14;
|
||||
// const int kIsForwardingStubFlag = 1 << 15;
|
||||
const int kIsNoSuchMethodForwarderFlag = 1 << 16;
|
||||
const int kIsNativeFlag = 1 << 17;
|
||||
const int kHasParameterFlagsFlag = 1 << 10;
|
||||
const int kIsExtensionMemberFlag = 1 << 11;
|
||||
const int kIsReflectableFlag = 1 << 12;
|
||||
const int kIsDebuggableFlag = 1 << 13;
|
||||
const int kIsAsyncFlag = 1 << 14;
|
||||
const int kIsAsyncStarFlag = 1 << 15;
|
||||
const int kIsSyncStarFlag = 1 << 16;
|
||||
const int kIsNoSuchMethodForwarderFlag = 1 << 17;
|
||||
const int kIsExternalFlag = 1 << 18;
|
||||
const int kHasSourcePositionsFlag = 1 << 19;
|
||||
const int kHasAnnotationsFlag = 1 << 20;
|
||||
const int kHasPragmaFlag = 1 << 21;
|
||||
const int kHasCustomScriptFlag = 1 << 22;
|
||||
const int kIsExtensionMemberFlag = 1 << 23;
|
||||
const int kHasParameterFlagsFlag = 1 << 24;
|
||||
const int kIsNativeFlag = 1 << 19;
|
||||
const int kHasSourcePositionsFlag = 1 << 20;
|
||||
const int kHasAnnotationsFlag = 1 << 21;
|
||||
const int kHasPragmaFlag = 1 << 22;
|
||||
const int kHasCustomScriptFlag = 1 << 23;
|
||||
|
||||
const intptr_t num_functions = reader_.ReadListLength();
|
||||
ASSERT(function_index_ + num_functions == functions_->Length());
|
||||
@@ -2200,7 +2198,7 @@ void BytecodeReaderHelper::ReadParameterCovariance(
|
||||
if ((flags & Parameter::kIsCovariantFlag) != 0) {
|
||||
is_covariant->Add(i);
|
||||
}
|
||||
if ((flags & Parameter::kIsGenericCovariantImplFlag) != 0) {
|
||||
if ((flags & Parameter::kIsCovariantByClassFlag) != 0) {
|
||||
is_generic_covariant_impl->Add(i);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -52,7 +52,9 @@ class Reader : public ValueObject {
|
||||
ASSERT((size_ >= 4) && (offset >= 0) && (offset <= size_ - 4));
|
||||
uint32_t value =
|
||||
LoadUnaligned(reinterpret_cast<const uint32_t*>(raw_buffer_ + offset));
|
||||
return Utils::BigEndianToHost32(value);
|
||||
// All supported platforms are little-endian, so there is no need to
|
||||
// convert from little-endian to host.
|
||||
return value;
|
||||
}
|
||||
|
||||
uint32_t ReadUInt32() {
|
||||
@@ -265,7 +267,7 @@ class BytecodeReaderHelper : public ValueObject {
|
||||
// pkg/dart2bytecode/lib/declarations.dart.
|
||||
struct Parameter {
|
||||
static const int kIsCovariantFlag = 1 << 0;
|
||||
static const int kIsGenericCovariantImplFlag = 1 << 1;
|
||||
static const int kIsCovariantByClassFlag = 1 << 1;
|
||||
static const int kIsFinalFlag = 1 << 2;
|
||||
static const int kIsRequiredFlag = 1 << 3;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user