Errors: {
}
method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
  return () → Null {
    #lib1::Foo* foo = new #lib1::Foo::•();
    assert(foo.{#lib1::Foo::what}{dart.core::int*} =={dart.core::num::==}{(dart.core::Object*) →* dart.core::bool*} 0);
    foo = new #lib1::Foo::publicNamed();
    assert(foo.{#lib1::Foo::what}{dart.core::int*} =={dart.core::num::==}{(dart.core::Object*) →* dart.core::bool*} 1);
    foo = new #lib1::Foo::_privateNamed();
    assert(foo.{#lib1::Foo::what}{dart.core::int*} =={dart.core::num::==}{(dart.core::Object*) →* dart.core::bool*} 2);
    assert(foo.{#lib1::Foo::publicMethod}(){() →* dart.core::int*} =={dart.core::num::==}{(dart.core::Object*) →* dart.core::bool*} 42);
    assert(foo.{#lib1::Foo::_privateMethod}(){() →* dart.core::int*} =={dart.core::num::==}{(dart.core::Object*) →* dart.core::bool*} 43);
    assert(#lib1::Foo::publicStaticMethod() =={dart.core::num::==}{(dart.core::Object*) →* dart.core::bool*} 44);
    assert(#lib1::Foo::_privateStaticMethod() =={dart.core::num::==}{(dart.core::Object*) →* dart.core::bool*} 45);
    assert(foo.{#lib1::Foo::publicField}{dart.core::int*} =={dart.core::num::==}{(dart.core::Object*) →* dart.core::bool*} 84);
    foo.{#lib1::Foo::publicField} = 84.{dart.core::int::unary-}(){() →* dart.core::int*};
    assert(foo.{#lib1::Foo::publicField}{dart.core::int*} =={dart.core::num::==}{(dart.core::Object*) →* dart.core::bool*} 84.{dart.core::int::unary-}(){() →* dart.core::int*});
    assert(foo.{#lib1::Foo::_privateField}{dart.core::int*} =={dart.core::num::==}{(dart.core::Object*) →* dart.core::bool*} 85);
    foo.{#lib1::Foo::_privateField} = 85.{dart.core::int::unary-}(){() →* dart.core::int*};
    assert(foo.{#lib1::Foo::_privateField}{dart.core::int*} =={dart.core::num::==}{(dart.core::Object*) →* dart.core::bool*} 85.{dart.core::int::unary-}(){() →* dart.core::int*});
    assert(#lib1::Foo::publicStaticField =={dart.core::num::==}{(dart.core::Object*) →* dart.core::bool*} 86);
    #lib1::Foo::publicStaticField = 86.{dart.core::int::unary-}(){() →* dart.core::int*};
    assert(#lib1::Foo::publicStaticField =={dart.core::num::==}{(dart.core::Object*) →* dart.core::bool*} 86.{dart.core::int::unary-}(){() →* dart.core::int*});
    assert(#lib1::Foo::_privateStaticField =={dart.core::num::==}{(dart.core::Object*) →* dart.core::bool*} 87);
    #lib1::Foo::_privateStaticField = 87.{dart.core::int::unary-}(){() →* dart.core::int*};
    assert(#lib1::Foo::_privateStaticField =={dart.core::num::==}{(dart.core::Object*) →* dart.core::bool*} 87.{dart.core::int::unary-}(){() →* dart.core::int*});
    assert(foo.{#lib1::Foo::publicGetter}{dart.core::int*} =={dart.core::num::==}{(dart.core::Object*) →* dart.core::bool*} 1.{dart.core::int::unary-}(){() →* dart.core::int*});
    assert(foo.{#lib1::Foo::_privateGetter}{dart.core::int*} =={dart.core::num::==}{(dart.core::Object*) →* dart.core::bool*} 2.{dart.core::int::unary-}(){() →* dart.core::int*});
    assert(#lib1::Foo::publicStaticGetter =={dart.core::num::==}{(dart.core::Object*) →* dart.core::bool*} 3.{dart.core::int::unary-}(){() →* dart.core::int*});
    assert(#lib1::Foo::_privateStaticGetter =={dart.core::num::==}{(dart.core::Object*) →* dart.core::bool*} 4.{dart.core::int::unary-}(){() →* dart.core::int*});
    foo.{#lib1::Foo::publicSetter} = 42;
    foo.{#lib1::Foo::_privateSetter} = 42;
    #lib1::Foo::publicStaticSetter = 42;
    #lib1::Foo::_privateStaticSetter = 42;
    assert(#lib1::PublicExtension|publicPublicExtensionMethod(foo) =={dart.core::num::==}{(dart.core::Object*) →* dart.core::bool*} 20);
    assert(#lib1::PublicExtension|_publicPrivateExtensionMethod(foo) =={dart.core::num::==}{(dart.core::Object*) →* dart.core::bool*} 21);
    assert(#lib1::PublicExtension|publicPublicStaticExtensionMethod() =={dart.core::num::==}{(dart.core::Object*) →* dart.core::bool*} 22);
    assert(#lib1::PublicExtension|_publicPrivateStaticExtensionMethod() =={dart.core::num::==}{(dart.core::Object*) →* dart.core::bool*} 23);
    assert(#lib1::_PrivateExtension|privatePublicExtensionMethod(foo) =={dart.core::num::==}{(dart.core::Object*) →* dart.core::bool*} 30);
    assert(#lib1::_PrivateExtension|_privatePrivateExtensionMethod(foo) =={dart.core::num::==}{(dart.core::Object*) →* dart.core::bool*} 31);
    assert(#lib1::_PrivateExtension|privatePublicStaticExtensionMethod() =={dart.core::num::==}{(dart.core::Object*) →* dart.core::bool*} 32);
    assert(#lib1::_PrivateExtension|_privatePrivateStaticExtensionMethod() =={dart.core::num::==}{(dart.core::Object*) →* dart.core::bool*} 33);
    assert(#lib1::PublicExtension|publicPublicStaticExtensionField =={dart.core::num::==}{(dart.core::Object*) →* dart.core::bool*} 24);
    #lib1::PublicExtension|publicPublicStaticExtensionField = 24.{dart.core::int::unary-}(){() →* dart.core::int*};
    assert(#lib1::PublicExtension|publicPublicStaticExtensionField =={dart.core::num::==}{(dart.core::Object*) →* dart.core::bool*} 24.{dart.core::int::unary-}(){() →* dart.core::int*});
    assert(#lib1::PublicExtension|_publicPrivateStaticExtensionField =={dart.core::num::==}{(dart.core::Object*) →* dart.core::bool*} 25);
    #lib1::PublicExtension|_publicPrivateStaticExtensionField = 25.{dart.core::int::unary-}(){() →* dart.core::int*};
    assert(#lib1::PublicExtension|_publicPrivateStaticExtensionField =={dart.core::num::==}{(dart.core::Object*) →* dart.core::bool*} 25.{dart.core::int::unary-}(){() →* dart.core::int*});
    assert(#lib1::_PrivateExtension|privatePublicStaticExtensionField =={dart.core::num::==}{(dart.core::Object*) →* dart.core::bool*} 34);
    #lib1::_PrivateExtension|privatePublicStaticExtensionField = 34.{dart.core::int::unary-}(){() →* dart.core::int*};
    assert(#lib1::_PrivateExtension|privatePublicStaticExtensionField =={dart.core::num::==}{(dart.core::Object*) →* dart.core::bool*} 34.{dart.core::int::unary-}(){() →* dart.core::int*});
    assert(#lib1::_PrivateExtension|_privatePrivateStaticExtensionField =={dart.core::num::==}{(dart.core::Object*) →* dart.core::bool*} 35);
    #lib1::_PrivateExtension|_privatePrivateStaticExtensionField = 35.{dart.core::int::unary-}(){() →* dart.core::int*};
    assert(#lib1::_PrivateExtension|_privatePrivateStaticExtensionField =={dart.core::num::==}{(dart.core::Object*) →* dart.core::bool*} 35.{dart.core::int::unary-}(){() →* dart.core::int*});
    assert(#lib1::PublicExtension|get#publicPublicExtensionGetter(foo) =={dart.core::num::==}{(dart.core::Object*) →* dart.core::bool*} 26);
    assert(#lib1::PublicExtension|get#_publicPrivateExtensionGetter(foo) =={dart.core::num::==}{(dart.core::Object*) →* dart.core::bool*} 27);
    assert(#lib1::PublicExtension|publicPublicStaticExtensionGetter =={dart.core::num::==}{(dart.core::Object*) →* dart.core::bool*} 28);
    assert(#lib1::PublicExtension|_publicPrivateStaticExtensionGetter =={dart.core::num::==}{(dart.core::Object*) →* dart.core::bool*} 29);
    assert(#lib1::_PrivateExtension|get#privatePublicExtensionGetter(foo) =={dart.core::num::==}{(dart.core::Object*) →* dart.core::bool*} 36);
    assert(#lib1::_PrivateExtension|get#_privatePrivateExtensionGetter(foo) =={dart.core::num::==}{(dart.core::Object*) →* dart.core::bool*} 37);
    assert(#lib1::_PrivateExtension|privatePublicStaticExtensionGetter =={dart.core::num::==}{(dart.core::Object*) →* dart.core::bool*} 38);
    assert(#lib1::_PrivateExtension|_privatePrivateStaticExtensionGetter =={dart.core::num::==}{(dart.core::Object*) →* dart.core::bool*} 39);
    #lib1::PublicExtension|set#publicPublicExtensionSetter(foo, 42);
    #lib1::PublicExtension|set#_publicPrivateExtensionSetter(foo, 42);
    #lib1::PublicExtension|publicPublicStaticExtensionSetter = 42;
    #lib1::PublicExtension|_publicPrivateStaticExtensionSetter = 42;
    #lib1::_PrivateExtension|set#privatePublicExtensionSetter(foo, 42);
    #lib1::_PrivateExtension|set#_privatePrivateExtensionSetter(foo, 42);
    #lib1::_PrivateExtension|privatePublicStaticExtensionSetter = 42;
    #lib1::_PrivateExtension|_privatePrivateStaticExtensionSetter = 42;
    assert(#lib1::publicTopLevelMethod() =={dart.core::num::==}{(dart.core::Object*) →* dart.core::bool*} 50);
    assert(#lib1::_privateTopLevelMethod() =={dart.core::num::==}{(dart.core::Object*) →* dart.core::bool*} 51);
    assert(#lib1::publicTopLevelField =={dart.core::num::==}{(dart.core::Object*) →* dart.core::bool*} 52);
    #lib1::publicTopLevelField = 52.{dart.core::int::unary-}(){() →* dart.core::int*};
    assert(#lib1::publicTopLevelField =={dart.core::num::==}{(dart.core::Object*) →* dart.core::bool*} 52.{dart.core::int::unary-}(){() →* dart.core::int*});
    assert(#lib1::_privateTopLevelField =={dart.core::num::==}{(dart.core::Object*) →* dart.core::bool*} 53);
    #lib1::_privateTopLevelField = 53.{dart.core::int::unary-}(){() →* dart.core::int*};
    assert(#lib1::_privateTopLevelField =={dart.core::num::==}{(dart.core::Object*) →* dart.core::bool*} 53.{dart.core::int::unary-}(){() →* dart.core::int*});
    assert(#lib1::publicTopLevelGetter =={dart.core::num::==}{(dart.core::Object*) →* dart.core::bool*} 54);
    assert(#lib1::_privateTopLevelGetter =={dart.core::num::==}{(dart.core::Object*) →* dart.core::bool*} 55);
    #lib1::publicTopLevelSetter = 42;
    #lib1::_privateTopLevelSetter = 42;
  };
