def make(self, src_templ, evaldict=None, addsource=False, **attrs):
src = src_templ % vars(self)  <EOL>evaldict = evaldict or {}<EOL>mo = DEF.match(src)<EOL>if mo is None:<EOL><INDENT>raise SyntaxError('<STR_LIT>' % src)<EOL><DEDENT>name = mo.group(<NUM_LIT:1>)  <EOL>names = set([name] + [arg.strip('<STR_LIT>') for arg in<EOL>self.shortsignature.split('<STR_LIT:U+002C>')])<EOL>for n in names:<EOL><INDENT>if n in ('<STR_LIT>', '<STR_LIT>'):<EOL><INDENT>raise NameError('<STR_LIT>' % (n, src))<EOL><DEDENT><DEDENT>if not src.endswith('<STR_LIT:\n>'):  <EOL><INDENT>src += '<STR_LIT:\n>'  <EOL><DEDENT>try:<EOL><INDENT>code = compile(src, '<STR_LIT>', '<STR_LIT>')<EOL>exec_(code, evaldict)<EOL><DEDENT>except:<EOL><INDENT>print('<STR_LIT>', file=sys.stderr)<EOL>print(src, file=sys.stderr)<EOL>raise<EOL><DEDENT>func = evaldict[name]<EOL>if addsource:<EOL><INDENT>attrs['<STR_LIT>'] = src<EOL><DEDENT>self.update(func, **attrs)<EOL>return func<EOL>
Make a new function from a given template and update the signature