//
// Problems outside component:
//
// pkg/front_end/testcases/dart2js/native_legacy.dart: Error: Only JS interop members may be 'external'.
// Try removing the 'external' keyword or adding a JS interop annotation.
//
library;
import self as self;
import "dart:core" as core;
import "dart:_internal" as _in;
import "dart:_js_helper" as _js;

import "dart:_js_helper";

class Class extends core::Object {
  field dynamic instanceField;
  static field dynamic staticField = null;
  constructor generative() → self::Class
    : self::Class::instanceField = null, super core::Object::•()
    ;
  external constructor externalGenerative() → self::Class;
  @#C2
  external constructor nativeGenerative() → self::Class;
  static method _#generative#tearOff() → self::Class
    return new self::Class::generative();
  static factory fact() → self::Class
    return (null as dynamic) as{TypeError,ForDynamic} self::Class;
  static method _#fact#tearOff() → self::Class
    return self::Class::fact();
  static method _#externalGenerative#tearOff() → self::Class
    return new self::Class::externalGenerative();
  external static factory externalFact() → self::Class;
  static method _#externalFact#tearOff() → self::Class
    return self::Class::externalFact();
  static method _#nativeGenerative#tearOff() → self::Class
    return new self::Class::nativeGenerative();
  @#C2
  external static factory nativeFact() → self::Class;
  static method _#nativeFact#tearOff() → self::Class
    return self::Class::nativeFact();
  get instanceGetter() → dynamic
    return null;
  set instanceSetter(dynamic _) → void {}
  method instanceMethod() → dynamic {}
  static get staticGetter() → dynamic
    return null;
  static set staticSetter(dynamic _) → void {}
  static method staticMethod() → dynamic {}
  external get externalInstanceGetter() → dynamic;
  external set externalInstanceSetter(dynamic _) → void;
  external method externalInstanceMethod() → dynamic;
  external static get externalStaticGetter() → dynamic;
  external static set externalStaticSetter(dynamic _) → void;
  external static method externalStaticMethod() → dynamic;
  @#C2
  external get nativeInstanceGetter() → dynamic;
  @#C2
  external set nativeInstanceSetter(dynamic _) → void;
  @#C2
  external method nativeInstanceMethod() → dynamic;
  @#C2
  external static get nativeStaticGetter() → dynamic;
  @#C2
  external static set nativeStaticSetter(dynamic _) → void;
  @#C2
  external static method nativeStaticMethod() → dynamic;
}
@#C4
class NativeClass extends core::Object {
  field dynamic instanceField;
  static field dynamic staticField = null;
  field dynamic instanceNamedField;
  constructor generative() → self::NativeClass
    : self::NativeClass::instanceNamedField = null, self::NativeClass::instanceField = null, super core::Object::•()
    ;
  external constructor externalGenerative() → self::NativeClass;
  @#C2
  external constructor nativeGenerative() → self::NativeClass;
  static method _#generative#tearOff() → self::NativeClass
    return new self::NativeClass::generative();
  static factory fact() → self::NativeClass
    return (null as dynamic) as{TypeError,ForDynamic} self::NativeClass;
  static method _#fact#tearOff() → self::NativeClass
    return self::NativeClass::fact();
  static method _#externalGenerative#tearOff() → self::NativeClass
    return new self::NativeClass::externalGenerative();
  external static factory externalFact() → self::NativeClass;
  static method _#externalFact#tearOff() → self::NativeClass
    return self::NativeClass::externalFact();
  static method _#nativeGenerative#tearOff() → self::NativeClass
    return new self::NativeClass::nativeGenerative();
  @#C2
  external static factory nativeFact() → self::NativeClass;
  static method _#nativeFact#tearOff() → self::NativeClass
    return self::NativeClass::nativeFact();
  get instanceGetter() → dynamic
    return null;
  set instanceSetter(dynamic _) → void {}
  method instanceMethod() → dynamic {}
  static get staticGetter() → dynamic
    return null;
  static set staticSetter(dynamic _) → void {}
  static method staticMethod() → dynamic {}
  external get externalInstanceGetter() → dynamic;
  external set externalInstanceSetter(dynamic _) → void;
  external method externalInstanceMethod() → dynamic;
  external static get externalStaticGetter() → dynamic;
  external static set externalStaticSetter(dynamic _) → void;
  external static method externalStaticMethod() → dynamic;
  @#C2
  external get nativeInstanceGetter() → dynamic;
  @#C2
  external set nativeInstanceSetter(dynamic _) → void;
  @#C2
  external method nativeInstanceMethod() → dynamic;
  @#C2
  external static get nativeStaticGetter() → dynamic;
  @#C2
  external static set nativeStaticSetter(dynamic _) → void;
  @#C2
  external static method nativeStaticMethod() → dynamic;
}
static field dynamic topLevelField;
static get topLevelGetter() → dynamic
  return null;
static set topLevelSetter(dynamic _) → void {}
static method topLevelFunction() → dynamic {}
external static get externalTopLevelGetter() → dynamic;
external static set externalTopLevelSetter(dynamic _) → void;
external static method externalTopLevelFunction() → dynamic;
@#C2
external static get nativeTopLevelGetter() → dynamic;
@#C2
external static set nativeTopLevelSetter(dynamic _) → void;
@#C2
external static method nativeTopLevelFunction() → dynamic;
static method main() → dynamic {
  if(true)
    return;
  self::topLevelField;
  self::topLevelGetter;
  self::topLevelSetter = null;
  self::topLevelFunction();
  self::externalTopLevelGetter;
  self::externalTopLevelSetter = null;
  self::externalTopLevelFunction();
  self::nativeTopLevelGetter;
  self::nativeTopLevelSetter = null;
  self::nativeTopLevelFunction();
  self::Class c1 = new self::Class::generative();
  self::Class::fact();
  new self::Class::externalGenerative();
  self::Class::externalFact();
  new self::Class::nativeGenerative();
  self::Class::nativeFact();
  c1.{self::Class::instanceField}{dynamic};
  c1.{self::Class::instanceGetter}{dynamic};
  c1.{self::Class::instanceSetter} = null;
  c1.{self::Class::instanceMethod}(){() → dynamic};
  self::Class::staticField;
  self::Class::staticGetter;
  self::Class::staticSetter = null;
  self::Class::staticMethod();
  c1.{self::Class::externalInstanceGetter}{dynamic};
  c1.{self::Class::externalInstanceSetter} = null;
  c1.{self::Class::externalInstanceMethod}(){() → dynamic};
  self::Class::externalStaticGetter;
  self::Class::externalStaticSetter = null;
  self::Class::externalStaticMethod();
  c1.{self::Class::nativeInstanceGetter}{dynamic};
  c1.{self::Class::nativeInstanceSetter} = null;
  c1.{self::Class::nativeInstanceMethod}(){() → dynamic};
  self::Class::nativeStaticGetter;
  self::Class::nativeStaticSetter = null;
  self::Class::nativeStaticMethod();
  self::NativeClass c2 = new self::NativeClass::generative();
  self::NativeClass::fact();
  new self::NativeClass::externalGenerative();
  self::NativeClass::externalFact();
  new self::NativeClass::nativeGenerative();
  self::NativeClass::nativeFact();
  c2.{self::NativeClass::instanceField}{dynamic};
  c2.{self::NativeClass::instanceGetter}{dynamic};
  c2.{self::NativeClass::instanceSetter} = null;
  c2.{self::NativeClass::instanceMethod}(){() → dynamic};
  self::NativeClass::staticField;
  self::NativeClass::staticGetter;
  self::NativeClass::staticSetter = null;
  self::NativeClass::staticMethod();
  c2.{self::NativeClass::externalInstanceGetter}{dynamic};
  c2.{self::NativeClass::externalInstanceSetter} = null;
  c2.{self::NativeClass::externalInstanceMethod}(){() → dynamic};
  self::NativeClass::externalStaticGetter;
  self::NativeClass::externalStaticSetter = null;
  self::NativeClass::externalStaticMethod();
  c2.{self::NativeClass::nativeInstanceGetter}{dynamic};
  c2.{self::NativeClass::nativeInstanceSetter} = null;
  c2.{self::NativeClass::nativeInstanceMethod}(){() → dynamic};
  self::NativeClass::nativeStaticGetter;
  self::NativeClass::nativeStaticSetter = null;
  self::NativeClass::nativeStaticMethod();
}

constants  {
  #C1 = ""
  #C2 = _in::ExternalName {name:#C1}
  #C3 = "d"
  #C4 = _js::Native {name:#C3}
}

Extra constant evaluation status:
Evaluated: AsExpression @ org-dartlang-testcase:///native_legacy.dart:35:32 -> NullConstant(null)
Evaluated: AsExpression @ org-dartlang-testcase:///native_legacy.dart:95:38 -> NullConstant(null)
Extra constant evaluation: evaluated: 98, effectively constant: 2


Constructor coverage from constants:
org-dartlang-testcase:///native_legacy.dart:
- ExternalName. (from org-dartlang-sdk:///lib/internal/internal.dart)
- Object. (from org-dartlang-sdk:///lib/core/object.dart)
- Native. (from org-dartlang-sdk:///lib/_internal/js_runtime/lib/annotations.dart)
