Allow creation of a machine from string
This commit is contained in:
@@ -20,6 +20,13 @@ impl IJVMReader {
|
|||||||
source: abc
|
source: abc
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn new_from_string(source: String) -> IJVMReader {
|
||||||
|
IJVMReader {
|
||||||
|
pointer: 0,
|
||||||
|
source: source.into_bytes(),
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl BinReadable for IJVMReader {
|
impl BinReadable for IJVMReader {
|
||||||
|
|||||||
@@ -52,8 +52,7 @@ impl Machine {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn new_from_file(file: &str) -> Result<Machine> {
|
pub fn new_from_reader(mut reader: IJVMReader) -> Result<Machine> {
|
||||||
let mut reader = IJVMReader::new(file).unwrap();
|
|
||||||
let magic = reader.read_u32()?;
|
let magic = reader.read_u32()?;
|
||||||
if magic != MAGIC_HEADER {
|
if magic != MAGIC_HEADER {
|
||||||
return Err("Invalid magic header");
|
return Err("Invalid magic header");
|
||||||
@@ -72,6 +71,16 @@ impl Machine {
|
|||||||
Ok(Machine::new(pool, text))
|
Ok(Machine::new(pool, text))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn new_from_file(file: &str) -> Result<Machine> {
|
||||||
|
let reader = IJVMReader::new(file).unwrap();
|
||||||
|
Machine::new_from_reader(reader)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn new_from_string(source: String) -> Result<Machine> {
|
||||||
|
let reader = IJVMReader::new_from_string(source);
|
||||||
|
Machine::new_from_reader(reader)
|
||||||
|
}
|
||||||
|
|
||||||
pub fn step(&mut self) -> Result<()> {
|
pub fn step(&mut self) -> Result<()> {
|
||||||
match self.block.read_op() {
|
match self.block.read_op() {
|
||||||
Ok(Operation::Op(a, func)) => {
|
Ok(Operation::Op(a, func)) => {
|
||||||
|
|||||||
Reference in New Issue
Block a user