@@ -201,6 +201,11 @@ type VoidType extends Type {
201201 typeTag (flags) = 2
202202}
203203
204+ type NeverType extends Type {
205+ kind = 15
206+ typeTag (flags) = 9
207+ }
208+
204209// SimpleType can be used only for types without instantiator type arguments.
205210type SimpleType extends Type {
206211 kind = 15
@@ -321,6 +326,7 @@ enum TypeTag {
321326 kRecursiveGenericType,
322327 kRecursiveTypeRef,
323328 kFunctionType,
329+ kNever,
324330}
325331
326332/// Name of artificial class containing top-level members of a library.
@@ -419,6 +425,8 @@ abstract class ObjectHandle extends BytecodeObject {
419425 return new _DynamicTypeHandle ();
420426 case TypeTag .kVoid:
421427 return new _VoidTypeHandle ();
428+ case TypeTag .kNever:
429+ return new _NeverTypeHandle ();
422430 case TypeTag .kSimpleType:
423431 return new _SimpleTypeHandle ._empty (nullability);
424432 case TypeTag .kTypeParameter:
@@ -737,6 +745,25 @@ class _VoidTypeHandle extends _TypeHandle {
737745 String toString () => 'void' ;
738746}
739747
748+ class _NeverTypeHandle extends _TypeHandle {
749+ _NeverTypeHandle () : super (TypeTag .kNever, Nullability .nonNullable);
750+
751+ @override
752+ void writeContents (BufferedWriter writer) {}
753+
754+ @override
755+ void readContents (BufferedReader reader) {}
756+
757+ @override
758+ int get hashCode => 2049 ;
759+
760+ @override
761+ bool operator == (other) => other is _NeverTypeHandle ;
762+
763+ @override
764+ String toString () => 'Never' ;
765+ }
766+
740767class _SimpleTypeHandle extends _TypeHandle {
741768 _ClassHandle class_;
742769
@@ -1717,12 +1744,14 @@ class ObjectTable implements ObjectWriter, ObjectReader {
17171744 List <ObjectHandle > _indexTable;
17181745 _TypeHandle _dynamicType;
17191746 _TypeHandle _voidType;
1747+ _TypeHandle _neverType;
17201748 CoreTypes coreTypes;
17211749 _NodeVisitor _nodeVisitor;
17221750
17231751 ObjectTable () {
17241752 _dynamicType = getOrAddObject (new _DynamicTypeHandle ());
17251753 _voidType = getOrAddObject (new _VoidTypeHandle ());
1754+ _neverType = getOrAddObject (new _NeverTypeHandle ());
17261755 _nodeVisitor = new _NodeVisitor (this );
17271756 }
17281757
@@ -2098,6 +2127,9 @@ class _NodeVisitor extends Visitor<ObjectHandle> {
20982127 @override
20992128 ObjectHandle visitVoidType (VoidType node) => objectTable._voidType;
21002129
2130+ @override
2131+ ObjectHandle visitNeverType (NeverType node) => objectTable._neverType;
2132+
21012133 @override
21022134 ObjectHandle visitBottomType (BottomType node) =>
21032135 objectTable.getHandle (objectTable.coreTypes.nullType);
0 commit comments