diff options
Diffstat (limited to 'V2VM.java')
-rw-r--r-- | V2VM.java | 26 |
1 files changed, 21 insertions, 5 deletions
@@ -9,8 +9,11 @@ import cs132.vapor.ast.VDataSegment; import cs132.vapor.ast.VFunction; import cs132.vapor.ast.VInstr; -import java.io.InputStreamReader; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; import java.io.PrintStream; import java.util.Arrays; @@ -24,12 +27,14 @@ public class V2VM { public static void main(String[] args) { try { - System.in.mark(-1); + byte[] bytes = readAllBytes(System.in); + InputStream is1 = new ByteArrayInputStream(bytes); + InputStream is2 = new ByteArrayInputStream(bytes); + InputStream systemInCopy = createCopyOfSystemIn(); - System.in.reset(); - ArrayList<String> strProg = inputStreamToArrayList(systemInCopy); + ArrayList<String> strProg = inputStreamToArrayList(is1); - VaporProgram prog = parseVapor(System.in, System.out); + VaporProgram prog = parseVapor(is2, System.out); MinimalLogger.info(String.format("Generating Intervals...")); LIRVisitor lv = new LIRVisitor(prog, strProg); @@ -99,6 +104,17 @@ public class V2VM { return lines; } + public static byte[] readAllBytes(InputStream inputStream) throws IOException { + ByteArrayOutputStream buffer = new ByteArrayOutputStream(); + int nRead; + byte[] data = new byte[1024]; + while ((nRead = inputStream.read(data, 0, data.length)) != -1) { + buffer.write(data, 0, nRead); + } + buffer.flush(); + return buffer.toByteArray(); + } + private static InputStream createCopyOfSystemIn() { byte[] buffer = new byte[1024]; int bytesRead; |