library;
import self as self;
import "dart:ffi" as ffi;
import "dart:core" as core;

import "dart:ffi";

part ffi_external_in_part_lib.dart;
final class Struct1ByteInt extends ffi::Struct {
  synthetic constructor •() → self::Struct1ByteInt
    ;
  @ffi::Int8::•()
  external get a0() → core::int;
  @ffi::Int8::•()
  external set a0(synthesized core::int #externalFieldValue) → void;
}
static method notMain() → void
  ;
@ffi::Native::•<(ffi::Int8) → self::Struct1ByteInt>(symbol: "ReturnStruct1ByteInt")
external static method /* from org-dartlang-testcase:///ffi_external_in_part_lib.dart */ returnStruct1ByteIntNative(core::int a0) → self::Struct1ByteInt;


Extra constant evaluation status:
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///ffi_external_in_part_file.dart:15:4 -> InstanceConstant(const Int8{})
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///ffi_external_in_part_file.dart:15:4 -> InstanceConstant(const Int8{})
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///ffi_external_in_part_lib.dart:19:2 -> InstanceConstant(const Native<Struct1ByteInt Function(Int8)>{Native.symbol: "ReturnStruct1ByteInt", Native.assetId: null, Native.isLeaf: false})
Extra constant evaluation: evaluated: 3, effectively constant: 3
