| 196 | return arg == FuncSignature.Variadic |
| 197 | |
| 198 | def parse_args(self, arg_string): |
| 199 | args = [] |
| 200 | arg_string = re.sub(r'\s+', ' ', arg_string) |
| 201 | if arg_string == 'void' or arg_string == '': |
| 202 | return args |
| 203 | |
| 204 | for (i, arg) in enumerate(arg_string.split(',')): |
| 205 | arg = arg.strip() |
| 206 | # TODO: needs work. Also, if arg is va_list, we don't treat it as |
| 207 | # variadic. Check comments in is_variadic(). |
| 208 | if arg == '...': |
| 209 | args.append(FuncSignature.Variadic) |
| 210 | continue |
| 211 | elif arg == 'PG_FUNCTION_ARGS': |
| 212 | args.append(('FunctionCallInfo', 'fcinfo')) |
| 213 | continue |
| 214 | elif arg == 'SIGNAL_ARGS': |
| 215 | args.append(('int', 'signal_args')) |
| 216 | continue |
| 217 | |
| 218 | # general case |
| 219 | m = FuncSignature.arg_pat.match(arg.strip()) |
| 220 | if not m: |
| 221 | print('%s %s(%s)' % (self.rettype, self.funcname, arg_string)) |
| 222 | argtype = m.group(1) |
| 223 | argname = m.group(2) if m.group(2) else 'arg' + str(i) |
| 224 | args.append((argtype.strip(), argname.strip())) |
| 225 | return args |
| 226 | |
| 227 | def format_args(self): |
| 228 | buf = [] |