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

class Foo extends core::Object {
  field dynamic _field = null;
  synthetic constructor •() → self::Foo*
    : super core::Object::•()
    ;
}
class FooValue extends core::Object {
  synthetic constructor •() → self::FooValue*
    : super core::Object::•()
    ;
}
class Bar extends core::Object {
  field dynamic _field = null;
  synthetic constructor •() → self::Bar*
    : super core::Object::•()
    ;
}
class BarValue extends core::Object {
  synthetic constructor •() → self::BarValue*
    : super core::Object::•()
    ;
}
static method main() → dynamic {
  self::Foo* foo = new self::Foo::•();
  foo.{self::Foo::_field} = new self::FooValue::•();
  dynamic fooValue = foo.{self::Foo::_field};
  core::print(fooValue);
  self::Bar* bar = new self::Bar::•();
  bar.{self::Bar::_field} = new self::BarValue::•();
  dynamic barValue = bar.{self::Bar::_field};
  core::print(barValue);
}
