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

static field core::bool x = self::f<core::bool>() || self::f<core::bool>();
static field core::bool y = self::f<core::bool>() && self::f<core::bool>();
static method f<T extends core::Object = dynamic>() → self::f::T
  return null;
static method test() → void {
  core::bool x = self::f<core::bool>() || self::f<core::bool>();
  core::bool y = self::f<core::bool>() && self::f<core::bool>();
}
static method main() → dynamic {}
