// Copyright (c) 2020, 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.

import 'dart:_internal' show VMInternalsForTesting;

import 'package:expect/expect.dart';

// The VM class finalizer ensures that we only unbox fields which can be
// represented in the unboxed field bitmap in the target architecture (even when
// cross-compiling from 64-bit to 32-bit), see `Class::CalculateFieldOffsets()`.

// Make an integer that would look like an object pointer (irrespective of
// we compile to 32-bit or 64-bit and whether we use little or big endian
// encoding of the integer).
int get integerFieldValue =>
    int.parse('1') == 1 ? constIntegerFieldValue : 0x8000900180009001;
const int constIntegerFieldValue = 0x8000000180000001;

int i = 0;
final Object objectFieldValue = Foo('i${i++}');

void main() {
  final object = buildTargetLayout64Bit();

  // Ensure all fields of the class are used.
  print(object);

  Expect.identical(object.field1, objectFieldValue);
  Expect.identical(object.field2, constIntegerFieldValue);
  Expect.identical(object.field64, objectFieldValue);
  Expect.identical(object.field65, constIntegerFieldValue);
  Expect.identical(object.field66, objectFieldValue);
  Expect.equals('i0', object.field66.value);

  // Forcefully cause a GC.
  VMInternalsForTesting.collectAllGarbage();

  Expect.identical(object.field1, objectFieldValue);
  Expect.identical(object.field2, constIntegerFieldValue);
  Expect.identical(object.field64, objectFieldValue);
  Expect.identical(object.field65, constIntegerFieldValue);
  Expect.identical(object.field66, objectFieldValue);
  Expect.equals('i0', object.field66.value);

  print(object);
}

class Foo {
  final String value;
  Foo(this.value);
}

class TargetLayout64Bit {
  // field0 is header word.
  final Object field1;
  final int field2;
  final int field3;
  final int field4;
  final int field5;
  final int field6;
  final int field7;
  final int field8;
  final int field9;
  final int field10;
  final int field11;
  final int field12;
  final int field13;
  final int field14;
  final int field15;
  final int field16;
  final int field17;
  final int field18;
  final int field19;
  final int field20;
  final int field21;
  final int field22;
  final int field23;
  final int field24;
  final int field25;
  final int field26;
  final int field27;
  final int field28;
  final int field29;
  final int field30;
  final int field31;
  final int field32;
  final int field33;
  final int field34;
  final int field35;
  final int field36;
  final int field37;
  final int field38;
  final int field39;
  final int field40;
  final int field41;
  final int field42;
  final int field43;
  final int field44;
  final int field45;
  final int field46;
  final int field47;
  final int field48;
  final int field49;
  final int field50;
  final int field51;
  final int field52;
  final int field53;
  final int field54;
  final int field55;
  final int field56;
  final int field57;
  final int field58;
  final int field59;
  final int field60;
  final int field61;
  final int field62;
  final int field63;

  // For 64-bit targets there are no more bits available so we need to start
  // boxing all fields from here (this is performed in the class finalizer).

  final Object field64;

  // If GC incorrectly uses (bitmap & (1 << 65)) then will access bit of
  // [field1] and incorrectly think it is an object pointer.
  final int field65;

  // If GC incorrectly uses (bitmap & (1 << 66)) then will access bit of
  // [field2] and incorrectly think it is a unboxed value.
  final Object field66;

  const TargetLayout64Bit(
      this.field1,
      this.field2,
      this.field3,
      this.field4,
      this.field5,
      this.field6,
      this.field7,
      this.field8,
      this.field9,
      this.field10,
      this.field11,
      this.field12,
      this.field13,
      this.field14,
      this.field15,
      this.field16,
      this.field17,
      this.field18,
      this.field19,
      this.field20,
      this.field21,
      this.field22,
      this.field23,
      this.field24,
      this.field25,
      this.field26,
      this.field27,
      this.field28,
      this.field29,
      this.field30,
      this.field31,
      this.field32,
      this.field33,
      this.field34,
      this.field35,
      this.field36,
      this.field37,
      this.field38,
      this.field39,
      this.field40,
      this.field41,
      this.field42,
      this.field43,
      this.field44,
      this.field45,
      this.field46,
      this.field47,
      this.field48,
      this.field49,
      this.field50,
      this.field51,
      this.field52,
      this.field53,
      this.field54,
      this.field55,
      this.field56,
      this.field57,
      this.field58,
      this.field59,
      this.field60,
      this.field61,
      this.field62,
      this.field63,
      this.field64,
      this.field65,
      this.field66);

  // Ensure all fields are used.
  String toString() => '''
      <header>, $field1, $field2, $field3, $field4, $field5, $field6, $field7,
      $field8, $field9, $field10, $field11, $field12, $field13, $field14, $field15,
      $field16, $field17, $field18, $field19, $field20, $field21, $field22, $field23,
      $field24, $field25, $field26, $field27, $field28, $field29, $field30, $field31,
      $field32, $field33, $field34, $field35, $field36, $field37, $field38, $field39,
      $field40, $field41, $field42, $field43, $field44, $field45, $field46, $field47,
      $field48, $field49, $field50, $field51, $field52, $field53, $field54, $field55,
      $field56, $field57, $field58, $field59, $field60, $field61, $field62, $field63,
      $field64, $field65, $field66''';
}

@pragma('vm:never-inline')
buildTargetLayout64Bit() => TargetLayout64Bit(
    objectFieldValue,
    integerFieldValue,
    integerFieldValue,
    integerFieldValue,
    integerFieldValue,
    integerFieldValue,
    integerFieldValue,
    integerFieldValue,
    integerFieldValue,
    integerFieldValue,
    integerFieldValue,
    integerFieldValue,
    integerFieldValue,
    integerFieldValue,
    integerFieldValue,
    integerFieldValue,
    integerFieldValue,
    integerFieldValue,
    integerFieldValue,
    integerFieldValue,
    integerFieldValue,
    integerFieldValue,
    integerFieldValue,
    integerFieldValue,
    integerFieldValue,
    integerFieldValue,
    integerFieldValue,
    integerFieldValue,
    integerFieldValue,
    integerFieldValue,
    integerFieldValue,
    integerFieldValue,
    integerFieldValue,
    integerFieldValue,
    integerFieldValue,
    integerFieldValue,
    integerFieldValue,
    integerFieldValue,
    integerFieldValue,
    integerFieldValue,
    integerFieldValue,
    integerFieldValue,
    integerFieldValue,
    integerFieldValue,
    integerFieldValue,
    integerFieldValue,
    integerFieldValue,
    integerFieldValue,
    integerFieldValue,
    integerFieldValue,
    integerFieldValue,
    integerFieldValue,
    integerFieldValue,
    integerFieldValue,
    integerFieldValue,
    integerFieldValue,
    integerFieldValue,
    integerFieldValue,
    integerFieldValue,
    integerFieldValue,
    integerFieldValue,
    integerFieldValue,
    integerFieldValue,
    objectFieldValue,
    integerFieldValue,
    objectFieldValue);
