//
// Problems outside component:
//
// pkg/front_end/testcases/dart2js/native.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.dart:35:32 -> NullConstant(null)
Evaluated: AsExpression @ org-dartlang-testcase:///native.dart:95:38 -> NullConstant(null)
Extra constant evaluation: evaluated: 96, effectively constant: 2


Constructor coverage from constants:
org-dartlang-testcase:///native.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)
