fixed clippy lints

This commit is contained in:
nora 2021-08-23 12:43:56 +02:00
parent 5ec9260b59
commit 2460ab4637
8 changed files with 95 additions and 55 deletions

4
Cargo.lock generated
View file

@ -2,6 +2,10 @@
# It is not intended for manual editing. # It is not intended for manual editing.
version = 3 version = 3
[[package]]
name = "class-struct"
version = "0.1.0"
[[package]] [[package]]
name = "file-info" name = "file-info"
version = "0.1.0" version = "0.1.0"

View file

@ -0,0 +1,8 @@
[package]
name = "class-struct"
version = "0.1.0"
edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]

View file

@ -0,0 +1,23 @@
#![allow(dead_code)]
struct MethodSignature {
args: Vec<Type>,
return_t: Type,
}
/// A Java type, found in signatures
enum Type {
/// V
Void,
/// B
Boolean,
Byte,
Short,
Int,
Long,
Float,
Double,
Object,
/// [
Array(Box<Type>),
}

View file

@ -17,7 +17,7 @@ pub fn display_class<W: Write>(mut w: W, class: &ClassFile) -> Result<(), Box<dy
w, w,
"class {} extends {}{} {{", "class {} extends {}{} {{",
&class.this_class.get(cp)?.name_index.get(cp)?, &class.this_class.get(cp)?.name_index.get(cp)?,
if class.interfaces.len() == 0 { if class.interfaces.is_empty() {
"".to_string() "".to_string()
} else { } else {
format!( format!(
@ -36,7 +36,7 @@ pub fn display_class<W: Write>(mut w: W, class: &ClassFile) -> Result<(), Box<dy
}, },
match class.super_class.get(cp)? { match class.super_class.get(cp)? {
None => "<none>", None => "<none>",
Some(class) => &class.name_index.get(cp)?, Some(class) => class.name_index.get(cp)?,
} }
)?; )?;

View file

@ -37,7 +37,7 @@ impl<'a> Data<'a> {
fn u1(&mut self) -> Result<u1> { fn u1(&mut self) -> Result<u1> {
let item = self.data.get(self.pointer).cloned(); let item = self.data.get(self.pointer).cloned();
self.pointer += 1; self.pointer += 1;
item.ok_or(ParseErr("No u1 left".to_string())) item.ok_or_else(|| ParseErr("No u1 left".to_string()))
} }
fn u2(&mut self) -> Result<u2> { fn u2(&mut self) -> Result<u2> {
@ -56,7 +56,7 @@ impl<'a> Data<'a> {
self.data self.data
.get(self.pointer - 1) .get(self.pointer - 1)
.cloned() .cloned()
.ok_or(ParseErr("Last u1 not found".to_string())) .ok_or_else(|| ParseErr("Last u1 not found".to_string()))
} }
fn last_u2(&self) -> Result<u2> { fn last_u2(&self) -> Result<u2> {
@ -64,7 +64,7 @@ impl<'a> Data<'a> {
.data .data
.get(self.pointer - 2) .get(self.pointer - 2)
.cloned() .cloned()
.ok_or(ParseErr("Last u2 not found".to_string()))?; .ok_or_else(|| ParseErr("Last u2 not found".to_string()))?;
Ok(((last2u1 as u2) << 8) | self.last_u1()? as u2) Ok(((last2u1 as u2) << 8) | self.last_u1()? as u2)
} }
@ -73,12 +73,12 @@ impl<'a> Data<'a> {
.data .data
.get(self.pointer - 3) .get(self.pointer - 3)
.cloned() .cloned()
.ok_or(ParseErr("Last 2 u1 in last u4 not found".to_string()))?; .ok_or_else(|| ParseErr("Last 2 u1 in last u4 not found".to_string()))?;
let last3u1 = self let last3u1 = self
.data .data
.get(self.pointer - 4) .get(self.pointer - 4)
.cloned() .cloned()
.ok_or(ParseErr("Last 3 u1 in last u4 not found".to_string()))?; .ok_or_else(|| ParseErr("Last 3 u1 in last u4 not found".to_string()))?;
Ok(((last3u1 as u4) << 24) | ((last2u1 as u4) << 16) | self.last_u2()? as u4) Ok(((last3u1 as u4) << 24) | ((last2u1 as u4) << 16) | self.last_u2()? as u4)
} }
} }
@ -257,7 +257,7 @@ impl Parse for CpInfo {
name_and_type_index: data.cp()?, name_and_type_index: data.cp()?,
}), }),
}, },
_ => Err(ParseErr(format!("Invalid CPInfo tag: {}", tag)))?, _ => return Err(ParseErr(format!("Invalid CPInfo tag: {}", tag))),
}) })
} }
} }
@ -341,10 +341,12 @@ impl Parse for StackMapFrame {
locals: parse_vec(data.u2()?, data)?, locals: parse_vec(data.u2()?, data)?,
stack: parse_vec(data.u2()?, data)?, stack: parse_vec(data.u2()?, data)?,
}, },
_ => Err(ParseErr(format!( _ => {
"Invalid StackMapFrame type: {}", return Err(ParseErr(format!(
frame_type "Invalid StackMapFrame type: {}",
)))?, frame_type
)))
}
}) })
} }
} }
@ -368,10 +370,12 @@ impl Parse for VerificationTypeInfo {
tag, tag,
offset: data.u2()?, offset: data.u2()?,
}, },
_ => Err(ParseErr(format!( _ => {
"Invalid VerificationTypeInfo tag: {}", return Err(ParseErr(format!(
tag "Invalid VerificationTypeInfo tag: {}",
)))?, tag
)))
}
}) })
} }
} }
@ -454,10 +458,12 @@ impl Parse for AnnotationElementValueValue {
'[' => Self::ArrayValue { '[' => Self::ArrayValue {
values: parse_vec(data.u2()?, data)?, values: parse_vec(data.u2()?, data)?,
}, },
_ => Err(ParseErr(format!( _ => {
"Invalid AnnotationElementValueValue tag: {}", return Err(ParseErr(format!(
tag "Invalid AnnotationElementValueValue tag: {}",
)))?, tag
)))
}
}) })
} }
} }
@ -544,7 +550,7 @@ impl AttributeInfo {
_ => return Err(ParseErr("Constant Pool index out of Bounds".to_string())), _ => return Err(ParseErr("Constant Pool index out of Bounds".to_string())),
}; };
let mut data = Data::new(&content); let mut data = Data::new(content);
self.resolve_attribute_inner(index, len, info, &mut data, pool) self.resolve_attribute_inner(index, len, info, &mut data, pool)
} }

View file

@ -468,29 +468,29 @@ pub enum ClassAccessFlag {
#[repr(u16)] #[repr(u16)]
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)] #[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum MethodAccessFlag { pub enum MethodAccessFlag {
// Declared public; may be accessed from outside its package. /// Declared public; may be accessed from outside its package.
PUBLIC = 0x0001, PUBLIC = 0x0001,
// Declared private; accessible only within the defining class. /// Declared private; accessible only within the defining class.
PRIVATE = 0x0002, PRIVATE = 0x0002,
// Declared protected; may be accessed within subclasses. /// Declared protected; may be accessed within subclasses.
PROTECTED = 0x0004, PROTECTED = 0x0004,
// Declared static. /// Declared static.
STATIC = 0x0008, STATIC = 0x0008,
// Declared final; must not be overridden. /// Declared final; must not be overridden.
FINAL = 0x0010, FINAL = 0x0010,
// Declared synchronized; invocation is wrapped by a monitor use. /// Declared synchronized; invocation is wrapped by a monitor use.
SYNCHRONIZED = 0x0020, SYNCHRONIZED = 0x0020,
// A bridge method, generated by the compiler. /// A bridge method, generated by the compiler.
BRIDGE = 0x0040, BRIDGE = 0x0040,
// Declared with variable number of arguments. /// Declared with variable number of arguments.
VARARGS = 0x0080, VARARGS = 0x0080,
// Declared native; implemented in a language other than Java. /// Declared native; implemented in a language other than Java.
NATIVE = 0x0100, NATIVE = 0x0100,
// Declared abstract; no implementation is provided. /// Declared abstract; no implementation is provided.
ABSTRACT = 0x0400, ABSTRACT = 0x0400,
// Declared strictfp; floating-point mode is FP-strict. /// Declared strictfp; floating-point mode is FP-strict.
STRICT = 0x0800, STRICT = 0x0800,
// Declared synthetic; not present in the source code. // /Declared synthetic; not present in the source code.
SYNTHETIC = 0x1000, SYNTHETIC = 0x1000,
} }
@ -498,23 +498,23 @@ pub enum MethodAccessFlag {
#[repr(u16)] #[repr(u16)]
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)] #[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum InnerClassAccessFlags { pub enum InnerClassAccessFlags {
/// Marked or implicitly public in source. /// Marked or implicitly public in source.
PUBLIC = 0x0001, PUBLIC = 0x0001,
/// Marked private in source. /// Marked private in source.
PRIVATE = 0x0002, PRIVATE = 0x0002,
/// Marked protected in source. /// Marked protected in source.
PROTECTED = 0x0004, PROTECTED = 0x0004,
/// Marked or implicitly static in source. /// Marked or implicitly static in source.
STATIC = 0x0008, STATIC = 0x0008,
/// Marked final in source. /// Marked final in source.
FINAL = 0x0010, FINAL = 0x0010,
/// Was an interface in source. /// Was an interface in source.
INTERFACE = 0x0200, INTERFACE = 0x0200,
/// Marked or implicitly abstract in source. /// Marked or implicitly abstract in source.
ABSTRACT = 0x0400, ABSTRACT = 0x0400,
/// Declared synthetic; not present in the source code. /// Declared synthetic; not present in the source code.
SYNTHETIC = 0x1000, SYNTHETIC = 0x1000,
/// Declared as an annotation type. /// Declared as an annotation type.
ANNOTATION = 0x2000, ANNOTATION = 0x2000,
/// Declared as an enum type. /// Declared as an enum type.
ENUM = 0x4000, ENUM = 0x4000,
@ -524,22 +524,22 @@ pub enum InnerClassAccessFlags {
#[repr(u16)] #[repr(u16)]
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)] #[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum FieldAccessFlags { pub enum FieldAccessFlags {
/// Declared public; may be accessed from outside its package. /// Declared public; may be accessed from outside its package.
PUBLIC = 0x0001, PUBLIC = 0x0001,
/// Declared private; usable only within the defining class. /// Declared private; usable only within the defining class.
PRIVATE = 0x0002, PRIVATE = 0x0002,
/// Declared protected; may be accessed within subclasses. /// Declared protected; may be accessed within subclasses.
PROTECTED = 0x0004, PROTECTED = 0x0004,
/// Declared static. /// Declared static.
STATIC = 0x0008, STATIC = 0x0008,
/// Declared final; never directly assigned to after object construction (JLS §17.5). /// Declared final; never directly assigned to after object construction (JLS §17.5).
FINAL = 0x0010, FINAL = 0x0010,
/// Declared volatile; cannot be cached. /// Declared volatile; cannot be cached.
VOLATILE = 0x0040, VOLATILE = 0x0040,
/// Declared transient; not written or read by a persistent object manager. /// Declared transient; not written or read by a persistent object manager.
TRANSIENT = 0x0080, TRANSIENT = 0x0080,
/// Declared synthetic; not present in the source code. /// Declared synthetic; not present in the source code.
SYNTHETIC = 0x1000, SYNTHETIC = 0x1000,
/// Declared as an element of an enum. /// Declared as an element of an enum.
ENUM = 0x4000, ENUM = 0x4000,
} }

View file

@ -22,9 +22,8 @@ impl OperandStack {
} }
pub fn swap(&mut self) { pub fn swap(&mut self) {
let tmp = self.arr[(self.sp - 1) as usize]; self.arr
self.arr[(self.sp - 1) as usize] = self.arr[(self.sp - 2) as usize]; .swap((self.sp - 2) as usize, (self.sp - 2) as usize);
self.arr[(self.sp - 2) as usize] = tmp;
} }
} }

View file

@ -1,4 +1,4 @@
#!/usr/bin/env bash #!/bin/bash
cd crates/file-info cd crates/file-info
cargo run ../../"$1" cargo run ../../"$1"