library test /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;

import "dart:math" as math;

class Trace extends core::Object {
  field core::List<self::Frame> frames = <self::Frame>[];
  synthetic constructor •() → self::Trace
    : super core::Object::•()
    ;
}
class Frame extends core::Object {
  field core::String location = "";
  synthetic constructor •() → self::Frame
    : super core::Object::•()
    ;
}
static method main() → dynamic {
  core::List<self::Trace> traces = <self::Trace>[];
  core::int longest = traces.{core::Iterable::map}<core::int>((self::Trace trace) → core::int {
    return trace.{self::Trace::frames}{core::List<self::Frame>}.{core::Iterable::map}<core::int>((self::Frame frame) → core::int => frame.{self::Frame::location}{core::String}.{core::String::length}{core::int}){((self::Frame) → core::int) → core::Iterable<core::int>}.{core::Iterable::fold}<core::int>(0, #C2){(core::int, (core::int, core::int) → core::int) → core::int};
  }){((self::Trace) → core::int) → core::Iterable<core::int>}.{core::Iterable::fold}<core::int>(0, #C2){(core::int, (core::int, core::int) → core::int) → core::int};
}

constants  {
  #C1 = static-tearoff math::max
  #C2 = instantiation #C1 <core::int*>
}
