library #lib /*isNonNullableByDefault*/;
import self as self;
import "dart:ffi" as ffi;
import "dart:core" as core;
import "dart:typed_data" as typ;
import "dart:_internal" as _in;

import "dart:ffi";

@#C21
@#C27
class Incomplete extends ffi::AbiSpecificInteger /*hasConstConstructor*/  {
  const constructor •() → self::Incomplete
    : super ffi::AbiSpecificInteger::•()
    ;
  @#C29
  static get #sizeOf() → core::int*
    return ffi::_checkAbiSpecificIntegerMapping<core::int>(#C31.{core::List::[]}(ffi::_abi()){(core::int) → core::int*});
}
@#C36
class IncompleteStruct extends ffi::Struct {
  synthetic constructor •() → self::IncompleteStruct
    : super ffi::Struct::•()
    ;
  constructor #fromTypedDataBase(core::Object #typedDataBase) → self::IncompleteStruct
    : super ffi::Struct::_fromTypedDataBase(#typedDataBase)
    ;
  @#C37
  get a0() → core::int
    return ffi::_loadAbiSpecificInt<self::Incomplete>(this.{ffi::_Compound::_typedDataBase}{core::Object}, #C38.{core::List::[]}(ffi::_abi()){(core::int) → core::int*});
  @#C37
  set a0(core::int #externalFieldValue) → void
    return ffi::_storeAbiSpecificInt<self::Incomplete>(this.{ffi::_Compound::_typedDataBase}{core::Object}, #C38.{core::List::[]}(ffi::_abi()){(core::int) → core::int*}, #externalFieldValue);
  @#C37
  get a1() → core::int
    return ffi::_loadAbiSpecificInt<self::Incomplete>(this.{ffi::_Compound::_typedDataBase}{core::Object}, ffi::_checkAbiSpecificIntegerMapping<core::int>(#C31.{core::List::[]}(ffi::_abi()){(core::int) → core::int*}));
  @#C37
  set a1(core::int #externalFieldValue) → void
    return ffi::_storeAbiSpecificInt<self::Incomplete>(this.{ffi::_Compound::_typedDataBase}{core::Object}, ffi::_checkAbiSpecificIntegerMapping<core::int>(#C31.{core::List::[]}(ffi::_abi()){(core::int) → core::int*}), #externalFieldValue);
  @#C29
  static get #sizeOf() → core::int*
    return ffi::_checkAbiSpecificIntegerMapping<core::int>(#C40.{core::List::[]}(ffi::_abi()){(core::int) → core::int*});
}
@#C45
class IncompleteArrayStruct extends ffi::Struct {
  synthetic constructor •() → self::IncompleteArrayStruct
    : super ffi::Struct::•()
    ;
  constructor #fromTypedDataBase(core::Object #typedDataBase) → self::IncompleteArrayStruct
    : super ffi::Struct::_fromTypedDataBase(#typedDataBase)
    ;
  @#C46
  get a0() → ffi::Array<self::Incomplete>
    return new ffi::Array::_<self::Incomplete>( block {
      core::Object #typedDataBase = this.{ffi::_Compound::_typedDataBase}{core::Object};
      core::int #offset = #C38.{core::List::[]}(ffi::_abi()){(core::int) → core::int*};
    } =>#typedDataBase is ffi::Pointer<dynamic> ?{core::Object} ffi::_fromAddress<self::Incomplete>(#typedDataBase.{ffi::Pointer::address}{core::int}.{core::num::+}(#offset){(core::num) → core::num}) : let typ::TypedData #typedData = _in::unsafeCast<typ::TypedData>(#typedDataBase) in #typedData.{typ::TypedData::buffer}{typ::ByteBuffer}.{typ::ByteBuffer::asUint8List}(#typedData.{typ::TypedData::offsetInBytes}{core::int}.{core::num::+}(#offset){(core::num) → core::num}, ffi::_checkAbiSpecificIntegerMapping<core::int>(#C48.{core::List::[]}(ffi::_abi()){(core::int) → core::int*})){([core::int, core::int?]) → typ::Uint8List}, #C41, #C49);
  @#C46
  set a0(ffi::Array<self::Incomplete> #externalFieldValue) → void
    return ffi::_memCopy(this.{ffi::_Compound::_typedDataBase}{core::Object}, #C38.{core::List::[]}(ffi::_abi()){(core::int) → core::int*}, #externalFieldValue.{ffi::Array::_typedDataBase}{core::Object}, #C4, ffi::_checkAbiSpecificIntegerMapping<core::int>(#C48.{core::List::[]}(ffi::_abi()){(core::int) → core::int*}));
  @#C29
  static get #sizeOf() → core::int*
    return ffi::_checkAbiSpecificIntegerMapping<core::int>(#C48.{core::List::[]}(ffi::_abi()){(core::int) → core::int*});
}
class _DummyAllocator extends core::Object implements ffi::Allocator /*hasConstConstructor*/  {
  const constructor •() → self::_DummyAllocator
    : super core::Object::•()
    ;
  @#C50
  method allocate<T extends ffi::NativeType>(core::int byteCount, {core::int? alignment = #C23}) → ffi::Pointer<self::_DummyAllocator::allocate::T> {
    return ffi::Pointer::fromAddress<self::_DummyAllocator::allocate::T>(0);
  }
  @#C50
  method free(ffi::Pointer<ffi::NativeType> pointer) → void {}
}
static const field self::_DummyAllocator noAlloc = #C51;
static method main() → void {
  self::testSizeOf();
  self::testStoreLoad();
  self::testStoreLoadIndexed();
  self::testStruct();
  self::testInlineArray();
}
static method testSizeOf() → void {
  final core::int size = self::Incomplete::#sizeOf;
  core::print(size);
}
static method testStoreLoad() → void {
  final ffi::Pointer<self::Incomplete> p = #C51.{ffi::Allocator::allocate}<self::Incomplete>(self::Incomplete::#sizeOf){(core::int, {alignment: core::int?}) → ffi::Pointer<self::Incomplete>};
  ffi::_storeAbiSpecificInt<self::Incomplete>(p, #C4, 10);
  core::print(ffi::_loadAbiSpecificInt<self::Incomplete>(p, #C4));
  #C51.{self::_DummyAllocator::free}(p){(ffi::Pointer<ffi::NativeType>) → void};
}
static method testStoreLoadIndexed() → void {
  final ffi::Pointer<self::Incomplete> p = #C51.{ffi::Allocator::allocate}<self::Incomplete>(2.{core::num::*}(self::Incomplete::#sizeOf){(core::num) → core::num}){(core::int, {alignment: core::int?}) → ffi::Pointer<self::Incomplete>};
  ffi::_storeAbiSpecificIntAtIndex<self::Incomplete>(p, 0, 10);
  ffi::_storeAbiSpecificIntAtIndex<self::Incomplete>(p, 1, 3);
  core::print(ffi::_loadAbiSpecificIntAtIndex<self::Incomplete>(p, 0));
  core::print(ffi::_loadAbiSpecificIntAtIndex<self::Incomplete>(p, 1));
  #C51.{self::_DummyAllocator::free}(p){(ffi::Pointer<ffi::NativeType>) → void};
}
static method testStruct() → void {
  final ffi::Pointer<self::IncompleteStruct> p = #C51.{ffi::Allocator::allocate}<self::IncompleteStruct>(self::IncompleteStruct::#sizeOf){(core::int, {alignment: core::int?}) → ffi::Pointer<self::IncompleteStruct>};
  new self::IncompleteStruct::#fromTypedDataBase(p!).{self::IncompleteStruct::a0} = 1;
  core::print(new self::IncompleteStruct::#fromTypedDataBase(p!).{self::IncompleteStruct::a0}{core::int});
  new self::IncompleteStruct::#fromTypedDataBase(p!).{self::IncompleteStruct::a0} = 2;
  core::print(new self::IncompleteStruct::#fromTypedDataBase(p!).{self::IncompleteStruct::a0}{core::int});
  #C51.{self::_DummyAllocator::free}(p){(ffi::Pointer<ffi::NativeType>) → void};
}
static method testInlineArray() → void {
  final ffi::Pointer<self::IncompleteArrayStruct> p = #C51.{ffi::Allocator::allocate}<self::IncompleteArrayStruct>(self::IncompleteArrayStruct::#sizeOf){(core::int, {alignment: core::int?}) → ffi::Pointer<self::IncompleteArrayStruct>};
  final ffi::Array<self::Incomplete> array = new self::IncompleteArrayStruct::#fromTypedDataBase(p!).{self::IncompleteArrayStruct::a0}{ffi::Array<self::Incomplete>};
  for (core::int i = 0; i.{core::num::<}(100){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
    ffi::_storeAbiSpecificIntAtIndex<self::Incomplete>(array.{ffi::Array::_typedDataBase}{core::Object}, i, i);
  }
  for (core::int i = 0; i.{core::num::<}(100){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
    core::print(ffi::_loadAbiSpecificIntAtIndex<self::Incomplete>(array.{ffi::Array::_typedDataBase}{core::Object}, i));
  }
  #C51.{self::_DummyAllocator::free}(p){(ffi::Pointer<ffi::NativeType>) → void};
}
constants  {
  #C1 = 3
  #C2 = "linux"
  #C3 = ffi::_OS {index:#C1, _name:#C2}
  #C4 = 0
  #C5 = "arm"
  #C6 = ffi::_Architecture {index:#C4, _name:#C5}
  #C7 = ffi::Abi {_os:#C3, _architecture:#C6}
  #C8 = ffi::Uint32 {}
  #C9 = 1
  #C10 = "arm64"
  #C11 = ffi::_Architecture {index:#C9, _name:#C10}
  #C12 = ffi::Abi {_os:#C3, _architecture:#C11}
  #C13 = 2
  #C14 = "ia32"
  #C15 = ffi::_Architecture {index:#C13, _name:#C14}
  #C16 = ffi::Abi {_os:#C3, _architecture:#C15}
  #C17 = "x64"
  #C18 = ffi::_Architecture {index:#C1, _name:#C17}
  #C19 = ffi::Abi {_os:#C3, _architecture:#C18}
  #C20 = <ffi::Abi*, ffi::NativeType*>{#C7:#C8, #C12:#C8, #C16:#C8, #C19:#C8)
  #C21 = ffi::AbiSpecificIntegerMapping {mapping:#C20}
  #C22 = "vm:ffi:abi-specific-mapping"
  #C23 = null
  #C24 = TypeLiteralConstant(ffi::Uint32)
  #C25 = <core::Type?>[#C23, #C23, #C23, #C23, #C23, #C23, #C23, #C23, #C23, #C24, #C24, #C24, #C24, #C23, #C23, #C23, #C23, #C23, #C23, #C23]
  #C26 = ffi::_FfiAbiSpecificMapping {nativeTypes:#C25}
  #C27 = core::pragma {name:#C22, options:#C26}
  #C28 = "vm:prefer-inline"
  #C29 = core::pragma {name:#C28, options:#C23}
  #C30 = 4
  #C31 = <core::int*>[#C23, #C23, #C23, #C23, #C23, #C23, #C23, #C23, #C23, #C30, #C30, #C30, #C30, #C23, #C23, #C23, #C23, #C23, #C23, #C23]
  #C32 = "vm:ffi:struct-fields"
  #C33 = TypeLiteralConstant(self::Incomplete)
  #C34 = <core::Type>[#C33, #C33]
  #C35 = ffi::_FfiStructLayout {fieldTypes:#C34, packing:#C23}
  #C36 = core::pragma {name:#C32, options:#C35}
  #C37 = self::Incomplete {}
  #C38 = <core::int*>[#C4, #C4, #C4, #C4, #C4, #C4, #C4, #C4, #C4, #C4, #C4, #C4, #C4, #C4, #C4, #C4, #C4, #C4, #C4, #C4]
  #C39 = 8
  #C40 = <core::int*>[#C23, #C23, #C23, #C23, #C23, #C23, #C23, #C23, #C23, #C39, #C39, #C39, #C39, #C23, #C23, #C23, #C23, #C23, #C23, #C23]
  #C41 = 100
  #C42 = ffi::_FfiInlineArray {elementType:#C33, length:#C41}
  #C43 = <core::Type>[#C42]
  #C44 = ffi::_FfiStructLayout {fieldTypes:#C43, packing:#C23}
  #C45 = core::pragma {name:#C32, options:#C44}
  #C46 = ffi::_ArraySize<ffi::NativeType*> {dimension1:#C41, dimension2:#C23, dimension3:#C23, dimension4:#C23, dimension5:#C23, dimensions:#C23}
  #C47 = 400
  #C48 = <core::int*>[#C23, #C23, #C23, #C23, #C23, #C23, #C23, #C23, #C23, #C47, #C47, #C47, #C47, #C23, #C23, #C23, #C23, #C23, #C23, #C23]
  #C49 = <core::int*>[]
  #C50 = core::_Override {}
  #C51 = self::_DummyAllocator {}
}
