| // Copyright (c) 2016, 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.ir.code; |
| |
| import com.android.tools.r8.errors.Unreachable; |
| import com.android.tools.r8.graph.DexItemFactory; |
| import com.android.tools.r8.graph.DexType; |
| |
| public enum NumericType { |
| BYTE, |
| CHAR, |
| SHORT, |
| INT, |
| LONG, |
| FLOAT, |
| DOUBLE; |
| |
| public DexType toDexType(DexItemFactory factory) { |
| switch (this) { |
| case BYTE: |
| return factory.byteType; |
| case CHAR: |
| return factory.charType; |
| case SHORT: |
| return factory.shortType; |
| case INT: |
| return factory.intType; |
| case LONG: |
| return factory.longType; |
| case FLOAT: |
| return factory.floatType; |
| case DOUBLE: |
| return factory.doubleType; |
| default: |
| throw new Unreachable("Invalid numeric type '" + this + "'"); |
| } |
| } |
| |
| public static NumericType fromDexType(DexType type) { |
| switch (type.descriptor.content[0]) { |
| case 'B': // byte |
| return NumericType.BYTE; |
| case 'S': // short |
| return NumericType.SHORT; |
| case 'C': // char |
| return NumericType.CHAR; |
| case 'I': // int |
| return NumericType.INT; |
| case 'F': // float |
| return NumericType.FLOAT; |
| case 'J': // long |
| return NumericType.LONG; |
| case 'D': // double |
| return NumericType.DOUBLE; |
| default: |
| return null; |
| } |
| } |
| |
| public boolean isWide() { |
| return this == LONG || this == DOUBLE; |
| } |
| } |