Mercurial > paraspace
comparison paraspace/injection.py @ 96:1769e52bdd9d
Make dexfile_insert_class() pass the testcase
author | Thinker K.F. Li <thinker@codemud.net> |
---|---|
date | Mon, 25 Jul 2011 16:49:28 +0800 |
parents | 88645ab29aeb |
children | c0c127c7b37e |
comparison
equal
deleted
inserted
replaced
95:9373465643e0 | 96:1769e52bdd9d |
---|---|
21 result = worker(obj) | 21 result = worker(obj) |
22 visit_log[id(obj)] = result | 22 visit_log[id(obj)] = result |
23 | 23 |
24 rel_children = _relocatable_children(obj) | 24 rel_children = _relocatable_children(obj) |
25 for attr, value in rel_children: | 25 for attr, value in rel_children: |
26 _travel_conn_objs(value, worker, visit_log) | 26 _travel_desc_relocatable(value, worker, visit_log) |
27 pass | 27 pass |
28 pass | 28 pass |
29 | 29 |
30 | 30 |
31 ## \brief Return name string of a linked class definition item. | 31 ## \brief Return name string of a linked class definition item. |
65 | 65 |
66 array = getattr(dex, attr) | 66 array = getattr(dex, attr) |
67 array.items.append(obj) | 67 array.items.append(obj) |
68 | 68 |
69 count_name = array.count_name | 69 count_name = array.count_name |
70 count = _dex_tree_get_child(dex, count_name) | 70 if count_name: |
71 _dex_tree_set_child(dex, count_name, count + 1) | 71 count = _dex_tree_get_child(dex, count_name) |
72 _dex_tree_set_child(dex, count_name, count + 1) | |
73 pass | |
72 pass | 74 pass |
73 | 75 |
74 | 76 |
75 ## \brief Clone a class definition item | 77 ## \brief Clone a class definition item |
76 # | 78 # |
152 pass | 154 pass |
153 | 155 |
154 def has_classdef(clazz): | 156 def has_classdef(clazz): |
155 class_typeIds = set([classdef.classIdx | 157 class_typeIds = set([classdef.classIdx |
156 for classdef in dex.classDefs.items]) | 158 for classdef in dex.classDefs.items]) |
157 return dex.classIdx in class_typeIds | 159 return clazz.classIdx in class_typeIds |
158 | 160 |
159 _travel_desc_relocatable(obj, cloner, visit_log) | 161 _travel_desc_relocatable(clazz, cloner, visit_log) |
160 | 162 |
161 merge_unique_strdata() | 163 merge_unique_strdata() |
162 merge_unique_strid() | 164 merge_unique_strid() |
163 merge_unique_typeid() | 165 merge_unique_typeid() |
164 | 166 |
169 continue | 171 continue |
170 relink_dependencies(obj) | 172 relink_dependencies(obj) |
171 dex_append_obj_list(dex, obj) | 173 dex_append_obj_list(dex, obj) |
172 pass | 174 pass |
173 | 175 |
174 if has_classef(clazz): | 176 if has_classdef(clazz): |
175 raise RuntimeError, \ | 177 raise RuntimeError, \ |
176 'clone a class \'%s\'that is already in the DEXFile' % \ | 178 'clone a class \'%s\'that is already in the DEXFile' % \ |
177 classdef_name(clazz) | 179 classdef_name(clazz) |
178 | 180 |
179 clone = visit_log[id(obj)] | 181 clone = visit_log[id(clazz)] |
180 return clone | 182 return clone |
181 | 183 |
182 | 184 |
183 ## \brief Clone a class definition and insert into a DEXFile. | 185 ## \brief Clone a class definition and insert into a DEXFile. |
184 # | 186 # |