Diff for /python/pyGiNaC/tools/wrap_typedefs.py between versions 1.2 and 1.3

version 1.2, 2001/03/13 06:38:40 version 1.3, 2001/03/15 13:48:35
Line 16  def fix_type(a): Line 16  def fix_type(a):
         return m.group('before')+'GiNaC::'+m.group('type')+m.group('rest')          return m.group('before')+'GiNaC::'+m.group('type')+m.group('rest')
     if a == 'malloc_alloc':      if a == 'malloc_alloc':
         return a # ignore it          return a # ignore it
       m = re.match(r'(?P<before>.*?)\b(?P<type>series_funcp_\d+|derivative_funcp_\d+|evalf_funcp_\d+|eval_funcp_\d+|(eval|evalf|derivative|series)_funcp|)\b(?P<rest>.*)',a)
       if m:
           return m.group('before')+'GiNaC::'+m.group('type')+m.group('rest')
     print 'Not fixed:',a      print 'Not fixed:',a
     return a      return a
   
Line 106  void #name#_delitem(#ftype# & v, const s Line 109  void #name#_delitem(#ftype# & v, const s
 }  }
 '''.replace('#name#',name).replace('#ftype#',ft).replace('#type#',t)  '''.replace('#name#',name).replace('#ftype#',ft).replace('#type#',t)
   
   def construct_func_wrapper(name,ft,t):
       return '''
   // typedef #name# wrapper
   struct #name#_wrapper: #ftype# {
   \t#name#_wrapper(PyObject* self) {cout << "#name#_wrapper_constructor" << endl ;}
   };
       '''.replace('#name#',name).replace('#ftype#',ft).replace('#type#',t)
   
 fin = open('strip_ginac_rest.txt','r')  fin = open('strip_ginac_rest.txt','r')
 ftodo = open('todo_wtf.txt','w')  ftodo = open('todo_wtf.txt','w')
 def todo(l):  def todo(l):
     ftodo.write(l)      ftodo.write(l)
   
 td_m = re.compile(r'typedef\s+(?P<type>.*?)\s+\b(?P<name>\w+)\b\s*;')  td_m = re.compile(r'typedef\s+(?P<type>.*?)\s+\b(?P<name>\w+)\b\s*;')
   tdf_m = re.compile(r'typedef\s+(?P<type>.*?)\s*[(]\s*[*]\s*\b(?P<name>\w+)\b\s*[)]\s*[(]\s*(?P<args>.*?)\s*[)]\s*;')
   #typedef ex (*evalffunctype)(void);
   
 defs = {'classes':[],'defs':[],'wrappers':[],'proto':['\t// prototypes of typedef ... wrappers']}  defs = {'classes':[],'defs':[],'wrappers':[],'proto':['\t// prototypes of typedef ... wrappers']}
 ignore = []  ignore = []
Line 121  for l in fin.xreadlines(): Line 134  for l in fin.xreadlines():
         n,t = m.group('name'),m.group('type').strip()          n,t = m.group('name'),m.group('type').strip()
         if (n,t) in ignore: continue          if (n,t) in ignore: continue
         ignore.append((n,t))          ignore.append((n,t))
         if (t[:11]=='std::vector' or t[:9]=='std::list') and n in ['exvector','epvector','exlist']:          if 0 and (t[:11]=='std::vector' or t[:9]=='std::list') and n in ['exvector','epvector','exlist']:
             if t[:11]=='std::vector':              if t[:11]=='std::vector':
                 args = [fix_type(a.strip()) for a in t[12:-1].split(',')]                  args = [fix_type(a.strip()) for a in t[12:-1].split(',')]
                 ft = 'std::vector<'+', '.join(args)+'>'                  ft = 'std::vector<'+', '.join(args)+'>'
Line 165  for l in fin.xreadlines(): Line 178  for l in fin.xreadlines():
             # no need to interface              # no need to interface
             continue              continue
         print 'Skipped typedef:',t,n          print 'Skipped typedef:',t,n
       m = tdf_m.match(l.strip())
       if m:
           rt = m.group('type')
           n = m.group('name')
           ft = fix_type(n)
           args = [fix_type(a.strip()) for a in m.group('name').split(',')]
           if n == 'evalffunctype':
               print 'n=',n
               print 'ft=',ft
               print 'rt=',rt
               print 'args=',args
               defs['classes'].append('\t// typedef (*%s)()'%(n))
               defs['classes'].append('\tpython::class_builder<%s, %s_wrapper> %s_class(this_module, "%s");'%(ft,n,n,n))
               print defs['classes'][-1]
               defs['defs'].append('\t// typedef %s constructors'%(n))
               defs['defs'].append('\t%s_class.def(python::constructor<>());'%(n))
               defs['proto'].append('\tstruct %s_wrapper;'%n)
               defs['wrappers'].append(construct_func_wrapper(n,ft,args[0]))
     todo(l)      todo(l)
       
 fin.close()  fin.close()
 ftodo.close()  ftodo.close()
   

Removed from v.1.2  
changed lines
  Added in v.1.3


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>