wip
This commit is contained in:
parent
483ac8637c
commit
f9f511013d
9 changed files with 347 additions and 224 deletions
|
|
@ -392,32 +392,32 @@ impl<V: Visitor> Visitable<V> for Class {
|
||||||
fn default_visit(&self, v: &mut V) -> Result<()> {
|
fn default_visit(&self, v: &mut V) -> Result<()> {
|
||||||
v.visit_type(&self.descriptor)?;
|
v.visit_type(&self.descriptor)?;
|
||||||
if let Some(superclass) = &self.superclass {
|
if let Some(superclass) = &self.superclass {
|
||||||
v.visit_type(&superclass)?;
|
v.visit_type(superclass)?;
|
||||||
}
|
}
|
||||||
for interface in &self.interfaces {
|
for interface in &self.interfaces {
|
||||||
v.visit_type(&interface)?;
|
v.visit_type(interface)?;
|
||||||
}
|
}
|
||||||
if let Some(source_file) = &self.source_file {
|
if let Some(source_file) = &self.source_file {
|
||||||
v.visit_string(&source_file)?;
|
v.visit_string(source_file)?;
|
||||||
}
|
}
|
||||||
for (id, field) in &self.static_fields {
|
for (id, field) in &self.static_fields {
|
||||||
v.visit_field_id(&id)?;
|
v.visit_field_id(id)?;
|
||||||
v.visit_field(&field)?;
|
v.visit_field(field)?;
|
||||||
}
|
}
|
||||||
for (id, field) in &self.instance_fields {
|
for (id, field) in &self.instance_fields {
|
||||||
v.visit_field_id(&id)?;
|
v.visit_field_id(id)?;
|
||||||
v.visit_field(&field)?;
|
v.visit_field(field)?;
|
||||||
}
|
}
|
||||||
for (id, meth) in &self.direct_methods {
|
for (id, meth) in &self.direct_methods {
|
||||||
v.visit_method_id(&id)?;
|
v.visit_method_id(id)?;
|
||||||
v.visit_method(&meth)?;
|
v.visit_method(meth)?;
|
||||||
}
|
}
|
||||||
for (id, meth) in &self.virtual_methods {
|
for (id, meth) in &self.virtual_methods {
|
||||||
v.visit_method_id(&id)?;
|
v.visit_method_id(id)?;
|
||||||
v.visit_method(&meth)?;
|
v.visit_method(meth)?;
|
||||||
}
|
}
|
||||||
for annot in &self.annotations {
|
for annot in &self.annotations {
|
||||||
v.visit_annotation_item(&annot)?;
|
v.visit_annotation_item(annot)?;
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -424,12 +424,12 @@ impl Code {
|
||||||
end_label
|
end_label
|
||||||
))?
|
))?
|
||||||
.clone();
|
.clone();
|
||||||
for i in 0..handlers.len() {
|
for handler in &mut handlers {
|
||||||
handlers[i].1 = new_labels
|
handler.1 = new_labels
|
||||||
.get(&handlers[i].1)
|
.get(&handler.1)
|
||||||
.ok_or(anyhow!(
|
.ok_or(anyhow!(
|
||||||
"Internal error: {} not found in renamed label",
|
"Internal error: {} not found in renamed label",
|
||||||
handlers[i].1
|
handler.1
|
||||||
))?
|
))?
|
||||||
.clone();
|
.clone();
|
||||||
}
|
}
|
||||||
|
|
@ -498,7 +498,7 @@ impl Code {
|
||||||
impl<V: Visitor> Visitable<V> for Code {
|
impl<V: Visitor> Visitable<V> for Code {
|
||||||
fn default_visit(&self, v: &mut V) -> Result<()> {
|
fn default_visit(&self, v: &mut V) -> Result<()> {
|
||||||
for ins in &self.insns {
|
for ins in &self.insns {
|
||||||
v.visit_instruction(&ins)?;
|
v.visit_instruction(ins)?;
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@ impl<V: Visitor> Visitable<V> for IdMethodType {
|
||||||
v.visit_string(&self.shorty)?;
|
v.visit_string(&self.shorty)?;
|
||||||
v.visit_type(&self.return_type)?;
|
v.visit_type(&self.return_type)?;
|
||||||
for ty in &self.parameters {
|
for ty in &self.parameters {
|
||||||
v.visit_type(&ty)?;
|
v.visit_type(ty)?;
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -611,7 +611,7 @@ impl DexWriter {
|
||||||
}
|
}
|
||||||
Instruction::InvokeCustom { call_site, .. } => {
|
Instruction::InvokeCustom { call_site, .. } => {
|
||||||
let call_site_idx = self.call_site_ids.len();
|
let call_site_idx = self.call_site_ids.len();
|
||||||
self.insert_call_site_item(&call_site)?;
|
self.insert_call_site_item(call_site)?;
|
||||||
let ins = ins.get_raw_ins(GetRawInsParam {
|
let ins = ins.get_raw_ins(GetRawInsParam {
|
||||||
call_site_idx: Some(call_site_idx),
|
call_site_idx: Some(call_site_idx),
|
||||||
..GetRawInsParam::default()
|
..GetRawInsParam::default()
|
||||||
|
|
@ -628,7 +628,7 @@ impl DexWriter {
|
||||||
}
|
}
|
||||||
Instruction::ConstMethodHandle { handle, .. } => {
|
Instruction::ConstMethodHandle { handle, .. } => {
|
||||||
let method_handle_idx = self.method_handles.len();
|
let method_handle_idx = self.method_handles.len();
|
||||||
self.insert_method_handle(&handle)?;
|
self.insert_method_handle(handle)?;
|
||||||
let ins = ins.get_raw_ins(GetRawInsParam {
|
let ins = ins.get_raw_ins(GetRawInsParam {
|
||||||
method_handle_idx: Some(method_handle_idx),
|
method_handle_idx: Some(method_handle_idx),
|
||||||
..GetRawInsParam::default()
|
..GetRawInsParam::default()
|
||||||
|
|
|
||||||
|
|
@ -263,13 +263,13 @@ impl<V: Visitor> Visitable<V> for Field {
|
||||||
v.visit_field_id(&self.descriptor)?;
|
v.visit_field_id(&self.descriptor)?;
|
||||||
v.visit_field_visibility(&self.visibility)?;
|
v.visit_field_visibility(&self.visibility)?;
|
||||||
if let Some(val) = &self.value {
|
if let Some(val) = &self.value {
|
||||||
v.visit_value(&val)?;
|
v.visit_value(val)?;
|
||||||
}
|
}
|
||||||
for annot in &self.annotations {
|
for annot in &self.annotations {
|
||||||
v.visit_annotation_item(&annot)?;
|
v.visit_annotation_item(annot)?;
|
||||||
}
|
}
|
||||||
if let Some(hiddenapi) = &self.hiddenapi {
|
if let Some(hiddenapi) = &self.hiddenapi {
|
||||||
v.visit_hidden_api_data(&hiddenapi)?;
|
v.visit_hidden_api_data(hiddenapi)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load diff
|
|
@ -304,18 +304,18 @@ impl<V: Visitor> Visitable<V> for Method {
|
||||||
v.visit_method_id(&self.descriptor)?;
|
v.visit_method_id(&self.descriptor)?;
|
||||||
v.visit_method_visibility(&self.visibility)?;
|
v.visit_method_visibility(&self.visibility)?;
|
||||||
for annot in &self.annotations {
|
for annot in &self.annotations {
|
||||||
v.visit_annotation_item(&annot)?;
|
v.visit_annotation_item(annot)?;
|
||||||
}
|
}
|
||||||
for parameter_annotations in &self.parameters_annotations {
|
for parameter_annotations in &self.parameters_annotations {
|
||||||
for annot in parameter_annotations {
|
for annot in parameter_annotations {
|
||||||
v.visit_annotation_item(&annot)?;
|
v.visit_annotation_item(annot)?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if let Some(hiddenapi) = &self.hiddenapi {
|
if let Some(hiddenapi) = &self.hiddenapi {
|
||||||
v.visit_hidden_api_data(&hiddenapi)?;
|
v.visit_hidden_api_data(hiddenapi)?;
|
||||||
}
|
}
|
||||||
if let Some(code) = &self.code {
|
if let Some(code) = &self.code {
|
||||||
v.visit_code(&code)?;
|
v.visit_code(code)?;
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -424,7 +424,7 @@ impl DexArray {
|
||||||
impl<V: Visitor> Visitable<V> for DexArray {
|
impl<V: Visitor> Visitable<V> for DexArray {
|
||||||
fn default_visit(&self, v: &mut V) -> Result<()> {
|
fn default_visit(&self, v: &mut V) -> Result<()> {
|
||||||
for val in &self.0 {
|
for val in &self.0 {
|
||||||
v.visit_value(&val)?;
|
v.visit_value(val)?;
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -199,7 +199,7 @@ impl DebugInfoItem {
|
||||||
address = addr;
|
address = addr;
|
||||||
addr_diff = 0;
|
addr_diff = 0;
|
||||||
}
|
}
|
||||||
if line_diff < -4 || line_diff >= 15 - 4 {
|
if !(-4..15 - 4).contains(&line_diff) {
|
||||||
bytecode.push(DbgBytecode::AdvanceLine {
|
bytecode.push(DbgBytecode::AdvanceLine {
|
||||||
line_diff: Sleb128(line_diff),
|
line_diff: Sleb128(line_diff),
|
||||||
});
|
});
|
||||||
|
|
@ -215,7 +215,7 @@ impl DebugInfoItem {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if bytecode.len() == 0 || bytecode[bytecode.len() - 1] != DbgBytecode::EndSequence {
|
if bytecode.is_empty() || bytecode[bytecode.len() - 1] != DbgBytecode::EndSequence {
|
||||||
bytecode.push(DbgBytecode::EndSequence);
|
bytecode.push(DbgBytecode::EndSequence);
|
||||||
}
|
}
|
||||||
Self {
|
Self {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue