Changeset 4691
- Timestamp:
- 10/03/08 10:40:56 (5 years ago)
- Location:
- trunk/src/host/pye17/codegen
- Files:
-
- 3 edited
-
argtypes.py (modified) (1 diff)
-
codegen.py (modified) (4 diffs)
-
h2def.py (modified) (12 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/host/pye17/codegen/argtypes.py
r4682 r4691 537 537 538 538 if typename != ptype: 539 info.arglist.append('(%s *) %s' % (ptype[:-1], pname))539 info.arglist.append('(%s *) %s' % (ptype[:-1], pname)) 540 540 else: 541 541 info.arglist.append(pname) -
trunk/src/host/pye17/codegen/codegen.py
r4664 r4691 321 321 raise argtypes.ArgTypeNotFoundError("varargs functions not supported") 322 322 323 fd = open("/tmp/codegen.log","a+")324 fd.write(">>> write_function_wrapper() >>>\n")325 fd.write("arglist 1: " + str(info.get_arglist()) + "\n")323 #fd = open("/tmp/codegen.log","a+") 324 #fd.write(">>> write_function_wrapper() >>>\n") 325 #fd.write("arglist 1: " + str(info.get_arglist()) + "\n") 326 326 327 327 for param in function_obj.params: … … 329 329 info.add_parselist('|', [], []) 330 330 handler = argtypes.matcher.get(param.ptype) 331 fd.write("pname: " + param.pname + "; ptype: " + str(param.ptype) + "; pdflt: " + str(param.pdflt) + "; pnull: " + str(param.pnull) + "; handler: " + str(handler) + "\n")331 #fd.write("pname: " + param.pname + "; ptype: " + str(param.ptype) + "; pdflt: " + str(param.pdflt) + "; pnull: " + str(param.pnull) + "; handler: " + str(handler) + "\n") 332 332 handler.write_param(param.ptype, param.pname, param.pdflt, 333 333 param.pnull, info) 334 334 335 fd.write("arglist 2: " + str(info.get_arglist()) + "\n")335 #fd.write("arglist 2: " + str(info.get_arglist()) + "\n") 336 336 337 337 substdict['setreturn'] = '' … … 343 343 function_obj.caller_owns_return, info) 344 344 345 fd.write("arglist 3: " + str(info.get_arglist()) + "\n")345 #fd.write("arglist 3: " + str(info.get_arglist()) + "\n") 346 346 347 347 if function_obj.deprecated != None: … … 390 390 flags = 'METH_NOARGS' 391 391 392 fd.write("arglist: " + str(info.get_arglist()) + "\n")393 for key,item in substdict.iteritems():394 fd.write("key: " + str(key) + ", item: " + str(item) + "\n")395 fd.close()392 #fd.write("arglist: " + str(info.get_arglist()) + "\n") 393 #for key,item in substdict.iteritems(): 394 #fd.write("key: " + str(key) + ", item: " + str(item) + "\n") 395 #fd.close() 396 396 397 397 return template % substdict, flags -
trunk/src/host/pye17/codegen/h2def.py
r4682 r4691 65 65 split_prefix_pat = re.compile('([A-Za-z]*)_([A-Za-z0-9]+)') 66 66 67 def find_obj_defs(buf, objdefs=[] ):67 def find_obj_defs(buf, objdefs=[], objtypedefs={}): 68 68 """ 69 69 Try to find object definitions in header files. … … 72 72 # filter out comments from buffer. 73 73 buf = strip_comments(buf) 74 75 struct_typedef = {}76 74 77 75 # handle typedef enum style defs. … … 82 80 if not m: break 83 81 #print "typedef struct: " + m.group(1) + " => " + m.group(2) 84 struct_typedef[m.group(1)] = m.group(2)82 objtypedefs[m.group(1)] = m.group(2) 85 83 pos = m.end() 86 84 … … 95 93 96 94 name = m.group(1) 97 if name in struct_typedef:98 name = struct_typedef[name]95 if name in objtypedefs: 96 name = objtypedefs[name] 99 97 100 98 objdefs.append((name, None)) … … 328 326 arg_split_pat = re.compile("\s*,\s*") 329 327 330 get_type_pat = re.compile(r'(const-)?([A-Za-z0-9 ]+)\*?\s+')328 get_type_pat = re.compile(r'(const-)?([A-Za-z0-9_]+)\*?\s+') 331 329 pointer_pat = re.compile('.*\*$') 332 330 func_new_pat = re.compile('(\w+)_new$') … … 402 400 fp.write(')\n\n') 403 401 404 def write_obj_defs(self, objdefs, fp=None):402 def write_obj_defs(self, objdefs, objtypedefs, fp=None): 405 403 if not fp: 406 404 fp = self.fp 405 406 written_objs = 0 407 407 408 408 fp.write(';; -*- scheme -*-\n') … … 414 414 if klass in filter: 415 415 continue 416 m = split_prefix_pat.match(klass) 417 cmodule = None 418 cname = klass 419 if m: 420 cmodule = m.group(1) 421 #cname = m.group(2) 422 fp.write('(define-object ' + cname + '\n') 423 if cmodule: 424 fp.write(' (in-module "' + cmodule + '")\n') 425 if parent: 426 fp.write(' (parent "' + parent + '")\n') 427 fp.write(' (c-name "' + klass + '")\n') 428 #fp.write(' (gtype-id "' + typecode(klass) + '")\n') 429 fp.write(' (gtype-id "' + klass + '")\n') 430 # should do something about accessible fields 431 fp.write(')\n\n') 416 self.write_obj_defs_to_file(fp, klass, parent) 417 written_objs += 1 418 419 # if we have no struct definitions (e.g. ecore_evas) we should try add some objects for the object generation 420 if written_objs == 0: 421 for klass in objtypedefs: 422 self.write_obj_defs_to_file(fp, objtypedefs[klass], None) 423 424 def write_obj_defs_to_file(self, fp, klass, parent): 425 m = split_prefix_pat.match(klass) 426 cmodule = None 427 cname = klass 428 if m: 429 cmodule = m.group(1) 430 #cname = m.group(2) 431 fp.write('(define-object ' + cname + '\n') 432 if cmodule: 433 fp.write(' (in-module "' + cmodule + '")\n') 434 if parent: 435 fp.write(' (parent "' + parent + '")\n') 436 fp.write(' (c-name "' + klass + '")\n') 437 #fp.write(' (gtype-id "' + typecode(klass) + '")\n') 438 fp.write(' (gtype-id "' + klass + '")\n') 439 # should do something about accessible fields 440 fp.write(')\n\n') 432 441 433 442 def _define_func(self, buf): … … 505 514 munged_name = name.replace('_', '') 506 515 m = get_type_pat.match(args[0]) 507 if m :516 if m and name.find('new') < 0: 508 517 obj = m.group(2) 509 if munged_name[:len(obj)]== obj.lower():518 if name[:len(obj)].lower() == obj.lower(): 510 519 self._write_method(obj, name, ret, args) 511 520 return … … 526 535 # Hmmm... Let's asume that a constructor function name 527 536 # ends with '_new' and it returns a pointer. 528 #m = func_new_pat.match(name)529 #if pointer_pat.match(ret) and m:530 #cname = ''531 #for s in m.group(1).split ('_'):532 #cname += s.title()533 #if cname != '':534 #self.fp.write(' (is-constructor-of "' + cname + '")\n')537 m = func_new_pat.match(name) 538 if pointer_pat.match(ret) and m: 539 cname = '' 540 for s in m.group(1).split ('_'): 541 cname += s.title() 542 if cname != '': 543 self.fp.write(' (is-constructor-of "' + cname + '")\n') 535 544 536 545 self._write_return(ret) … … 614 623 # read all the object definitions in 615 624 objdefs = [] 625 objtypedefs = {} 616 626 enums = [] 617 627 for filename in args: 618 628 buf = open(filename).read() 619 find_obj_defs(buf, objdefs )629 find_obj_defs(buf, objdefs, objtypedefs) 620 630 find_enum_defs(buf, enums) 621 631 #objdefs = sort_obj_defs(objdefs) … … 627 637 dw = DefsWriter(methods, prefix=modulename, verbose=verbose, 628 638 defsfilter=defsfilter) 629 dw.write_obj_defs(objdefs, types)639 dw.write_obj_defs(objdefs, objtypedefs, types) 630 640 dw.write_enum_defs(enums, types) 631 641 print "Wrote %s-types.defs" % separate … … 641 651 dw.write_enum_defs(enums) 642 652 elif onlyobjdefs: 643 dw.write_obj_defs(objdefs )653 dw.write_obj_defs(objdefs, objtypedefs) 644 654 else: 645 dw.write_obj_defs(objdefs )655 dw.write_obj_defs(objdefs, objtypedefs) 646 656 dw.write_enum_defs(enums) 647 657
Note: See TracChangeset
for help on using the changeset viewer.
