package midend.llvm; import java.util.ArrayList; import java.util.HashMap; import midend.llvm.constant.IrConstantStr; import midend.llvm.value.IrFuncValue; import midend.llvm.value.IrGlobalValue; import midend.llvm.instr.GetIntInstr; import midend.llvm.instr.PutChInstr; import midend.llvm.instr.PutIntInstr; import midend.llvm.instr.PutStrInstr; public class IrModule { private ArrayList decls; private HashMap strs; private ArrayList globalVars; private ArrayList funcs; public IrModule() { decls = new ArrayList<>(); strs = new HashMap<>(); globalVars = new ArrayList<>(); funcs = new ArrayList<>(); decls.add(GetIntInstr.getIntDecl()); decls.add(PutChInstr.putChDecl()); decls.add(PutIntInstr.putIntDecl()); decls.add(PutStrInstr.putStrDecl()); } public ArrayList getDecls() { return decls; } public HashMap getStrs() { return strs; } public ArrayList getGlobalVars() { return globalVars; } public ArrayList getFuncs() { return funcs; } public void addFunc(IrFuncValue func) { funcs.add(func); } public void addStr(IrConstantStr str) { if (strs.containsKey(str.getValue())) { return; } strs.put(str.getValue(), str); } public boolean containStr(String str) { return strs.containsKey(str); } public IrConstantStr getStr(String str) { if (containStr(str)) { return strs.get(str); } return null; } public void addGlobalVar(IrGlobalValue globalVar) { globalVars.add(globalVar); } public IrFuncValue getMainFunc() { for (IrFuncValue func : funcs) { if (func.isMain()) { return func; } } return null; } //TODO: toString()方法编写 public String toString() { StringBuilder sb = new StringBuilder(); for (String decl : decls) { sb.append(decl).append("\n"); } for (IrConstantStr str : strs.values()) { sb.append(str.toString()).append("\n"); } for (IrGlobalValue globalVar : globalVars) { sb.append(globalVar.toString()).append("\n"); } for (IrFuncValue func : funcs) { sb.append(func.toString()).append("\n"); } // System.out.println(funcs.size()); return sb.toString(); } }