library;
import self as self;
import "dart:core" as core;

static method main() → dynamic {
  core::List<core::int> list = let final core::List<core::int> #t1 = <core::int>[1] in let final void #t2 = #t1.{core::List::add}(2) in let final void #t3 = #t1.{core::List::add}(3) in let final void #t4 = #t1.{core::List::addAll}(<core::int>[4, 5]) in #t1;
  core::print(list);
  let final core::List<core::int> #t5 = list in let final void #t6 = #t5.{core::List::add}(2) in let final core::int #t7 = #t5.{core::List::length} in let final core::int #t8 = #t5.{core::List::length} = 0 in #t5;
  core::print(list);
  let final core::List<core::int> #t9 = list in let final void #t10 = #t9.{core::List::add}(2) in let final core::int #t11 = #t9.{core::List::[]}(0) in let final void #t12 = #t9.{core::List::[]=}(0, 87) in #t9;
  core::print(list);
  list = let final core::List<core::int> #t13 = <core::int>[let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/cascade.dart:26:5: Error: A value of type 'dart.core::List<dart.core::int>' can't be assigned to a variable of type 'dart.core::int'.
Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
    [1]
    ^" in <core::int>[1] as{TypeError} core::int] in let final core::String #t15 = (let final core::int #t16 = #t13.{core::Iterable::first} in invalid-expression "pkg/front_end/testcases/cascade.dart:28:13: Error: The getter 'last' isn't defined for the class 'dart.core::int'.
Try correcting the name to the name of an existing getter, or defining a getter or field named 'last'.
    ..first.last.toString()
            ^^^^").{core::Object::toString}() in let final core::String #t17 = (let final core::int #t18 = #t13.{core::Iterable::first} in invalid-expression "pkg/front_end/testcases/cascade.dart:29:12: Error: The method '[]' isn't defined for the class 'dart.core::int'.
Try correcting the name to the name of an existing method, or defining a method named '[]'.
    ..first[0].toString()
           ^^").{core::Object::toString}() in let final core::String #t19 = (let final core::int #t20 = #t13.{core::List::[]}(0) in invalid-expression "pkg/front_end/testcases/cascade.dart:30:11: Error: The getter 'last' isn't defined for the class 'dart.core::int'.
Try correcting the name to the name of an existing getter, or defining a getter or field named 'last'.
    ..[0].last.toString();
          ^^^^").{core::Object::toString}() in #t13;
  core::print(list);
}
