- Timestamp:
- Jul 19, 2013 10:32:43 AM (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
pjproject/branches/projects/jni/pjsip-apps/src/jni/jni/swig_gen.py
r4568 r4570 262 262 return '' 263 263 264 265 # Move out inner struct/union 266 def _process_nested_struct_union(self, code): 267 if not (code.startswith('struct') or \ 268 code.startswith('typedef struct') or \ 269 code.startswith('typedef union')): 270 return code 271 272 # max nested level is 5 273 name = ['','','','',''] 274 type = ['','','','',''] 275 content = ['','','','',''] 276 level = 0 277 s = '' 278 for line in code.splitlines(): 279 line_s = line.lstrip() 280 if (not line_s) or (line_s == '{'): continue 281 282 last_level = level 283 level = (len(line) - len(line_s)) / 2 284 285 if level < last_level: 286 if not line_s.startswith('}'): 287 print "bad tabulation!" 288 289 # closing bracket, get var name 290 varname = '' 291 vartail = '' 292 m = re.match(r'\}\s*(\w+)(.*);', line_s) 293 if m: 294 varname = m.group(1) 295 vartail = m.group(2) 296 if level > 0: 297 name[level] = '$name' + str(level-1) + '$_' + varname 298 # print inner struct/union in outer 299 ss = type[level] + ' ' + name[level] + '\n' 300 ss += '{\n' + content[level] + '};\n' 301 if level > 0: 302 s += "%inline %{\n" + ss + '%}\n' 303 s += "%apply NESTED_INNER { " + name[level] + " " + varname + " };\n" 304 else: 305 s += ss 306 content[level] = '' 307 # print inner struct member var at global scope 308 if level > 0: 309 content[level-1] += ' '*level*2 + type[level] + ' ' + name[level] + ' ' + varname + vartail + ';\n' 310 s = s.replace('$name' + str(level) + '$', '$name' + str(level-1) + '$_' + varname) 311 else: 312 s = s.replace('$name' + str(level) + '$', name[level]) 313 314 elif level >= last_level: 315 if line_s.startswith('typedef'): line_s = line_s[8:] 316 if (line_s.startswith('union') or line_s.startswith('struct')) and not line_s.endswith(';'): 317 ll = line_s.split() 318 type[level] = ll[0] 319 name[level] = ll[1] if len(ll) > 1 else '' 320 else: 321 content[level-1] += line + '\n' 322 return s 323 324 264 325 # Generate code from the specified node. 265 326 def _print_node(self, node): … … 281 342 ss = self._process_opaque_struct(name, ss) 282 343 ss = self._process_pjsua_callback(name, ss) 344 ss = self._process_nested_struct_union(ss) 283 345 s += ss 284 346 return s
Note: See TracChangeset
for help on using the changeset viewer.