65 lines
1.9 KiB
Java
Executable File
65 lines
1.9 KiB
Java
Executable File
package midend.llvm.constant;
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import backend.mips.instr.data.MipsSpace;
|
|
import backend.mips.instr.data.MipsWord;
|
|
import midend.llvm.type.IrInterType;
|
|
import midend.llvm.type.IrArrayType;
|
|
|
|
public class IrConstantArray extends IrConstant {
|
|
private ArrayList<IrConstant> elements;
|
|
private int size;
|
|
|
|
public IrConstantArray(String name, ArrayList<IrConstant> elements, int size) {
|
|
super(new IrArrayType(IrInterType.INT32, size), name);
|
|
this.elements = elements == null ? new ArrayList<>() : new ArrayList<>(elements);
|
|
this.size = size;
|
|
}
|
|
|
|
public ArrayList<IrConstant> getElements() {
|
|
return elements;
|
|
}
|
|
|
|
public int getSize() {
|
|
return size;
|
|
}
|
|
|
|
public String toString() {
|
|
StringBuilder sb = new StringBuilder();
|
|
sb.append(getType().toString() + " ");
|
|
if (elements.size() == 0) {
|
|
sb.append("zeroinitializer");
|
|
} else {
|
|
sb.append("[");
|
|
for (IrConstant element : elements) {
|
|
sb.append(element.toString());
|
|
if (element != elements.get(elements.size() - 1)) {
|
|
sb.append(", ");
|
|
}
|
|
}
|
|
int left = size - elements.size();
|
|
for (int i = 0; i < left; i++) {
|
|
sb.append(", i32 0");
|
|
}
|
|
sb.append("]");
|
|
}
|
|
return sb.toString();
|
|
}
|
|
|
|
public void toMips(String label) {
|
|
ArrayList<Integer> values = new ArrayList<>();
|
|
if (elements.size() == 0) {
|
|
new MipsSpace(size * 4, label);
|
|
} else {
|
|
for (IrConstant element : elements) {
|
|
values.add(((IrConstantInt) element).getValue());
|
|
}
|
|
for (int i = 0; i < size - elements.size(); i++) {
|
|
values.add(0);
|
|
}
|
|
new MipsWord(label, values);
|
|
}
|
|
}
|
|
}
|