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 #