diff --git a/pkg/dart2bytecode/lib/assembler.dart b/pkg/dart2bytecode/lib/assembler.dart index 7147b4a87ad..38d907f48e5 100644 --- a/pkg/dart2bytecode/lib/assembler.dart +++ b/pkg/dart2bytecode/lib/assembler.dart @@ -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); diff --git a/pkg/dart2bytecode/lib/bytecode_generator.dart b/pkg/dart2bytecode/lib/bytecode_generator.dart index c143d50a2d6..468f8a3b690 100644 --- a/pkg/dart2bytecode/lib/bytecode_generator.dart +++ b/pkg/dart2bytecode/lib/bytecode_generator.dart @@ -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; diff --git a/pkg/dart2bytecode/lib/bytecode_serialization.dart b/pkg/dart2bytecode/lib/bytecode_serialization.dart index 9e82d74f838..4efb705e2f0 100644 --- a/pkg/dart2bytecode/lib/bytecode_serialization.dart +++ b/pkg/dart2bytecode/lib/bytecode_serialization.dart @@ -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() { diff --git a/pkg/dart2bytecode/lib/constant_pool.dart b/pkg/dart2bytecode/lib/constant_pool.dart index b34153888ea..7c06148c20b 100644 --- a/pkg/dart2bytecode/lib/constant_pool.dart +++ b/pkg/dart2bytecode/lib/constant_pool.dart @@ -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, diff --git a/pkg/dart2bytecode/lib/declarations.dart b/pkg/dart2bytecode/lib/declarations.dart index 34f446c3dac..ee04a235c01 100644 --- a/pkg/dart2bytecode/lib/declarations.dart +++ b/pkg/dart2bytecode/lib/declarations.dart @@ -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; diff --git a/pkg/dart2bytecode/lib/object_table.dart b/pkg/dart2bytecode/lib/object_table.dart index 97d88f8d257..c297dfb2e96 100644 --- a/pkg/dart2bytecode/lib/object_table.dart +++ b/pkg/dart2bytecode/lib/object_table.dart @@ -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. diff --git a/pkg/dart2bytecode/lib/source_positions.dart b/pkg/dart2bytecode/lib/source_positions.dart index 53b7ceae314..623c14f4326 100644 --- a/pkg/dart2bytecode/lib/source_positions.dart +++ b/pkg/dart2bytecode/lib/source_positions.dart @@ -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 _positions = []; // 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 { diff --git a/pkg/dart2bytecode/testcases/type_ops.dart.expect b/pkg/dart2bytecode/testcases/type_ops.dart.expect index 45491bb5050..f021463ab07 100644 --- a/pkg/dart2bytecode/testcases/type_ops.dart.expect +++ b/pkg/dart2bytecode/testcases/type_ops.dart.expect @@ -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 diff --git a/runtime/vm/bytecode_reader.cc b/runtime/vm/bytecode_reader.cc index 2209d36c36e..8d350790487 100644 --- a/runtime/vm/bytecode_reader.cc +++ b/runtime/vm/bytecode_reader.cc @@ -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); } } diff --git a/runtime/vm/bytecode_reader.h b/runtime/vm/bytecode_reader.h index 6e4835ca2f1..0a79cff80a1 100644 --- a/runtime/vm/bytecode_reader.h +++ b/runtime/vm/bytecode_reader.h @@ -52,7 +52,9 @@ class Reader : public ValueObject { ASSERT((size_ >= 4) && (offset >= 0) && (offset <= size_ - 4)); uint32_t value = LoadUnaligned(reinterpret_cast(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; };