From 008d0de42fdabb54dc43de5cfa33f4c15bd1d7ba Mon Sep 17 00:00:00 2001 From: bd-912 Date: Sat, 27 Apr 2024 17:23:35 -0600 Subject: Finally fix the InputStreamReader issues in V2VM --- V2VM.java | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) (limited to 'V2VM.java') diff --git a/V2VM.java b/V2VM.java index 9198d71..dd83d14 100644 --- a/V2VM.java +++ b/V2VM.java @@ -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 strProg = inputStreamToArrayList(systemInCopy); + ArrayList 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; -- cgit v1.2.3