From 2460ab46372287047802e031cb4cd5382a38cb82 Mon Sep 17 00:00:00 2001 From: nils <48135649+Nilstrieb@users.noreply.github.com> Date: Mon, 23 Aug 2021 12:43:56 +0200 Subject: [PATCH] fixed clippy lints --- Cargo.lock | 4 ++ crates/class-struct/Cargo.toml | 8 ++++ crates/class-struct/src/lib.rs | 23 +++++++++++ crates/file-info/src/ui.rs | 4 +- crates/file-parser/src/lib.rs | 44 ++++++++++++--------- crates/file-parser/src/model/mod.rs | 60 ++++++++++++++--------------- crates/machine/src/model.rs | 5 +-- file-info.sh | 2 +- 8 files changed, 95 insertions(+), 55 deletions(-) create mode 100644 crates/class-struct/Cargo.toml create mode 100644 crates/class-struct/src/lib.rs diff --git a/Cargo.lock b/Cargo.lock index 0b08a71..8c839e0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,10 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "class-struct" +version = "0.1.0" + [[package]] name = "file-info" version = "0.1.0" diff --git a/crates/class-struct/Cargo.toml b/crates/class-struct/Cargo.toml new file mode 100644 index 0000000..3cd11af --- /dev/null +++ b/crates/class-struct/Cargo.toml @@ -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] diff --git a/crates/class-struct/src/lib.rs b/crates/class-struct/src/lib.rs new file mode 100644 index 0000000..05cf7a5 --- /dev/null +++ b/crates/class-struct/src/lib.rs @@ -0,0 +1,23 @@ +#![allow(dead_code)] + +struct MethodSignature { + args: Vec, + return_t: Type, +} + +/// A Java type, found in signatures +enum Type { + /// V + Void, + /// B + Boolean, + Byte, + Short, + Int, + Long, + Float, + Double, + Object, + /// [ + Array(Box), +} diff --git a/crates/file-info/src/ui.rs b/crates/file-info/src/ui.rs index 779e74a..2a21221 100644 --- a/crates/file-info/src/ui.rs +++ b/crates/file-info/src/ui.rs @@ -17,7 +17,7 @@ pub fn display_class(mut w: W, class: &ClassFile) -> Result<(), Box(mut w: W, class: &ClassFile) -> Result<(), Box "", - Some(class) => &class.name_index.get(cp)?, + Some(class) => class.name_index.get(cp)?, } )?; diff --git a/crates/file-parser/src/lib.rs b/crates/file-parser/src/lib.rs index 721dc2e..d542d39 100644 --- a/crates/file-parser/src/lib.rs +++ b/crates/file-parser/src/lib.rs @@ -37,7 +37,7 @@ impl<'a> Data<'a> { fn u1(&mut self) -> Result { let item = self.data.get(self.pointer).cloned(); 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 { @@ -56,7 +56,7 @@ impl<'a> Data<'a> { self.data .get(self.pointer - 1) .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 { @@ -64,7 +64,7 @@ impl<'a> Data<'a> { .data .get(self.pointer - 2) .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) } @@ -73,12 +73,12 @@ impl<'a> Data<'a> { .data .get(self.pointer - 3) .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 .data .get(self.pointer - 4) .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) } } @@ -257,7 +257,7 @@ impl Parse for CpInfo { 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)?, stack: parse_vec(data.u2()?, data)?, }, - _ => Err(ParseErr(format!( - "Invalid StackMapFrame type: {}", - frame_type - )))?, + _ => { + return Err(ParseErr(format!( + "Invalid StackMapFrame type: {}", + frame_type + ))) + } }) } } @@ -368,10 +370,12 @@ impl Parse for VerificationTypeInfo { tag, offset: data.u2()?, }, - _ => Err(ParseErr(format!( - "Invalid VerificationTypeInfo tag: {}", - tag - )))?, + _ => { + return Err(ParseErr(format!( + "Invalid VerificationTypeInfo tag: {}", + tag + ))) + } }) } } @@ -454,10 +458,12 @@ impl Parse for AnnotationElementValueValue { '[' => Self::ArrayValue { values: parse_vec(data.u2()?, data)?, }, - _ => Err(ParseErr(format!( - "Invalid AnnotationElementValueValue tag: {}", - tag - )))?, + _ => { + return Err(ParseErr(format!( + "Invalid AnnotationElementValueValue tag: {}", + tag + ))) + } }) } } @@ -544,7 +550,7 @@ impl AttributeInfo { _ => 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) } diff --git a/crates/file-parser/src/model/mod.rs b/crates/file-parser/src/model/mod.rs index e17d4f0..4100476 100644 --- a/crates/file-parser/src/model/mod.rs +++ b/crates/file-parser/src/model/mod.rs @@ -468,29 +468,29 @@ pub enum ClassAccessFlag { #[repr(u16)] #[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)] pub enum MethodAccessFlag { - // Declared public; may be accessed from outside its package. + /// Declared public; may be accessed from outside its package. PUBLIC = 0x0001, - // Declared private; accessible only within the defining class. + /// Declared private; accessible only within the defining class. PRIVATE = 0x0002, - // Declared protected; may be accessed within subclasses. + /// Declared protected; may be accessed within subclasses. PROTECTED = 0x0004, - // Declared static. + /// Declared static. STATIC = 0x0008, - // Declared final; must not be overridden. + /// Declared final; must not be overridden. FINAL = 0x0010, - // Declared synchronized; invocation is wrapped by a monitor use. + /// Declared synchronized; invocation is wrapped by a monitor use. SYNCHRONIZED = 0x0020, - // A bridge method, generated by the compiler. + /// A bridge method, generated by the compiler. BRIDGE = 0x0040, - // Declared with variable number of arguments. + /// Declared with variable number of arguments. VARARGS = 0x0080, - // Declared native; implemented in a language other than Java. + /// Declared native; implemented in a language other than Java. NATIVE = 0x0100, - // Declared abstract; no implementation is provided. + /// Declared abstract; no implementation is provided. ABSTRACT = 0x0400, - // Declared strictfp; floating-point mode is FP-strict. + /// Declared strictfp; floating-point mode is FP-strict. STRICT = 0x0800, - // Declared synthetic; not present in the source code. + // /Declared synthetic; not present in the source code. SYNTHETIC = 0x1000, } @@ -498,23 +498,23 @@ pub enum MethodAccessFlag { #[repr(u16)] #[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)] pub enum InnerClassAccessFlags { - /// Marked or implicitly public in source. + /// Marked or implicitly public in source. PUBLIC = 0x0001, - /// Marked private in source. + /// Marked private in source. PRIVATE = 0x0002, - /// Marked protected in source. + /// Marked protected in source. PROTECTED = 0x0004, - /// Marked or implicitly static in source. + /// Marked or implicitly static in source. STATIC = 0x0008, - /// Marked final in source. + /// Marked final in source. FINAL = 0x0010, - /// Was an interface in source. + /// Was an interface in source. INTERFACE = 0x0200, - /// Marked or implicitly abstract in source. + /// Marked or implicitly abstract in source. ABSTRACT = 0x0400, - /// Declared synthetic; not present in the source code. + /// Declared synthetic; not present in the source code. SYNTHETIC = 0x1000, - /// Declared as an annotation type. + /// Declared as an annotation type. ANNOTATION = 0x2000, /// Declared as an enum type. ENUM = 0x4000, @@ -524,22 +524,22 @@ pub enum InnerClassAccessFlags { #[repr(u16)] #[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)] pub enum FieldAccessFlags { - /// Declared public; may be accessed from outside its package. + /// Declared public; may be accessed from outside its package. PUBLIC = 0x0001, - /// Declared private; usable only within the defining class. + /// Declared private; usable only within the defining class. PRIVATE = 0x0002, - /// Declared protected; may be accessed within subclasses. + /// Declared protected; may be accessed within subclasses. PROTECTED = 0x0004, - /// Declared static. + /// Declared static. 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, - /// Declared volatile; cannot be cached. + /// Declared volatile; cannot be cached. 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, - /// Declared synthetic; not present in the source code. + /// Declared synthetic; not present in the source code. SYNTHETIC = 0x1000, - /// Declared as an element of an enum. + /// Declared as an element of an enum. ENUM = 0x4000, } diff --git a/crates/machine/src/model.rs b/crates/machine/src/model.rs index 9a92178..289d791 100644 --- a/crates/machine/src/model.rs +++ b/crates/machine/src/model.rs @@ -22,9 +22,8 @@ impl OperandStack { } pub fn swap(&mut self) { - let tmp = self.arr[(self.sp - 1) as usize]; - self.arr[(self.sp - 1) as usize] = self.arr[(self.sp - 2) as usize]; - self.arr[(self.sp - 2) as usize] = tmp; + self.arr + .swap((self.sp - 2) as usize, (self.sp - 2) as usize); } } diff --git a/file-info.sh b/file-info.sh index 3d8e322..9d96e2a 100644 --- a/file-info.sh +++ b/file-info.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/bash cd crates/file-info cargo run ../../"$1" \ No newline at end of file