// Copyright (c) 2020, the R8 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.
package com.android.tools.r8.dex.code;

public class DexCompareHelper {

  // Integer constants to ensure that there is a well order for all DEX instructions including
  // virtual instructions represented in our internal encoding.
  static final int INIT_CLASS_COMPARE_ID;
  static final int DEX_ITEM_CONST_STRING_COMPARE_ID;
  static final int DEX_RECORD_FIELD_VALUES_COMPARE_ID;

  private static int HIGHEST_DEX_OPCODE = 0xFF;

  static {
    int lastId = HIGHEST_DEX_OPCODE;
    INIT_CLASS_COMPARE_ID = ++lastId;
    DEX_ITEM_CONST_STRING_COMPARE_ID = ++lastId;
    DEX_RECORD_FIELD_VALUES_COMPARE_ID = ++lastId;
  }

  // Helper to signal that the concrete instruction is uniquely determined by its ID/opcode.
  public static int compareIdUniquelyDeterminesEquality(
      DexInstruction instruction1, DexInstruction instruction2) {
    assert instruction1.getClass() == instruction2.getClass();
    assert instruction1.getCompareToId() == instruction2.getCompareToId();
    assert instruction1.toString().equals(instruction2.toString());
    return 0;
  }
}
