// Path: src/main/java/me/geso/jtt/Source.java
// public class Source {
// 	private final SourceType type;
// 	private final String source;
// 
// 	enum SourceType {
// 		FROM_FILE, FROM_STRING
// 	}
// 
// 	public Source(SourceType type, String source) {
// 		this.type = type;
// 		this.source = source;
// 	}
// 
// 	/**
// 	 * Create new source object from string.
// 	 * 
// 	 * @param source
// 	 * @return
// 	 */
// 	public static Source fromString(String source) {
// 		return new Source(SourceType.FROM_STRING, source);
// 	}
// 
// 	/**
// 	 * Create new Souce object from file Name.
// 	 * 
// 	 * @param fileName
// 	 * @return
// 	 */
// 	public static Source fromFile(String fileName) {
// 		return new Source(SourceType.FROM_FILE, fileName);
// 	}
// 
// 	public List<String> getSourceLines() throws IOException {
// 		if (this.type == SourceType.FROM_FILE) {
// 			return Files.readAllLines(new File(this.source).toPath());
// 		} else {
// 			List<String> list = new ArrayList<String>();
// 			String[] lines = source.split("\r?\n");
// 			for (String line : lines) {
// 				list.add(line);
// 			}
// 			return list;
// 		}
// 	}
// 	
// 	public String getTargetLines(int line) throws IOException {
// 		StringBuilder buf = new StringBuilder();
// 		List<String> lines = this.getSourceLines();
// 		for (int i=Math.max(0, line-3); i<Math.min(lines.size(), line+3); ++i) {
// 			buf.append(i==line-1 ? "* " : "  ");
// 			buf.append(lines.get(i) + "\n");
// 		}
// 		return new String(buf);
// 	}
// 
// 	public String getFileName() {
// 		if (this.type == SourceType.FROM_FILE) {
// 			return this.source;
// 		} else {
// 			return null;
// 		}
// 	}
// }


import java.io.IOException;
import java.util.List;
import me.geso.jtt.Source;
package me.geso.jtt.vm;



public class Irep {
	private final Code[] iseq;
	private final Object[] pool;
	private final Integer[] lineNumbers;
	private final Source source;
	/**
	 * Save the last time string size.
	 */
	private int capacityHint = -1;
	private final int loopStackSize;
	private final int registerCount;

	public Irep(List<Code> iseq, List<Object> pool,
// Path: src/main/java/me/geso/jtt/Source.java
// public class Source {
// 	private final SourceType type;
// 	private final String source;
// 
// 	enum SourceType {
// 		FROM_FILE, FROM_STRING
// 	}
// 
// 	public Source(SourceType type, String source) {
// 		this.type = type;
// 		this.source = source;
// 	}
// 
// 	/**
// 	 * Create new source object from string.
// 	 * 
// 	 * @param source
// 	 * @return
// 	 */
// 	public static Source fromString(String source) {
// 		return new Source(SourceType.FROM_STRING, source);
// 	}
// 
// 	/**
// 	 * Create new Souce object from file Name.
// 	 * 
// 	 * @param fileName
// 	 * @return
// 	 */
// 	public static Source fromFile(String fileName) {
// 		return new Source(SourceType.FROM_FILE, fileName);
// 	}
// 
// 	public List<String> getSourceLines() throws IOException {
// 		if (this.type == SourceType.FROM_FILE) {
// 			return Files.readAllLines(new File(this.source).toPath());
// 		} else {
// 			List<String> list = new ArrayList<String>();
// 			String[] lines = source.split("\r?\n");
// 			for (String line : lines) {
// 				list.add(line);
// 			}
// 			return list;
// 		}
// 	}
// 	
// 	public String getTargetLines(int line) throws IOException {
// 		StringBuilder buf = new StringBuilder();
// 		List<String> lines = this.getSourceLines();
// 		for (int i=Math.max(0, line-3); i<Math.min(lines.size(), line+3); ++i) {
// 			buf.append(i==line-1 ? "* " : "  ");
// 			buf.append(lines.get(i) + "\n");
// 		}
// 		return new String(buf);
// 	}
// 
// 	public String getFileName() {
// 		if (this.type == SourceType.FROM_FILE) {
// 			return this.source;
// 		} else {
// 			return null;
// 		}
// 	}
// }


// Path: src/main/java/me/geso/jtt/vm/Irep.java
import java.io.IOException;
import java.util.List;
import me.geso.jtt.Source;

package me.geso.jtt.vm;



public class Irep {
	private final Code[] iseq;
	private final Object[] pool;
	private final Integer[] lineNumbers;
	private final Source source;
	/**
	 * Save the last time string size.
	 */
	private int capacityHint = -1;
	private final int loopStackSize;
	private final int registerCount;

	public Irep(List<Code> iseq, List<Object> pool,
			List<Integer> lineNumbers, Source source, int loopStackSize, int registerCount) {