| // Copyright (c) 2023, the Dart project authors.  Please see the AUTHORS file | 
 | // for details. All rights reserved. Use of this source code is governed by a | 
 | // BSD-style license that can be found in the LICENSE file. | 
 | // | 
 | // This file has been automatically generated. Please do not edit it manually. | 
 | // Generated by tests/ffi/generator/structs_by_value_tests_generator.dart. | 
 | // | 
 | // SharedObjects=ffi_test_functions | 
 | // VMOptions= | 
 | // VMOptions=--deterministic --optimization-counter-threshold=90 | 
 | // VMOptions=--use-slow-path | 
 | // VMOptions=--use-slow-path --stacktrace-every=100 | 
 |  | 
 | import 'dart:ffi'; | 
 |  | 
 | import 'package:expect/expect.dart'; | 
 | // ignore: unused_import | 
 | import 'package:ffi/ffi.dart'; | 
 |  | 
 | import 'dylib_utils.dart'; | 
 |  | 
 | // Reuse the compound classes. | 
 | import 'function_structs_by_value_generated_compounds.dart'; | 
 |  | 
 | final ffiTestFunctions = dlopenPlatformSpecific("ffi_test_functions"); | 
 | void main() { | 
 |   // Force dlopen so @Native lookups in DynamicLibrary.process() succeed. | 
 |   dlopenGlobalPlatformSpecific('ffi_test_functions'); | 
 |  | 
 |   for (int i = 0; i < 100; ++i) { | 
 |     testReturnStruct1ByteIntNative(); | 
 |     testReturnStruct3BytesHomogeneousUint8Native(); | 
 |     testReturnStruct3BytesInt2ByteAlignedNative(); | 
 |     testReturnStruct4BytesHomogeneousInt16Native(); | 
 |     testReturnStruct7BytesHomogeneousUint8Native(); | 
 |     testReturnStruct7BytesInt4ByteAlignedNative(); | 
 |     testReturnStruct8BytesIntNative(); | 
 |     testReturnStruct8BytesHomogeneousFloatNative(); | 
 |     testReturnStruct8BytesMixedNative(); | 
 |     testReturnStruct9BytesHomogeneousUint8Native(); | 
 |     testReturnStruct9BytesInt4Or8ByteAlignedNative(); | 
 |     testReturnStruct12BytesHomogeneousFloatNative(); | 
 |     testReturnStruct16BytesHomogeneousFloatNative(); | 
 |     testReturnStruct16BytesMixedNative(); | 
 |     testReturnStruct16BytesMixed2Native(); | 
 |     testReturnStruct17BytesIntNative(); | 
 |     testReturnStruct19BytesHomogeneousUint8Native(); | 
 |     testReturnStruct20BytesHomogeneousInt32Native(); | 
 |     testReturnStruct20BytesHomogeneousFloatNative(); | 
 |     testReturnStruct32BytesHomogeneousDoubleNative(); | 
 |     testReturnStruct40BytesHomogeneousDoubleNative(); | 
 |     testReturnStruct1024BytesHomogeneousUint64Native(); | 
 |     testReturnStruct3BytesPackedIntNative(); | 
 |     testReturnStruct8BytesPackedIntNative(); | 
 |     testReturnStruct9BytesPackedMixedNative(); | 
 |     testReturnUnion4BytesMixedNative(); | 
 |     testReturnUnion8BytesNestedFloatNative(); | 
 |     testReturnUnion9BytesNestedIntNative(); | 
 |     testReturnUnion16BytesNestedFloatNative(); | 
 |   } | 
 | } | 
 |  | 
 | @Native<Struct1ByteInt Function(Int8)>(symbol: 'ReturnStruct1ByteInt') | 
 | external Struct1ByteInt returnStruct1ByteIntNative(int a0); | 
 |  | 
 | /// Smallest struct with data. | 
 | void testReturnStruct1ByteIntNative() { | 
 |   int a0; | 
 |  | 
 |   a0 = -1; | 
 |  | 
 |   final result = returnStruct1ByteIntNative(a0); | 
 |  | 
 |   print("result = $result"); | 
 |  | 
 |   Expect.equals(a0, result.a0); | 
 | } | 
 |  | 
 | @Native<Struct3BytesHomogeneousUint8 Function(Uint8, Uint8, Uint8)>( | 
 |   symbol: 'ReturnStruct3BytesHomogeneousUint8', | 
 | ) | 
 | external Struct3BytesHomogeneousUint8 returnStruct3BytesHomogeneousUint8Native( | 
 |   int a0, | 
 |   int a1, | 
 |   int a2, | 
 | ); | 
 |  | 
 | /// Smaller than word size return value on all architectures. | 
 | void testReturnStruct3BytesHomogeneousUint8Native() { | 
 |   int a0; | 
 |   int a1; | 
 |   int a2; | 
 |  | 
 |   a0 = 1; | 
 |   a1 = 2; | 
 |   a2 = 3; | 
 |  | 
 |   final result = returnStruct3BytesHomogeneousUint8Native(a0, a1, a2); | 
 |  | 
 |   print("result = $result"); | 
 |  | 
 |   Expect.equals(a0, result.a0); | 
 |   Expect.equals(a1, result.a1); | 
 |   Expect.equals(a2, result.a2); | 
 | } | 
 |  | 
 | @Native<Struct3BytesInt2ByteAligned Function(Int16, Int8)>( | 
 |   symbol: 'ReturnStruct3BytesInt2ByteAligned', | 
 | ) | 
 | external Struct3BytesInt2ByteAligned returnStruct3BytesInt2ByteAlignedNative( | 
 |   int a0, | 
 |   int a1, | 
 | ); | 
 |  | 
 | /// Smaller than word size return value on all architectures. | 
 | /// With alignment rules taken into account size is 4 bytes. | 
 | void testReturnStruct3BytesInt2ByteAlignedNative() { | 
 |   int a0; | 
 |   int a1; | 
 |  | 
 |   a0 = -1; | 
 |   a1 = 2; | 
 |  | 
 |   final result = returnStruct3BytesInt2ByteAlignedNative(a0, a1); | 
 |  | 
 |   print("result = $result"); | 
 |  | 
 |   Expect.equals(a0, result.a0); | 
 |   Expect.equals(a1, result.a1); | 
 | } | 
 |  | 
 | @Native<Struct4BytesHomogeneousInt16 Function(Int16, Int16)>( | 
 |   symbol: 'ReturnStruct4BytesHomogeneousInt16', | 
 | ) | 
 | external Struct4BytesHomogeneousInt16 returnStruct4BytesHomogeneousInt16Native( | 
 |   int a0, | 
 |   int a1, | 
 | ); | 
 |  | 
 | /// Word size return value on 32 bit architectures.. | 
 | void testReturnStruct4BytesHomogeneousInt16Native() { | 
 |   int a0; | 
 |   int a1; | 
 |  | 
 |   a0 = -1; | 
 |   a1 = 2; | 
 |  | 
 |   final result = returnStruct4BytesHomogeneousInt16Native(a0, a1); | 
 |  | 
 |   print("result = $result"); | 
 |  | 
 |   Expect.equals(a0, result.a0); | 
 |   Expect.equals(a1, result.a1); | 
 | } | 
 |  | 
 | @Native< | 
 |   Struct7BytesHomogeneousUint8 Function( | 
 |     Uint8, | 
 |     Uint8, | 
 |     Uint8, | 
 |     Uint8, | 
 |     Uint8, | 
 |     Uint8, | 
 |     Uint8, | 
 |   ) | 
 | >(symbol: 'ReturnStruct7BytesHomogeneousUint8') | 
 | external Struct7BytesHomogeneousUint8 returnStruct7BytesHomogeneousUint8Native( | 
 |   int a0, | 
 |   int a1, | 
 |   int a2, | 
 |   int a3, | 
 |   int a4, | 
 |   int a5, | 
 |   int a6, | 
 | ); | 
 |  | 
 | /// Non-wordsize return value. | 
 | void testReturnStruct7BytesHomogeneousUint8Native() { | 
 |   int a0; | 
 |   int a1; | 
 |   int a2; | 
 |   int a3; | 
 |   int a4; | 
 |   int a5; | 
 |   int a6; | 
 |  | 
 |   a0 = 1; | 
 |   a1 = 2; | 
 |   a2 = 3; | 
 |   a3 = 4; | 
 |   a4 = 5; | 
 |   a5 = 6; | 
 |   a6 = 7; | 
 |  | 
 |   final result = returnStruct7BytesHomogeneousUint8Native( | 
 |     a0, | 
 |     a1, | 
 |     a2, | 
 |     a3, | 
 |     a4, | 
 |     a5, | 
 |     a6, | 
 |   ); | 
 |  | 
 |   print("result = $result"); | 
 |  | 
 |   Expect.equals(a0, result.a0); | 
 |   Expect.equals(a1, result.a1); | 
 |   Expect.equals(a2, result.a2); | 
 |   Expect.equals(a3, result.a3); | 
 |   Expect.equals(a4, result.a4); | 
 |   Expect.equals(a5, result.a5); | 
 |   Expect.equals(a6, result.a6); | 
 | } | 
 |  | 
 | @Native<Struct7BytesInt4ByteAligned Function(Int32, Int16, Int8)>( | 
 |   symbol: 'ReturnStruct7BytesInt4ByteAligned', | 
 | ) | 
 | external Struct7BytesInt4ByteAligned returnStruct7BytesInt4ByteAlignedNative( | 
 |   int a0, | 
 |   int a1, | 
 |   int a2, | 
 | ); | 
 |  | 
 | /// Non-wordsize return value. | 
 | /// With alignment rules taken into account size is 8 bytes. | 
 | void testReturnStruct7BytesInt4ByteAlignedNative() { | 
 |   int a0; | 
 |   int a1; | 
 |   int a2; | 
 |  | 
 |   a0 = -1; | 
 |   a1 = 2; | 
 |   a2 = -3; | 
 |  | 
 |   final result = returnStruct7BytesInt4ByteAlignedNative(a0, a1, a2); | 
 |  | 
 |   print("result = $result"); | 
 |  | 
 |   Expect.equals(a0, result.a0); | 
 |   Expect.equals(a1, result.a1); | 
 |   Expect.equals(a2, result.a2); | 
 | } | 
 |  | 
 | @Native<Struct8BytesInt Function(Int16, Int16, Int32)>( | 
 |   symbol: 'ReturnStruct8BytesInt', | 
 | ) | 
 | external Struct8BytesInt returnStruct8BytesIntNative(int a0, int a1, int a2); | 
 |  | 
 | /// Return value in integer registers on many architectures. | 
 | void testReturnStruct8BytesIntNative() { | 
 |   int a0; | 
 |   int a1; | 
 |   int a2; | 
 |  | 
 |   a0 = -1; | 
 |   a1 = 2; | 
 |   a2 = -3; | 
 |  | 
 |   final result = returnStruct8BytesIntNative(a0, a1, a2); | 
 |  | 
 |   print("result = $result"); | 
 |  | 
 |   Expect.equals(a0, result.a0); | 
 |   Expect.equals(a1, result.a1); | 
 |   Expect.equals(a2, result.a2); | 
 | } | 
 |  | 
 | @Native<Struct8BytesHomogeneousFloat Function(Float, Float)>( | 
 |   symbol: 'ReturnStruct8BytesHomogeneousFloat', | 
 | ) | 
 | external Struct8BytesHomogeneousFloat returnStruct8BytesHomogeneousFloatNative( | 
 |   double a0, | 
 |   double a1, | 
 | ); | 
 |  | 
 | /// Return value in FP registers on many architectures. | 
 | void testReturnStruct8BytesHomogeneousFloatNative() { | 
 |   double a0; | 
 |   double a1; | 
 |  | 
 |   a0 = -1.0; | 
 |   a1 = 2.0; | 
 |  | 
 |   final result = returnStruct8BytesHomogeneousFloatNative(a0, a1); | 
 |  | 
 |   print("result = $result"); | 
 |  | 
 |   Expect.approxEquals(a0, result.a0); | 
 |   Expect.approxEquals(a1, result.a1); | 
 | } | 
 |  | 
 | @Native<Struct8BytesMixed Function(Float, Int16, Int16)>( | 
 |   symbol: 'ReturnStruct8BytesMixed', | 
 | ) | 
 | external Struct8BytesMixed returnStruct8BytesMixedNative( | 
 |   double a0, | 
 |   int a1, | 
 |   int a2, | 
 | ); | 
 |  | 
 | /// Return value split over FP and integer register in x64. | 
 | void testReturnStruct8BytesMixedNative() { | 
 |   double a0; | 
 |   int a1; | 
 |   int a2; | 
 |  | 
 |   a0 = -1.0; | 
 |   a1 = 2; | 
 |   a2 = -3; | 
 |  | 
 |   final result = returnStruct8BytesMixedNative(a0, a1, a2); | 
 |  | 
 |   print("result = $result"); | 
 |  | 
 |   Expect.approxEquals(a0, result.a0); | 
 |   Expect.equals(a1, result.a1); | 
 |   Expect.equals(a2, result.a2); | 
 | } | 
 |  | 
 | @Native< | 
 |   Struct9BytesHomogeneousUint8 Function( | 
 |     Uint8, | 
 |     Uint8, | 
 |     Uint8, | 
 |     Uint8, | 
 |     Uint8, | 
 |     Uint8, | 
 |     Uint8, | 
 |     Uint8, | 
 |     Uint8, | 
 |   ) | 
 | >(symbol: 'ReturnStruct9BytesHomogeneousUint8') | 
 | external Struct9BytesHomogeneousUint8 returnStruct9BytesHomogeneousUint8Native( | 
 |   int a0, | 
 |   int a1, | 
 |   int a2, | 
 |   int a3, | 
 |   int a4, | 
 |   int a5, | 
 |   int a6, | 
 |   int a7, | 
 |   int a8, | 
 | ); | 
 |  | 
 | /// The minimum alignment of this struct is only 1 byte based on its fields. | 
 | /// Test that the memory backing these structs is the right size and that | 
 | /// dart:ffi trampolines do not write outside this size. | 
 | void testReturnStruct9BytesHomogeneousUint8Native() { | 
 |   int a0; | 
 |   int a1; | 
 |   int a2; | 
 |   int a3; | 
 |   int a4; | 
 |   int a5; | 
 |   int a6; | 
 |   int a7; | 
 |   int a8; | 
 |  | 
 |   a0 = 1; | 
 |   a1 = 2; | 
 |   a2 = 3; | 
 |   a3 = 4; | 
 |   a4 = 5; | 
 |   a5 = 6; | 
 |   a6 = 7; | 
 |   a7 = 8; | 
 |   a8 = 9; | 
 |  | 
 |   final result = returnStruct9BytesHomogeneousUint8Native( | 
 |     a0, | 
 |     a1, | 
 |     a2, | 
 |     a3, | 
 |     a4, | 
 |     a5, | 
 |     a6, | 
 |     a7, | 
 |     a8, | 
 |   ); | 
 |  | 
 |   print("result = $result"); | 
 |  | 
 |   Expect.equals(a0, result.a0); | 
 |   Expect.equals(a1, result.a1); | 
 |   Expect.equals(a2, result.a2); | 
 |   Expect.equals(a3, result.a3); | 
 |   Expect.equals(a4, result.a4); | 
 |   Expect.equals(a5, result.a5); | 
 |   Expect.equals(a6, result.a6); | 
 |   Expect.equals(a7, result.a7); | 
 |   Expect.equals(a8, result.a8); | 
 | } | 
 |  | 
 | @Native<Struct9BytesInt4Or8ByteAligned Function(Int64, Int8)>( | 
 |   symbol: 'ReturnStruct9BytesInt4Or8ByteAligned', | 
 | ) | 
 | external Struct9BytesInt4Or8ByteAligned | 
 | returnStruct9BytesInt4Or8ByteAlignedNative(int a0, int a1); | 
 |  | 
 | /// Return value in two integer registers on x64. | 
 | /// With alignment rules taken into account size is 12 or 16 bytes. | 
 | void testReturnStruct9BytesInt4Or8ByteAlignedNative() { | 
 |   int a0; | 
 |   int a1; | 
 |  | 
 |   a0 = -1; | 
 |   a1 = 2; | 
 |  | 
 |   final result = returnStruct9BytesInt4Or8ByteAlignedNative(a0, a1); | 
 |  | 
 |   print("result = $result"); | 
 |  | 
 |   Expect.equals(a0, result.a0); | 
 |   Expect.equals(a1, result.a1); | 
 | } | 
 |  | 
 | @Native<Struct12BytesHomogeneousFloat Function(Float, Float, Float)>( | 
 |   symbol: 'ReturnStruct12BytesHomogeneousFloat', | 
 | ) | 
 | external Struct12BytesHomogeneousFloat | 
 | returnStruct12BytesHomogeneousFloatNative(double a0, double a1, double a2); | 
 |  | 
 | /// Return value in FPU registers, but does not use all registers on arm hardfp | 
 | /// and arm64. | 
 | void testReturnStruct12BytesHomogeneousFloatNative() { | 
 |   double a0; | 
 |   double a1; | 
 |   double a2; | 
 |  | 
 |   a0 = -1.0; | 
 |   a1 = 2.0; | 
 |   a2 = -3.0; | 
 |  | 
 |   final result = returnStruct12BytesHomogeneousFloatNative(a0, a1, a2); | 
 |  | 
 |   print("result = $result"); | 
 |  | 
 |   Expect.approxEquals(a0, result.a0); | 
 |   Expect.approxEquals(a1, result.a1); | 
 |   Expect.approxEquals(a2, result.a2); | 
 | } | 
 |  | 
 | @Native<Struct16BytesHomogeneousFloat Function(Float, Float, Float, Float)>( | 
 |   symbol: 'ReturnStruct16BytesHomogeneousFloat', | 
 | ) | 
 | external Struct16BytesHomogeneousFloat | 
 | returnStruct16BytesHomogeneousFloatNative( | 
 |   double a0, | 
 |   double a1, | 
 |   double a2, | 
 |   double a3, | 
 | ); | 
 |  | 
 | /// Return value in FPU registers on arm hardfp and arm64. | 
 | void testReturnStruct16BytesHomogeneousFloatNative() { | 
 |   double a0; | 
 |   double a1; | 
 |   double a2; | 
 |   double a3; | 
 |  | 
 |   a0 = -1.0; | 
 |   a1 = 2.0; | 
 |   a2 = -3.0; | 
 |   a3 = 4.0; | 
 |  | 
 |   final result = returnStruct16BytesHomogeneousFloatNative(a0, a1, a2, a3); | 
 |  | 
 |   print("result = $result"); | 
 |  | 
 |   Expect.approxEquals(a0, result.a0); | 
 |   Expect.approxEquals(a1, result.a1); | 
 |   Expect.approxEquals(a2, result.a2); | 
 |   Expect.approxEquals(a3, result.a3); | 
 | } | 
 |  | 
 | @Native<Struct16BytesMixed Function(Double, Int64)>( | 
 |   symbol: 'ReturnStruct16BytesMixed', | 
 | ) | 
 | external Struct16BytesMixed returnStruct16BytesMixedNative(double a0, int a1); | 
 |  | 
 | /// Return value split over FP and integer register in x64. | 
 | void testReturnStruct16BytesMixedNative() { | 
 |   double a0; | 
 |   int a1; | 
 |  | 
 |   a0 = -1.0; | 
 |   a1 = 2; | 
 |  | 
 |   final result = returnStruct16BytesMixedNative(a0, a1); | 
 |  | 
 |   print("result = $result"); | 
 |  | 
 |   Expect.approxEquals(a0, result.a0); | 
 |   Expect.equals(a1, result.a1); | 
 | } | 
 |  | 
 | @Native<Struct16BytesMixed2 Function(Float, Float, Float, Int32)>( | 
 |   symbol: 'ReturnStruct16BytesMixed2', | 
 | ) | 
 | external Struct16BytesMixed2 returnStruct16BytesMixed2Native( | 
 |   double a0, | 
 |   double a1, | 
 |   double a2, | 
 |   int a3, | 
 | ); | 
 |  | 
 | /// Return value split over FP and integer register in x64. | 
 | /// The integer register contains half float half int. | 
 | void testReturnStruct16BytesMixed2Native() { | 
 |   double a0; | 
 |   double a1; | 
 |   double a2; | 
 |   int a3; | 
 |  | 
 |   a0 = -1.0; | 
 |   a1 = 2.0; | 
 |   a2 = -3.0; | 
 |   a3 = 4; | 
 |  | 
 |   final result = returnStruct16BytesMixed2Native(a0, a1, a2, a3); | 
 |  | 
 |   print("result = $result"); | 
 |  | 
 |   Expect.approxEquals(a0, result.a0); | 
 |   Expect.approxEquals(a1, result.a1); | 
 |   Expect.approxEquals(a2, result.a2); | 
 |   Expect.equals(a3, result.a3); | 
 | } | 
 |  | 
 | @Native<Struct17BytesInt Function(Int64, Int64, Int8)>( | 
 |   symbol: 'ReturnStruct17BytesInt', | 
 | ) | 
 | external Struct17BytesInt returnStruct17BytesIntNative(int a0, int a1, int a2); | 
 |  | 
 | /// Return value returned in preallocated space passed by pointer on most ABIs. | 
 | /// Is non word size on purpose, to test that structs are rounded up to word size | 
 | /// on all ABIs. | 
 | void testReturnStruct17BytesIntNative() { | 
 |   int a0; | 
 |   int a1; | 
 |   int a2; | 
 |  | 
 |   a0 = -1; | 
 |   a1 = 2; | 
 |   a2 = -3; | 
 |  | 
 |   final result = returnStruct17BytesIntNative(a0, a1, a2); | 
 |  | 
 |   print("result = $result"); | 
 |  | 
 |   Expect.equals(a0, result.a0); | 
 |   Expect.equals(a1, result.a1); | 
 |   Expect.equals(a2, result.a2); | 
 | } | 
 |  | 
 | @Native< | 
 |   Struct19BytesHomogeneousUint8 Function( | 
 |     Uint8, | 
 |     Uint8, | 
 |     Uint8, | 
 |     Uint8, | 
 |     Uint8, | 
 |     Uint8, | 
 |     Uint8, | 
 |     Uint8, | 
 |     Uint8, | 
 |     Uint8, | 
 |     Uint8, | 
 |     Uint8, | 
 |     Uint8, | 
 |     Uint8, | 
 |     Uint8, | 
 |     Uint8, | 
 |     Uint8, | 
 |     Uint8, | 
 |     Uint8, | 
 |   ) | 
 | >(symbol: 'ReturnStruct19BytesHomogeneousUint8') | 
 | external Struct19BytesHomogeneousUint8 | 
 | returnStruct19BytesHomogeneousUint8Native( | 
 |   int a0, | 
 |   int a1, | 
 |   int a2, | 
 |   int a3, | 
 |   int a4, | 
 |   int a5, | 
 |   int a6, | 
 |   int a7, | 
 |   int a8, | 
 |   int a9, | 
 |   int a10, | 
 |   int a11, | 
 |   int a12, | 
 |   int a13, | 
 |   int a14, | 
 |   int a15, | 
 |   int a16, | 
 |   int a17, | 
 |   int a18, | 
 | ); | 
 |  | 
 | /// The minimum alignment of this struct is only 1 byte based on its fields. | 
 | /// Test that the memory backing these structs is the right size and that | 
 | /// dart:ffi trampolines do not write outside this size. | 
 | void testReturnStruct19BytesHomogeneousUint8Native() { | 
 |   int a0; | 
 |   int a1; | 
 |   int a2; | 
 |   int a3; | 
 |   int a4; | 
 |   int a5; | 
 |   int a6; | 
 |   int a7; | 
 |   int a8; | 
 |   int a9; | 
 |   int a10; | 
 |   int a11; | 
 |   int a12; | 
 |   int a13; | 
 |   int a14; | 
 |   int a15; | 
 |   int a16; | 
 |   int a17; | 
 |   int a18; | 
 |  | 
 |   a0 = 1; | 
 |   a1 = 2; | 
 |   a2 = 3; | 
 |   a3 = 4; | 
 |   a4 = 5; | 
 |   a5 = 6; | 
 |   a6 = 7; | 
 |   a7 = 8; | 
 |   a8 = 9; | 
 |   a9 = 10; | 
 |   a10 = 11; | 
 |   a11 = 12; | 
 |   a12 = 13; | 
 |   a13 = 14; | 
 |   a14 = 15; | 
 |   a15 = 16; | 
 |   a16 = 17; | 
 |   a17 = 18; | 
 |   a18 = 19; | 
 |  | 
 |   final result = returnStruct19BytesHomogeneousUint8Native( | 
 |     a0, | 
 |     a1, | 
 |     a2, | 
 |     a3, | 
 |     a4, | 
 |     a5, | 
 |     a6, | 
 |     a7, | 
 |     a8, | 
 |     a9, | 
 |     a10, | 
 |     a11, | 
 |     a12, | 
 |     a13, | 
 |     a14, | 
 |     a15, | 
 |     a16, | 
 |     a17, | 
 |     a18, | 
 |   ); | 
 |  | 
 |   print("result = $result"); | 
 |  | 
 |   Expect.equals(a0, result.a0); | 
 |   Expect.equals(a1, result.a1); | 
 |   Expect.equals(a2, result.a2); | 
 |   Expect.equals(a3, result.a3); | 
 |   Expect.equals(a4, result.a4); | 
 |   Expect.equals(a5, result.a5); | 
 |   Expect.equals(a6, result.a6); | 
 |   Expect.equals(a7, result.a7); | 
 |   Expect.equals(a8, result.a8); | 
 |   Expect.equals(a9, result.a9); | 
 |   Expect.equals(a10, result.a10); | 
 |   Expect.equals(a11, result.a11); | 
 |   Expect.equals(a12, result.a12); | 
 |   Expect.equals(a13, result.a13); | 
 |   Expect.equals(a14, result.a14); | 
 |   Expect.equals(a15, result.a15); | 
 |   Expect.equals(a16, result.a16); | 
 |   Expect.equals(a17, result.a17); | 
 |   Expect.equals(a18, result.a18); | 
 | } | 
 |  | 
 | @Native< | 
 |   Struct20BytesHomogeneousInt32 Function(Int32, Int32, Int32, Int32, Int32) | 
 | >(symbol: 'ReturnStruct20BytesHomogeneousInt32') | 
 | external Struct20BytesHomogeneousInt32 | 
 | returnStruct20BytesHomogeneousInt32Native( | 
 |   int a0, | 
 |   int a1, | 
 |   int a2, | 
 |   int a3, | 
 |   int a4, | 
 | ); | 
 |  | 
 | /// Return value too big to go in cpu registers on arm64. | 
 | void testReturnStruct20BytesHomogeneousInt32Native() { | 
 |   int a0; | 
 |   int a1; | 
 |   int a2; | 
 |   int a3; | 
 |   int a4; | 
 |  | 
 |   a0 = -1; | 
 |   a1 = 2; | 
 |   a2 = -3; | 
 |   a3 = 4; | 
 |   a4 = -5; | 
 |  | 
 |   final result = returnStruct20BytesHomogeneousInt32Native(a0, a1, a2, a3, a4); | 
 |  | 
 |   print("result = $result"); | 
 |  | 
 |   Expect.equals(a0, result.a0); | 
 |   Expect.equals(a1, result.a1); | 
 |   Expect.equals(a2, result.a2); | 
 |   Expect.equals(a3, result.a3); | 
 |   Expect.equals(a4, result.a4); | 
 | } | 
 |  | 
 | @Native< | 
 |   Struct20BytesHomogeneousFloat Function(Float, Float, Float, Float, Float) | 
 | >(symbol: 'ReturnStruct20BytesHomogeneousFloat') | 
 | external Struct20BytesHomogeneousFloat | 
 | returnStruct20BytesHomogeneousFloatNative( | 
 |   double a0, | 
 |   double a1, | 
 |   double a2, | 
 |   double a3, | 
 |   double a4, | 
 | ); | 
 |  | 
 | /// Return value too big to go in FPU registers on x64, arm hardfp and arm64. | 
 | void testReturnStruct20BytesHomogeneousFloatNative() { | 
 |   double a0; | 
 |   double a1; | 
 |   double a2; | 
 |   double a3; | 
 |   double a4; | 
 |  | 
 |   a0 = -1.0; | 
 |   a1 = 2.0; | 
 |   a2 = -3.0; | 
 |   a3 = 4.0; | 
 |   a4 = -5.0; | 
 |  | 
 |   final result = returnStruct20BytesHomogeneousFloatNative(a0, a1, a2, a3, a4); | 
 |  | 
 |   print("result = $result"); | 
 |  | 
 |   Expect.approxEquals(a0, result.a0); | 
 |   Expect.approxEquals(a1, result.a1); | 
 |   Expect.approxEquals(a2, result.a2); | 
 |   Expect.approxEquals(a3, result.a3); | 
 |   Expect.approxEquals(a4, result.a4); | 
 | } | 
 |  | 
 | @Native< | 
 |   Struct32BytesHomogeneousDouble Function(Double, Double, Double, Double) | 
 | >(symbol: 'ReturnStruct32BytesHomogeneousDouble') | 
 | external Struct32BytesHomogeneousDouble | 
 | returnStruct32BytesHomogeneousDoubleNative( | 
 |   double a0, | 
 |   double a1, | 
 |   double a2, | 
 |   double a3, | 
 | ); | 
 |  | 
 | /// Return value in FPU registers on arm64. | 
 | void testReturnStruct32BytesHomogeneousDoubleNative() { | 
 |   double a0; | 
 |   double a1; | 
 |   double a2; | 
 |   double a3; | 
 |  | 
 |   a0 = -1.0; | 
 |   a1 = 2.0; | 
 |   a2 = -3.0; | 
 |   a3 = 4.0; | 
 |  | 
 |   final result = returnStruct32BytesHomogeneousDoubleNative(a0, a1, a2, a3); | 
 |  | 
 |   print("result = $result"); | 
 |  | 
 |   Expect.approxEquals(a0, result.a0); | 
 |   Expect.approxEquals(a1, result.a1); | 
 |   Expect.approxEquals(a2, result.a2); | 
 |   Expect.approxEquals(a3, result.a3); | 
 | } | 
 |  | 
 | @Native< | 
 |   Struct40BytesHomogeneousDouble Function( | 
 |     Double, | 
 |     Double, | 
 |     Double, | 
 |     Double, | 
 |     Double, | 
 |   ) | 
 | >(symbol: 'ReturnStruct40BytesHomogeneousDouble') | 
 | external Struct40BytesHomogeneousDouble | 
 | returnStruct40BytesHomogeneousDoubleNative( | 
 |   double a0, | 
 |   double a1, | 
 |   double a2, | 
 |   double a3, | 
 |   double a4, | 
 | ); | 
 |  | 
 | /// Return value too big to go in FPU registers on arm64. | 
 | void testReturnStruct40BytesHomogeneousDoubleNative() { | 
 |   double a0; | 
 |   double a1; | 
 |   double a2; | 
 |   double a3; | 
 |   double a4; | 
 |  | 
 |   a0 = -1.0; | 
 |   a1 = 2.0; | 
 |   a2 = -3.0; | 
 |   a3 = 4.0; | 
 |   a4 = -5.0; | 
 |  | 
 |   final result = returnStruct40BytesHomogeneousDoubleNative(a0, a1, a2, a3, a4); | 
 |  | 
 |   print("result = $result"); | 
 |  | 
 |   Expect.approxEquals(a0, result.a0); | 
 |   Expect.approxEquals(a1, result.a1); | 
 |   Expect.approxEquals(a2, result.a2); | 
 |   Expect.approxEquals(a3, result.a3); | 
 |   Expect.approxEquals(a4, result.a4); | 
 | } | 
 |  | 
 | @Native< | 
 |   Struct1024BytesHomogeneousUint64 Function( | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |     Uint64, | 
 |   ) | 
 | >(symbol: 'ReturnStruct1024BytesHomogeneousUint64') | 
 | external Struct1024BytesHomogeneousUint64 | 
 | returnStruct1024BytesHomogeneousUint64Native( | 
 |   int a0, | 
 |   int a1, | 
 |   int a2, | 
 |   int a3, | 
 |   int a4, | 
 |   int a5, | 
 |   int a6, | 
 |   int a7, | 
 |   int a8, | 
 |   int a9, | 
 |   int a10, | 
 |   int a11, | 
 |   int a12, | 
 |   int a13, | 
 |   int a14, | 
 |   int a15, | 
 |   int a16, | 
 |   int a17, | 
 |   int a18, | 
 |   int a19, | 
 |   int a20, | 
 |   int a21, | 
 |   int a22, | 
 |   int a23, | 
 |   int a24, | 
 |   int a25, | 
 |   int a26, | 
 |   int a27, | 
 |   int a28, | 
 |   int a29, | 
 |   int a30, | 
 |   int a31, | 
 |   int a32, | 
 |   int a33, | 
 |   int a34, | 
 |   int a35, | 
 |   int a36, | 
 |   int a37, | 
 |   int a38, | 
 |   int a39, | 
 |   int a40, | 
 |   int a41, | 
 |   int a42, | 
 |   int a43, | 
 |   int a44, | 
 |   int a45, | 
 |   int a46, | 
 |   int a47, | 
 |   int a48, | 
 |   int a49, | 
 |   int a50, | 
 |   int a51, | 
 |   int a52, | 
 |   int a53, | 
 |   int a54, | 
 |   int a55, | 
 |   int a56, | 
 |   int a57, | 
 |   int a58, | 
 |   int a59, | 
 |   int a60, | 
 |   int a61, | 
 |   int a62, | 
 |   int a63, | 
 |   int a64, | 
 |   int a65, | 
 |   int a66, | 
 |   int a67, | 
 |   int a68, | 
 |   int a69, | 
 |   int a70, | 
 |   int a71, | 
 |   int a72, | 
 |   int a73, | 
 |   int a74, | 
 |   int a75, | 
 |   int a76, | 
 |   int a77, | 
 |   int a78, | 
 |   int a79, | 
 |   int a80, | 
 |   int a81, | 
 |   int a82, | 
 |   int a83, | 
 |   int a84, | 
 |   int a85, | 
 |   int a86, | 
 |   int a87, | 
 |   int a88, | 
 |   int a89, | 
 |   int a90, | 
 |   int a91, | 
 |   int a92, | 
 |   int a93, | 
 |   int a94, | 
 |   int a95, | 
 |   int a96, | 
 |   int a97, | 
 |   int a98, | 
 |   int a99, | 
 |   int a100, | 
 |   int a101, | 
 |   int a102, | 
 |   int a103, | 
 |   int a104, | 
 |   int a105, | 
 |   int a106, | 
 |   int a107, | 
 |   int a108, | 
 |   int a109, | 
 |   int a110, | 
 |   int a111, | 
 |   int a112, | 
 |   int a113, | 
 |   int a114, | 
 |   int a115, | 
 |   int a116, | 
 |   int a117, | 
 |   int a118, | 
 |   int a119, | 
 |   int a120, | 
 |   int a121, | 
 |   int a122, | 
 |   int a123, | 
 |   int a124, | 
 |   int a125, | 
 |   int a126, | 
 |   int a127, | 
 | ); | 
 |  | 
 | /// Test 1kb struct. | 
 | void testReturnStruct1024BytesHomogeneousUint64Native() { | 
 |   int a0; | 
 |   int a1; | 
 |   int a2; | 
 |   int a3; | 
 |   int a4; | 
 |   int a5; | 
 |   int a6; | 
 |   int a7; | 
 |   int a8; | 
 |   int a9; | 
 |   int a10; | 
 |   int a11; | 
 |   int a12; | 
 |   int a13; | 
 |   int a14; | 
 |   int a15; | 
 |   int a16; | 
 |   int a17; | 
 |   int a18; | 
 |   int a19; | 
 |   int a20; | 
 |   int a21; | 
 |   int a22; | 
 |   int a23; | 
 |   int a24; | 
 |   int a25; | 
 |   int a26; | 
 |   int a27; | 
 |   int a28; | 
 |   int a29; | 
 |   int a30; | 
 |   int a31; | 
 |   int a32; | 
 |   int a33; | 
 |   int a34; | 
 |   int a35; | 
 |   int a36; | 
 |   int a37; | 
 |   int a38; | 
 |   int a39; | 
 |   int a40; | 
 |   int a41; | 
 |   int a42; | 
 |   int a43; | 
 |   int a44; | 
 |   int a45; | 
 |   int a46; | 
 |   int a47; | 
 |   int a48; | 
 |   int a49; | 
 |   int a50; | 
 |   int a51; | 
 |   int a52; | 
 |   int a53; | 
 |   int a54; | 
 |   int a55; | 
 |   int a56; | 
 |   int a57; | 
 |   int a58; | 
 |   int a59; | 
 |   int a60; | 
 |   int a61; | 
 |   int a62; | 
 |   int a63; | 
 |   int a64; | 
 |   int a65; | 
 |   int a66; | 
 |   int a67; | 
 |   int a68; | 
 |   int a69; | 
 |   int a70; | 
 |   int a71; | 
 |   int a72; | 
 |   int a73; | 
 |   int a74; | 
 |   int a75; | 
 |   int a76; | 
 |   int a77; | 
 |   int a78; | 
 |   int a79; | 
 |   int a80; | 
 |   int a81; | 
 |   int a82; | 
 |   int a83; | 
 |   int a84; | 
 |   int a85; | 
 |   int a86; | 
 |   int a87; | 
 |   int a88; | 
 |   int a89; | 
 |   int a90; | 
 |   int a91; | 
 |   int a92; | 
 |   int a93; | 
 |   int a94; | 
 |   int a95; | 
 |   int a96; | 
 |   int a97; | 
 |   int a98; | 
 |   int a99; | 
 |   int a100; | 
 |   int a101; | 
 |   int a102; | 
 |   int a103; | 
 |   int a104; | 
 |   int a105; | 
 |   int a106; | 
 |   int a107; | 
 |   int a108; | 
 |   int a109; | 
 |   int a110; | 
 |   int a111; | 
 |   int a112; | 
 |   int a113; | 
 |   int a114; | 
 |   int a115; | 
 |   int a116; | 
 |   int a117; | 
 |   int a118; | 
 |   int a119; | 
 |   int a120; | 
 |   int a121; | 
 |   int a122; | 
 |   int a123; | 
 |   int a124; | 
 |   int a125; | 
 |   int a126; | 
 |   int a127; | 
 |  | 
 |   a0 = 1; | 
 |   a1 = 2; | 
 |   a2 = 3; | 
 |   a3 = 4; | 
 |   a4 = 5; | 
 |   a5 = 6; | 
 |   a6 = 7; | 
 |   a7 = 8; | 
 |   a8 = 9; | 
 |   a9 = 10; | 
 |   a10 = 11; | 
 |   a11 = 12; | 
 |   a12 = 13; | 
 |   a13 = 14; | 
 |   a14 = 15; | 
 |   a15 = 16; | 
 |   a16 = 17; | 
 |   a17 = 18; | 
 |   a18 = 19; | 
 |   a19 = 20; | 
 |   a20 = 21; | 
 |   a21 = 22; | 
 |   a22 = 23; | 
 |   a23 = 24; | 
 |   a24 = 25; | 
 |   a25 = 26; | 
 |   a26 = 27; | 
 |   a27 = 28; | 
 |   a28 = 29; | 
 |   a29 = 30; | 
 |   a30 = 31; | 
 |   a31 = 32; | 
 |   a32 = 33; | 
 |   a33 = 34; | 
 |   a34 = 35; | 
 |   a35 = 36; | 
 |   a36 = 37; | 
 |   a37 = 38; | 
 |   a38 = 39; | 
 |   a39 = 40; | 
 |   a40 = 41; | 
 |   a41 = 42; | 
 |   a42 = 43; | 
 |   a43 = 44; | 
 |   a44 = 45; | 
 |   a45 = 46; | 
 |   a46 = 47; | 
 |   a47 = 48; | 
 |   a48 = 49; | 
 |   a49 = 50; | 
 |   a50 = 51; | 
 |   a51 = 52; | 
 |   a52 = 53; | 
 |   a53 = 54; | 
 |   a54 = 55; | 
 |   a55 = 56; | 
 |   a56 = 57; | 
 |   a57 = 58; | 
 |   a58 = 59; | 
 |   a59 = 60; | 
 |   a60 = 61; | 
 |   a61 = 62; | 
 |   a62 = 63; | 
 |   a63 = 64; | 
 |   a64 = 65; | 
 |   a65 = 66; | 
 |   a66 = 67; | 
 |   a67 = 68; | 
 |   a68 = 69; | 
 |   a69 = 70; | 
 |   a70 = 71; | 
 |   a71 = 72; | 
 |   a72 = 73; | 
 |   a73 = 74; | 
 |   a74 = 75; | 
 |   a75 = 76; | 
 |   a76 = 77; | 
 |   a77 = 78; | 
 |   a78 = 79; | 
 |   a79 = 80; | 
 |   a80 = 81; | 
 |   a81 = 82; | 
 |   a82 = 83; | 
 |   a83 = 84; | 
 |   a84 = 85; | 
 |   a85 = 86; | 
 |   a86 = 87; | 
 |   a87 = 88; | 
 |   a88 = 89; | 
 |   a89 = 90; | 
 |   a90 = 91; | 
 |   a91 = 92; | 
 |   a92 = 93; | 
 |   a93 = 94; | 
 |   a94 = 95; | 
 |   a95 = 96; | 
 |   a96 = 97; | 
 |   a97 = 98; | 
 |   a98 = 99; | 
 |   a99 = 100; | 
 |   a100 = 101; | 
 |   a101 = 102; | 
 |   a102 = 103; | 
 |   a103 = 104; | 
 |   a104 = 105; | 
 |   a105 = 106; | 
 |   a106 = 107; | 
 |   a107 = 108; | 
 |   a108 = 109; | 
 |   a109 = 110; | 
 |   a110 = 111; | 
 |   a111 = 112; | 
 |   a112 = 113; | 
 |   a113 = 114; | 
 |   a114 = 115; | 
 |   a115 = 116; | 
 |   a116 = 117; | 
 |   a117 = 118; | 
 |   a118 = 119; | 
 |   a119 = 120; | 
 |   a120 = 121; | 
 |   a121 = 122; | 
 |   a122 = 123; | 
 |   a123 = 124; | 
 |   a124 = 125; | 
 |   a125 = 126; | 
 |   a126 = 127; | 
 |   a127 = 128; | 
 |  | 
 |   final result = returnStruct1024BytesHomogeneousUint64Native( | 
 |     a0, | 
 |     a1, | 
 |     a2, | 
 |     a3, | 
 |     a4, | 
 |     a5, | 
 |     a6, | 
 |     a7, | 
 |     a8, | 
 |     a9, | 
 |     a10, | 
 |     a11, | 
 |     a12, | 
 |     a13, | 
 |     a14, | 
 |     a15, | 
 |     a16, | 
 |     a17, | 
 |     a18, | 
 |     a19, | 
 |     a20, | 
 |     a21, | 
 |     a22, | 
 |     a23, | 
 |     a24, | 
 |     a25, | 
 |     a26, | 
 |     a27, | 
 |     a28, | 
 |     a29, | 
 |     a30, | 
 |     a31, | 
 |     a32, | 
 |     a33, | 
 |     a34, | 
 |     a35, | 
 |     a36, | 
 |     a37, | 
 |     a38, | 
 |     a39, | 
 |     a40, | 
 |     a41, | 
 |     a42, | 
 |     a43, | 
 |     a44, | 
 |     a45, | 
 |     a46, | 
 |     a47, | 
 |     a48, | 
 |     a49, | 
 |     a50, | 
 |     a51, | 
 |     a52, | 
 |     a53, | 
 |     a54, | 
 |     a55, | 
 |     a56, | 
 |     a57, | 
 |     a58, | 
 |     a59, | 
 |     a60, | 
 |     a61, | 
 |     a62, | 
 |     a63, | 
 |     a64, | 
 |     a65, | 
 |     a66, | 
 |     a67, | 
 |     a68, | 
 |     a69, | 
 |     a70, | 
 |     a71, | 
 |     a72, | 
 |     a73, | 
 |     a74, | 
 |     a75, | 
 |     a76, | 
 |     a77, | 
 |     a78, | 
 |     a79, | 
 |     a80, | 
 |     a81, | 
 |     a82, | 
 |     a83, | 
 |     a84, | 
 |     a85, | 
 |     a86, | 
 |     a87, | 
 |     a88, | 
 |     a89, | 
 |     a90, | 
 |     a91, | 
 |     a92, | 
 |     a93, | 
 |     a94, | 
 |     a95, | 
 |     a96, | 
 |     a97, | 
 |     a98, | 
 |     a99, | 
 |     a100, | 
 |     a101, | 
 |     a102, | 
 |     a103, | 
 |     a104, | 
 |     a105, | 
 |     a106, | 
 |     a107, | 
 |     a108, | 
 |     a109, | 
 |     a110, | 
 |     a111, | 
 |     a112, | 
 |     a113, | 
 |     a114, | 
 |     a115, | 
 |     a116, | 
 |     a117, | 
 |     a118, | 
 |     a119, | 
 |     a120, | 
 |     a121, | 
 |     a122, | 
 |     a123, | 
 |     a124, | 
 |     a125, | 
 |     a126, | 
 |     a127, | 
 |   ); | 
 |  | 
 |   print("result = $result"); | 
 |  | 
 |   Expect.equals(a0, result.a0); | 
 |   Expect.equals(a1, result.a1); | 
 |   Expect.equals(a2, result.a2); | 
 |   Expect.equals(a3, result.a3); | 
 |   Expect.equals(a4, result.a4); | 
 |   Expect.equals(a5, result.a5); | 
 |   Expect.equals(a6, result.a6); | 
 |   Expect.equals(a7, result.a7); | 
 |   Expect.equals(a8, result.a8); | 
 |   Expect.equals(a9, result.a9); | 
 |   Expect.equals(a10, result.a10); | 
 |   Expect.equals(a11, result.a11); | 
 |   Expect.equals(a12, result.a12); | 
 |   Expect.equals(a13, result.a13); | 
 |   Expect.equals(a14, result.a14); | 
 |   Expect.equals(a15, result.a15); | 
 |   Expect.equals(a16, result.a16); | 
 |   Expect.equals(a17, result.a17); | 
 |   Expect.equals(a18, result.a18); | 
 |   Expect.equals(a19, result.a19); | 
 |   Expect.equals(a20, result.a20); | 
 |   Expect.equals(a21, result.a21); | 
 |   Expect.equals(a22, result.a22); | 
 |   Expect.equals(a23, result.a23); | 
 |   Expect.equals(a24, result.a24); | 
 |   Expect.equals(a25, result.a25); | 
 |   Expect.equals(a26, result.a26); | 
 |   Expect.equals(a27, result.a27); | 
 |   Expect.equals(a28, result.a28); | 
 |   Expect.equals(a29, result.a29); | 
 |   Expect.equals(a30, result.a30); | 
 |   Expect.equals(a31, result.a31); | 
 |   Expect.equals(a32, result.a32); | 
 |   Expect.equals(a33, result.a33); | 
 |   Expect.equals(a34, result.a34); | 
 |   Expect.equals(a35, result.a35); | 
 |   Expect.equals(a36, result.a36); | 
 |   Expect.equals(a37, result.a37); | 
 |   Expect.equals(a38, result.a38); | 
 |   Expect.equals(a39, result.a39); | 
 |   Expect.equals(a40, result.a40); | 
 |   Expect.equals(a41, result.a41); | 
 |   Expect.equals(a42, result.a42); | 
 |   Expect.equals(a43, result.a43); | 
 |   Expect.equals(a44, result.a44); | 
 |   Expect.equals(a45, result.a45); | 
 |   Expect.equals(a46, result.a46); | 
 |   Expect.equals(a47, result.a47); | 
 |   Expect.equals(a48, result.a48); | 
 |   Expect.equals(a49, result.a49); | 
 |   Expect.equals(a50, result.a50); | 
 |   Expect.equals(a51, result.a51); | 
 |   Expect.equals(a52, result.a52); | 
 |   Expect.equals(a53, result.a53); | 
 |   Expect.equals(a54, result.a54); | 
 |   Expect.equals(a55, result.a55); | 
 |   Expect.equals(a56, result.a56); | 
 |   Expect.equals(a57, result.a57); | 
 |   Expect.equals(a58, result.a58); | 
 |   Expect.equals(a59, result.a59); | 
 |   Expect.equals(a60, result.a60); | 
 |   Expect.equals(a61, result.a61); | 
 |   Expect.equals(a62, result.a62); | 
 |   Expect.equals(a63, result.a63); | 
 |   Expect.equals(a64, result.a64); | 
 |   Expect.equals(a65, result.a65); | 
 |   Expect.equals(a66, result.a66); | 
 |   Expect.equals(a67, result.a67); | 
 |   Expect.equals(a68, result.a68); | 
 |   Expect.equals(a69, result.a69); | 
 |   Expect.equals(a70, result.a70); | 
 |   Expect.equals(a71, result.a71); | 
 |   Expect.equals(a72, result.a72); | 
 |   Expect.equals(a73, result.a73); | 
 |   Expect.equals(a74, result.a74); | 
 |   Expect.equals(a75, result.a75); | 
 |   Expect.equals(a76, result.a76); | 
 |   Expect.equals(a77, result.a77); | 
 |   Expect.equals(a78, result.a78); | 
 |   Expect.equals(a79, result.a79); | 
 |   Expect.equals(a80, result.a80); | 
 |   Expect.equals(a81, result.a81); | 
 |   Expect.equals(a82, result.a82); | 
 |   Expect.equals(a83, result.a83); | 
 |   Expect.equals(a84, result.a84); | 
 |   Expect.equals(a85, result.a85); | 
 |   Expect.equals(a86, result.a86); | 
 |   Expect.equals(a87, result.a87); | 
 |   Expect.equals(a88, result.a88); | 
 |   Expect.equals(a89, result.a89); | 
 |   Expect.equals(a90, result.a90); | 
 |   Expect.equals(a91, result.a91); | 
 |   Expect.equals(a92, result.a92); | 
 |   Expect.equals(a93, result.a93); | 
 |   Expect.equals(a94, result.a94); | 
 |   Expect.equals(a95, result.a95); | 
 |   Expect.equals(a96, result.a96); | 
 |   Expect.equals(a97, result.a97); | 
 |   Expect.equals(a98, result.a98); | 
 |   Expect.equals(a99, result.a99); | 
 |   Expect.equals(a100, result.a100); | 
 |   Expect.equals(a101, result.a101); | 
 |   Expect.equals(a102, result.a102); | 
 |   Expect.equals(a103, result.a103); | 
 |   Expect.equals(a104, result.a104); | 
 |   Expect.equals(a105, result.a105); | 
 |   Expect.equals(a106, result.a106); | 
 |   Expect.equals(a107, result.a107); | 
 |   Expect.equals(a108, result.a108); | 
 |   Expect.equals(a109, result.a109); | 
 |   Expect.equals(a110, result.a110); | 
 |   Expect.equals(a111, result.a111); | 
 |   Expect.equals(a112, result.a112); | 
 |   Expect.equals(a113, result.a113); | 
 |   Expect.equals(a114, result.a114); | 
 |   Expect.equals(a115, result.a115); | 
 |   Expect.equals(a116, result.a116); | 
 |   Expect.equals(a117, result.a117); | 
 |   Expect.equals(a118, result.a118); | 
 |   Expect.equals(a119, result.a119); | 
 |   Expect.equals(a120, result.a120); | 
 |   Expect.equals(a121, result.a121); | 
 |   Expect.equals(a122, result.a122); | 
 |   Expect.equals(a123, result.a123); | 
 |   Expect.equals(a124, result.a124); | 
 |   Expect.equals(a125, result.a125); | 
 |   Expect.equals(a126, result.a126); | 
 |   Expect.equals(a127, result.a127); | 
 | } | 
 |  | 
 | @Native<Struct3BytesPackedInt Function(Int8, Int16)>( | 
 |   symbol: 'ReturnStruct3BytesPackedInt', | 
 | ) | 
 | external Struct3BytesPackedInt returnStruct3BytesPackedIntNative( | 
 |   int a0, | 
 |   int a1, | 
 | ); | 
 |  | 
 | /// Small struct with mis-aligned member. | 
 | void testReturnStruct3BytesPackedIntNative() { | 
 |   int a0; | 
 |   int a1; | 
 |  | 
 |   a0 = -1; | 
 |   a1 = 2; | 
 |  | 
 |   final result = returnStruct3BytesPackedIntNative(a0, a1); | 
 |  | 
 |   print("result = $result"); | 
 |  | 
 |   Expect.equals(a0, result.a0); | 
 |   Expect.equals(a1, result.a1); | 
 | } | 
 |  | 
 | @Native<Struct8BytesPackedInt Function(Uint8, Uint32, Uint8, Uint8, Uint8)>( | 
 |   symbol: 'ReturnStruct8BytesPackedInt', | 
 | ) | 
 | external Struct8BytesPackedInt returnStruct8BytesPackedIntNative( | 
 |   int a0, | 
 |   int a1, | 
 |   int a2, | 
 |   int a3, | 
 |   int a4, | 
 | ); | 
 |  | 
 | /// Struct with mis-aligned member. | 
 | void testReturnStruct8BytesPackedIntNative() { | 
 |   int a0; | 
 |   int a1; | 
 |   int a2; | 
 |   int a3; | 
 |   int a4; | 
 |  | 
 |   a0 = 1; | 
 |   a1 = 2; | 
 |   a2 = 3; | 
 |   a3 = 4; | 
 |   a4 = 5; | 
 |  | 
 |   final result = returnStruct8BytesPackedIntNative(a0, a1, a2, a3, a4); | 
 |  | 
 |   print("result = $result"); | 
 |  | 
 |   Expect.equals(a0, result.a0); | 
 |   Expect.equals(a1, result.a1); | 
 |   Expect.equals(a2, result.a2); | 
 |   Expect.equals(a3, result.a3); | 
 |   Expect.equals(a4, result.a4); | 
 | } | 
 |  | 
 | @Native<Struct9BytesPackedMixed Function(Uint8, Double)>( | 
 |   symbol: 'ReturnStruct9BytesPackedMixed', | 
 | ) | 
 | external Struct9BytesPackedMixed returnStruct9BytesPackedMixedNative( | 
 |   int a0, | 
 |   double a1, | 
 | ); | 
 |  | 
 | /// Struct with mis-aligned member. | 
 | /// Tests backfilling of CPU and FPU registers. | 
 | void testReturnStruct9BytesPackedMixedNative() { | 
 |   int a0; | 
 |   double a1; | 
 |  | 
 |   a0 = 1; | 
 |   a1 = 2.0; | 
 |  | 
 |   final result = returnStruct9BytesPackedMixedNative(a0, a1); | 
 |  | 
 |   print("result = $result"); | 
 |  | 
 |   Expect.equals(a0, result.a0); | 
 |   Expect.approxEquals(a1, result.a1); | 
 | } | 
 |  | 
 | @Native<Union4BytesMixed Function(Uint32)>(symbol: 'ReturnUnion4BytesMixed') | 
 | external Union4BytesMixed returnUnion4BytesMixedNative(int a0); | 
 |  | 
 | /// Returning a mixed integer/float union. | 
 | void testReturnUnion4BytesMixedNative() { | 
 |   int a0; | 
 |  | 
 |   a0 = 1; | 
 |  | 
 |   final result = returnUnion4BytesMixedNative(a0); | 
 |  | 
 |   print("result = $result"); | 
 |  | 
 |   Expect.equals(a0, result.a0); | 
 | } | 
 |  | 
 | @Native<Union8BytesNestedFloat Function(Double)>( | 
 |   symbol: 'ReturnUnion8BytesNestedFloat', | 
 | ) | 
 | external Union8BytesNestedFloat returnUnion8BytesNestedFloatNative(double a0); | 
 |  | 
 | /// Returning a floating point only union. | 
 | void testReturnUnion8BytesNestedFloatNative() { | 
 |   double a0; | 
 |  | 
 |   a0 = -1.0; | 
 |  | 
 |   final result = returnUnion8BytesNestedFloatNative(a0); | 
 |  | 
 |   print("result = $result"); | 
 |  | 
 |   Expect.approxEquals(a0, result.a0); | 
 | } | 
 |  | 
 | @Native<Union9BytesNestedInt Function(Struct8BytesInt)>( | 
 |   symbol: 'ReturnUnion9BytesNestedInt', | 
 | ) | 
 | external Union9BytesNestedInt returnUnion9BytesNestedIntNative( | 
 |   Struct8BytesInt a0, | 
 | ); | 
 |  | 
 | /// Returning a mixed-size union. | 
 | void testReturnUnion9BytesNestedIntNative() { | 
 |   final a0Pointer = calloc<Struct8BytesInt>(); | 
 |   final Struct8BytesInt a0 = a0Pointer.ref; | 
 |  | 
 |   a0.a0 = -1; | 
 |   a0.a1 = 2; | 
 |   a0.a2 = -3; | 
 |  | 
 |   final result = returnUnion9BytesNestedIntNative(a0); | 
 |  | 
 |   print("result = $result"); | 
 |  | 
 |   Expect.equals(a0.a0, result.a0.a0); | 
 |   Expect.equals(a0.a1, result.a0.a1); | 
 |   Expect.equals(a0.a2, result.a0.a2); | 
 |  | 
 |   calloc.free(a0Pointer); | 
 | } | 
 |  | 
 | @Native<Union16BytesNestedFloat Function(Struct8BytesHomogeneousFloat)>( | 
 |   symbol: 'ReturnUnion16BytesNestedFloat', | 
 | ) | 
 | external Union16BytesNestedFloat returnUnion16BytesNestedFloatNative( | 
 |   Struct8BytesHomogeneousFloat a0, | 
 | ); | 
 |  | 
 | /// Returning union with homogenous floats. | 
 | void testReturnUnion16BytesNestedFloatNative() { | 
 |   final a0Pointer = calloc<Struct8BytesHomogeneousFloat>(); | 
 |   final Struct8BytesHomogeneousFloat a0 = a0Pointer.ref; | 
 |  | 
 |   a0.a0 = -1.0; | 
 |   a0.a1 = 2.0; | 
 |  | 
 |   final result = returnUnion16BytesNestedFloatNative(a0); | 
 |  | 
 |   print("result = $result"); | 
 |  | 
 |   Expect.approxEquals(a0.a0, result.a0.a0); | 
 |   Expect.approxEquals(a0.a1, result.a0.a1); | 
 |  | 
 |   calloc.free(a0Pointer); | 
 | } |