package erjang.beam.repr; import java.util.HashMap; import java.util.Map; import erjang.EAtom; import erjang.EBitString; import erjang.EObject; import erjang.EString; public class CodeTables { protected EAtom[] atoms; protected EObject[] literals; protected ExtFun[] externalFuns; protected AnonFun[] anonymousFuns; protected EString[] filenames; protected byte[] stringpool; protected LineRecord[] lineRecords; protected Map<Integer,FunctionInfo> functionMap = new HashMap<Integer, FunctionInfo>(); public EAtom atom(int nr) {return atoms[nr-1];} // 1-based public EObject literal(int nr) {return literals[nr];} // 0-based public ExtFun extFun(int nr) {return externalFuns[nr];} // 0-based public AnonFun anonFun(int nr) {return anonymousFuns[nr];} public EBitString bitstring(int start, int bits) { return EBitString.make(stringpool, start, bits/8, bits%8); } public EString string(int start, int bytes) { return EString.make(stringpool, start, bytes); } public EAtom moduleName() { return atom(1); } protected void addFunctionAtLabel(FunctionInfo fi) { assert(! functionMap.containsKey(fi.label)); functionMap.put(fi.label, fi); } public FunctionInfo functionAtLabel(int label) { return functionMap.get(label); } }