library #lib /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;

class _AttributeName extends core::Object implements core::Enum /*isEnum*/  {
[@vm.inferred-type.metadata=dart.core::_Smi] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:1] [@vm.unboxing-info.metadata=()->i]  final field core::int index;
[@vm.inferred-type.metadata=dart.core::_OneByteString] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:2]  final field core::String _name;
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4]  method toString() → core::String
    return [@vm.direct-call.metadata=#lib::_AttributeName._name] [@vm.inferred-type.metadata=dart.core::_OneByteString] this.{self::_AttributeName::_name}{core::String};
}
class _Attribute extends core::Object {
  constructor _() → self::_Attribute
    : super core::Object::•()
    ;
  static method fromReader() → self::_Attribute {
    final self::_AttributeName name = [@vm.direct-call.metadata=dart.collection::_InternalImmutableLinkedHashMap.[]] [@vm.inferred-type.metadata=#lib::_AttributeName? (skip check)](#C8).{core::Map::[]}(#C1){(core::Object?) → self::_AttributeName?}!;
    return new self::_Attribute::_();
  }
}
static method main() → void {
  final self::_Attribute result = [@vm.inferred-type.metadata=#lib::_Attribute] self::_Attribute::fromReader();
  core::print(result);
}
constants  {
  #C1 = 1
  #C2 = "_AttributeName.sibling"
  #C3 = self::_AttributeName {index:#C1, _name:#C2}
  #C4 = 3
  #C5 = 0
  #C6 = "_AttributeName.name"
  #C7 = self::_AttributeName {index:#C5, _name:#C6}
  #C8 = <core::int*, self::_AttributeName*>{#C1:#C3, #C4:#C7)
}
