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

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

class Coordinate extends ffi::Struct {
  @ffi::Double::•()
  external get x() → core::double;
  @ffi::Double::•()
  external set x(core::double #externalFieldValue) → void;
  @ffi::Double::•()
  external get y() → core::double;
  @ffi::Double::•()
  external set y(core::double #externalFieldValue) → void;
  external get next() → ffi::Pointer<self::Coordinate>;
  external set next(ffi::Pointer<self::Coordinate> #externalFieldValue) → void;
  static factory allocate(core::double x, core::double y, ffi::Pointer<self::Coordinate> next) → self::Coordinate
    ;
}
static method main() → dynamic
  ;


Extra constant evaluation status:
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///ffi_sample.dart:13:4 -> InstanceConstant(const Double{})
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///ffi_sample.dart:13:4 -> InstanceConstant(const Double{})
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///ffi_sample.dart:16:4 -> InstanceConstant(const Double{})
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///ffi_sample.dart:16:4 -> InstanceConstant(const Double{})
Extra constant evaluation: evaluated: 4, effectively constant: 4
