library /*isNonNullableByDefault*/;
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::•()
    ;
}
static method identity(dynamic x) → dynamic
  return x;
static method use(dynamic x) → void {}
static method main(core::List<core::String> args) → dynamic {
  dynamic foo = self::identity(new self::Foo::•());
  if(args.{core::List::length}{core::int}.{core::num::>}(1){(core::num) → core::bool}) {
    foo{dynamic}.field = "string";
    dynamic first = foo{dynamic}.field;
    self::use(first);
    foo{dynamic}.noField = "string";
    dynamic second = foo{dynamic}.noField;
    self::use(second);
  }
}
