69 lines
1.4 KiB
Java
Executable File
69 lines
1.4 KiB
Java
Executable File
package midend.llvm.value;
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import midend.llvm.type.IrType;
|
|
import midend.llvm.use.IrUser;
|
|
|
|
public class IrValue {
|
|
private IrType type;
|
|
private String name;
|
|
private ArrayList<IrUser> users;
|
|
|
|
public IrValue(IrType type, String name) {
|
|
this.type = type;
|
|
this.name = name;
|
|
this.users = new ArrayList<>();
|
|
}
|
|
|
|
public IrType getType() {
|
|
return type;
|
|
}
|
|
|
|
public String getName() {
|
|
return name;
|
|
}
|
|
|
|
public ArrayList<IrUser> getUsers() {
|
|
return users;
|
|
}
|
|
|
|
public void addUser(IrUser user) {
|
|
users.add(user);
|
|
}
|
|
|
|
public void deleteUser(IrUser user) {
|
|
users.remove(user);
|
|
}
|
|
|
|
public void clearUsers() {
|
|
ArrayList<IrUser> usersCopy = new ArrayList<>(users);
|
|
for (IrUser user : usersCopy) {
|
|
user.deleteUse(this);
|
|
}
|
|
}
|
|
|
|
public void replaceUserToAnother(IrValue newValue) {
|
|
ArrayList<IrUser> usersCopy = new ArrayList<>(users);
|
|
for (IrUser user : usersCopy) {
|
|
for (int i = 0; i < user.getUses().size(); i++) {
|
|
if (user.getUse(i) == this) {
|
|
user.setUse(i, newValue);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public String toString() {
|
|
return type.toString() + " " + name;
|
|
}
|
|
|
|
public void toMips() {
|
|
// 子类实现
|
|
}
|
|
|
|
public String getMipsLabel() {
|
|
return name.substring(1);
|
|
}
|
|
}
|