library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/nnbd/issue41102.dart:15:12: Warning: Operand of null-aware operation '?.' has type 'List<dynamic>' which excludes null.
//  - 'List' is from 'dart:core'.
// final s2 = s1?.length;
//            ^
//
// pkg/front_end/testcases/nnbd/issue41102.dart:17:36: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
// final s3 = new List<int>.filled(2, null);
//                                    ^
//
// pkg/front_end/testcases/nnbd/issue41102.dart:22:5: Error: Switch case may fall through to the next case.
//     case 0:
//     ^
//
// pkg/front_end/testcases/nnbd/issue41102.dart:25:10: Error: Type 'String' of the case expression is not a subtype of type 'int' of this switch expression.
//     case '':
//          ^
// pkg/front_end/testcases/nnbd/issue41102.dart:21:11: Context: The switch expression is here.
//   switch (e) {
//           ^
//
// pkg/front_end/testcases/nnbd/issue41102.dart:31:15: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
// final s6 = s5 + 0;
//               ^
//
// pkg/front_end/testcases/nnbd/issue41102.dart:35:14: Error: Operator '[]' cannot be called on 'List<dynamic>?' because it is potentially null.
//  - 'List' is from 'dart:core'.
// final s8 = s7[0];
//              ^
//
// pkg/front_end/testcases/nnbd/issue41102.dart:37:14: Error: Operator '[]=' cannot be called on 'List<dynamic>?' because it is potentially null.
//  - 'List' is from 'dart:core'.
// final s9 = s7[0] = 0;
//              ^
//
// pkg/front_end/testcases/nnbd/issue41102.dart:39:16: Error: Property 'length' cannot be accessed on 'List<dynamic>?' because it is potentially null.
//  - 'List' is from 'dart:core'.
// Try accessing using ?. instead.
// final s10 = s7.length;
//                ^^^^^^
//
// pkg/front_end/testcases/nnbd/issue41102.dart:41:16: Error: Property 'length' cannot be accessed on 'List<dynamic>?' because it is potentially null.
//  - 'List' is from 'dart:core'.
// Try accessing using ?. instead.
// final s11 = s7.length = 0;
//                ^^^^^^
//
// pkg/front_end/testcases/nnbd/issue41102.dart:43:13: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
// final s12 = -s5;
//             ^
//
// pkg/front_end/testcases/nnbd/issue41102.dart:47:18: Error: Can't use an expression of type 'int Function()?' as a function because it's potentially null.
// Try calling using ?.call instead.
// final s14 = (s13)();
//                  ^
//
// pkg/front_end/testcases/nnbd/issue41102.dart:49:19: Error: Can't throw a value of 'Null' since it is neither dynamic nor non-nullable.
// final s15 = throw null;
//                   ^
//
import self as self;
import "dart:async" as asy;
import "dart:core" as core;

import "dart:async";

static final field asy::StreamTransformer<core::Object?, core::Object?> t = new asy::_StreamHandlerTransformer::•<core::Object?, core::Object?>(handleData: (core::Object? data, asy::EventSink<core::Object?> sink) → void => asy::Future::microtask<void>(() → void => sink.{asy::EventSink::add}(data)), handleDone: (asy::EventSink<core::Object?> sink) → void => asy::Future::microtask<void>(() → void => sink.{asy::EventSink::close}()));
static final field core::List<dynamic> s1 = <dynamic>[];
static final field core::int? s2 = let final core::List<dynamic> #t1 = self::s1 in #t1.{core::List::==}(null) ?{core::int?} null : #t1.{core::List::length};
static final field core::List<core::int> s3 = core::_List::filled<core::int>(2, let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:17:36: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
final s3 = new List<int>.filled(2, null);
                                   ^" in let Null #t3 = null in #t3.==(null) ?{core::int} #t3 as{TypeError,ForNonNullableByDefault} core::int : #t3{core::int});
static final field dynamic s4 = (() → Null {
  core::int e = 0;
  switch(e) {
    #L1:
    case #C1:
      {
        core::print("fallthrough");
      }
    #L2:
    case #C2:
    case #C3:
      {}
  }
}).call();
static field core::int? s5;
static final field core::num s6 = let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:31:15: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
final s6 = s5 + 0;
              ^" in self::s5.{core::num::+}(0);
static field core::List<dynamic>? s7;
static final field dynamic s8 = let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:35:14: Error: Operator '[]' cannot be called on 'List<dynamic>?' because it is potentially null.
 - 'List' is from 'dart:core'.
final s8 = s7[0];
             ^" in self::s7.{core::List::[]}(0);
static final field core::int s9 = let final core::List<dynamic>? #t6 = self::s7 in let final core::int #t7 = 0 in let final core::int #t8 = 0 in let final void #t9 = let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:37:14: Error: Operator '[]=' cannot be called on 'List<dynamic>?' because it is potentially null.
 - 'List' is from 'dart:core'.
final s9 = s7[0] = 0;
             ^" in #t6.{core::List::[]=}(#t7, #t8) in #t8;
static final field core::int s10 = let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:39:16: Error: Property 'length' cannot be accessed on 'List<dynamic>?' because it is potentially null.
 - 'List' is from 'dart:core'.
Try accessing using ?. instead.
final s10 = s7.length;
               ^^^^^^" in self::s7.{core::List::length};
static final field core::int s11 = let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:41:16: Error: Property 'length' cannot be accessed on 'List<dynamic>?' because it is potentially null.
 - 'List' is from 'dart:core'.
Try accessing using ?. instead.
final s11 = s7.length = 0;
               ^^^^^^" in self::s7.{core::List::length} = 0;
static final field core::int s12 = let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:43:13: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
final s12 = -s5;
            ^" in self::s5.{core::int::unary-}();
static field () →? core::int s13;
static final field core::int s14 = let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:47:18: Error: Can't use an expression of type 'int Function()?' as a function because it's potentially null.
Try calling using ?.call instead.
final s14 = (s13)();
                 ^" in self::s13.call();
static final field Never s15 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:49:19: Error: Can't throw a value of 'Null' since it is neither dynamic nor non-nullable.
final s15 = throw null;
                  ^";
static method main() → void {}

constants  {
  #C1 = 0
  #C2 = 1
  #C3 = ""
}

Extra constant evaluation status:
Evaluated: MethodInvocation @ org-dartlang-testcase:///issue41102.dart:17:36 -> BoolConstant(true)
Evaluated: VariableGet @ org-dartlang-testcase:///issue41102.dart:17:36 -> NullConstant(null)
Evaluated: VariableGet @ org-dartlang-testcase:///issue41102.dart:17:36 -> NullConstant(null)
Evaluated: VariableGet @ org-dartlang-testcase:///issue41102.dart:37:15 -> IntConstant(0)
Evaluated: VariableGet @ org-dartlang-testcase:///issue41102.dart:37:20 -> IntConstant(0)
Evaluated: VariableGet @ org-dartlang-testcase:///issue41102.dart:37:20 -> IntConstant(0)
Extra constant evaluation: evaluated: 61, effectively constant: 6
