summaryrefslogtreecommitdiff
path: root/dexlayout/dex_ir.h
diff options
context:
space:
mode:
author David Sehr <sehr@google.com> 2016-10-07 15:10:06 +0000
committer Gerrit Code Review <noreply-gerritcodereview@google.com> 2016-10-07 15:10:07 +0000
commitf13f84fd9fb6151c382b1f14062d6ff8c9c3b51e (patch)
treeb75b08fdb05b6a62e8887e1b1e13e4dc428af76e /dexlayout/dex_ir.h
parent2dacb1da034c72f1d0854f200716260722369a5d (diff)
parentd1e44e27126c8ba20f868a8f70c37633386303c5 (diff)
Merge "Add "fixups" for ids referenced in code"
Diffstat (limited to 'dexlayout/dex_ir.h')
-rw-r--r--dexlayout/dex_ir.h29
1 files changed, 29 insertions, 0 deletions
diff --git a/dexlayout/dex_ir.h b/dexlayout/dex_ir.h
index 5e686d3c00..38eb0b1b4b 100644
--- a/dexlayout/dex_ir.h
+++ b/dexlayout/dex_ir.h
@@ -802,6 +802,31 @@ class TryItem : public Item {
using TryItemVector = std::vector<std::unique_ptr<const TryItem>>;
+class CodeFixups {
+ public:
+ CodeFixups(std::vector<TypeId*>* type_ids,
+ std::vector<StringId*>* string_ids,
+ std::vector<MethodId*>* method_ids,
+ std::vector<FieldId*>* field_ids)
+ : type_ids_(type_ids),
+ string_ids_(string_ids),
+ method_ids_(method_ids),
+ field_ids_(field_ids) { }
+
+ std::vector<TypeId*>* TypeIds() const { return type_ids_.get(); }
+ std::vector<StringId*>* StringIds() const { return string_ids_.get(); }
+ std::vector<MethodId*>* MethodIds() const { return method_ids_.get(); }
+ std::vector<FieldId*>* FieldIds() const { return field_ids_.get(); }
+
+ private:
+ std::unique_ptr<std::vector<TypeId*>> type_ids_;
+ std::unique_ptr<std::vector<StringId*>> string_ids_;
+ std::unique_ptr<std::vector<MethodId*>> method_ids_;
+ std::unique_ptr<std::vector<FieldId*>> field_ids_;
+
+ DISALLOW_COPY_AND_ASSIGN(CodeFixups);
+};
+
class CodeItem : public Item {
public:
CodeItem(uint16_t registers_size,
@@ -833,6 +858,9 @@ class CodeItem : public Item {
TryItemVector* Tries() const { return tries_.get(); }
CatchHandlerVector* Handlers() const { return handlers_.get(); }
+ void SetCodeFixups(CodeFixups* fixups) { fixups_.reset(fixups); }
+ CodeFixups* GetCodeFixups() const { return fixups_.get(); }
+
void Accept(AbstractDispatcher* dispatch) { dispatch->Dispatch(this); }
private:
@@ -844,6 +872,7 @@ class CodeItem : public Item {
std::unique_ptr<uint16_t[]> insns_;
std::unique_ptr<TryItemVector> tries_; // This can be nullptr.
std::unique_ptr<CatchHandlerVector> handlers_; // This can be nullptr.
+ std::unique_ptr<CodeFixups> fixups_; // This can be nullptr.
DISALLOW_COPY_AND_ASSIGN(CodeItem);
};