blob: 1aee9967434d116f60ef8d5f8cc47c5824e590c0 [file] [log] [blame]
// Copyright (c) 2021, 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.cf.code.CfSafeCheckCast;
import com.android.tools.r8.dex.code.DexCheckCast;
import com.android.tools.r8.dex.code.DexSafeCheckCast;
import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexType;
import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.conversion.CfBuilder;
public class SafeCheckCast extends CheckCast {
public SafeCheckCast(Value dest, Value value, DexType type) {
super(dest, value, type);
}
public static Builder builder() {
return new Builder();
}
@Override
public void buildCf(CfBuilder builder) {
builder.add(new CfSafeCheckCast(getType()), this);
}
@Override
DexCheckCast createCheckCast(int register) {
return new DexSafeCheckCast(register, getType());
}
@Override
public boolean instructionInstanceCanThrow(AppView<?> appView, ProgramMethod context) {
return false;
}
@Override
public boolean isSafeCheckCast() {
return true;
}
@Override
public SafeCheckCast asSafeCheckCast() {
return this;
}
public static class Builder extends CheckCast.Builder {
@Override
public CheckCast build() {
return amend(new SafeCheckCast(outValue, object, castType));
}
}
}