From 1dcea9c05f6eb9b65899272301f46cbf81aeca1b Mon Sep 17 00:00:00 2001 From: Jur van den Berg Date: Wed, 23 May 2018 16:06:22 +0200 Subject: [PATCH] Allow creation of a machine from string --- src/ijvmreader.rs | 7 +++++++ src/machine.rs | 13 +++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/ijvmreader.rs b/src/ijvmreader.rs index 7fd7698..62bc800 100644 --- a/src/ijvmreader.rs +++ b/src/ijvmreader.rs @@ -20,6 +20,13 @@ impl IJVMReader { source: abc }) } + + pub fn new_from_string(source: String) -> IJVMReader { + IJVMReader { + pointer: 0, + source: source.into_bytes(), + } + } } impl BinReadable for IJVMReader { diff --git a/src/machine.rs b/src/machine.rs index 2a26e6e..fd325f2 100644 --- a/src/machine.rs +++ b/src/machine.rs @@ -52,8 +52,7 @@ impl Machine { } } - pub fn new_from_file(file: &str) -> Result { - let mut reader = IJVMReader::new(file).unwrap(); + pub fn new_from_reader(mut reader: IJVMReader) -> Result { let magic = reader.read_u32()?; if magic != MAGIC_HEADER { return Err("Invalid magic header"); @@ -72,6 +71,16 @@ impl Machine { Ok(Machine::new(pool, text)) } + pub fn new_from_file(file: &str) -> Result { + let reader = IJVMReader::new(file).unwrap(); + Machine::new_from_reader(reader) + } + + pub fn new_from_string(source: String) -> Result { + let reader = IJVMReader::new_from_string(source); + Machine::new_from_reader(reader) + } + pub fn step(&mut self) -> Result<()> { match self.block.read_op() { Ok(Operation::Op(a, func)) => {