summaryrefslogtreecommitdiff
path: root/V2VM.java
diff options
context:
space:
mode:
Diffstat (limited to 'V2VM.java')
-rw-r--r--V2VM.java26
1 files changed, 21 insertions, 5 deletions
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<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;