This commit is contained in:
Sander Hautvast 2023-09-30 18:06:36 +02:00
parent c821944fac
commit 027fd99312
3 changed files with 11 additions and 11 deletions

View file

@ -21,7 +21,7 @@ impl Object {
}
fn get_field(&self, cp_index: &u16) -> &str {
if let CpEntry::Utf8(name) = self.class.constant_pool.get(&cp_index).unwrap() {
if let CpEntry::Utf8(name) = self.class.constant_pool.get(cp_index).unwrap() {
return name;
}
panic!()

View file

@ -17,7 +17,7 @@ pub fn find_class(classpath: &Vec<String>, class_name: &str) -> Result<String, E
}
for clp_entry in classpath {
if fs::metadata(&clp_entry)?.is_dir() {
if fs::metadata(clp_entry)?.is_dir() {
let mut maybe_path = clp_entry.clone();
maybe_path.push('/');
maybe_path.push_str(class_name);
@ -37,18 +37,18 @@ pub fn find_class(classpath: &Vec<String>, class_name: &str) -> Result<String, E
/// and returns the byte array as Vec
pub fn read_bytecode(name: String) -> Result<Vec<u8>, Error> {
let mut buffer;
if name.contains("#") {
let parts: Vec<&str> = name.split("#").collect();
if name.contains('#') {
let parts: Vec<&str> = name.split('#').collect();
let archive_file = File::open(parts[0])?;
let mut archive_zip = zip::ZipArchive::new(archive_file)?;
let mut entry = archive_zip.by_name(parts[1])?;
buffer = vec![0; entry.size() as usize];
entry.read(&mut buffer)?;
entry.read_exact(&mut buffer)?;
} else {
let mut f = File::open(&name)?;
let metadata = fs::metadata(&name)?;
buffer = vec![0; metadata.len() as usize];
let _ = f.read(&mut buffer)?;
f.read_exact(&mut buffer)?;
}
Ok(buffer)
}

View file

@ -276,8 +276,8 @@ impl Vm {
fn get_signature_for_invoke(cp: Rc<HashMap<u16, CpEntry>>, index: u16) -> Option<(String, String)> {
if let CpEntry::MethodRef(class_index, name_and_type_index) = cp.get(&index).unwrap() {
if let Some(method_signature) = get_name_and_type(Rc::clone(&cp), *name_and_type_index) {
if let CpEntry::ClassRef(class_name_index) = cp.get(&class_index).unwrap() {
if let CpEntry::Utf8(class_name) = cp.get(&class_name_index).unwrap() {
if let CpEntry::ClassRef(class_name_index) = cp.get(class_index).unwrap() {
if let CpEntry::Utf8(class_name) = cp.get(class_name_index).unwrap() {
return Some((class_name.into(), method_signature));
}
}
@ -286,10 +286,10 @@ fn get_signature_for_invoke(cp: Rc<HashMap<u16, CpEntry>>, index: u16) -> Option
None
}
fn get_name_and_type(cp: Rc<HashMap<u16, CpEntry>>, index: u16) -> Option<(String)> {
fn get_name_and_type(cp: Rc<HashMap<u16, CpEntry>>, index: u16) -> Option<String> {
if let CpEntry::NameAndType(method_name_index, signature_index) = cp.get(&index).unwrap() {
if let CpEntry::Utf8(method_name) = cp.get(&method_name_index).unwrap() {
if let CpEntry::Utf8(signature) = cp.get(&signature_index).unwrap() {
if let CpEntry::Utf8(method_name) = cp.get(method_name_index).unwrap() {
if let CpEntry::Utf8(signature) = cp.get(signature_index).unwrap() {
let mut method_signature: String = method_name.into();
method_signature.push_str(signature);
return Some(method_signature);