| 20 | |
| 21 | |
| 22 | def checked_call(fn, err, *args): |
| 23 | all_args = list(args) + [err] |
| 24 | res = fn(*all_args) |
| 25 | msg = _native.ffi.string(_native.lib.rure_error_message(err)) |
| 26 | msg = msg.decode('utf8') |
| 27 | if msg == 'no error': |
| 28 | return res |
| 29 | elif msg.startswith(('Error parsing regex', 'regex parse error')): |
| 30 | raise exceptions.RegexSyntaxError(msg) |
| 31 | elif msg.startswith('Compiled regex exceeds size limit'): |
| 32 | raise exceptions.CompiledTooBigError(msg) |
| 33 | else: |
| 34 | raise exceptions.RegexError(msg) |
| 35 | |
| 36 | |
| 37 | class Rure(object): |