library /*isNonNullableByDefault*/;
import self as self;
import "dart:ffi" as ffi;

import "dart:ffi";
import "package:ffi/ffi.dart";

class StructInlineArrayMultiDimensional extends ffi::Struct {
  synthetic constructor •() → self::StructInlineArrayMultiDimensional
    : super ffi::Struct::•()
    ;
  @#C3
  external get a0() → ffi::Array<ffi::Array<ffi::Array<ffi::Uint8>>>;
  @#C3
  external set a0(ffi::Array<ffi::Array<ffi::Array<ffi::Uint8>>> #externalFieldValue) → void;
}
static method main() → dynamic {
  final ffi::Pointer<self::StructInlineArrayMultiDimensional> pointer = ffi::AllocatorAlloc|call<self::StructInlineArrayMultiDimensional>(#C4);
  final self::StructInlineArrayMultiDimensional struct = ffi::StructPointer|get#ref<self::StructInlineArrayMultiDimensional>(pointer);
  final ffi::Array<ffi::Array<ffi::Array<ffi::Uint8>>> array = struct.{self::StructInlineArrayMultiDimensional::a0};
  final ffi::Array<ffi::Array<ffi::Uint8>> subArray = ffi::ArrayArray|[]<ffi::Array<ffi::Uint8>>(array, 0);
  ffi::ArrayArray|[]=<ffi::Array<ffi::Uint8>>(array, 1, subArray);
  (#C4).{ffi::Allocator::free}(pointer);
}

constants  {
  #C1 = 2
  #C2 = null
  #C3 = ffi::_ArraySize<ffi::NativeType*> {dimension1:#C1, dimension2:#C1, dimension3:#C1, dimension4:#C2, dimension5:#C2, dimensions:#C2}
  #C4 = all::_CallocAllocator {}
}


Constructor coverage from constants:
org-dartlang-testcase:///ffi_struct_inline_array_multi_dimensional.dart:
- _ArraySize. (from org-dartlang-sdk:///sdk/lib/ffi/ffi.dart:135:9)
