From: Reuben Thomas Date: Sat, 13 Jan 2018 16:32:46 +0000 (+0000) Subject: Use Gnulib as much as possible X-Git-Tag: v3.7~161 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=661b2ac4f4418257a82c44584d3e0cd48582de80;p=recode Use Gnulib as much as possible Require C99, and use Gnulib to provide everything else. --- diff --git a/.gitignore b/.gitignore index 112130a..837074a 100644 --- a/.gitignore +++ b/.gitignore @@ -40,4 +40,5 @@ html/ /src/recode.1 /stamp-h1 /tests/setup.py +/tests/Recode.body.c /tests/Recode.so diff --git a/bootstrap.conf b/bootstrap.conf index 0eaf6a7..a67fc32 100644 --- a/bootstrap.conf +++ b/bootstrap.conf @@ -43,11 +43,22 @@ gnulib_tool_options=' # gnulib modules used by this package. gnulib_modules=' + argmatch bootstrap error getopt-posix gettext-h + hash + localcharset pathmax + pipe-posix + quotearg + strndup + sys_wait + unistd + utime + vprintf-posix + xalloc ' # Copyright holder diff --git a/cleaner.h.in b/cleaner.h.in index 7b52d72..009d125 100644 --- a/cleaner.h.in +++ b/cleaner.h.in @@ -88,25 +88,6 @@ # define get_quoting_style librecode_get_quoting_style # define get_ucs2 librecode_get_ucs2 # define get_ucs4 librecode_get_ucs4 -# define hash_clear librecode_hash_clear -# define hash_delete librecode_hash_delete -# define hash_do_for_each librecode_hash_do_for_each -# define hash_free librecode_hash_free -# define hash_get_entries librecode_hash_get_entries -# define hash_get_first librecode_hash_get_first -# define hash_get_max_bucket_length librecode_hash_get_max_bucket_length -# define hash_get_n_buckets librecode_hash_get_n_buckets -# define hash_get_n_buckets_used librecode_hash_get_n_buckets_used -# define hash_get_n_entries librecode_hash_get_n_entries -# define hash_get_next librecode_hash_get_next -# define hash_initialize librecode_hash_initialize -# define hash_insert librecode_hash_insert -# define hash_lookup librecode_hash_lookup -# define hash_print_statistics librecode_hash_print_statistics -# define hash_rehash librecode_hash_rehash -# define hash_reset_tuning librecode_hash_reset_tuning -# define hash_string librecode_hash_string -# define hash_table_ok librecode_hash_table_ok # define init_combine librecode_init_combine # define init_explode librecode_init_explode # define init_ucs2_to_byte librecode_init_ucs2_to_byte @@ -114,7 +95,6 @@ # define list_all_symbols librecode_list_all_symbols # define list_concise_charset librecode_list_concise_charset # define list_full_charset librecode_list_full_charset -# define locale_charset librecode_locale_charset # define make_argmatch_arrays librecode_make_argmatch_arrays # define module_african librecode_module_african # define module_afrtran librecode_module_afrtran @@ -174,16 +154,5 @@ # define ucs2_to_charname librecode_ucs2_to_charname # define ucs2_to_french_charname librecode_ucs2_to_french_charname # define ucs2_to_rfc1345 librecode_ucs2_to_rfc1345 -# define x2nrealloc librecode_x2nrealloc -# define x2realloc librecode_x2realloc -# define xalloc_die librecode_xalloc_die -# define xcalloc librecode_xcalloc -# define xmalloc librecode_xmalloc -# define xmemdup librecode_xmemdup -# define xnmalloc librecode_xnmalloc -# define xnrealloc librecode_xnrealloc -# define xrealloc librecode_xrealloc -# define xstrdup librecode_xstrdup -# define xzalloc librecode_xzalloc #endif /* ! CLEANER_H_ */ diff --git a/configure.ac b/configure.ac index 0fc0d02..b639d28 100644 --- a/configure.ac +++ b/configure.ac @@ -8,38 +8,18 @@ AC_CONFIG_SRCDIR(src/recode.c) AC_CONFIG_AUX_DIR([build-aux]) AM_INIT_AUTOMAKE AC_CONFIG_MACRO_DIR(m4) +AC_CANONICAL_HOST -AC_PROG_CC +AC_PROG_CC_C99 gl_EARLY LT_INIT -AC_FUNC_ALLOCA -AC_ISC_POSIX -AC_C_CONST -AC_C_INLINE AC_PROG_LEX gl_INIT AC_CONFIG_HEADERS([config.h]) AC_HEADER_STDC -AC_CHECK_HEADERS(limits.h locale.h memory.h stdbool.h stddef.h stdlib.h string.h unistd.h utime.h) -AC_TYPE_SIGNAL -jm_STRUCT_UTIMBUF - AM_ICONV LIBS="$LIBICONV $LIBS" - -AC_CHECK_FUNCS(dup2 mbrtowc rename setlocale strerror strndup wcrtomb) -AC_REPLACE_FUNCS(strtol strtoul) -AC_FUNC_ALLOCA -AC_FUNC_VPRINTF - -jm_FUNC_MALLOC -jm_FUNC_REALLOC - -AC_CANONICAL_HOST -jm_LANGINFO_CODESET -jm_GLIBC21 - AM_WITH_DMALLOC AM_GNU_GETTEXT_VERSION(0.18) diff --git a/lib/.gitignore b/lib/.gitignore index fe43616..eab421c 100644 --- a/lib/.gitignore +++ b/lib/.gitignore @@ -1,15 +1,41 @@ -/Makefile.gnulib -/dummy.c +/Makefile.am /_Noreturn.h +/alloca.h +/alloca.in.h /arg-nonnull.h +/argmatch.c +/argmatch.h +/asnprintf.c /basename-lgpl.c +/bitrotate.c +/bitrotate.h /c++defs.h +/c-ctype.c +/c-ctype.h +/c-strcase.h +/c-strcasecmp.c +/c-strcaseeq.h +/c-strncasecmp.c +/charset.alias +/config.charset +/configmake.h /dirname-lgpl.c /dirname.h /dosname.h /errno.in.h /error.c /error.h +/exitfail.c +/exitfail.h +/filename.h +/float+.h +/float.c +/float.in.h +/fpucw.h +/frexp.c +/frexpl.c +/fseterr.c +/fseterr.h /getopt-cdefs.in.h /getopt-core.h /getopt-ext.h @@ -22,30 +48,103 @@ /getprogname.c /getprogname.h /gettext.h +/hard-locale.c +/hard-locale.h +/hash.c +/hash.h /intprops.h +/isnan.c +/isnand-nolibm.h +/isnand.c +/isnanf-nolibm.h +/isnanf.c +/isnanl-nolibm.h +/isnanl.c +/itold.c +/limits.h +/limits.in.h +/localcharset.c +/localcharset.h /malloc.c +/malloca.c +/malloca.h +/malloca.valgrind +/math.c +/math.h +/math.in.h +/mbrtowc.c +/mbsinit.c +/memchr.c +/memchr.valgrind +/minmax.h /msvc-inval.c /msvc-inval.h /msvc-nothrow.c /msvc-nothrow.h /pathmax.h +/pipe.c +/printf-args.c +/printf-args.h +/printf-frexp.c +/printf-frexp.h +/printf-frexpl.c +/printf-frexpl.h +/printf-parse.c +/printf-parse.h +/quote.h +/quotearg.c +/quotearg.h +/ref-add.sed +/ref-add.sin +/ref-del.sed +/ref-del.sin +/signbitd.c +/signbitf.c +/signbitl.c +/size_max.h /stdbool.in.h /stddef.in.h +/stdint.h +/stdint.in.h +/stdio-impl.h /stdio.h /stdio.in.h /stdlib.h /stdlib.in.h +/streq.h /strerror-override.c /strerror-override.h /strerror.c /string.h /string.in.h /stripslash.c +/strndup.c +/strnlen.c /sys/types.h /sys_types.in.h +/sys/wait.h +/sys_wait.in.h +/time.h +/time.in.h /unistd.c /unistd.h /unistd.in.h +/utime.c +/utime.in.h +/vasnprintf.c +/vasnprintf.h /verify.h +/vfprintf.c +/vprintf.c /warn-on-use.h -/Makefile.am +/wchar.h +/wchar.in.h +/wctype-h.c +/wctype.h +/wctype.in.h +/xalloc-die.c +/xalloc-oversized.h +/xalloc.h +/xmalloc.c +/xsize.c +/xsize.h diff --git a/src/Makefile.am b/src/Makefile.am index f47d553..0532e10 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -23,9 +23,9 @@ lib_LTLIBRARIES = librecode.la man_MANS = recode.1 include_HEADERS = recode.h recodext.h -noinst_HEADERS = argmatch.h charname.h common.h decsteps.h exit.h exitfail.h \ -fr-charname.h hash.h inisteps.h iconvdecl.h quotearg.h rfc1345.h tersteps.h \ -xalloc.h $(H_FALLBACKS) $(H_SURFACES) +noinst_HEADERS = charname.h common.h decsteps.h \ +fr-charname.h inisteps.h iconvdecl.h rfc1345.h tersteps.h \ +$(H_FALLBACKS) $(H_SURFACES) EXTRA_DIST = recodext.h.in stamp-steps stamp-strip \ $(L_STEPS) mergelex.py $(MANS) @@ -37,8 +37,6 @@ ebcdic.c ibmpc.c iconqnx.c lat1asci.c java.c mule.c strip-data.c \ testdump.c ucs.c utf16.c utf7.c utf8.c varia.c vn.c \ $(C_FALLBACKS) $(C_SURFACES) merged.c -OLD_C_STEPS = next.c - L_STEPS = ascilat1.l $(L_FALLBACKS) $(L_SURFACES) H_FALLBACKS = @@ -52,9 +50,8 @@ L_SURFACES = recode_SOURCES = main.c freeze.c mixed.c recode_LDADD = librecode.la ../lib/libgnu.la -librecode_la_SOURCES = argmatch.c charname.c combine.c exitfail.c \ -fr-charname.c hash.c iconv.c localcharset.c names.c outer.c quotearg.c \ -recode.c request.c strip-pool.c task.c xalloc-die.c xmalloc.c $(C_STEPS) +librecode_la_SOURCES = charname.c combine.c fr-charname.c iconv.c \ +names.c outer.c recode.c request.c strip-pool.c task.c $(C_STEPS) librecode_la_LDFLAGS = -version-info 0:0:0 # Relative to $(srcdir). @@ -72,7 +69,6 @@ ETAGS_ARGS = $(L_STEPS) TAGS_DEPENDENCIES = $(L_STEPS) # These CFLAGS values are not auto-configured: -# -DDIFF_HASH For using GNU diff's hash algorithm instead. # -DHASH_STATS For printing a one-liner hash statistics. LEX = @LEX@ @@ -122,9 +118,9 @@ stamp-steps: $(C_STEPS) @echo "Updating {dec,ini,ter}steps.h" @(cd $(srcdir) && grep -h '^module_' $(C_STEPS)) \ | sed 's/ .*//' > liste.tmp - @sed 's/\(.*\)/bool \1 PARAMS ((struct recode_outer *));/' \ + @sed 's/\(.*\)/bool \1 (struct recode_outer *);/' \ liste.tmp > decsteps.tmp - @sed 's/\(.*\)/void del\1 PARAMS ((struct recode_outer *));/' \ + @sed 's/\(.*\)/void del\1 (struct recode_outer *);/' \ liste.tmp >> decsteps.tmp @sed 's/\(.*\)/ if (!\1 (outer)) return false;/' \ liste.tmp > inisteps.tmp diff --git a/src/ansi2knr.1 b/src/ansi2knr.1 deleted file mode 100644 index f9ee5a6..0000000 --- a/src/ansi2knr.1 +++ /dev/null @@ -1,36 +0,0 @@ -.TH ANSI2KNR 1 "19 Jan 1996" -.SH NAME -ansi2knr \- convert ANSI C to Kernighan & Ritchie C -.SH SYNOPSIS -.I ansi2knr -[--varargs] input_file [output_file] -.SH DESCRIPTION -If no output_file is supplied, output goes to stdout. -.br -There are no error messages. -.sp -.I ansi2knr -recognizes function definitions by seeing a non-keyword identifier at the left -margin, followed by a left parenthesis, with a right parenthesis as the last -character on the line, and with a left brace as the first token on the -following line (ignoring possible intervening comments). It will recognize a -multi-line header provided that no intervening line ends with a left or right -brace or a semicolon. These algorithms ignore whitespace and comments, except -that the function name must be the first thing on the line. -.sp -The following constructs will confuse it: -.br - - Any other construct that starts at the left margin and follows the -above syntax (such as a macro or function call). -.br - - Some macros that tinker with the syntax of the function header. -.sp -The --varargs switch is obsolete, and is recognized only for -backwards compatibility. The present version of -.I ansi2knr -will always attempt to convert a ... argument to va_alist and va_dcl. -.SH AUTHOR -L. Peter Deutsch wrote the original ansi2knr and -continues to maintain the current version; most of the code in the current -version is his work. ansi2knr also includes contributions by Francois -Pinard and Jim Avera . diff --git a/src/ansi2knr.c b/src/ansi2knr.c deleted file mode 100644 index a042674..0000000 --- a/src/ansi2knr.c +++ /dev/null @@ -1,739 +0,0 @@ -/* Copyright (C) 1989, 2000 Aladdin Enterprises. All rights reserved. */ - -/*$Id: ansi2knr.c,v 1.3 2000/04/13 03:41:48 lpd Exp $*/ -/* Convert ANSI C function definitions to K&R ("traditional C") syntax */ - -/* -ansi2knr is distributed in the hope that it will be useful, but WITHOUT ANY -WARRANTY. No author or distributor accepts responsibility to anyone for the -consequences of using it or for whether it serves any particular purpose or -works at all, unless he says so in writing. Refer to the GNU General Public -License (the "GPL") for full details. - -Everyone is granted permission to copy, modify and redistribute ansi2knr, -but only under the conditions described in the GPL. A copy of this license -is supposed to have been given to you along with ansi2knr so you can know -your rights and responsibilities. It should be in a file named COPYLEFT, -or, if there is no file named COPYLEFT, a file named COPYING. Among other -things, the copyright notice and this notice must be preserved on all -copies. - -We explicitly state here what we believe is already implied by the GPL: if -the ansi2knr program is distributed as a separate set of sources and a -separate executable file which are aggregated on a storage medium together -with another program, this in itself does not bring the other program under -the GPL, nor does the mere fact that such a program or the procedures for -constructing it invoke the ansi2knr executable bring any other part of the -program under the GPL. -*/ - -/* - * Usage: - ansi2knr [--filename FILENAME] [INPUT_FILE [OUTPUT_FILE]] - * --filename provides the file name for the #line directive in the output, - * overriding input_file (if present). - * If no input_file is supplied, input is read from stdin. - * If no output_file is supplied, output goes to stdout. - * There are no error messages. - * - * ansi2knr recognizes function definitions by seeing a non-keyword - * identifier at the left margin, followed by a left parenthesis, with a - * right parenthesis as the last character on the line, and with a left - * brace as the first token on the following line (ignoring possible - * intervening comments and/or preprocessor directives), except that a line - * consisting of only - * identifier1(identifier2) - * will not be considered a function definition unless identifier2 is - * the word "void", and a line consisting of - * identifier1(identifier2, <>) - * will not be considered a function definition. - * ansi2knr will recognize a multi-line header provided that no intervening - * line ends with a left or right brace or a semicolon. These algorithms - * ignore whitespace, comments, and preprocessor directives, except that - * the function name must be the first thing on the line. The following - * constructs will confuse it: - * - Any other construct that starts at the left margin and - * follows the above syntax (such as a macro or function call). - * - Some macros that tinker with the syntax of function headers. - */ - -/* - * The original and principal author of ansi2knr is L. Peter Deutsch - * . Other authors are noted in the change history - * that follows (in reverse chronological order): - - lpd 2000-04-12 backs out Eggert's changes because of bugs: - - concatlits didn't declare the type of its bufend argument; - - concatlits didn't recognize when it was inside a comment; - - scanstring could scan backward past the beginning of the string; when - - the check for \ + newline in scanstring was unnecessary. - - 2000-03-05 Paul Eggert - - Add support for concatenated string literals. - * ansi2knr.c (concatlits): New decl. - (main): Invoke concatlits to concatenate string literals. - (scanstring): Handle backslash-newline correctly. Work with - character constants. Fix bug when scanning backwards through - backslash-quote. Check for unterminated strings. - (convert1): Parse character constants, too. - (appendline, concatlits): New functions. - * ansi2knr.1: Document this. - - lpd 1999-08-17 added code to allow preprocessor directives - wherever comments are allowed - lpd 1999-04-12 added minor fixes from Pavel Roskin - for clean compilation with - gcc -W -Wall - lpd 1999-03-22 added hack to recognize lines consisting of - identifier1(identifier2, xxx) as *not* being procedures - lpd 1999-02-03 made indentation of preprocessor commands consistent - lpd 1999-01-28 fixed two bugs: a '/' in an argument list caused an - endless loop; quoted strings within an argument list - confused the parser - lpd 1999-01-24 added a check for write errors on the output, - suggested by Jim Meyering - lpd 1998-11-09 added further hack to recognize identifier(void) - as being a procedure - lpd 1998-10-23 added hack to recognize lines consisting of - identifier1(identifier2) as *not* being procedures - lpd 1997-12-08 made input_file optional; only closes input and/or - output file if not stdin or stdout respectively; prints - usage message on stderr rather than stdout; adds - --filename switch (changes suggested by - ) - lpd 1996-01-21 added code to cope with not HAVE_CONFIG_H and with - compilers that don't understand void, as suggested by - Tom Lane - lpd 1996-01-15 changed to require that the first non-comment token - on the line following a function header be a left brace, - to reduce sensitivity to macros, as suggested by Tom Lane - - lpd 1995-06-22 removed #ifndefs whose sole purpose was to define - undefined preprocessor symbols as 0; changed all #ifdefs - for configuration symbols to #ifs - lpd 1995-04-05 changed copyright notice to make it clear that - including ansi2knr in a program does not bring the entire - program under the GPL - lpd 1994-12-18 added conditionals for systems where ctype macros - don't handle 8-bit characters properly, suggested by - Francois Pinard ; - removed --varargs switch (this is now the default) - lpd 1994-10-10 removed CONFIG_BROKETS conditional - lpd 1994-07-16 added some conditionals to help GNU `configure', - suggested by Francois Pinard ; - properly erase prototype args in function parameters, - contributed by Jim Avera ; - correct error in writeblanks (it shouldn't erase EOLs) - lpd 1989-xx-xx original version - */ - -/* Most of the conditionals here are to make ansi2knr work with */ -/* or without the GNU configure machinery. */ - -#if HAVE_CONFIG_H -# include -#endif - -#include -#include - -#if HAVE_CONFIG_H - -/* - For properly autoconfiguring ansi2knr, use AC_CONFIG_HEADER(config.h). - This will define HAVE_CONFIG_H and so, activate the following lines. - */ - -# if STDC_HEADERS || HAVE_STRING_H -# include -# else -# include -# endif - -#else /* not HAVE_CONFIG_H */ - -/* Otherwise do it the hard way */ - -# ifdef BSD -# include -# else -# ifdef VMS - extern int strlen(), strncmp(); -# else -# include -# endif -# endif - -#endif /* not HAVE_CONFIG_H */ - -#if STDC_HEADERS -# include -#else -/* - malloc and free should be declared in stdlib.h, - but if you've got a K&R compiler, they probably aren't. - */ -# ifdef MSDOS -# include -# else -# ifdef VMS - extern char *malloc(); - extern void free(); -# else - extern char *malloc(); - extern int free(); -# endif -# endif - -#endif - -/* Define NULL (for *very* old compilers). */ -#ifndef NULL -# define NULL (0) -#endif - -/* - * The ctype macros don't always handle 8-bit characters correctly. - * Compensate for this here. - */ -#ifdef isascii -# undef HAVE_ISASCII /* just in case */ -# define HAVE_ISASCII 1 -#else -#endif -#if STDC_HEADERS || !HAVE_ISASCII -# define is_ascii(c) 1 -#else -# define is_ascii(c) isascii(c) -#endif - -#define is_space(c) (is_ascii(c) && isspace(c)) -#define is_alpha(c) (is_ascii(c) && isalpha(c)) -#define is_alnum(c) (is_ascii(c) && isalnum(c)) - -/* Scanning macros */ -#define isidchar(ch) (is_alnum(ch) || (ch) == '_') -#define isidfirstchar(ch) (is_alpha(ch) || (ch) == '_') - -/* Forward references */ -char *ppdirforward(); -char *ppdirbackward(); -char *skipspace(); -char *scanstring(); -int writeblanks(); -int test1(); -int convert1(); - -/* The main program */ -int -main(argc, argv) - int argc; - char *argv[]; -{ FILE *in = stdin; - FILE *out = stdout; - char *filename = 0; - char *program_name = argv[0]; - char *output_name = 0; -#define bufsize 5000 /* arbitrary size */ - char *buf; - char *line; - char *more; - char *usage = - "Usage: ansi2knr [--filename FILENAME] [INPUT_FILE [OUTPUT_FILE]]\n"; - /* - * In previous versions, ansi2knr recognized a --varargs switch. - * If this switch was supplied, ansi2knr would attempt to convert - * a ... argument to va_alist and va_dcl; if this switch was not - * supplied, ansi2knr would simply drop any such arguments. - * Now, ansi2knr always does this conversion, and we only - * check for this switch for backward compatibility. - */ - int convert_varargs = 1; - int output_error; - - while ( argc > 1 && argv[1][0] == '-' ) { - if ( !strcmp(argv[1], "--varargs") ) { - convert_varargs = 1; - argc--; - argv++; - continue; - } - if ( !strcmp(argv[1], "--filename") && argc > 2 ) { - filename = argv[2]; - argc -= 2; - argv += 2; - continue; - } - fprintf(stderr, "%s: Unrecognized switch: %s\n", program_name, - argv[1]); - fprintf(stderr, usage); - exit(1); - } - switch ( argc ) - { - default: - fprintf(stderr, usage); - exit(0); - case 3: - output_name = argv[2]; - out = fopen(output_name, "w"); - if ( out == NULL ) { - fprintf(stderr, "%s: Cannot open output file %s\n", - program_name, output_name); - exit(1); - } - /* falls through */ - case 2: - in = fopen(argv[1], "r"); - if ( in == NULL ) { - fprintf(stderr, "%s: Cannot open input file %s\n", - program_name, argv[1]); - exit(1); - } - if ( filename == 0 ) - filename = argv[1]; - /* falls through */ - case 1: - break; - } - if ( filename ) - fprintf(out, "#line 1 \"%s\"\n", filename); - buf = malloc(bufsize); - if ( buf == NULL ) - { - fprintf(stderr, "Unable to allocate read buffer!\n"); - exit(1); - } - line = buf; - while ( fgets(line, (unsigned)(buf + bufsize - line), in) != NULL ) - { -test: line += strlen(line); - switch ( test1(buf) ) - { - case 2: /* a function header */ - convert1(buf, out, 1, convert_varargs); - break; - case 1: /* a function */ - /* Check for a { at the start of the next line. */ - more = ++line; -f: if ( line >= buf + (bufsize - 1) ) /* overflow check */ - goto wl; - if ( fgets(line, (unsigned)(buf + bufsize - line), in) == NULL ) - goto wl; - switch ( *skipspace(ppdirforward(more), 1) ) - { - case '{': - /* Definitely a function header. */ - convert1(buf, out, 0, convert_varargs); - fputs(more, out); - break; - case 0: - /* The next line was blank or a comment: */ - /* keep scanning for a non-comment. */ - line += strlen(line); - goto f; - default: - /* buf isn't a function header, but */ - /* more might be. */ - fputs(buf, out); - strcpy(buf, more); - line = buf; - goto test; - } - break; - case -1: /* maybe the start of a function */ - if ( line != buf + (bufsize - 1) ) /* overflow check */ - continue; - /* falls through */ - default: /* not a function */ -wl: fputs(buf, out); - break; - } - line = buf; - } - if ( line != buf ) - fputs(buf, out); - free(buf); - if ( output_name ) { - output_error = ferror(out); - output_error |= fclose(out); - } else { /* out == stdout */ - fflush(out); - output_error = ferror(out); - } - if ( output_error ) { - fprintf(stderr, "%s: error writing to %s\n", program_name, - (output_name ? output_name : "stdout")); - exit(1); - } - if ( in != stdin ) - fclose(in); - return 0; -} - -/* - * Skip forward or backward over one or more preprocessor directives. - */ -char * -ppdirforward(p) - char *p; -{ - for (; *p == '#'; ++p) { - for (; *p != '\r' && *p != '\n'; ++p) - if (*p == 0) - return p; - if (*p == '\r' && p[1] == '\n') - ++p; - } - return p; -} -char * -ppdirbackward(p, limit) - char *p; - char *limit; -{ - char *np = p; - - for (;; p = --np) { - if (*np == '\n' && np[-1] == '\r') - --np; - for (; np > limit && np[-1] != '\r' && np[-1] != '\n'; --np) - if (np[-1] == 0) - return np; - if (*np != '#') - return p; - } -} - -/* - * Skip over whitespace, comments, and preprocessor directives, - * in either direction. - */ -char * -skipspace(p, dir) - char *p; - int dir; /* 1 for forward, -1 for backward */ -{ - for ( ; ; ) { - while ( is_space(*p) ) - p += dir; - if ( !(*p == '/' && p[dir] == '*') ) - break; - p += dir; p += dir; - while ( !(*p == '*' && p[dir] == '/') ) { - if ( *p == 0 ) - return p; /* multi-line comment?? */ - p += dir; - } - p += dir; p += dir; - } - return p; -} - -/* Scan over a quoted string, in either direction. */ -char * -scanstring(p, dir) - char *p; - int dir; -{ - for (p += dir; ; p += dir) - if (*p == '"' && p[-dir] != '\\') - return p + dir; -} - -/* - * Write blanks over part of a string. - * Don't overwrite end-of-line characters. - */ -int -writeblanks(start, end) - char *start; - char *end; -{ char *p; - for ( p = start; p < end; p++ ) - if ( *p != '\r' && *p != '\n' ) - *p = ' '; - return 0; -} - -/* - * Test whether the string in buf is a function definition. - * The string may contain and/or end with a newline. - * Return as follows: - * 0 - definitely not a function definition; - * 1 - definitely a function definition; - * 2 - definitely a function prototype (NOT USED); - * -1 - may be the beginning of a function definition, - * append another line and look again. - * The reason we don't attempt to convert function prototypes is that - * Ghostscript's declaration-generating macros look too much like - * prototypes, and confuse the algorithms. - */ -int -test1(buf) - char *buf; -{ char *p = buf; - char *bend; - char *endfn; - int contin; - - if ( !isidfirstchar(*p) ) - return 0; /* no name at left margin */ - bend = skipspace(ppdirbackward(buf + strlen(buf) - 1, buf), -1); - switch ( *bend ) - { - case ';': contin = 0 /*2*/; break; - case ')': contin = 1; break; - case '{': return 0; /* not a function */ - case '}': return 0; /* not a function */ - default: contin = -1; - } - while ( isidchar(*p) ) - p++; - endfn = p; - p = skipspace(p, 1); - if ( *p++ != '(' ) - return 0; /* not a function */ - p = skipspace(p, 1); - if ( *p == ')' ) - return 0; /* no parameters */ - /* Check that the apparent function name isn't a keyword. */ - /* We only need to check for keywords that could be followed */ - /* by a left parenthesis (which, unfortunately, is most of them). */ - { static char *words[] = - { "asm", "auto", "case", "char", "const", "double", - "extern", "float", "for", "if", "int", "long", - "register", "return", "short", "signed", "sizeof", - "static", "switch", "typedef", "unsigned", - "void", "volatile", "while", 0 - }; - char **key = words; - char *kp; - unsigned len = endfn - buf; - - while ( (kp = *key) != 0 ) - { if ( strlen(kp) == len && !strncmp(kp, buf, len) ) - return 0; /* name is a keyword */ - key++; - } - } - { - char *id = p; - int len; - /* - * Check for identifier1(identifier2) and not - * identifier1(void), or identifier1(identifier2, xxxx). - */ - - while ( isidchar(*p) ) - p++; - len = p - id; - p = skipspace(p, 1); - if (*p == ',' || - (*p == ')' && (len != 4 || strncmp(id, "void", 4))) - ) - return 0; /* not a function */ - } - /* - * If the last significant character was a ), we need to count - * parentheses, because it might be part of a formal parameter - * that is a procedure. - */ - if (contin > 0) { - int level = 0; - - for (p = skipspace(buf, 1); *p; p = skipspace(p + 1, 1)) - level += (*p == '(' ? 1 : *p == ')' ? -1 : 0); - if (level > 0) - contin = -1; - } - return contin; -} - -/* Convert a recognized function definition or header to K&R syntax. */ -int -convert1(buf, out, header, convert_varargs) - char *buf; - FILE *out; - int header; /* Boolean */ - int convert_varargs; /* Boolean */ -{ char *endfn; - char *p; - /* - * The breaks table contains pointers to the beginning and end - * of each argument. - */ - char **breaks; - unsigned num_breaks = 2; /* for testing */ - char **btop; - char **bp; - char **ap; - char *vararg = 0; - - /* Pre-ANSI implementations don't agree on whether strchr */ - /* is called strchr or index, so we open-code it here. */ - for ( endfn = buf; *(endfn++) != '('; ) - ; -top: p = endfn; - breaks = (char **)malloc(sizeof(char *) * num_breaks * 2); - if ( breaks == NULL ) - { /* Couldn't allocate break table, give up */ - fprintf(stderr, "Unable to allocate break table!\n"); - fputs(buf, out); - return -1; - } - btop = breaks + num_breaks * 2 - 2; - bp = breaks; - /* Parse the argument list */ - do - { int level = 0; - char *lp = NULL; - char *rp = NULL; - char *end = NULL; - - if ( bp >= btop ) - { /* Filled up break table. */ - /* Allocate a bigger one and start over. */ - free((char *)breaks); - num_breaks <<= 1; - goto top; - } - *bp++ = p; - /* Find the end of the argument */ - for ( ; end == NULL; p++ ) - { switch(*p) - { - case ',': - if ( !level ) end = p; - break; - case '(': - if ( !level ) lp = p; - level++; - break; - case ')': - if ( --level < 0 ) end = p; - else rp = p; - break; - case '/': - if (p[1] == '*') - p = skipspace(p, 1) - 1; - break; - case '"': - p = scanstring(p, 1) - 1; - break; - default: - ; - } - } - /* Erase any embedded prototype parameters. */ - if ( lp && rp ) - writeblanks(lp + 1, rp); - p--; /* back up over terminator */ - /* Find the name being declared. */ - /* This is complicated because of procedure and */ - /* array modifiers. */ - for ( ; ; ) - { p = skipspace(p - 1, -1); - switch ( *p ) - { - case ']': /* skip array dimension(s) */ - case ')': /* skip procedure args OR name */ - { int level = 1; - while ( level ) - switch ( *--p ) - { - case ']': case ')': - level++; - break; - case '[': case '(': - level--; - break; - case '/': - if (p > buf && p[-1] == '*') - p = skipspace(p, -1) + 1; - break; - case '"': - p = scanstring(p, -1) + 1; - break; - default: ; - } - } - if ( *p == '(' && *skipspace(p + 1, 1) == '*' ) - { /* We found the name being declared */ - while ( !isidfirstchar(*p) ) - p = skipspace(p, 1) + 1; - goto found; - } - break; - default: - goto found; - } - } -found: if ( *p == '.' && p[-1] == '.' && p[-2] == '.' ) - { if ( convert_varargs ) - { *bp++ = "va_alist"; - vararg = p-2; - } - else - { p++; - if ( bp == breaks + 1 ) /* sole argument */ - writeblanks(breaks[0], p); - else - writeblanks(bp[-1] - 1, p); - bp--; - } - } - else - { while ( isidchar(*p) ) p--; - *bp++ = p+1; - } - p = end; - } - while ( *p++ == ',' ); - *bp = p; - /* Make a special check for 'void' arglist */ - if ( bp == breaks+2 ) - { p = skipspace(breaks[0], 1); - if ( !strncmp(p, "void", 4) ) - { p = skipspace(p+4, 1); - if ( p == breaks[2] - 1 ) - { bp = breaks; /* yup, pretend arglist is empty */ - writeblanks(breaks[0], p + 1); - } - } - } - /* Put out the function name and left parenthesis. */ - p = buf; - while ( p != endfn ) putc(*p, out), p++; - /* Put out the declaration. */ - if ( header ) - { fputs(");", out); - for ( p = breaks[0]; *p; p++ ) - if ( *p == '\r' || *p == '\n' ) - putc(*p, out); - } - else - { for ( ap = breaks+1; ap < bp; ap += 2 ) - { p = *ap; - while ( isidchar(*p) ) - putc(*p, out), p++; - if ( ap < bp - 1 ) - fputs(", ", out); - } - fputs(") ", out); - /* Put out the argument declarations */ - for ( ap = breaks+2; ap <= bp; ap += 2 ) - (*ap)[-1] = ';'; - if ( vararg != 0 ) - { *vararg = 0; - fputs(breaks[0], out); /* any prior args */ - fputs("va_dcl", out); /* the final arg */ - fputs(bp[0], out); - } - else - fputs(breaks[0], out); - } - free((char *)breaks); - return 0; -} diff --git a/src/argmatch.c b/src/argmatch.c deleted file mode 100644 index 9642706..0000000 --- a/src/argmatch.c +++ /dev/null @@ -1,306 +0,0 @@ -/* argmatch.c -- find a match for a string in an array - Copyright (C) 1990, 1998, 1999 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software Foundation, - Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -/* Written by David MacKenzie - Modified by Akim Demaille */ - -#include "argmatch.h" - -#include -#ifdef STDC_HEADERS -# include -#endif - -#if HAVE_LOCALE_H -# include -#endif - -#if ENABLE_NLS -# include -# define _(Text) gettext (Text) -#else -# define _(Text) Text -#endif - -#include "error.h" -#include "quotearg.h" - -/* When reporting an invalid argument, show nonprinting characters - by using the quoting style ARGMATCH_QUOTING_STYLE. Do not use - literal_quoting_style. */ -#ifndef ARGMATCH_QUOTING_STYLE -# define ARGMATCH_QUOTING_STYLE locale_quoting_style -#endif - -/* The following test is to work around the gross typo in - systems like Sony NEWS-OS Release 4.0C, whereby EXIT_FAILURE - is defined to 0, not 1. */ -#if !EXIT_FAILURE -# undef EXIT_FAILURE -# define EXIT_FAILURE 1 -#endif - -/* Non failing version of argmatch call this function after failing. */ -#ifndef ARGMATCH_DIE -# define ARGMATCH_DIE exit (EXIT_FAILURE) -#endif - -#ifdef ARGMATCH_DIE_DECL -ARGMATCH_DIE_DECL; -#endif - -static void -__argmatch_die (void) -{ - ARGMATCH_DIE; -} - -/* Used by XARGMATCH and XARGCASEMATCH. See description in argmatch.h. - Default to __argmatch_die, but allow caller to change this at run-time. */ -argmatch_exit_fn argmatch_die = __argmatch_die; - - -/* If ARG is an unambiguous match for an element of the - null-terminated array ARGLIST, return the index in ARGLIST - of the matched element, else -1 if it does not match any element - or -2 if it is ambiguous (is a prefix of more than one element). - If SENSITIVE, comparison is case sensitive. - - If VALLIST is none null, use it to resolve ambiguities limited to - synonyms, i.e., for - "yes", "yop" -> 0 - "no", "nope" -> 1 - "y" is a valid argument, for `0', and "n" for `1'. */ - -static int -__argmatch_internal (const char *arg, const char *const *arglist, - const char *vallist, size_t valsize, - int case_sensitive) -{ - int i; /* Temporary index in ARGLIST. */ - size_t arglen; /* Length of ARG. */ - int matchind = -1; /* Index of first nonexact match. */ - int ambiguous = 0; /* If nonzero, multiple nonexact match(es). */ - - arglen = strlen (arg); - - /* Test all elements for either exact match or abbreviated matches. */ - for (i = 0; arglist[i]; i++) - { - if (case_sensitive - ? !strncmp (arglist[i], arg, arglen) - : !strncasecmp (arglist[i], arg, arglen)) - { - if (strlen (arglist[i]) == arglen) - /* Exact match found. */ - return i; - else if (matchind == -1) - /* First nonexact match found. */ - matchind = i; - else - { - /* Second nonexact match found. */ - if (vallist == NULL - || memcmp (vallist + valsize * matchind, - vallist + valsize * i, valsize)) - { - /* There is a real ambiguity, or we could not - disambiguate. */ - ambiguous = 1; - } - } - } - } - if (ambiguous) - return -2; - else - return matchind; -} - -/* argmatch - case sensitive version */ -int -argmatch (const char *arg, const char *const *arglist, - const char *vallist, size_t valsize) -{ - return __argmatch_internal (arg, arglist, vallist, valsize, 1); -} - -/* argcasematch - case insensitive version */ -int -argcasematch (const char *arg, const char *const *arglist, - const char *vallist, size_t valsize) -{ - return __argmatch_internal (arg, arglist, vallist, valsize, 0); -} - -/* Error reporting for argmatch. - CONTEXT is a description of the type of entity that was being matched. - VALUE is the invalid value that was given. - PROBLEM is the return value from argmatch. */ - -void -argmatch_invalid (const char *context, const char *value, int problem) -{ - char const *format = (problem == -1 - ? _("invalid argument %s for `%s'") - : _("ambiguous argument %s for `%s'")); - - error (0, 0, format, quotearg_style (ARGMATCH_QUOTING_STYLE, value), context); -} - -/* List the valid arguments for argmatch. - ARGLIST is the same as in argmatch. - VALLIST is a pointer to an array of values. - VALSIZE is the size of the elements of VALLIST */ -void -argmatch_valid (const char *const *arglist, - const char *vallist, size_t valsize) -{ - int i; - const char *last_val = NULL; - - /* We try to put synonyms on the same line. The assumption is that - synonyms follow each other */ - fprintf (stderr, _("Valid arguments are:")); - for (i = 0; arglist[i]; i++) - if ((i == 0) - || memcmp (last_val, vallist + valsize * i, valsize)) - { - fprintf (stderr, "\n - `%s'", arglist[i]); - last_val = vallist + valsize * i; - } - else - { - fprintf (stderr, ", `%s'", arglist[i]); - } - putc ('\n', stderr); -} - -/* Never failing versions of the previous functions. - - CONTEXT is the context for which argmatch is called (e.g., - "--version-control", or "$VERSION_CONTROL" etc.). Upon failure, - calls the (supposed never to return) function EXIT_FN. */ - -int -__xargmatch_internal (const char *context, - const char *arg, const char *const *arglist, - const char *vallist, size_t valsize, - int case_sensitive, - argmatch_exit_fn exit_fn) -{ - int res = __argmatch_internal (arg, arglist, - vallist, valsize, - case_sensitive); - if (res >= 0) - /* Success. */ - return res; - - /* We failed. Explain why. */ - argmatch_invalid (context, arg, res); - argmatch_valid (arglist, vallist, valsize); - (*exit_fn) (); - - return -1; /* To please the compilers. */ -} - -/* Look for VALUE in VALLIST, an array of objects of size VALSIZE and - return the first corresponding argument in ARGLIST */ -const char * -argmatch_to_argument (const char *value, - const char *const *arglist, - const char *vallist, size_t valsize) -{ - int i; - - for (i = 0; arglist[i]; i++) - if (!memcmp (value, vallist + valsize * i, valsize)) - return arglist[i]; - return NULL; -} - -#ifdef TEST -/* - * Based on "getversion.c" by David MacKenzie - */ -char *program_name; -extern const char *getenv (); - -/* When to make backup files. */ -enum backup_type -{ - /* Never make backups. */ - none, - - /* Make simple backups of every file. */ - simple, - - /* Make numbered backups of files that already have numbered backups, - and simple backups of the others. */ - numbered_existing, - - /* Make numbered backups of every file. */ - numbered -}; - -/* Two tables describing arguments (keys) and their corresponding - values */ -static const char *const backup_args[] = -{ - "no", "none", "off", - "simple", "never", - "existing", "nil", - "numbered", "t", - 0 -}; - -static const enum backup_type backup_vals[] = -{ - none, none, none, - simple, simple, - numbered_existing, numbered_existing, - numbered, numbered -}; - -int -main (int argc, const char *const *argv) -{ - const char *cp; - enum backup_type backup_type = none; - - program_name = (char *) argv[0]; - - if (argc > 2) - { - fprintf (stderr, "Usage: %s [VERSION_CONTROL]\n", program_name); - exit (1); - } - - if ((cp = getenv ("VERSION_CONTROL"))) - backup_type = XARGCASEMATCH ("$VERSION_CONTROL", cp, - backup_args, backup_vals); - - if (argc == 2) - backup_type = XARGCASEMATCH (program_name, argv[1], - backup_args, backup_vals); - - printf ("The version control is `%s'\n", - ARGMATCH_TO_ARGUMENT (backup_type, backup_args, backup_vals)); - - return 0; -} -#endif diff --git a/src/argmatch.h b/src/argmatch.h deleted file mode 100644 index d3f25cc..0000000 --- a/src/argmatch.h +++ /dev/null @@ -1,129 +0,0 @@ -/* argmatch.h -- definitions and prototypes for argmatch.c - Copyright (C) 1990, 1998, 1999 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software Foundation, - Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -/* Written by David MacKenzie - Modified by Akim Demaille */ - -#ifndef ARGMATCH_H_ -# define ARGMATCH_H_ 1 - -# if HAVE_CONFIG_H -# include -# endif - -# include - -# ifndef PARAMS -# if PROTOTYPES || (defined (__STDC__) && __STDC__) -# define PARAMS(args) args -# else -# define PARAMS(args) () -# endif /* GCC. */ -# endif /* Not PARAMS. */ - -/* Assert there are as many real arguments as there are values - (argument list ends with a NULL guard). There is no execution - cost, since it will be statically evalauted to `assert (0)' or - `assert (1)'. Unfortunately there is no -Wassert-0. */ - -# undef ARRAY_CARDINALITY -# define ARRAY_CARDINALITY(Array) (sizeof ((Array)) / sizeof (*(Array))) - -# define ARGMATCH_ASSERT(Arglist, Vallist) \ - assert (ARRAY_CARDINALITY ((Arglist)) == ARRAY_CARDINALITY ((Vallist)) + 1) - -/* Return the index of the element of ARGLIST (NULL terminated) that - matches with ARG. If VALLIST is not NULL, then use it to resolve - false ambiguities (i.e., different matches of ARG but corresponding - to the same values in VALLIST). */ - -int argmatch - PARAMS ((const char *arg, const char *const *arglist, - const char *vallist, size_t valsize)); -int argcasematch - PARAMS ((const char *arg, const char *const *arglist, - const char *vallist, size_t valsize)); - -# define ARGMATCH(Arg, Arglist, Vallist) \ - argmatch ((Arg), (Arglist), (const char *) (Vallist), sizeof (*(Vallist))) - -# define ARGCASEMATCH(Arg, Arglist, Vallist) \ - argcasematch ((Arg), (Arglist), (const char *) (Vallist), sizeof (*(Vallist))) - -/* xargmatch calls this function when it fails. This function should not - return. By default, this is a function that calls ARGMATCH_DIE which - in turn defaults to `exit (EXIT_FAILURE)'. */ -typedef void (*argmatch_exit_fn) PARAMS ((void)); -extern argmatch_exit_fn argmatch_die; - -/* Report on stderr why argmatch failed. Report correct values. */ - -void argmatch_invalid - PARAMS ((const char *context, const char *value, int problem)); - -/* Left for compatibility with the old name invalid_arg */ - -# define invalid_arg(Context, Value, Problem) \ - argmatch_invalid ((Context), (Value), (Problem)) - - - -/* Report on stderr the list of possible arguments. */ - -void argmatch_valid - PARAMS ((const char *const *arglist, - const char *vallist, size_t valsize)); - -# define ARGMATCH_VALID(Arglist, Vallist) \ - argmatch_valid (Arglist, (const char *) Vallist, sizeof (*(Vallist))) - - - -/* Same as argmatch, but upon failure, reports a explanation on the - failure, and exits using the function EXIT_FN. */ - -int __xargmatch_internal - PARAMS ((const char *context, - const char *arg, const char *const *arglist, - const char *vallist, size_t valsize, - int case_sensitive, argmatch_exit_fn exit_fn)); - -/* Programmer friendly interface to __xargmatch_internal. */ - -# define XARGMATCH(Context, Arg, Arglist, Vallist) \ - (Vallist [__xargmatch_internal ((Context), (Arg), (Arglist), \ - (const char *) (Vallist), \ - sizeof (*(Vallist)), \ - 1, argmatch_die)]) - -# define XARGCASEMATCH(Context, Arg, Arglist, Vallist) \ - (Vallist [__xargmatch_internal ((Context), (Arg), (Arglist), \ - (const char *) (Vallist), \ - sizeof (*(Vallist)), \ - 0, argmatch_die)]) - -/* Convert a value into a corresponding argument. */ - -const char *argmatch_to_argument - PARAMS ((char const *value, const char *const *arglist, - const char *vallist, size_t valsize)); - -# define ARGMATCH_TO_ARGUMENT(Value, Arglist, Vallist) \ - argmatch_to_argument ((char const *) &(Value), (Arglist), \ - (const char *) (Vallist), sizeof (*(Vallist))) - -#endif /* ARGMATCH_H_ */ diff --git a/src/common.h b/src/common.h index 6104512..21e2efb 100644 --- a/src/common.h +++ b/src/common.h @@ -17,103 +17,33 @@ If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#if HAVE_CONFIG_H -# include -#endif +#include "config.h" -#if MSDOS || WIN32 || _WIN32 -# define DOSWIN 1 -# define DOSWIN_OR_OS2 1 -#endif - -#if OS2 +#if MSDOS || WIN32 || _WIN32 || OS2 # define DOSWIN_OR_OS2 1 #endif #include #include - -#if STDC_HEADERS -# include -#endif - -#if HAVE_STDBOOL_H -# include -#else -typedef enum {false = 0, true = 1} bool; -#endif - -#if HAVE_STRING_H -# include -#else -# include -# define strchr index -# define strrchr rindex -#endif - +#include +#include +#include #include -#ifndef RETSIGTYPE -# define RETSIGTYPE void -#endif - -#if DIFF_HASH -# ifdef HAVE_LIMITS_H -# include -# endif -# ifndef CHAR_BIT -# define CHAR_BIT 8 -# endif -#endif - -/* Some systems do not define EXIT_*, even with STDC_HEADERS. */ -#ifndef EXIT_SUCCESS -# define EXIT_SUCCESS 0 -#endif -#ifndef EXIT_FAILURE -# define EXIT_FAILURE 1 -#endif -/* The following test is to work around the gross typo in systems like Sony - NEWS-OS Release 4.0C, whereby EXIT_FAILURE is defined to 0, not 1. */ -#if !EXIT_FAILURE -# undef EXIT_FAILURE -# define EXIT_FAILURE 1 -#endif +#include #include "xalloc.h" - -#if HAVE_LOCALE_H -# include -#endif -#if !HAVE_SETLOCALE -# define setlocale(Category, Locale) -#endif +#include "argmatch.h" +#include "localcharset.h" +#include "error.h" +#include "gettext.h" #if ENABLE_NLS -# include # define _(Text) gettext (Text) #else -# define bindtextdomain(Domain, Directory) -# define textdomain(Domain) # define _(Text) Text #endif #define N_(Text) Text -#ifndef PARAMS -# if __STDC__ -# define PARAMS(Args) Args -# else -# define PARAMS(Args) () -# endif -#endif - -#include - -#include -#ifndef errno -extern int errno; -#endif -#include "error.h" - /* Generate a mask of LENGTH one-bits, right justified in a word. */ #define MASK(Length) ((unsigned) ~(~0 << (Length))) @@ -121,17 +51,7 @@ extern int errno; #define IS_ASCII(Character) \ (!((Character) & ~MASK (7))) -/* This is a bit ridiculous. DJGPP offers a non-working `pipe' function, - for the only sake of being POSIX compliant (I'm told so). So, `pipe' - cannot be autoconfigured without AC_TRY_RUN, which is better avoided. */ -#if !DOSWIN -# if !_AMIGA -# define HAVE_PIPE 1 -# endif -#endif - /* Debugging the memory allocator. */ - #if WITH_DMALLOC # define DMALLOC_FUNC_CHECK # include diff --git a/src/decsteps.h b/src/decsteps.h index 222c034..f702b69 100644 --- a/src/decsteps.h +++ b/src/decsteps.h @@ -1,68 +1,68 @@ -bool module_african PARAMS ((struct recode_outer *)); -bool module_afrtran PARAMS ((struct recode_outer *)); -bool module_applemac PARAMS ((struct recode_outer *)); -bool module_atarist PARAMS ((struct recode_outer *)); -bool module_bangbang PARAMS ((struct recode_outer *)); -bool module_cdcnos PARAMS ((struct recode_outer *)); -bool module_ebcdic PARAMS ((struct recode_outer *)); -bool module_ibmpc PARAMS ((struct recode_outer *)); -bool module_iconqnx PARAMS ((struct recode_outer *)); -bool module_latin1_ascii PARAMS ((struct recode_outer *)); -bool module_java PARAMS ((struct recode_outer *)); -bool module_mule PARAMS ((struct recode_outer *)); -bool module_strips PARAMS ((struct recode_outer *)); -bool module_testdump PARAMS ((struct recode_outer *)); -bool module_ucs PARAMS ((struct recode_outer *)); -bool module_utf16 PARAMS ((struct recode_outer *)); -bool module_utf7 PARAMS ((struct recode_outer *)); -bool module_utf8 PARAMS ((struct recode_outer *)); -bool module_varia PARAMS ((struct recode_outer *)); -bool module_vietnamese PARAMS ((struct recode_outer *)); -bool module_flat PARAMS ((struct recode_outer *)); -bool module_html PARAMS ((struct recode_outer *)); -bool module_latin1_latex PARAMS ((struct recode_outer *)); -bool module_latin1_texte PARAMS ((struct recode_outer *)); -bool module_rfc1345 PARAMS ((struct recode_outer *)); -bool module_texinfo PARAMS ((struct recode_outer *)); -bool module_base64 PARAMS ((struct recode_outer *)); -bool module_dump PARAMS ((struct recode_outer *)); -bool module_endline PARAMS ((struct recode_outer *)); -bool module_permutations PARAMS ((struct recode_outer *)); -bool module_quoted_printable PARAMS ((struct recode_outer *)); -bool module_ascii_latin1 PARAMS ((struct recode_outer *)); -bool module_latex_latin1 PARAMS ((struct recode_outer *)); -bool module_texte_latin1 PARAMS ((struct recode_outer *)); -void delmodule_african PARAMS ((struct recode_outer *)); -void delmodule_afrtran PARAMS ((struct recode_outer *)); -void delmodule_applemac PARAMS ((struct recode_outer *)); -void delmodule_atarist PARAMS ((struct recode_outer *)); -void delmodule_bangbang PARAMS ((struct recode_outer *)); -void delmodule_cdcnos PARAMS ((struct recode_outer *)); -void delmodule_ebcdic PARAMS ((struct recode_outer *)); -void delmodule_ibmpc PARAMS ((struct recode_outer *)); -void delmodule_iconqnx PARAMS ((struct recode_outer *)); -void delmodule_latin1_ascii PARAMS ((struct recode_outer *)); -void delmodule_java PARAMS ((struct recode_outer *)); -void delmodule_mule PARAMS ((struct recode_outer *)); -void delmodule_strips PARAMS ((struct recode_outer *)); -void delmodule_testdump PARAMS ((struct recode_outer *)); -void delmodule_ucs PARAMS ((struct recode_outer *)); -void delmodule_utf16 PARAMS ((struct recode_outer *)); -void delmodule_utf7 PARAMS ((struct recode_outer *)); -void delmodule_utf8 PARAMS ((struct recode_outer *)); -void delmodule_varia PARAMS ((struct recode_outer *)); -void delmodule_vietnamese PARAMS ((struct recode_outer *)); -void delmodule_flat PARAMS ((struct recode_outer *)); -void delmodule_html PARAMS ((struct recode_outer *)); -void delmodule_latin1_latex PARAMS ((struct recode_outer *)); -void delmodule_latin1_texte PARAMS ((struct recode_outer *)); -void delmodule_rfc1345 PARAMS ((struct recode_outer *)); -void delmodule_texinfo PARAMS ((struct recode_outer *)); -void delmodule_base64 PARAMS ((struct recode_outer *)); -void delmodule_dump PARAMS ((struct recode_outer *)); -void delmodule_endline PARAMS ((struct recode_outer *)); -void delmodule_permutations PARAMS ((struct recode_outer *)); -void delmodule_quoted_printable PARAMS ((struct recode_outer *)); -void delmodule_ascii_latin1 PARAMS ((struct recode_outer *)); -void delmodule_latex_latin1 PARAMS ((struct recode_outer *)); -void delmodule_texte_latin1 PARAMS ((struct recode_outer *)); +bool module_african (struct recode_outer *); +bool module_afrtran (struct recode_outer *); +bool module_applemac (struct recode_outer *); +bool module_atarist (struct recode_outer *); +bool module_bangbang (struct recode_outer *); +bool module_cdcnos (struct recode_outer *); +bool module_ebcdic (struct recode_outer *); +bool module_ibmpc (struct recode_outer *); +bool module_iconqnx (struct recode_outer *); +bool module_latin1_ascii (struct recode_outer *); +bool module_java (struct recode_outer *); +bool module_mule (struct recode_outer *); +bool module_strips (struct recode_outer *); +bool module_testdump (struct recode_outer *); +bool module_ucs (struct recode_outer *); +bool module_utf16 (struct recode_outer *); +bool module_utf7 (struct recode_outer *); +bool module_utf8 (struct recode_outer *); +bool module_varia (struct recode_outer *); +bool module_vietnamese (struct recode_outer *); +bool module_flat (struct recode_outer *); +bool module_html (struct recode_outer *); +bool module_latin1_latex (struct recode_outer *); +bool module_latin1_texte (struct recode_outer *); +bool module_rfc1345 (struct recode_outer *); +bool module_texinfo (struct recode_outer *); +bool module_base64 (struct recode_outer *); +bool module_dump (struct recode_outer *); +bool module_endline (struct recode_outer *); +bool module_permutations (struct recode_outer *); +bool module_quoted_printable (struct recode_outer *); +bool module_ascii_latin1 (struct recode_outer *); +bool module_latex_latin1 (struct recode_outer *); +bool module_texte_latin1 (struct recode_outer *); +void delmodule_african (struct recode_outer *); +void delmodule_afrtran (struct recode_outer *); +void delmodule_applemac (struct recode_outer *); +void delmodule_atarist (struct recode_outer *); +void delmodule_bangbang (struct recode_outer *); +void delmodule_cdcnos (struct recode_outer *); +void delmodule_ebcdic (struct recode_outer *); +void delmodule_ibmpc (struct recode_outer *); +void delmodule_iconqnx (struct recode_outer *); +void delmodule_latin1_ascii (struct recode_outer *); +void delmodule_java (struct recode_outer *); +void delmodule_mule (struct recode_outer *); +void delmodule_strips (struct recode_outer *); +void delmodule_testdump (struct recode_outer *); +void delmodule_ucs (struct recode_outer *); +void delmodule_utf16 (struct recode_outer *); +void delmodule_utf7 (struct recode_outer *); +void delmodule_utf8 (struct recode_outer *); +void delmodule_varia (struct recode_outer *); +void delmodule_vietnamese (struct recode_outer *); +void delmodule_flat (struct recode_outer *); +void delmodule_html (struct recode_outer *); +void delmodule_latin1_latex (struct recode_outer *); +void delmodule_latin1_texte (struct recode_outer *); +void delmodule_rfc1345 (struct recode_outer *); +void delmodule_texinfo (struct recode_outer *); +void delmodule_base64 (struct recode_outer *); +void delmodule_dump (struct recode_outer *); +void delmodule_endline (struct recode_outer *); +void delmodule_permutations (struct recode_outer *); +void delmodule_quoted_printable (struct recode_outer *); +void delmodule_ascii_latin1 (struct recode_outer *); +void delmodule_latex_latin1 (struct recode_outer *); +void delmodule_texte_latin1 (struct recode_outer *); diff --git a/src/exit.h b/src/exit.h deleted file mode 100644 index 9dbfb7c..0000000 --- a/src/exit.h +++ /dev/null @@ -1,32 +0,0 @@ -/* exit() function. - Copyright (C) 1995, 2001 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software Foundation, - Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef _EXIT_H -#define _EXIT_H - -/* Get exit() declaration. */ -#include - -/* Some systems do not define EXIT_*, even with STDC_HEADERS. */ -#ifndef EXIT_SUCCESS -# define EXIT_SUCCESS 0 -#endif -#ifndef EXIT_FAILURE -# define EXIT_FAILURE 1 -#endif - -#endif /* _EXIT_H */ diff --git a/src/exitfail.c b/src/exitfail.c deleted file mode 100644 index 27d38c3..0000000 --- a/src/exitfail.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Failure exit status - - Copyright (C) 2002, 2003 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. - If not, write to the Free Software Foundation, - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifdef HAVE_CONFIG_H -# include -#endif - -#include "exitfail.h" -#include "exit.h" - -int volatile exit_failure = EXIT_FAILURE; diff --git a/src/exitfail.h b/src/exitfail.h deleted file mode 100644 index e46cf9c..0000000 --- a/src/exitfail.h +++ /dev/null @@ -1,20 +0,0 @@ -/* Failure exit status - - Copyright (C) 2002 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. - If not, write to the Free Software Foundation, - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ - -extern int volatile exit_failure; diff --git a/src/hash.c b/src/hash.c deleted file mode 100644 index 8f9e1e3..0000000 --- a/src/hash.c +++ /dev/null @@ -1,1055 +0,0 @@ -/* hash - hashing table processing. - - Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free - Software Foundation, Inc. - - Written by Jim Meyering, 1992. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software Foundation, - Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ - -/* A generic hash table package. */ - -/* Define USE_OBSTACK to 1 if you want the allocator to use obstacks instead - of malloc. If you change USE_OBSTACK, you have to recompile! */ - -#ifdef HAVE_CONFIG_H -# include -#endif - -#include "hash.h" -#include "xalloc.h" - -#include -#include -#include - -#if USE_OBSTACK -# include "obstack.h" -# ifndef obstack_chunk_alloc -# define obstack_chunk_alloc malloc -# endif -# ifndef obstack_chunk_free -# define obstack_chunk_free free -# endif -#endif - -#ifndef SIZE_MAX -# define SIZE_MAX ((size_t) -1) -#endif - -struct hash_table - { - /* The array of buckets starts at BUCKET and extends to BUCKET_LIMIT-1, - for a possibility of N_BUCKETS. Among those, N_BUCKETS_USED buckets - are not empty, there are N_ENTRIES active entries in the table. */ - struct hash_entry *bucket; - struct hash_entry const *bucket_limit; - size_t n_buckets; - size_t n_buckets_used; - size_t n_entries; - - /* Tuning arguments, kept in a physicaly separate structure. */ - const Hash_tuning *tuning; - - /* Three functions are given to `hash_initialize', see the documentation - block for this function. In a word, HASHER randomizes a user entry - into a number up from 0 up to some maximum minus 1; COMPARATOR returns - true if two user entries compare equally; and DATA_FREER is the cleanup - function for a user entry. */ - Hash_hasher hasher; - Hash_comparator comparator; - Hash_data_freer data_freer; - - /* A linked list of freed struct hash_entry structs. */ - struct hash_entry *free_entry_list; - -#if USE_OBSTACK - /* Whenever obstacks are used, it is possible to allocate all overflowed - entries into a single stack, so they all can be freed in a single - operation. It is not clear if the speedup is worth the trouble. */ - struct obstack entry_stack; -#endif - }; - -/* A hash table contains many internal entries, each holding a pointer to - some user provided data (also called a user entry). An entry indistinctly - refers to both the internal entry and its associated user entry. A user - entry contents may be hashed by a randomization function (the hashing - function, or just `hasher' for short) into a number (or `slot') between 0 - and the current table size. At each slot position in the hash table, - starts a linked chain of entries for which the user data all hash to this - slot. A bucket is the collection of all entries hashing to the same slot. - - A good `hasher' function will distribute entries rather evenly in buckets. - In the ideal case, the length of each bucket is roughly the number of - entries divided by the table size. Finding the slot for a data is usually - done in constant time by the `hasher', and the later finding of a precise - entry is linear in time with the size of the bucket. Consequently, a - larger hash table size (that is, a larger number of buckets) is prone to - yielding shorter chains, *given* the `hasher' function behaves properly. - - Long buckets slow down the lookup algorithm. One might use big hash table - sizes in hope to reduce the average length of buckets, but this might - become inordinate, as unused slots in the hash table take some space. The - best bet is to make sure you are using a good `hasher' function (beware - that those are not that easy to write! :-), and to use a table size - larger than the actual number of entries. */ - -/* If an insertion makes the ratio of nonempty buckets to table size larger - than the growth threshold (a number between 0.0 and 1.0), then increase - the table size by multiplying by the growth factor (a number greater than - 1.0). The growth threshold defaults to 0.8, and the growth factor - defaults to 1.414, meaning that the table will have doubled its size - every second time 80% of the buckets get used. */ -#define DEFAULT_GROWTH_THRESHOLD 0.8 -#define DEFAULT_GROWTH_FACTOR 1.414 - -/* If a deletion empties a bucket and causes the ratio of used buckets to - table size to become smaller than the shrink threshold (a number between - 0.0 and 1.0), then shrink the table by multiplying by the shrink factor (a - number greater than the shrink threshold but smaller than 1.0). The shrink - threshold and factor default to 0.0 and 1.0, meaning that the table never - shrinks. */ -#define DEFAULT_SHRINK_THRESHOLD 0.0 -#define DEFAULT_SHRINK_FACTOR 1.0 - -/* Use this to initialize or reset a TUNING structure to - some sensible values. */ -static const Hash_tuning default_tuning = - { - DEFAULT_SHRINK_THRESHOLD, - DEFAULT_SHRINK_FACTOR, - DEFAULT_GROWTH_THRESHOLD, - DEFAULT_GROWTH_FACTOR, - false - }; - -/* Information and lookup. */ - -/* The following few functions provide information about the overall hash - table organization: the number of entries, number of buckets and maximum - length of buckets. */ - -/* Return the number of buckets in the hash table. The table size, the total - number of buckets (used plus unused), or the maximum number of slots, are - the same quantity. */ - -size_t -hash_get_n_buckets (const Hash_table *table) -{ - return table->n_buckets; -} - -/* Return the number of slots in use (non-empty buckets). */ - -size_t -hash_get_n_buckets_used (const Hash_table *table) -{ - return table->n_buckets_used; -} - -/* Return the number of active entries. */ - -size_t -hash_get_n_entries (const Hash_table *table) -{ - return table->n_entries; -} - -/* Return the length of the longest chain (bucket). */ - -size_t -hash_get_max_bucket_length (const Hash_table *table) -{ - struct hash_entry const *bucket; - size_t max_bucket_length = 0; - - for (bucket = table->bucket; bucket < table->bucket_limit; bucket++) - { - if (bucket->data) - { - struct hash_entry const *cursor = bucket; - size_t bucket_length = 1; - - while (cursor = cursor->next, cursor) - bucket_length++; - - if (bucket_length > max_bucket_length) - max_bucket_length = bucket_length; - } - } - - return max_bucket_length; -} - -/* Do a mild validation of a hash table, by traversing it and checking two - statistics. */ - -bool -hash_table_ok (const Hash_table *table) -{ - struct hash_entry const *bucket; - size_t n_buckets_used = 0; - size_t n_entries = 0; - - for (bucket = table->bucket; bucket < table->bucket_limit; bucket++) - { - if (bucket->data) - { - struct hash_entry const *cursor = bucket; - - /* Count bucket head. */ - n_buckets_used++; - n_entries++; - - /* Count bucket overflow. */ - while (cursor = cursor->next, cursor) - n_entries++; - } - } - - if (n_buckets_used == table->n_buckets_used && n_entries == table->n_entries) - return true; - - return false; -} - -void -hash_print_statistics (const Hash_table *table, FILE *stream) -{ - size_t n_entries = hash_get_n_entries (table); - size_t n_buckets = hash_get_n_buckets (table); - size_t n_buckets_used = hash_get_n_buckets_used (table); - size_t max_bucket_length = hash_get_max_bucket_length (table); - - fprintf (stream, "# entries: %lu\n", (unsigned long int) n_entries); - fprintf (stream, "# buckets: %lu\n", (unsigned long int) n_buckets); - fprintf (stream, "# buckets used: %lu (%.2f%%)\n", - (unsigned long int) n_buckets_used, - (100.0 * n_buckets_used) / n_buckets); - fprintf (stream, "max bucket length: %lu\n", - (unsigned long int) max_bucket_length); -} - -/* If ENTRY matches an entry already in the hash table, return the - entry from the table. Otherwise, return NULL. */ - -void * -hash_lookup (const Hash_table *table, const void *entry) -{ - struct hash_entry const *bucket - = table->bucket + table->hasher (entry, table->n_buckets); - struct hash_entry const *cursor; - - if (! (bucket < table->bucket_limit)) - abort (); - - if (bucket->data == NULL) - return NULL; - - for (cursor = bucket; cursor; cursor = cursor->next) - if (table->comparator (entry, cursor->data)) - return cursor->data; - - return NULL; -} - -/* Walking. */ - -/* The functions in this page traverse the hash table and process the - contained entries. For the traversal to work properly, the hash table - should not be resized nor modified while any particular entry is being - processed. In particular, entries should not be added or removed. */ - -/* Return the first data in the table, or NULL if the table is empty. */ - -void * -hash_get_first (const Hash_table *table) -{ - struct hash_entry const *bucket; - - if (table->n_entries == 0) - return NULL; - - for (bucket = table->bucket; ; bucket++) - if (! (bucket < table->bucket_limit)) - abort (); - else if (bucket->data) - return bucket->data; -} - -/* Return the user data for the entry following ENTRY, where ENTRY has been - returned by a previous call to either `hash_get_first' or `hash_get_next'. - Return NULL if there are no more entries. */ - -void * -hash_get_next (const Hash_table *table, const void *entry) -{ - struct hash_entry const *bucket - = table->bucket + table->hasher (entry, table->n_buckets); - struct hash_entry const *cursor; - - if (! (bucket < table->bucket_limit)) - abort (); - - /* Find next entry in the same bucket. */ - for (cursor = bucket; cursor; cursor = cursor->next) - if (cursor->data == entry && cursor->next) - return cursor->next->data; - - /* Find first entry in any subsequent bucket. */ - while (++bucket < table->bucket_limit) - if (bucket->data) - return bucket->data; - - /* None found. */ - return NULL; -} - -/* Fill BUFFER with pointers to active user entries in the hash table, then - return the number of pointers copied. Do not copy more than BUFFER_SIZE - pointers. */ - -size_t -hash_get_entries (const Hash_table *table, void **buffer, - size_t buffer_size) -{ - size_t counter = 0; - struct hash_entry const *bucket; - struct hash_entry const *cursor; - - for (bucket = table->bucket; bucket < table->bucket_limit; bucket++) - { - if (bucket->data) - { - for (cursor = bucket; cursor; cursor = cursor->next) - { - if (counter >= buffer_size) - return counter; - buffer[counter++] = cursor->data; - } - } - } - - return counter; -} - -/* Call a PROCESSOR function for each entry of a hash table, and return the - number of entries for which the processor function returned success. A - pointer to some PROCESSOR_DATA which will be made available to each call to - the processor function. The PROCESSOR accepts two arguments: the first is - the user entry being walked into, the second is the value of PROCESSOR_DATA - as received. The walking continue for as long as the PROCESSOR function - returns nonzero. When it returns zero, the walking is interrupted. */ - -size_t -hash_do_for_each (const Hash_table *table, Hash_processor processor, - void *processor_data) -{ - size_t counter = 0; - struct hash_entry const *bucket; - struct hash_entry const *cursor; - - for (bucket = table->bucket; bucket < table->bucket_limit; bucket++) - { - if (bucket->data) - { - for (cursor = bucket; cursor; cursor = cursor->next) - { - if (!(*processor) (cursor->data, processor_data)) - return counter; - counter++; - } - } - } - - return counter; -} - -/* Allocation and clean-up. */ - -/* Return a hash index for a NUL-terminated STRING between 0 and N_BUCKETS-1. - This is a convenience routine for constructing other hashing functions. */ - -#if USE_DIFF_HASH - -/* About hashings, Paul Eggert writes to me (FP), on 1994-01-01: "Please see - B. J. McKenzie, R. Harries & T. Bell, Selecting a hashing algorithm, - Software--practice & experience 20, 2 (Feb 1990), 209-224. Good hash - algorithms tend to be domain-specific, so what's good for [diffutils'] io.c - may not be good for your application." */ - -size_t -hash_string (const char *string, size_t n_buckets) -{ -# define ROTATE_LEFT(Value, Shift) \ - ((Value) << (Shift) | (Value) >> ((sizeof (size_t) * CHAR_BIT) - (Shift))) -# define HASH_ONE_CHAR(Value, Byte) \ - ((Byte) + ROTATE_LEFT (Value, 7)) - - size_t value = 0; - unsigned char ch; - - for (; (ch = *string); string++) - value = HASH_ONE_CHAR (value, ch); - return value % n_buckets; - -# undef ROTATE_LEFT -# undef HASH_ONE_CHAR -} - -#else /* not USE_DIFF_HASH */ - -/* This one comes from Recode, and performs a bit better than the above as - per a few experiments. It is inspired from a hashing routine found in the - very old Cyber `snoop', itself written in typical Greg Mansfield style. - (By the way, what happened to this excellent man? Is he still alive?) */ - -size_t -hash_string (const char *string, size_t n_buckets) -{ - size_t value = 0; - unsigned char ch; - - for (; (ch = *string); string++) - value = (value * 31 + ch) % n_buckets; - return value; -} - -#endif /* not USE_DIFF_HASH */ - -/* Return true if CANDIDATE is a prime number. CANDIDATE should be an odd - number at least equal to 11. */ - -static bool -is_prime (size_t candidate) -{ - size_t divisor = 3; - size_t square = divisor * divisor; - - while (square < candidate && (candidate % divisor)) - { - divisor++; - square += 4 * divisor; - divisor++; - } - - return (candidate % divisor ? true : false); -} - -/* Round a given CANDIDATE number up to the nearest prime, and return that - prime. Primes lower than 10 are merely skipped. */ - -static size_t -next_prime (size_t candidate) -{ - /* Skip small primes. */ - if (candidate < 10) - candidate = 10; - - /* Make it definitely odd. */ - candidate |= 1; - - while (!is_prime (candidate)) - candidate += 2; - - return candidate; -} - -void -hash_reset_tuning (Hash_tuning *tuning) -{ - *tuning = default_tuning; -} - -/* For the given hash TABLE, check the user supplied tuning structure for - reasonable values, and return true if there is no gross error with it. - Otherwise, definitively reset the TUNING field to some acceptable default - in the hash table (that is, the user loses the right of further modifying - tuning arguments), and return false. */ - -static bool -check_tuning (Hash_table *table) -{ - const Hash_tuning *tuning = table->tuning; - - /* Be a bit stricter than mathematics would require, so that - rounding errors in size calculations do not cause allocations to - fail to grow or shrink as they should. The smallest allocation - is 11 (due to next_prime's algorithm), so an epsilon of 0.1 - should be good enough. */ - float epsilon = 0.1f; - - if (epsilon < tuning->growth_threshold - && tuning->growth_threshold < 1 - epsilon - && 1 + epsilon < tuning->growth_factor - && 0 <= tuning->shrink_threshold - && tuning->shrink_threshold + epsilon < tuning->shrink_factor - && tuning->shrink_factor <= 1 - && tuning->shrink_threshold + epsilon < tuning->growth_threshold) - return true; - - table->tuning = &default_tuning; - return false; -} - -/* Allocate and return a new hash table, or NULL upon failure. The initial - number of buckets is automatically selected so as to _guarantee_ that you - may insert at least CANDIDATE different user entries before any growth of - the hash table size occurs. So, if have a reasonably tight a-priori upper - bound on the number of entries you intend to insert in the hash table, you - may save some table memory and insertion time, by specifying it here. If - the IS_N_BUCKETS field of the TUNING structure is true, the CANDIDATE - argument has its meaning changed to the wanted number of buckets. - - TUNING points to a structure of user-supplied values, in case some fine - tuning is wanted over the default behavior of the hasher. If TUNING is - NULL, the default tuning parameters are used instead. - - The user-supplied HASHER function should be provided. It accepts two - arguments ENTRY and TABLE_SIZE. It computes, by hashing ENTRY contents, a - slot number for that entry which should be in the range 0..TABLE_SIZE-1. - This slot number is then returned. - - The user-supplied COMPARATOR function should be provided. It accepts two - arguments pointing to user data, it then returns true for a pair of entries - that compare equal, or false otherwise. This function is internally called - on entries which are already known to hash to the same bucket index. - - The user-supplied DATA_FREER function, when not NULL, may be later called - with the user data as an argument, just before the entry containing the - data gets freed. This happens from within `hash_free' or `hash_clear'. - You should specify this function only if you want these functions to free - all of your `data' data. This is typically the case when your data is - simply an auxiliary struct that you have malloc'd to aggregate several - values. */ - -Hash_table * -hash_initialize (size_t candidate, const Hash_tuning *tuning, - Hash_hasher hasher, Hash_comparator comparator, - Hash_data_freer data_freer) -{ - Hash_table *table; - - if (hasher == NULL || comparator == NULL) - return NULL; - - table = (Hash_table *) malloc (sizeof *table); - if (table == NULL) - return NULL; - - if (!tuning) - tuning = &default_tuning; - table->tuning = tuning; - if (!check_tuning (table)) - { - /* Fail if the tuning options are invalid. This is the only occasion - when the user gets some feedback about it. Once the table is created, - if the user provides invalid tuning options, we silently revert to - using the defaults, and ignore further request to change the tuning - options. */ - goto fail; - } - - if (!tuning->is_n_buckets) - { - float new_candidate = candidate / tuning->growth_threshold; - if (SIZE_MAX <= new_candidate) - goto fail; - candidate = new_candidate; - } - - if (xalloc_oversized (candidate, sizeof *table->bucket)) - goto fail; - table->n_buckets = next_prime (candidate); - if (xalloc_oversized (table->n_buckets, sizeof *table->bucket)) - goto fail; - - table->bucket - = (struct hash_entry *) calloc (table->n_buckets, sizeof *table->bucket); - table->bucket_limit = table->bucket + table->n_buckets; - table->n_buckets_used = 0; - table->n_entries = 0; - - table->hasher = hasher; - table->comparator = comparator; - table->data_freer = data_freer; - - table->free_entry_list = NULL; -#if USE_OBSTACK - obstack_init (&table->entry_stack); -#endif - return table; - - fail: - free (table); - return NULL; -} - -/* Make all buckets empty, placing any chained entries on the free list. - Apply the user-specified function data_freer (if any) to the datas of any - affected entries. */ - -void -hash_clear (Hash_table *table) -{ - struct hash_entry *bucket; - - for (bucket = table->bucket; bucket < table->bucket_limit; bucket++) - { - if (bucket->data) - { - struct hash_entry *cursor; - struct hash_entry *next; - - /* Free the bucket overflow. */ - for (cursor = bucket->next; cursor; cursor = next) - { - if (table->data_freer) - (*table->data_freer) (cursor->data); - cursor->data = NULL; - - next = cursor->next; - /* Relinking is done one entry at a time, as it is to be expected - that overflows are either rare or short. */ - cursor->next = table->free_entry_list; - table->free_entry_list = cursor; - } - - /* Free the bucket head. */ - if (table->data_freer) - (*table->data_freer) (bucket->data); - bucket->data = NULL; - bucket->next = NULL; - } - } - - table->n_buckets_used = 0; - table->n_entries = 0; -} - -/* Reclaim all storage associated with a hash table. If a data_freer - function has been supplied by the user when the hash table was created, - this function applies it to the data of each entry before freeing that - entry. */ - -void -hash_free (Hash_table *table) -{ - struct hash_entry *bucket; - struct hash_entry *cursor; - struct hash_entry *next; - - /* Call the user data_freer function. */ - if (table->data_freer && table->n_entries) - { - for (bucket = table->bucket; bucket < table->bucket_limit; bucket++) - { - if (bucket->data) - { - for (cursor = bucket; cursor; cursor = cursor->next) - { - (*table->data_freer) (cursor->data); - } - } - } - } - -#if USE_OBSTACK - - obstack_free (&table->entry_stack, NULL); - -#else - - /* Free all bucket overflowed entries. */ - for (bucket = table->bucket; bucket < table->bucket_limit; bucket++) - { - for (cursor = bucket->next; cursor; cursor = next) - { - next = cursor->next; - free (cursor); - } - } - - /* Also reclaim the internal list of previously freed entries. */ - for (cursor = table->free_entry_list; cursor; cursor = next) - { - next = cursor->next; - free (cursor); - } - -#endif - - /* Free the remainder of the hash table structure. */ - free (table->bucket); - free (table); -} - -/* Insertion and deletion. */ - -/* Get a new hash entry for a bucket overflow, possibly by reclying a - previously freed one. If this is not possible, allocate a new one. */ - -static struct hash_entry * -allocate_entry (Hash_table *table) -{ - struct hash_entry *new_; - - if (table->free_entry_list) - { - new_ = table->free_entry_list; - table->free_entry_list = new_->next; - } - else - { -#if USE_OBSTACK - new_ = (struct hash_entry *) obstack_alloc (&table->entry_stack, - sizeof *new_); -#else - new_ = (struct hash_entry *) malloc (sizeof *new_); -#endif - } - - return new_; -} - -/* Free a hash entry which was part of some bucket overflow, - saving it for later recycling. */ - -static void -free_entry (Hash_table *table, struct hash_entry *entry) -{ - entry->data = NULL; - entry->next = table->free_entry_list; - table->free_entry_list = entry; -} - -/* This private function is used to help with insertion and deletion. When - ENTRY matches an entry in the table, return a pointer to the corresponding - user data and set *BUCKET_HEAD to the head of the selected bucket. - Otherwise, return NULL. When DELETE is true and ENTRY matches an entry in - the table, unlink the matching entry. */ - -static void * -hash_find_entry (Hash_table *table, const void *entry, - struct hash_entry **bucket_head, bool delete_) -{ - struct hash_entry *bucket - = table->bucket + table->hasher (entry, table->n_buckets); - struct hash_entry *cursor; - - if (! (bucket < table->bucket_limit)) - abort (); - - *bucket_head = bucket; - - /* Test for empty bucket. */ - if (bucket->data == NULL) - return NULL; - - /* See if the entry is the first in the bucket. */ - if ((*table->comparator) (entry, bucket->data)) - { - void *data = bucket->data; - - if (delete_) - { - if (bucket->next) - { - struct hash_entry *next = bucket->next; - - /* Bump the first overflow entry into the bucket head, then save - the previous first overflow entry for later recycling. */ - *bucket = *next; - free_entry (table, next); - } - else - { - bucket->data = NULL; - } - } - - return data; - } - - /* Scan the bucket overflow. */ - for (cursor = bucket; cursor->next; cursor = cursor->next) - { - if ((*table->comparator) (entry, cursor->next->data)) - { - void *data = cursor->next->data; - - if (delete_) - { - struct hash_entry *next = cursor->next; - - /* Unlink the entry to delete, then save the freed entry for later - recycling. */ - cursor->next = next->next; - free_entry (table, next); - } - - return data; - } - } - - /* No entry found. */ - return NULL; -} - -/* For an already existing hash table, change the number of buckets through - specifying CANDIDATE. The contents of the hash table are preserved. The - new number of buckets is automatically selected so as to _guarantee_ that - the table may receive at least CANDIDATE different user entries, including - those already in the table, before any other growth of the hash table size - occurs. If TUNING->IS_N_BUCKETS is true, then CANDIDATE specifies the - exact number of buckets desired. */ - -bool -hash_rehash (Hash_table *table, size_t candidate) -{ - Hash_table *new_table; - struct hash_entry *bucket; - struct hash_entry *cursor; - struct hash_entry *next; - - new_table = hash_initialize (candidate, table->tuning, table->hasher, - table->comparator, table->data_freer); - if (new_table == NULL) - return false; - - /* Merely reuse the extra old space into the new table. */ -#if USE_OBSTACK - obstack_free (&new_table->entry_stack, NULL); - new_table->entry_stack = table->entry_stack; -#endif - new_table->free_entry_list = table->free_entry_list; - - for (bucket = table->bucket; bucket < table->bucket_limit; bucket++) - if (bucket->data) - for (cursor = bucket; cursor; cursor = next) - { - void *data = cursor->data; - struct hash_entry *new_bucket - = (new_table->bucket - + new_table->hasher (data, new_table->n_buckets)); - - if (! (new_bucket < new_table->bucket_limit)) - abort (); - - next = cursor->next; - - if (new_bucket->data) - { - if (cursor == bucket) - { - /* Allocate or recycle an entry, when moving from a bucket - header into a bucket overflow. */ - struct hash_entry *new_entry = allocate_entry (new_table); - - if (new_entry == NULL) - { - hash_free (new_table); - return false; - } - - new_entry->data = data; - new_entry->next = new_bucket->next; - new_bucket->next = new_entry; - } - else - { - /* Merely relink an existing entry, when moving from a - bucket overflow into a bucket overflow. */ - cursor->next = new_bucket->next; - new_bucket->next = cursor; - } - } - else - { - /* Free an existing entry, when moving from a bucket - overflow into a bucket header. Also take care of the - simple case of moving from a bucket header into a bucket - header. */ - new_bucket->data = data; - new_table->n_buckets_used++; - if (cursor != bucket) - free_entry (new_table, cursor); - } - } - - free (table->bucket); - table->bucket = new_table->bucket; - table->bucket_limit = new_table->bucket_limit; - table->n_buckets = new_table->n_buckets; - table->n_buckets_used = new_table->n_buckets_used; - table->free_entry_list = new_table->free_entry_list; - /* table->n_entries already holds its value. */ -#if USE_OBSTACK - table->entry_stack = new_table->entry_stack; -#endif - free (new_table); - - return true; -} - -/* If ENTRY matches an entry already in the hash table, return the pointer - to the entry from the table. Otherwise, insert ENTRY and return ENTRY. - Return NULL if the storage required for insertion cannot be allocated. */ - -void * -hash_insert (Hash_table *table, const void *entry) -{ - void *data; - struct hash_entry *bucket; - - /* The caller cannot insert a NULL entry. */ - if (! entry) - abort (); - - /* If there's a matching entry already in the table, return that. */ - if ((data = hash_find_entry (table, entry, &bucket, false)) != NULL) - return data; - - /* ENTRY is not matched, it should be inserted. */ - - if (bucket->data) - { - struct hash_entry *new_entry = allocate_entry (table); - - if (new_entry == NULL) - return NULL; - - /* Add ENTRY in the overflow of the bucket. */ - - new_entry->data = (void *) entry; - new_entry->next = bucket->next; - bucket->next = new_entry; - table->n_entries++; - return (void *) entry; - } - - /* Add ENTRY right in the bucket head. */ - - bucket->data = (void *) entry; - table->n_entries++; - table->n_buckets_used++; - - /* If the growth threshold of the buckets in use has been reached, increase - the table size and rehash. There's no point in checking the number of - entries: if the hashing function is ill-conditioned, rehashing is not - likely to improve it. */ - - if (table->n_buckets_used - > table->tuning->growth_threshold * table->n_buckets) - { - /* Check more fully, before starting real work. If tuning arguments - became invalid, the second check will rely on proper defaults. */ - check_tuning (table); - if (table->n_buckets_used - > table->tuning->growth_threshold * table->n_buckets) - { - const Hash_tuning *tuning = table->tuning; - float candidate = - (tuning->is_n_buckets - ? (table->n_buckets * tuning->growth_factor) - : (table->n_buckets * tuning->growth_factor - * tuning->growth_threshold)); - - if (SIZE_MAX <= candidate) - return NULL; - - /* If the rehash fails, arrange to return NULL. */ - if (!hash_rehash (table, candidate)) - entry = NULL; - } - } - - return (void *) entry; -} - -/* If ENTRY is already in the table, remove it and return the just-deleted - data (the user may want to deallocate its storage). If ENTRY is not in the - table, don't modify the table and return NULL. */ - -void * -hash_delete (Hash_table *table, const void *entry) -{ - void *data; - struct hash_entry *bucket; - - data = hash_find_entry (table, entry, &bucket, true); - if (!data) - return NULL; - - table->n_entries--; - if (!bucket->data) - { - table->n_buckets_used--; - - /* If the shrink threshold of the buckets in use has been reached, - rehash into a smaller table. */ - - if (table->n_buckets_used - < table->tuning->shrink_threshold * table->n_buckets) - { - /* Check more fully, before starting real work. If tuning arguments - became invalid, the second check will rely on proper defaults. */ - check_tuning (table); - if (table->n_buckets_used - < table->tuning->shrink_threshold * table->n_buckets) - { - const Hash_tuning *tuning = table->tuning; - size_t candidate = - (tuning->is_n_buckets - ? table->n_buckets * tuning->shrink_factor - : (table->n_buckets * tuning->shrink_factor - * tuning->growth_threshold)); - - hash_rehash (table, candidate); - } - } - } - - return data; -} - -/* Testing. */ - -#if TESTING - -void -hash_print (const Hash_table *table) -{ - struct hash_entry const *bucket; - - for (bucket = table->bucket; bucket < table->bucket_limit; bucket++) - { - struct hash_entry *cursor; - - if (bucket) - printf ("%lu:\n", (unsigned long int) (bucket - table->bucket)); - - for (cursor = bucket; cursor; cursor = cursor->next) - { - char const *s = cursor->data; - /* FIXME */ - if (s) - printf (" %s\n", s); - } - } -} - -#endif /* TESTING */ diff --git a/src/hash.h b/src/hash.h deleted file mode 100644 index ab63a86..0000000 --- a/src/hash.h +++ /dev/null @@ -1,88 +0,0 @@ -/* hash - hashing table processing. - Copyright (C) 1998, 1999, 2001, 2003 Free Software Foundation, Inc. - Written by Jim Meyering , 1998. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software Foundation, - Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ - -/* A generic hash table package. */ - -/* Make sure USE_OBSTACK is defined to 1 if you want the allocator to use - obstacks instead of malloc, and recompile `hash.c' with same setting. */ - -#ifndef HASH_H_ -# define HASH_H_ - -# include -# include - -typedef size_t (*Hash_hasher) (const void *, size_t); -typedef bool (*Hash_comparator) (const void *, const void *); -typedef void (*Hash_data_freer) (void *); -typedef bool (*Hash_processor) (void *, void *); - -struct hash_entry - { - void *data; - struct hash_entry *next; - }; - -struct hash_tuning - { - /* This structure is mainly used for `hash_initialize', see the block - documentation of `hash_reset_tuning' for more complete comments. */ - - float shrink_threshold; /* ratio of used buckets to trigger a shrink */ - float shrink_factor; /* ratio of new smaller size to original size */ - float growth_threshold; /* ratio of used buckets to trigger a growth */ - float growth_factor; /* ratio of new bigger size to original size */ - bool is_n_buckets; /* if CANDIDATE really means table size */ - }; - -typedef struct hash_tuning Hash_tuning; - -struct hash_table; - -typedef struct hash_table Hash_table; - -/* Information and lookup. */ -size_t hash_get_n_buckets (const Hash_table *); -size_t hash_get_n_buckets_used (const Hash_table *); -size_t hash_get_n_entries (const Hash_table *); -size_t hash_get_max_bucket_length (const Hash_table *); -bool hash_table_ok (const Hash_table *); -void hash_print_statistics (const Hash_table *, FILE *); -void *hash_lookup (const Hash_table *, const void *); - -/* Walking. */ -void *hash_get_first (const Hash_table *); -void *hash_get_next (const Hash_table *, const void *); -size_t hash_get_entries (const Hash_table *, void **, size_t); -size_t hash_do_for_each (const Hash_table *, Hash_processor, void *); - -/* Allocation and clean-up. */ -size_t hash_string (const char *, size_t); -void hash_reset_tuning (Hash_tuning *); -Hash_table *hash_initialize (size_t, const Hash_tuning *, - Hash_hasher, Hash_comparator, - Hash_data_freer); -void hash_clear (Hash_table *); -void hash_free (Hash_table *); - -/* Insertion and deletion. */ -bool hash_rehash (Hash_table *, size_t); -void *hash_insert (Hash_table *, const void *); -void *hash_delete (Hash_table *, const void *); - -#endif diff --git a/src/localcharset.c b/src/localcharset.c deleted file mode 100644 index 564b2d7..0000000 --- a/src/localcharset.c +++ /dev/null @@ -1,263 +0,0 @@ -/* Determine a canonical name for the current locale's character encoding. - - Copyright (C) 2000 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify it - under the terms of the GNU Library General Public License as published - by the Free Software Foundation; either version 2, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, - USA. */ - -/* Written by Bruno Haible . */ - -#ifdef HAVE_CONFIG_H -# include -#endif - -#if HAVE_STDDEF_H -# include -#endif - -#include -#if HAVE_STRING_H -# include -#else -# include -#endif -#if HAVE_STDLIB_H -# include -#endif - -#if defined _WIN32 || defined __WIN32__ -# undef WIN32 /* avoid warning on mingw32 */ -# define WIN32 -#endif - -#ifndef WIN32 -# if HAVE_LANGINFO_CODESET -# include -# else -# if HAVE_SETLOCALE -# include -# endif -# endif -#else /* WIN32 */ -# define WIN32_LEAN_AND_MEAN -# include -#endif - -#ifndef DIRECTORY_SEPARATOR -# define DIRECTORY_SEPARATOR '/' -#endif - -#ifndef ISSLASH -# define ISSLASH(C) ((C) == DIRECTORY_SEPARATOR) -#endif - -/* The following static variable is declared 'volatile' to avoid a - possible multithread problem in the function get_charset_aliases. If we - are running in a threaded environment, and if two threads initialize - 'charset_aliases' simultaneously, both will produce the same value, - and everything will be ok if the two assignments to 'charset_aliases' - are atomic. But I don't know what will happen if the two assignments mix. */ -/* Pointer to the contents of the charset.alias file, if it has already been - read, else NULL. Its format is: - ALIAS_1 '\0' CANONICAL_1 '\0' ... ALIAS_n '\0' CANONICAL_n '\0' '\0' */ -static char * volatile charset_aliases; - -/* Return a pointer to the contents of the charset.alias file. */ -static const char * -get_charset_aliases (void) -{ - static char empty[1] = ""; - char *cp; - - cp = charset_aliases; - if (cp == NULL) - { -#ifndef WIN32 - FILE *fp; - const char *dir = LIBDIR; - const char *base = "charset.alias"; - char *file_name; - - /* Concatenate dir and base into freshly allocated file_name. */ - { - size_t dir_len = strlen (dir); - size_t base_len = strlen (base); - int add_slash = (dir_len > 0 && !ISSLASH (dir[dir_len - 1])); - file_name = (char *) malloc (dir_len + add_slash + base_len + 1); - if (file_name != NULL) - { - memcpy (file_name, dir, dir_len); - if (add_slash) - file_name[dir_len] = DIRECTORY_SEPARATOR; - memcpy (file_name + dir_len + add_slash, base, base_len + 1); - } - } - - if (file_name == NULL || (fp = fopen (file_name, "r")) == NULL) - /* Out of memory or file not found, treat it as empty. */ - cp = empty; - else - { - /* Parse the file's contents. */ - int c; - char buf1[50+1]; - char buf2[50+1]; - char *res_ptr = NULL; - size_t res_size = 0; - size_t l1, l2; - - for (;;) - { - c = getc (fp); - if (c == EOF) - break; - if (c == '\n' || c == ' ' || c == '\t') - continue; - if (c == '#') - { - /* Skip comment, to end of line. */ - do - c = getc (fp); - while (!(c == EOF || c == '\n')); - if (c == EOF) - break; - continue; - } - ungetc (c, fp); - if (fscanf(fp, "%50s %50s", buf1, buf2) < 2) - break; - l1 = strlen (buf1); - l2 = strlen (buf2); - if (res_size == 0) - { - res_size = l1 + 1 + l2 + 1; - res_ptr = (char *) malloc (res_size + 1); - } - else - { - res_size += l1 + 1 + l2 + 1; - res_ptr = (char *) realloc (res_ptr, res_size + 1); - } - if (res_ptr == NULL) - { - /* Out of memory. */ - res_size = 0; - break; - } - strcpy (res_ptr + res_size - (l2 + 1) - (l1 + 1), buf1); - strcpy (res_ptr + res_size - (l2 + 1), buf2); - } - fclose (fp); - if (res_size == 0) - cp = empty; - else - { - *(res_ptr + res_size) = '\0'; - cp = res_ptr; - } - } - - if (file_name != NULL) - free (file_name); - -#else /* WIN32 */ - - /* To avoid the troubles of installing a separate file in the same - directory as the DLL and of retrieving the DLL's directory at - runtime, simply inline the aliases here. */ - - cp = "CP936" "\0" "GBK" "\0" - "CP1361" "\0" "JOHAB" "\0"; -#endif - - charset_aliases = cp; - } - - return cp; -} - -/* Determine the current locale's character encoding, and canonicalize it - into one of the canonical names listed in config.charset. - The result must not be freed; it is statically allocated. - If the canonical name cannot be determined, the result is a non-canonical - name or NULL. */ - -#ifdef STATIC -STATIC -#endif -const char * -locale_charset (void) -{ - const char *codeset; - const char *aliases; - -#ifndef WIN32 - -# if HAVE_LANGINFO_CODESET - - /* Most systems support nl_langinfo (CODESET) nowadays. */ - codeset = nl_langinfo (CODESET); - -# else - - /* On old systems which lack it, use setlocale and getenv. */ - const char *locale = NULL; - -# if HAVE_SETLOCALE - locale = setlocale (LC_CTYPE, NULL); -# endif - if (locale == NULL || locale[0] == '\0') - { - locale = getenv ("LC_ALL"); - if (locale == NULL || locale[0] == '\0') - { - locale = getenv ("LC_CTYPE"); - if (locale == NULL || locale[0] == '\0') - locale = getenv ("LANG"); - } - } - - /* On some old systems, one used to set locale = "iso8859_1". On others, - you set it to "language_COUNTRY.charset". In any case, we resolve it - through the charset.alias file. */ - codeset = locale; - -# endif - -#else /* WIN32 */ - - static char buf[2 + 10 + 1]; - - /* Win32 has a function returning the locale's codepage as a number. */ - sprintf (buf, "CP%u", GetACP ()); - codeset = buf; - -#endif - - if (codeset != NULL && codeset[0] != '\0') - { - /* Resolve alias. */ - for (aliases = get_charset_aliases (); - *aliases != '\0'; - aliases += strlen (aliases) + 1, aliases += strlen (aliases) + 1) - if (!strcmp (codeset, aliases)) - { - codeset = aliases + strlen (aliases) + 1; - break; - } - } - - return codeset; -} diff --git a/src/main.c b/src/main.c index 8f99ac4..5874cb1 100644 --- a/src/main.c +++ b/src/main.c @@ -19,36 +19,13 @@ #include "common.h" #include - #include #include - -#include "getopt.h" - -#if HAVE_UNISTD_H -# include -#endif - -#if HAVE_STRUCT_UTIMBUF -# if HAVE_UTIME_H -# include -# endif -#else - -struct utimbuf -{ - time_t actime; - time_t modtime; -}; - -#endif - +#include +#include #include -#if OS2 -# include -# include -#endif +#include "getopt.h" /* Variables. */ @@ -173,7 +150,7 @@ static jmp_buf signal_label; /* where to jump when signal received */ #endif static bool interrupted = 0; /* set when some signal has been received */ -static RETSIGTYPE +static void signal_handler (int number) { interrupted = 1; @@ -184,6 +161,8 @@ signal_handler (int number) | Prepare to handle signals, intercept willingful requests for stopping. | `------------------------------------------------------------------------*/ +/* FIXME: Use sigaction */ + static void setup_signals (void) { @@ -379,7 +358,7 @@ main (int argc, char *const *argv) int option_char; /* option character */ bool success = true; /* reversibility of all recodings */ - static bool (*processor) PARAMS ((RECODE_TASK)); + static bool (*processor) (RECODE_TASK); struct recode_outer outer_option; struct recode_request request_option; struct recode_task task_option; diff --git a/src/outer.c b/src/outer.c index 77bc183..360c747 100644 --- a/src/outer.c +++ b/src/outer.c @@ -228,7 +228,7 @@ declare_iconv (RECODE_OUTER outer, const char *name, const char *iconv_name) `------------------------------------------------*/ bool register_explode_data - PARAMS ((RECODE_OUTER, const char *, const unsigned short *)); + (RECODE_OUTER, const char *, const unsigned short *); bool register_explode_data (RECODE_OUTER outer, @@ -435,8 +435,8 @@ estimate_single_cost (RECODE_OUTER outer, RECODE_SINGLE single) `----------------------------------------*/ #include "decsteps.h" -bool module_iconv PARAMS ((struct recode_outer *)); -void delmodule_iconv PARAMS ((struct recode_outer *)); +bool module_iconv (struct recode_outer *); +void delmodule_iconv (struct recode_outer *); static bool register_all_modules (RECODE_OUTER outer) diff --git a/src/quotearg.c b/src/quotearg.c deleted file mode 100644 index 0bef8cb..0000000 --- a/src/quotearg.c +++ /dev/null @@ -1,403 +0,0 @@ -/* quotearg.c - quote arguments for output - Copyright (C) 1998, 1999 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software Foundation, - Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -/* Written by Paul Eggert */ - -/* FIXME: Multibyte characters are not supported yet. */ - -#if HAVE_CONFIG_H -# include -#endif - -#include -#include -#include - -#include -#if defined (STDC_HEADERS) || (!defined (isascii) && !defined (HAVE_ISASCII)) -# define ISASCII(c) 1 -#else -# define ISASCII(c) isascii (c) -#endif -#ifdef isgraph -# define ISGRAPH(c) (ISASCII (c) && isgraph (c)) -#else -# define ISGRAPH(c) (ISASCII (c) && isprint (c) && !isspace (c)) -#endif - -#if ENABLE_NLS -# include -# define _(text) gettext (text) -#else -# define _(text) text -#endif - -#if HAVE_LIMITS_H -# include -#endif -#ifndef CHAR_BIT -# define CHAR_BIT 8 -#endif -#ifndef UCHAR_MAX -# define UCHAR_MAX ((unsigned char) -1) -#endif - -#if HAVE_STDLIB_H -# include -#endif - -#if HAVE_STRING_H -# include -#endif - -#define INT_BITS (sizeof (int) * CHAR_BIT) - -struct quoting_options -{ - /* Basic quoting style. */ - enum quoting_style style; - - /* Quote the chararacters indicated by this bit vector even if the - quoting style would not normally require them to be quoted. */ - int quote_these_too[((UCHAR_MAX + 1) / INT_BITS - + ((UCHAR_MAX + 1) % INT_BITS != 0))]; -}; - -/* Names of quoting styles. */ -char const *const quoting_style_args[] = -{ - "literal", - "shell", - "shell-always", - "c", - "escape", - "locale", - 0 -}; - -/* Correspondances to quoting style names. */ -enum quoting_style const quoting_style_vals[] = -{ - literal_quoting_style, - shell_quoting_style, - shell_always_quoting_style, - c_quoting_style, - escape_quoting_style, - locale_quoting_style -}; - -/* The default quoting options. */ -static struct quoting_options default_quoting_options; - -/* Allocate a new set of quoting options, with contents initially identical - to O if O is not null, or to the default if O is null. - It is the caller's responsibility to free the result. */ -struct quoting_options * -clone_quoting_options (struct quoting_options *o) -{ - struct quoting_options *p - = (struct quoting_options *) xmalloc (sizeof (struct quoting_options)); - *p = *(o ? o : &default_quoting_options); - return p; -} - -/* Get the value of O's quoting style. If O is null, use the default. */ -enum quoting_style -get_quoting_style (struct quoting_options *o) -{ - return (o ? o : &default_quoting_options)->style; -} - -/* In O (or in the default if O is null), - set the value of the quoting style to S. */ -void -set_quoting_style (struct quoting_options *o, enum quoting_style s) -{ - (o ? o : &default_quoting_options)->style = s; -} - -/* In O (or in the default if O is null), - set the value of the quoting options for character C to I. - Return the old value. Currently, the only values defined for I are - 0 (the default) and 1 (which means to quote the character even if - it would not otherwise be quoted). */ -int -set_char_quoting (struct quoting_options *o, char c, int i) -{ - unsigned char uc = c; - int *p = (o ? o : &default_quoting_options)->quote_these_too + uc / INT_BITS; - int shift = uc % INT_BITS; - int r = (*p >> shift) & 1; - *p ^= ((i & 1) ^ r) << shift; - return r; -} - -/* Place into buffer BUFFER (of size BUFFERSIZE) a quoted version of - argument ARG (of size ARGSIZE), using O to control quoting. - If O is null, use the default. - Terminate the output with a null character, and return the written - size of the output, not counting the terminating null. - If BUFFERSIZE is too small to store the output string, return the - value that would have been returned had BUFFERSIZE been large enough. - If ARGSIZE is -1, use the string length of the argument for ARGSIZE. */ -size_t -quotearg_buffer (char *buffer, size_t buffersize, - char const *arg, size_t argsize, - struct quoting_options const *o) -{ - unsigned char c; - size_t i; - size_t len = 0; - char const *quote_string; - size_t quote_string_len; - struct quoting_options const *p = o ? o : &default_quoting_options; - enum quoting_style quoting_style = p->style; -#define STORE(c) \ - do \ - { \ - if (len < buffersize) \ - buffer[len] = (c); \ - len++; \ - } \ - while (0) - - switch (quoting_style) - { - case shell_quoting_style: - if (! (argsize == (size_t) -1 ? arg[0] == '\0' : argsize == 0)) - { - switch (arg[0]) - { - case '#': case '~': - break; - - default: - for (i = 0; ; i++) - { - if (argsize == (size_t) -1 ? arg[i] == '\0' : i == argsize) - goto done; - - c = arg[i]; - - switch (c) - { - case '\t': case '\n': case ' ': - case '!': /* special in csh */ - case '"': case '$': case '&': case '\'': - case '(': case ')': case '*': case ';': - case '<': case '>': case '?': case '[': case '\\': - case '^': /* special in old /bin/sh, e.g. SunOS 4.1.4 */ - case '`': case '|': - goto needs_quoting; - } - - if (p->quote_these_too[c / INT_BITS] & (1 << (c % INT_BITS))) - goto needs_quoting; - - STORE (c); - } - needs_quoting:; - - len = 0; - break; - } - } - /* Fall through. */ - - case shell_always_quoting_style: - STORE ('\''); - quote_string = "'"; - quote_string_len = 1; - break; - - case c_quoting_style: - STORE ('"'); - quote_string = "\""; - quote_string_len = 1; - break; - - case locale_quoting_style: - for (quote_string = _("`"); *quote_string; quote_string++) - STORE (*quote_string); - quote_string = _("'"); - quote_string_len = strlen (quote_string); - break; - - default: - quote_string = 0; - quote_string_len = 0; - break; - } - - for (i = 0; ! (argsize == (size_t) -1 ? arg[i] == '\0' : i == argsize); i++) - { - c = arg[i]; - - switch (quoting_style) - { - case literal_quoting_style: - break; - - case shell_quoting_style: - case shell_always_quoting_style: - if (c == '\'') - { - STORE ('\''); - STORE ('\\'); - STORE ('\''); - } - break; - - case c_quoting_style: - case escape_quoting_style: - case locale_quoting_style: - switch (c) - { - case '?': /* Do not generate trigraphs. */ - case '\\': goto store_escape; - /* Not all C compilers know what \a means. */ - case 7 : c = 'a'; goto store_escape; - case '\b': c = 'b'; goto store_escape; - case '\f': c = 'f'; goto store_escape; - case '\n': c = 'n'; goto store_escape; - case '\r': c = 'r'; goto store_escape; - case '\t': c = 't'; goto store_escape; - case '\v': c = 'v'; goto store_escape; - - case ' ': break; - - default: - if (quote_string_len - && strncmp (arg + i, quote_string, quote_string_len) == 0) - goto store_escape; - if (!ISGRAPH (c)) - { - STORE ('\\'); - STORE ('0' + (c >> 6)); - STORE ('0' + ((c >> 3) & 7)); - c = '0' + (c & 7); - goto store_c; - } - break; - } - - if (! (p->quote_these_too[c / INT_BITS] & (1 << (c % INT_BITS)))) - goto store_c; - - store_escape: - STORE ('\\'); - } - - store_c: - STORE (c); - } - - if (quote_string) - for (; *quote_string; quote_string++) - STORE (*quote_string); - - done: - if (len < buffersize) - buffer[len] = '\0'; - return len; -} - -/* Use storage slot N to return a quoted version of the string ARG. - OPTIONS specifies the quoting options. - The returned value points to static storage that can be - reused by the next call to this function with the same value of N. - N must be nonnegative. N is deliberately declared with type `int' - to allow for future extensions (using negative values). */ -static char * -quotearg_n_options (int n, char const *arg, - struct quoting_options const *options) -{ - static unsigned int nslots; - static struct slotvec - { - size_t size; - char *val; - } *slotvec; - - if (nslots <= n) - { - int n1 = n + 1; - size_t s = n1 * sizeof (struct slotvec); - if (! (0 < n1 && n1 == s / sizeof (struct slotvec))) - abort (); - slotvec = (struct slotvec *) xrealloc (slotvec, s); - memset (slotvec + nslots, 0, (n1 - nslots) * sizeof (struct slotvec)); - nslots = n; - } - - { - size_t size = slotvec[n].size; - char *val = slotvec[n].val; - size_t qsize = quotearg_buffer (val, size, arg, (size_t) -1, options); - - if (size <= qsize) - { - slotvec[n].size = size = qsize + 1; - slotvec[n].val = val = (char *) xrealloc (val, size); - quotearg_buffer (val, size, arg, (size_t) -1, options); - } - - return val; - } -} - -char * -quotearg_n (unsigned int n, char const *arg) -{ - return quotearg_n_options (n, arg, &default_quoting_options); -} - -char * -quotearg (char const *arg) -{ - return quotearg_n (0, arg); -} - -char * -quotearg_n_style (unsigned int n, enum quoting_style s, char const *arg) -{ - struct quoting_options o; - o.style = s; - memset (o.quote_these_too, 0, sizeof o.quote_these_too); - return quotearg_n_options (n, arg, &o); -} - -char * -quotearg_style (enum quoting_style s, char const *arg) -{ - return quotearg_n_style (0, s, arg); -} - -char * -quotearg_char (char const *arg, char ch) -{ - struct quoting_options options; - options = default_quoting_options; - set_char_quoting (&options, ch, 1); - return quotearg_n_options (0, arg, &options); -} - -char * -quotearg_colon (char const *arg) -{ - return quotearg_char (arg, ':'); -} diff --git a/src/quotearg.h b/src/quotearg.h deleted file mode 100644 index 2a600e7..0000000 --- a/src/quotearg.h +++ /dev/null @@ -1,109 +0,0 @@ -/* quotearg.h - quote arguments for output - Copyright (C) 1998, 1999 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software Foundation, - Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -/* Written by Paul Eggert */ - -/* Basic quoting styles. */ -enum quoting_style - { - literal_quoting_style, /* --quoting-style=literal */ - shell_quoting_style, /* --quoting-style=shell */ - shell_always_quoting_style, /* --quoting-style=shell-always */ - c_quoting_style, /* --quoting-style=c */ - escape_quoting_style, /* --quoting-style=escape */ - locale_quoting_style /* --quoting-style=locale */ - }; - -/* For now, --quoting-style=literal is the default, but this may change. */ -#ifndef DEFAULT_QUOTING_STYLE -# define DEFAULT_QUOTING_STYLE literal_quoting_style -#endif - -/* Names of quoting styles and their corresponding values. */ -extern char const *const quoting_style_args[]; -extern enum quoting_style const quoting_style_vals[]; - -struct quoting_options; - -#ifndef PARAMS -# if defined PROTOTYPES || defined __STDC__ -# define PARAMS(Args) Args -# else -# define PARAMS(Args) () -# endif -#endif - -/* The functions listed below set and use a hidden variable - that contains the default quoting style options. */ - -/* Allocate a new set of quoting options, with contents initially identical - to O if O is not null, or to the default if O is null. - It is the caller's responsibility to free the result. */ -struct quoting_options *clone_quoting_options - PARAMS ((struct quoting_options *o)); - -/* Get the value of O's quoting style. If O is null, use the default. */ -enum quoting_style get_quoting_style PARAMS ((struct quoting_options *o)); - -/* In O (or in the default if O is null), - set the value of the quoting style to S. */ -void set_quoting_style PARAMS ((struct quoting_options *o, - enum quoting_style s)); - -/* In O (or in the default if O is null), - set the value of the quoting options for character C to I. - Return the old value. Currently, the only values defined for I are - 0 (the default) and 1 (which means to quote the character even if - it would not otherwise be quoted). */ -int set_char_quoting PARAMS ((struct quoting_options *o, char c, int i)); - -/* Place into buffer BUFFER (of size BUFFERSIZE) a quoted version of - argument ARG (of size ARGSIZE), using O to control quoting. - If O is null, use the default. - Terminate the output with a null character, and return the written - size of the output, not counting the terminating null. - If BUFFERSIZE is too small to store the output string, return the - value that would have been returned had BUFFERSIZE been large enough. - If ARGSIZE is -1, use the string length of the argument for ARGSIZE. */ -size_t quotearg_buffer PARAMS ((char *buffer, size_t buffersize, - char const *arg, size_t argsize, - struct quoting_options const *o)); - -/* Use storage slot N to return a quoted version of the string ARG. - Use the default quoting options. - The returned value points to static storage that can be - reused by the next call to this function with the same value of N. - N must be nonnegative. */ -char *quotearg_n PARAMS ((unsigned int n, char const *arg)); - -/* Equivalent to quotearg_n (0, ARG). */ -char *quotearg PARAMS ((char const *arg)); - -/* Use style S and storage slot N to return a quoted version of the string ARG. - This is like quotearg_n (N, ARG), except that it uses S with no other - options to specify the quoting method. */ -char *quotearg_n_style PARAMS ((unsigned int n, enum quoting_style s, - char const *arg)); - -/* Equivalent to quotearg_n_style (0, S, ARG). */ -char *quotearg_style PARAMS ((enum quoting_style s, char const *arg)); - -/* Like quotearg (ARG), except also quote any instances of CH. */ -char *quotearg_char PARAMS ((char const *arg, char ch)); - -/* Equivalent to quotearg_char (ARG, ':'). */ -char *quotearg_colon PARAMS ((char const *arg)); diff --git a/src/recode.c b/src/recode.c index 776451b..ccd1103 100644 --- a/src/recode.c +++ b/src/recode.c @@ -22,14 +22,7 @@ /* Global declarations and definitions. */ #include - -#if HAVE_UNISTD_H -# include -#endif - -#if WITH_DMALLOC -# include -#endif +#include #include "hash.h" @@ -37,70 +30,29 @@ extern const char *program_name; /* Error handling. */ -#if HAVE_VPRINTF || HAVE_DOPRNT -# if __STDC__ -# include -# define VA_START(args, lastarg) va_start(args, lastarg) -# else -# include -# define VA_START(args, lastarg) va_start(args) -# endif -#else -# define va_alist a1, a2, a3, a4, a5, a6, a7, a8 -# define va_dcl char *a1, *a2, *a3, *a4, *a5, *a6, *a7, *a8; -#endif +#include void -#if defined(VA_START) && __STDC__ recode_error (RECODE_OUTER outer, const char *format, ...) -#else -recode_error (outer, format, va_alist) - RECODE_OUTER outer; - const char *format; - va_dcl -#endif { -#ifdef VA_START va_list args; - VA_START (args, format); -# if HAVE_VPRINTF + va_start (args, format); vfprintf (stderr, format, args); -# else - _doprnt (format, args, stderr); -# endif va_end (args); -#else - fprintf (stderr, format, a1, a2, a3, a4, a5, a6, a7, a8); -#endif putc ('\n', stderr); fflush (stderr); } void -#if defined(VA_START) && __STDC__ recode_perror (RECODE_OUTER outer, const char *format, ...) -#else -recode_perror (outer, format, va_alist) - RECODE_OUTER outer; - const char *format; - va_dcl -#endif { int saved_errno = errno; -#ifdef VA_START va_list args; - VA_START (args, format); -# if HAVE_VPRINTF + va_start (args, format); vfprintf (stderr, format, args); -# else - _doprnt (format, args, stderr); -# endif va_end (args); -#else - fprintf (stderr, format, a1, a2, a3, a4, a5, a6, a7, a8); -#endif fprintf (stderr, ": %s\n", strerror (saved_errno)); fflush (stderr); } diff --git a/src/recode.h b/src/recode.h index 352ccf0..d774a29 100644 --- a/src/recode.h +++ b/src/recode.h @@ -17,14 +17,6 @@ If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#ifndef PARAMS -# if __STDC__ -# define PARAMS(Args) Args -# else -# define PARAMS(Args) () -# endif -#endif - /* Published (opaque) typedefs. */ typedef struct recode_outer * RECODE_OUTER; typedef struct recode_request * RECODE_REQUEST; @@ -65,56 +57,56 @@ extern "C" { #define RECODE_AUTO_ABORT_FLAG 1 #define RECODE_NO_ICONV_FLAG 2 -RECODE_OUTER recode_new_outer PARAMS ((unsigned)); -bool recode_delete_outer PARAMS ((RECODE_OUTER)); +RECODE_OUTER recode_new_outer (unsigned); +bool recode_delete_outer (RECODE_OUTER); -bool list_all_symbols PARAMS ((RECODE_OUTER, RECODE_CONST_SYMBOL)); -bool list_concise_charset PARAMS ((RECODE_OUTER, RECODE_CONST_SYMBOL, - const enum recode_list_format)); -bool list_full_charset PARAMS ((RECODE_OUTER, RECODE_CONST_SYMBOL)); +bool list_all_symbols (RECODE_OUTER, RECODE_CONST_SYMBOL); +bool list_concise_charset (RECODE_OUTER, RECODE_CONST_SYMBOL, + const enum recode_list_format); +bool list_full_charset (RECODE_OUTER, RECODE_CONST_SYMBOL); /*----------------------------------. | Recode library at REQUEST level. | `----------------------------------*/ -RECODE_REQUEST recode_new_request PARAMS ((RECODE_OUTER)); -bool recode_delete_request PARAMS ((RECODE_REQUEST)); -bool recode_scan_request PARAMS ((RECODE_REQUEST, const char *)); - -bool recode_format_table PARAMS ((RECODE_REQUEST, - enum recode_programming_language, - const char *)); - -char *recode_string PARAMS ((RECODE_CONST_REQUEST, const char *)); - -bool recode_string_to_buffer PARAMS ((RECODE_CONST_REQUEST, - const char *, - char **, size_t *, size_t *)); -bool recode_string_to_file PARAMS ((RECODE_CONST_REQUEST, - const char *, - FILE *)); -bool recode_buffer_to_buffer PARAMS ((RECODE_CONST_REQUEST, - const char *, size_t, - char **, size_t *, size_t *)); -bool recode_buffer_to_file PARAMS ((RECODE_CONST_REQUEST, - const char *, size_t, - FILE *)); -bool recode_file_to_buffer PARAMS ((RECODE_CONST_REQUEST, - FILE *, - char **, size_t *, size_t *)); -bool recode_file_to_file PARAMS ((RECODE_CONST_REQUEST, - FILE *, - FILE *)); +RECODE_REQUEST recode_new_request (RECODE_OUTER); +bool recode_delete_request (RECODE_REQUEST); +bool recode_scan_request (RECODE_REQUEST, const char *); + +bool recode_format_table (RECODE_REQUEST, + enum recode_programming_language, + const char *); + +char *recode_string (RECODE_CONST_REQUEST, const char *); + +bool recode_string_to_buffer (RECODE_CONST_REQUEST, + const char *, + char **, size_t *, size_t *); +bool recode_string_to_file (RECODE_CONST_REQUEST, + const char *, + FILE *); +bool recode_buffer_to_buffer (RECODE_CONST_REQUEST, + const char *, size_t, + char **, size_t *, size_t *); +bool recode_buffer_to_file (RECODE_CONST_REQUEST, + const char *, size_t, + FILE *); +bool recode_file_to_buffer (RECODE_CONST_REQUEST, + FILE *, + char **, size_t *, size_t *); +bool recode_file_to_file (RECODE_CONST_REQUEST, + FILE *, + FILE *); /*-------------------------------. | Recode library at TASK level. | `-------------------------------*/ -RECODE_TASK recode_new_task PARAMS ((RECODE_CONST_REQUEST)); -bool recode_delete_task PARAMS ((RECODE_TASK)); -bool recode_perform_task PARAMS ((RECODE_TASK)); -/* FILE *recode_filter_open PARAMS ((RECODE_TASK, FILE *)); */ -/* bool recode_filter_close PARAMS ((RECODE_TASK)); */ +RECODE_TASK recode_new_task (RECODE_CONST_REQUEST); +bool recode_delete_task (RECODE_TASK); +bool recode_perform_task (RECODE_TASK); +/* FILE *recode_filter_open (RECODE_TASK, FILE *); */ +/* bool recode_filter_close (RECODE_TASK); */ #ifdef __cplusplus } diff --git a/src/recodext.h b/src/recodext.h index 8533799..d4a8db4 100644 --- a/src/recodext.h +++ b/src/recodext.h @@ -88,25 +88,6 @@ # define get_quoting_style librecode_get_quoting_style # define get_ucs2 librecode_get_ucs2 # define get_ucs4 librecode_get_ucs4 -# define hash_clear librecode_hash_clear -# define hash_delete librecode_hash_delete -# define hash_do_for_each librecode_hash_do_for_each -# define hash_free librecode_hash_free -# define hash_get_entries librecode_hash_get_entries -# define hash_get_first librecode_hash_get_first -# define hash_get_max_bucket_length librecode_hash_get_max_bucket_length -# define hash_get_n_buckets librecode_hash_get_n_buckets -# define hash_get_n_buckets_used librecode_hash_get_n_buckets_used -# define hash_get_n_entries librecode_hash_get_n_entries -# define hash_get_next librecode_hash_get_next -# define hash_initialize librecode_hash_initialize -# define hash_insert librecode_hash_insert -# define hash_lookup librecode_hash_lookup -# define hash_print_statistics librecode_hash_print_statistics -# define hash_rehash librecode_hash_rehash -# define hash_reset_tuning librecode_hash_reset_tuning -# define hash_string librecode_hash_string -# define hash_table_ok librecode_hash_table_ok # define init_combine librecode_init_combine # define init_explode librecode_init_explode # define init_ucs2_to_byte librecode_init_ucs2_to_byte @@ -114,7 +95,6 @@ # define list_all_symbols librecode_list_all_symbols # define list_concise_charset librecode_list_concise_charset # define list_full_charset librecode_list_full_charset -# define locale_charset librecode_locale_charset # define make_argmatch_arrays librecode_make_argmatch_arrays # define module_african librecode_module_african # define module_afrtran librecode_module_afrtran @@ -174,17 +154,6 @@ # define ucs2_to_charname librecode_ucs2_to_charname # define ucs2_to_french_charname librecode_ucs2_to_french_charname # define ucs2_to_rfc1345 librecode_ucs2_to_rfc1345 -# define x2nrealloc librecode_x2nrealloc -# define x2realloc librecode_x2realloc -# define xalloc_die librecode_xalloc_die -# define xcalloc librecode_xcalloc -# define xmalloc librecode_xmalloc -# define xmemdup librecode_xmemdup -# define xnmalloc librecode_xnmalloc -# define xnrealloc librecode_xnrealloc -# define xrealloc librecode_xrealloc -# define xstrdup librecode_xstrdup -# define xzalloc librecode_xzalloc #endif /* ! CLEANER_H_ */ /* Conversion of files between different charsets and surfaces. @@ -423,12 +392,12 @@ struct recode_surface_list | Description of a single step of recoding. | `-------------------------------------------*/ -typedef bool (*Recode_init) PARAMS ((RECODE_STEP, RECODE_CONST_REQUEST, - RECODE_CONST_OPTION_LIST, - RECODE_CONST_OPTION_LIST)); -typedef bool (*Recode_term) PARAMS ((RECODE_STEP, RECODE_CONST_REQUEST)); -typedef bool (*Recode_transform) PARAMS ((RECODE_SUBTASK)); -typedef bool (*Recode_fallback) PARAMS ((RECODE_SUBTASK, unsigned)); +typedef bool (*Recode_init) (RECODE_STEP, RECODE_CONST_REQUEST, + RECODE_CONST_OPTION_LIST, + RECODE_CONST_OPTION_LIST); +typedef bool (*Recode_term) (RECODE_STEP, RECODE_CONST_REQUEST); +typedef bool (*Recode_transform) (RECODE_SUBTASK); +typedef bool (*Recode_fallback) (RECODE_SUBTASK, unsigned); /* The `single' structure holds data needed to decide of sequences, and is invariant over actual requests. The `step' structure holds data needed for @@ -756,25 +725,25 @@ extern "C" { (Count) * sizeof(Type)), \ Variable) -void recode_error PARAMS ((RECODE_OUTER, const char *, ...)); -void recode_perror PARAMS ((RECODE_OUTER, const char *, ...)); -void *recode_malloc PARAMS ((RECODE_OUTER, size_t)); -void *recode_realloc PARAMS ((RECODE_OUTER, void *, size_t)); - -unsigned char *invert_table PARAMS ((RECODE_OUTER, const unsigned char *)); -bool complete_pairs PARAMS ((RECODE_OUTER, RECODE_STEP, - const struct recode_known_pair *, unsigned, - bool, bool)); -bool transform_byte_to_ucs2 PARAMS ((RECODE_SUBTASK)); -bool init_ucs2_to_byte PARAMS ((RECODE_STEP, RECODE_CONST_REQUEST, - RECODE_CONST_OPTION_LIST, - RECODE_CONST_OPTION_LIST)); -bool transform_ucs2_to_byte PARAMS ((RECODE_SUBTASK)); +void recode_error (RECODE_OUTER, const char *, ...); +void recode_perror (RECODE_OUTER, const char *, ...); +void *recode_malloc (RECODE_OUTER, size_t); +void *recode_realloc (RECODE_OUTER, void *, size_t); + +unsigned char *invert_table (RECODE_OUTER, const unsigned char *); +bool complete_pairs (RECODE_OUTER, RECODE_STEP, + const struct recode_known_pair *, unsigned, + bool, bool); +bool transform_byte_to_ucs2 (RECODE_SUBTASK); +bool init_ucs2_to_byte (RECODE_STEP, RECODE_CONST_REQUEST, + RECODE_CONST_OPTION_LIST, + RECODE_CONST_OPTION_LIST); +bool transform_ucs2_to_byte (RECODE_SUBTASK); /* charname.c and fr-charname.c. */ -const char *ucs2_to_charname PARAMS ((int)); -const char *ucs2_to_french_charname PARAMS ((int)); +const char *ucs2_to_charname (int); +const char *ucs2_to_french_charname (int); /* charset.c. */ @@ -789,73 +758,69 @@ enum alias_find_type }; int code_to_ucs2 (RECODE_CONST_SYMBOL, unsigned); -bool prepare_for_aliases PARAMS ((RECODE_OUTER)); -RECODE_ALIAS declare_alias PARAMS ((RECODE_OUTER, - const char *, const char *)); -bool declare_implied_surface PARAMS ((RECODE_OUTER, RECODE_ALIAS, - RECODE_CONST_SYMBOL)); -bool make_argmatch_arrays PARAMS ((RECODE_OUTER)); -RECODE_ALIAS find_alias PARAMS ((RECODE_OUTER, const char *, - enum alias_find_type)); -bool find_and_report_subsets PARAMS ((RECODE_OUTER)); -bool decode_known_pairs PARAMS ((RECODE_OUTER, const char *)); +bool prepare_for_aliases (RECODE_OUTER); +RECODE_ALIAS declare_alias (RECODE_OUTER, + const char *, const char *); +bool declare_implied_surface (RECODE_OUTER, RECODE_ALIAS, + RECODE_CONST_SYMBOL); +bool make_argmatch_arrays (RECODE_OUTER); +RECODE_ALIAS find_alias (RECODE_OUTER, const char *, + enum alias_find_type); +bool find_and_report_subsets (RECODE_OUTER); +bool decode_known_pairs (RECODE_OUTER, const char *); /* combine.c. */ #define DONE NOT_A_CHARACTER #define ELSE BYTE_ORDER_MARK_SWAPPED -bool init_explode PARAMS ((RECODE_STEP, RECODE_CONST_REQUEST, - RECODE_CONST_OPTION_LIST, - RECODE_CONST_OPTION_LIST)); -bool explode_byte_byte PARAMS ((RECODE_SUBTASK)); -bool explode_ucs2_byte PARAMS ((RECODE_SUBTASK)); -bool explode_byte_ucs2 PARAMS ((RECODE_SUBTASK)); -bool explode_ucs2_ucs2 PARAMS ((RECODE_SUBTASK)); - -bool init_combine PARAMS ((RECODE_STEP, RECODE_CONST_REQUEST, - RECODE_CONST_OPTION_LIST, - RECODE_CONST_OPTION_LIST)); -bool combine_byte_byte PARAMS ((RECODE_SUBTASK)); -bool combine_ucs2_byte PARAMS ((RECODE_SUBTASK)); -bool combine_byte_ucs2 PARAMS ((RECODE_SUBTASK)); -bool combine_ucs2_ucs2 PARAMS ((RECODE_SUBTASK)); +bool init_explode (RECODE_STEP, RECODE_CONST_REQUEST, + RECODE_CONST_OPTION_LIST, + RECODE_CONST_OPTION_LIST); +bool explode_byte_byte (RECODE_SUBTASK); +bool explode_ucs2_byte (RECODE_SUBTASK); +bool explode_byte_ucs2 (RECODE_SUBTASK); +bool explode_ucs2_ucs2 (RECODE_SUBTASK); + +bool init_combine (RECODE_STEP, RECODE_CONST_REQUEST, + RECODE_CONST_OPTION_LIST, + RECODE_CONST_OPTION_LIST); +bool combine_byte_byte (RECODE_SUBTASK); +bool combine_ucs2_byte (RECODE_SUBTASK); +bool combine_byte_ucs2 (RECODE_SUBTASK); +bool combine_ucs2_ucs2 (RECODE_SUBTASK); /* freeze.c. */ -void recode_freeze_tables PARAMS ((RECODE_OUTER)); +void recode_freeze_tables (RECODE_OUTER); /* iconv.c. */ -bool transform_with_iconv PARAMS ((RECODE_SUBTASK)); - -/* localcharset.c. */ - -const char *locale_charset PARAMS ((void)); +bool transform_with_iconv (RECODE_SUBTASK); /* names.c. */ -bool should_prefer_french PARAMS ((void)); +bool should_prefer_french (void); /* mixed.c. */ -bool transform_c_source PARAMS ((RECODE_TASK)); -bool transform_po_source PARAMS ((RECODE_TASK)); +bool transform_c_source (RECODE_TASK); +bool transform_po_source (RECODE_TASK); /* outer.c. */ -bool reversibility PARAMS ((RECODE_SUBTASK, unsigned)); +bool reversibility (RECODE_SUBTASK, unsigned); RECODE_SINGLE declare_single - PARAMS ((RECODE_OUTER, const char *, const char *, - struct recode_quality, - bool (*) (RECODE_STEP, RECODE_CONST_REQUEST, - RECODE_CONST_OPTION_LIST, RECODE_CONST_OPTION_LIST), - bool (*) (RECODE_SUBTASK))); -bool declare_iconv PARAMS ((RECODE_OUTER, const char *, const char *)); -bool declare_explode_data PARAMS ((RECODE_OUTER, const unsigned short *, - const char *, const char *)); -bool declare_strip_data PARAMS ((RECODE_OUTER, struct strip_data *, - const char *)); + (RECODE_OUTER, const char *, const char *, + struct recode_quality, + bool (*) (RECODE_STEP, RECODE_CONST_REQUEST, + RECODE_CONST_OPTION_LIST, RECODE_CONST_OPTION_LIST), + bool (*) (RECODE_SUBTASK)); +bool declare_iconv (RECODE_OUTER, const char *, const char *); +bool declare_explode_data (RECODE_OUTER, const unsigned short *, + const char *, const char *); +bool declare_strip_data (RECODE_OUTER, struct strip_data *, + const char *); /* pool.c. */ @@ -863,21 +828,21 @@ extern const recode_ucs2 ucs2_data_pool[]; /* request.c. */ -char *edit_sequence PARAMS ((RECODE_REQUEST, bool)); +char *edit_sequence (RECODE_REQUEST, bool); /* rfc1345.c. */ -const char *ucs2_to_rfc1345 PARAMS ((recode_ucs2)); +const char *ucs2_to_rfc1345 (recode_ucs2); /* task.c. */ #if USE_HELPERS || !INLINE_HARDER -int get_byte_helper PARAMS ((RECODE_SUBTASK)); +int get_byte_helper (RECODE_SUBTASK); #endif -void put_byte_helper PARAMS ((int, RECODE_SUBTASK)); -bool recode_if_nogo PARAMS ((enum recode_error, RECODE_SUBTASK)); -bool transform_byte_to_byte PARAMS ((RECODE_SUBTASK)); -bool transform_byte_to_variable PARAMS ((RECODE_SUBTASK)); +void put_byte_helper (int, RECODE_SUBTASK); +bool recode_if_nogo (enum recode_error, RECODE_SUBTASK); +bool transform_byte_to_byte (RECODE_SUBTASK); +bool transform_byte_to_variable (RECODE_SUBTASK); /* ucs.c. */ @@ -893,10 +858,10 @@ bool transform_byte_to_variable PARAMS ((RECODE_SUBTASK)); /* Never an UCS-2 character. */ #define NOT_A_CHARACTER 0xFFFF -bool get_ucs2 PARAMS ((unsigned *, RECODE_SUBTASK)); -bool get_ucs4 PARAMS ((unsigned *, RECODE_SUBTASK)); -bool put_ucs2 PARAMS ((unsigned, RECODE_SUBTASK)); -bool put_ucs4 PARAMS ((unsigned, RECODE_SUBTASK)); +bool get_ucs2 (unsigned *, RECODE_SUBTASK); +bool get_ucs4 (unsigned *, RECODE_SUBTASK); +bool put_ucs2 (unsigned, RECODE_SUBTASK); +bool put_ucs4 (unsigned, RECODE_SUBTASK); #ifdef __cplusplus } diff --git a/src/recodext.h.in b/src/recodext.h.in index 84308fc..8893e97 100644 --- a/src/recodext.h.in +++ b/src/recodext.h.in @@ -234,12 +234,12 @@ struct recode_surface_list | Description of a single step of recoding. | `-------------------------------------------*/ -typedef bool (*Recode_init) PARAMS ((RECODE_STEP, RECODE_CONST_REQUEST, - RECODE_CONST_OPTION_LIST, - RECODE_CONST_OPTION_LIST)); -typedef bool (*Recode_term) PARAMS ((RECODE_STEP, RECODE_CONST_REQUEST)); -typedef bool (*Recode_transform) PARAMS ((RECODE_SUBTASK)); -typedef bool (*Recode_fallback) PARAMS ((RECODE_SUBTASK, unsigned)); +typedef bool (*Recode_init) (RECODE_STEP, RECODE_CONST_REQUEST, + RECODE_CONST_OPTION_LIST, + RECODE_CONST_OPTION_LIST); +typedef bool (*Recode_term) (RECODE_STEP, RECODE_CONST_REQUEST); +typedef bool (*Recode_transform) (RECODE_SUBTASK); +typedef bool (*Recode_fallback) (RECODE_SUBTASK, unsigned); /* The `single' structure holds data needed to decide of sequences, and is invariant over actual requests. The `step' structure holds data needed for @@ -567,25 +567,25 @@ extern "C" { (Count) * sizeof(Type)), \ Variable) -void recode_error PARAMS ((RECODE_OUTER, const char *, ...)); -void recode_perror PARAMS ((RECODE_OUTER, const char *, ...)); -void *recode_malloc PARAMS ((RECODE_OUTER, size_t)); -void *recode_realloc PARAMS ((RECODE_OUTER, void *, size_t)); - -unsigned char *invert_table PARAMS ((RECODE_OUTER, const unsigned char *)); -bool complete_pairs PARAMS ((RECODE_OUTER, RECODE_STEP, - const struct recode_known_pair *, unsigned, - bool, bool)); -bool transform_byte_to_ucs2 PARAMS ((RECODE_SUBTASK)); -bool init_ucs2_to_byte PARAMS ((RECODE_STEP, RECODE_CONST_REQUEST, - RECODE_CONST_OPTION_LIST, - RECODE_CONST_OPTION_LIST)); -bool transform_ucs2_to_byte PARAMS ((RECODE_SUBTASK)); +void recode_error (RECODE_OUTER, const char *, ...); +void recode_perror (RECODE_OUTER, const char *, ...); +void *recode_malloc (RECODE_OUTER, size_t); +void *recode_realloc (RECODE_OUTER, void *, size_t); + +unsigned char *invert_table (RECODE_OUTER, const unsigned char *); +bool complete_pairs (RECODE_OUTER, RECODE_STEP, + const struct recode_known_pair *, unsigned, + bool, bool); +bool transform_byte_to_ucs2 (RECODE_SUBTASK); +bool init_ucs2_to_byte (RECODE_STEP, RECODE_CONST_REQUEST, + RECODE_CONST_OPTION_LIST, + RECODE_CONST_OPTION_LIST); +bool transform_ucs2_to_byte (RECODE_SUBTASK); /* charname.c and fr-charname.c. */ -const char *ucs2_to_charname PARAMS ((int)); -const char *ucs2_to_french_charname PARAMS ((int)); +const char *ucs2_to_charname (int); +const char *ucs2_to_french_charname (int); /* charset.c. */ @@ -600,73 +600,69 @@ enum alias_find_type }; int code_to_ucs2 (RECODE_CONST_SYMBOL, unsigned); -bool prepare_for_aliases PARAMS ((RECODE_OUTER)); -RECODE_ALIAS declare_alias PARAMS ((RECODE_OUTER, - const char *, const char *)); -bool declare_implied_surface PARAMS ((RECODE_OUTER, RECODE_ALIAS, - RECODE_CONST_SYMBOL)); -bool make_argmatch_arrays PARAMS ((RECODE_OUTER)); -RECODE_ALIAS find_alias PARAMS ((RECODE_OUTER, const char *, - enum alias_find_type)); -bool find_and_report_subsets PARAMS ((RECODE_OUTER)); -bool decode_known_pairs PARAMS ((RECODE_OUTER, const char *)); +bool prepare_for_aliases (RECODE_OUTER); +RECODE_ALIAS declare_alias (RECODE_OUTER, + const char *, const char *); +bool declare_implied_surface (RECODE_OUTER, RECODE_ALIAS, + RECODE_CONST_SYMBOL); +bool make_argmatch_arrays (RECODE_OUTER); +RECODE_ALIAS find_alias (RECODE_OUTER, const char *, + enum alias_find_type); +bool find_and_report_subsets (RECODE_OUTER); +bool decode_known_pairs (RECODE_OUTER, const char *); /* combine.c. */ #define DONE NOT_A_CHARACTER #define ELSE BYTE_ORDER_MARK_SWAPPED -bool init_explode PARAMS ((RECODE_STEP, RECODE_CONST_REQUEST, - RECODE_CONST_OPTION_LIST, - RECODE_CONST_OPTION_LIST)); -bool explode_byte_byte PARAMS ((RECODE_SUBTASK)); -bool explode_ucs2_byte PARAMS ((RECODE_SUBTASK)); -bool explode_byte_ucs2 PARAMS ((RECODE_SUBTASK)); -bool explode_ucs2_ucs2 PARAMS ((RECODE_SUBTASK)); - -bool init_combine PARAMS ((RECODE_STEP, RECODE_CONST_REQUEST, - RECODE_CONST_OPTION_LIST, - RECODE_CONST_OPTION_LIST)); -bool combine_byte_byte PARAMS ((RECODE_SUBTASK)); -bool combine_ucs2_byte PARAMS ((RECODE_SUBTASK)); -bool combine_byte_ucs2 PARAMS ((RECODE_SUBTASK)); -bool combine_ucs2_ucs2 PARAMS ((RECODE_SUBTASK)); +bool init_explode (RECODE_STEP, RECODE_CONST_REQUEST, + RECODE_CONST_OPTION_LIST, + RECODE_CONST_OPTION_LIST); +bool explode_byte_byte (RECODE_SUBTASK); +bool explode_ucs2_byte (RECODE_SUBTASK); +bool explode_byte_ucs2 (RECODE_SUBTASK); +bool explode_ucs2_ucs2 (RECODE_SUBTASK); + +bool init_combine (RECODE_STEP, RECODE_CONST_REQUEST, + RECODE_CONST_OPTION_LIST, + RECODE_CONST_OPTION_LIST); +bool combine_byte_byte (RECODE_SUBTASK); +bool combine_ucs2_byte (RECODE_SUBTASK); +bool combine_byte_ucs2 (RECODE_SUBTASK); +bool combine_ucs2_ucs2 (RECODE_SUBTASK); /* freeze.c. */ -void recode_freeze_tables PARAMS ((RECODE_OUTER)); +void recode_freeze_tables (RECODE_OUTER); /* iconv.c. */ -bool transform_with_iconv PARAMS ((RECODE_SUBTASK)); - -/* localcharset.c. */ - -const char *locale_charset PARAMS ((void)); +bool transform_with_iconv (RECODE_SUBTASK); /* names.c. */ -bool should_prefer_french PARAMS ((void)); +bool should_prefer_french (void); /* mixed.c. */ -bool transform_c_source PARAMS ((RECODE_TASK)); -bool transform_po_source PARAMS ((RECODE_TASK)); +bool transform_c_source (RECODE_TASK); +bool transform_po_source (RECODE_TASK); /* outer.c. */ -bool reversibility PARAMS ((RECODE_SUBTASK, unsigned)); +bool reversibility (RECODE_SUBTASK, unsigned); RECODE_SINGLE declare_single - PARAMS ((RECODE_OUTER, const char *, const char *, - struct recode_quality, - bool (*) (RECODE_STEP, RECODE_CONST_REQUEST, - RECODE_CONST_OPTION_LIST, RECODE_CONST_OPTION_LIST), - bool (*) (RECODE_SUBTASK))); -bool declare_iconv PARAMS ((RECODE_OUTER, const char *, const char *)); -bool declare_explode_data PARAMS ((RECODE_OUTER, const unsigned short *, - const char *, const char *)); -bool declare_strip_data PARAMS ((RECODE_OUTER, struct strip_data *, - const char *)); + (RECODE_OUTER, const char *, const char *, + struct recode_quality, + bool (*) (RECODE_STEP, RECODE_CONST_REQUEST, + RECODE_CONST_OPTION_LIST, RECODE_CONST_OPTION_LIST), + bool (*) (RECODE_SUBTASK)); +bool declare_iconv (RECODE_OUTER, const char *, const char *); +bool declare_explode_data (RECODE_OUTER, const unsigned short *, + const char *, const char *); +bool declare_strip_data (RECODE_OUTER, struct strip_data *, + const char *); /* pool.c. */ @@ -674,21 +670,21 @@ extern const recode_ucs2 ucs2_data_pool[]; /* request.c. */ -char *edit_sequence PARAMS ((RECODE_REQUEST, bool)); +char *edit_sequence (RECODE_REQUEST, bool); /* rfc1345.c. */ -const char *ucs2_to_rfc1345 PARAMS ((recode_ucs2)); +const char *ucs2_to_rfc1345 (recode_ucs2); /* task.c. */ #if USE_HELPERS || !INLINE_HARDER -int get_byte_helper PARAMS ((RECODE_SUBTASK)); +int get_byte_helper (RECODE_SUBTASK); #endif -void put_byte_helper PARAMS ((int, RECODE_SUBTASK)); -bool recode_if_nogo PARAMS ((enum recode_error, RECODE_SUBTASK)); -bool transform_byte_to_byte PARAMS ((RECODE_SUBTASK)); -bool transform_byte_to_variable PARAMS ((RECODE_SUBTASK)); +void put_byte_helper (int, RECODE_SUBTASK); +bool recode_if_nogo (enum recode_error, RECODE_SUBTASK); +bool transform_byte_to_byte (RECODE_SUBTASK); +bool transform_byte_to_variable (RECODE_SUBTASK); /* ucs.c. */ @@ -704,10 +700,10 @@ bool transform_byte_to_variable PARAMS ((RECODE_SUBTASK)); /* Never an UCS-2 character. */ #define NOT_A_CHARACTER 0xFFFF -bool get_ucs2 PARAMS ((unsigned *, RECODE_SUBTASK)); -bool get_ucs4 PARAMS ((unsigned *, RECODE_SUBTASK)); -bool put_ucs2 PARAMS ((unsigned, RECODE_SUBTASK)); -bool put_ucs4 PARAMS ((unsigned, RECODE_SUBTASK)); +bool get_ucs2 (unsigned *, RECODE_SUBTASK); +bool get_ucs4 (unsigned *, RECODE_SUBTASK); +bool put_ucs2 (unsigned, RECODE_SUBTASK); +bool put_ucs4 (unsigned, RECODE_SUBTASK); #ifdef __cplusplus } diff --git a/src/task.c b/src/task.c index ad1d5a6..28e2102 100644 --- a/src/task.c +++ b/src/task.c @@ -19,51 +19,10 @@ #include "common.h" -#if HAVE_UNISTD_H -# include -#endif - +#include +#include #include - #include -/* Bruno suggests the following, from GNU make 3.79.0.2 in `job.c'. He also - remarks that on Linux, WEXITSTATUS are bits 15..8 and WTERMSIG are bits - 7..0, while BeOS uses the contrary. */ -#if HAVE_UNION_WAIT -# define WAIT_T union wait -# ifndef WTERMSIG -# define WTERMSIG(x) ((x).w_termsig) -# endif -# ifndef WCOREDUMP -# define WCOREDUMP(x) ((x).w_coredump) -# endif -# ifndef WEXITSTATUS -# define WEXITSTATUS(x) ((x).w_retcode) -# endif -# ifndef WIFSIGNALED -# define WIFSIGNALED(x) (WTERMSIG(x) != 0) -# endif -# ifndef WIFEXITED -# define WIFEXITED(x) (WTERMSIG(x) == 0) -# endif -#else -# define WAIT_T int -# ifndef WTERMSIG -# define WTERMSIG(x) ((x) & 0x7f) -# endif -# ifndef WCOREDUMP -# define WCOREDUMP(x) ((x) & 0x80) -# endif -# ifndef WEXITSTATUS -# define WEXITSTATUS(x) (((x) >> 8) & 0xff) -# endif -# ifndef WIFSIGNALED -# define WIFSIGNALED(x) (WTERMSIG (x) != 0) -# endif -# ifndef WIFEXITED -# define WIFEXITED(x) (WTERMSIG (x) == 0) -# endif -#endif /* Buffer size used in transform_mere_copy. */ #define BUFFER_SIZE (16 * 1024) @@ -394,59 +353,6 @@ perform_memory_sequence (RECODE_TASK task) | least one needed recoding step. | `-------------------------------------------------------------------------*/ -/* tmpnam/tmpname/mktemp/tmpfile and the associate logic has been the - main portability headache of Recode :-(. - - People reported that tmpname does not exist everywhere. Further, on - OS/2, recode aborts if the prefix has more than five characters. - - tmpnam seems to exist everywhere so far. But NeXT's tmpnam() is such - that, if called many times in succession, it will always return the - same value, one has to really open a file with the returned name first - for the next call to tmpnam() to return a different value; even worse, - it cycles after 25 unique file names. I can manage it for a single - invocation of recode, but using two recode invocations connected with - a shell pipe, on the NeXT, creates a race by which both copies may - call tmpnam() in parallel, then getting the same value, and will - consequently open the same temporary file. - - Noah Friedman suggests opening the file with - O_EXCL, and when the open presumably fails, call tmpnam again, or try - the mktemp routine in the GNU C library: maybe that will work better. - - Michael I Bushnell suggests always using tmpfile, - which opens the file too, using the O_EXCL option to open. - - I'm trying this last suggestion, but rewinding instead of closing. - Someone reported, a long while ago, that rewind did not work on his - system, so I reverted to opening and closing the temporary files all - the time. I lost the precise references for this problem. In any - case, I'm reusing rewind with tmpfile, now. Hopefully, someone will - tell me if this still creates a problem somewhere! */ - -/* The previous round used tmpnam(3). This one tries tmpfile(3). */ -#undef USE_TMPNAM -#define USE_TMPFILE 1 - -/* Guarantee some value for L_tmpnam. */ -#if USE_TMPNAM -# if DOSWIN -# ifndef L_tmpnam -# define L_tmpnam 13 -# endif -# else -char *tmpnam (); -# ifndef L_tmpnam -# include "pathmax.h" -# define L_tmpnam PATH_MAX -# endif -# endif -#endif - -#if USE_TMPFILE -FILE *tmpfile PARAMS ((void)); -#endif - static bool perform_pass_sequence (RECODE_TASK task) { @@ -457,29 +363,12 @@ perform_pass_sequence (RECODE_TASK task) struct recode_read_write_text output; unsigned sequence_index; RECODE_CONST_STEP step; -#if USE_TMPNAM - char temporary_name_1[L_tmpnam]; - char temporary_name_2[L_tmpnam]; -#endif memset (subtask, 0, sizeof (struct recode_subtask)); memset (&input, 0, sizeof (struct recode_read_write_text)); memset (&output, 0, sizeof (struct recode_read_write_text)); subtask->task = task; -#if USE_TMPNAM -# if DOSWIN_OR_OS2 - strcpy (temporary_name_1, "recodex1.tmp"); - strcpy (temporary_name_2, "recodex2.tmp"); -# else - /* Delay name attribution, so NeXT's work. */ - temporary_name_1[0] = NUL; - temporary_name_2[0] = NUL; -# endif - subtask->input.name = temporary_name_1; - subtask->output.name = temporary_name_2; -#endif - /* Execute one pass for each step of the sequence. */ for (sequence_index = 0; @@ -511,20 +400,8 @@ perform_pass_sequence (RECODE_TASK task) } else { -#if USE_TMPNAM - if (subtask->input.file = fopen (input.name, "r"), - subtask->input.file == NULL) - { - recode_perror (outer, "fopen (%s)", input.name); - recode_if_nogo (RECODE_SYSTEM_ERROR, subtask); - return false; - } -#endif - -#if USE_TMPFILE subtask->input.file = input.file; rewind (subtask->input.file); -#endif } /* Select the output text for this step. */ @@ -533,28 +410,12 @@ perform_pass_sequence (RECODE_TASK task) { subtask->output = output; -#if USE_TMPNAM -# if DOSWIN_OR_OS2 - if (*subtask->output.name == NUL) - tmpnam (subtask->output.name); -# endif - if (subtask->output.file = fopen (subtask->output.name, "w"), - subtask->output.file == NULL) - { - recode_perror (outer, "fopen (%s)", subtask->output.name); - recode_if_nogo (RECODE_SYSTEM_ERROR, subtask); - return false; - } -#endif - -#if USE_TMPFILE if (subtask->output.file = tmpfile (), subtask->output.file == NULL) { recode_perror (NULL, "tmpfile ()"); recode_if_nogo (RECODE_SYSTEM_ERROR, subtask); return false; } -#endif } else { @@ -596,15 +457,8 @@ perform_pass_sequence (RECODE_TASK task) else { fclose (subtask->input.file); -#if USE_TMPNAM - unlink (subtask->input.name); -#endif } -#if USE_TMPNAM - fclose (subtask->output.file); -#endif - /* Prepare for next step. */ task->swap_input = RECODE_SWAP_UNDECIDED; @@ -628,61 +482,6 @@ perform_pass_sequence (RECODE_TASK task) #if HAVE_PIPE -#if !HAVE_DUP2 - -/*------------------------------------------------------------------------. -| Duplicate the OLD_FD file descriptor into NEW_FD, closing NEW_FD first | -| if it is used. This implementation presumes both OLD_FD and NEW_FD are | -| valid file descriptors. | -`------------------------------------------------------------------------*/ - -/* Overall idea taken from GNU Emacs 18.55 dup2 (), in src/sysdep.c. */ - -#include - -#ifndef F_DUPFD - -static bool -dup2_recursive (int old_fd, int new_fd) -{ - int fd; - - /* Attempt to dup OLD_FD to NEW_FD. If not successful, call dup2 - recursively, filling the file descriptor table until NEW_FD is - reached. Then close all the spurious file descriptors we created. */ - - if (fd = dup (old_fd) && fd != new_fd) - if (fd < 0 || dup2_recursive (old_fd, new_fd) < 0 || close (fd) < 0) - return false; - - return true; -} - -#endif /* not F_DUPFD */ - -static int -dup2 (int old_fd, int new_fd) -{ - /* If OLD_FD or NEW_FD were not valid file descriptors, dup2 should - ideally return -1 with errno set to EBADF. This is not checked. */ - - if (old_fd != new_fd) - { - close (new_fd); - -#ifdef F_DUPFD - if (fcntl (old_fd, F_DUPFD, new_fd) != new_fd) - return -1; -#else - if (!dup2_recursive (old_fd, new_fd)) - return -1; -#endif - } - return new_fd; -} - -#endif /* not HAVE_DUP2 */ - /*-------------------------------------------------------------------------. | Execute the conversion sequence, forking the program many times for all | | elementary steps, interconnecting them with pipes. This routine assumes | @@ -708,7 +507,7 @@ perform_pipe_sequence (RECODE_TASK task) int pipe_pair[2]; /* pair of file descriptors for a pipe */ int child_process; /* child process number, zero if child */ - WAIT_T wait_status; /* status returned by wait() */ + pid_t wait_status; /* status returned by wait() */ memset (subtask, 0, sizeof (struct recode_subtask)); subtask->task = task; @@ -876,7 +675,7 @@ perform_pipe_sequence (RECODE_TASK task) int pipe_pair[2]; /* pair of file descriptors for a pipe */ int child_process; /* child process number, zero if child */ - WAIT_T wait_status; /* status returned by wait() */ + pid_t wait_status; /* status returned by wait() */ memset (subtask, 0, sizeof (struct recode_subtask)); subtask->task = task; @@ -1077,10 +876,8 @@ recode_delete_task (RECODE_TASK task) return true; } -#if DOSWIN -# if HAVE_UNISTD_H -# include /* for isatty */ -# endif +#if DOSWIN_OR_OS2 +# include /* for isatty */ # include /* for O_BINARY and _fmode */ # include /* for setmode */ #endif diff --git a/src/txtelat1.l b/src/txtelat1.l index 0eaf235..9431b7a 100644 --- a/src/txtelat1.l +++ b/src/txtelat1.l @@ -21,7 +21,7 @@ %{ -void texte_latin1_diaeresis PARAMS ((void)); +void texte_latin1_diaeresis (void); %} diff --git a/src/xalloc-die.c b/src/xalloc-die.c deleted file mode 100644 index ff5ac9e..0000000 --- a/src/xalloc-die.c +++ /dev/null @@ -1,45 +0,0 @@ -/* Report a memory allocation failure and exit. - - Copyright (C) 1997, 1998, 1999, 2000, 2002, 2003, 2004 Free - Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software Foundation, - Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifdef HAVE_CONFIG_H -# include -#endif - -#include "xalloc.h" - -#include - -#include "error.h" -#include "exitfail.h" - -#include "gettext.h" -#define _(msgid) gettext (msgid) -#define N_(msgid) msgid - -void -xalloc_die (void) -{ - error (exit_failure, 0, "%s", _("memory exhausted")); - - /* The `noreturn' cannot be given to error, since it may return if - its first argument is 0. To help compilers understand the - xalloc_die does not return, call abort. Also, the abort is a - safety feature if exit_failure is 0 (which shouldn't happen). */ - abort (); -} diff --git a/src/xalloc.h b/src/xalloc.h deleted file mode 100644 index f80977e..0000000 --- a/src/xalloc.h +++ /dev/null @@ -1,79 +0,0 @@ -/* xalloc.h -- malloc with out-of-memory checking - - Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, - 1999, 2000, 2003, 2004 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software Foundation, - Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef XALLOC_H_ -# define XALLOC_H_ - -# include - - -# ifdef __cplusplus -extern "C" { -# endif - - -# ifndef __attribute__ -# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8) || __STRICT_ANSI__ -# define __attribute__(x) -# endif -# endif - -# ifndef ATTRIBUTE_NORETURN -# define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__)) -# endif - -/* This function is always triggered when memory is exhausted. - It must be defined by the application, either explicitly - or by using gnulib's xalloc-die module. This is the - function to call when one wants the program to die because of a - memory allocation failure. */ -extern void xalloc_die (void) ATTRIBUTE_NORETURN; - -void *xmalloc (size_t s); -void *xnmalloc (size_t n, size_t s); -void *xzalloc (size_t s); -void *xcalloc (size_t n, size_t s); -void *xrealloc (void *p, size_t s); -void *xnrealloc (void *p, size_t n, size_t s); -void *x2realloc (void *p, size_t *pn); -void *x2nrealloc (void *p, size_t *pn, size_t s); -void *xmemdup (void const *p, size_t s); -char *xstrdup (char const *str); - -/* Return 1 if an array of N objects, each of size S, cannot exist due - to size arithmetic overflow. S must be positive and N must be - nonnegative. This is a macro, not an inline function, so that it - works correctly even when SIZE_MAX < N. - - By gnulib convention, SIZE_MAX represents overflow in size - calculations, so the conservative dividend to use here is - SIZE_MAX - 1, since SIZE_MAX might represent an overflowed value. - However, malloc (SIZE_MAX) fails on all known hosts where - sizeof (ptrdiff_t) <= sizeof (size_t), so do not bother to test for - exactly-SIZE_MAX allocations on such hosts; this avoids a test and - branch when S is known to be 1. */ -# define xalloc_oversized(n, s) \ - ((size_t) (sizeof (ptrdiff_t) <= sizeof (size_t) ? -1 : -2) / (s) < (n)) - -# ifdef __cplusplus -} -# endif - - -#endif /* !XALLOC_H_ */ diff --git a/src/xmalloc.c b/src/xmalloc.c deleted file mode 100644 index d66054f..0000000 --- a/src/xmalloc.c +++ /dev/null @@ -1,241 +0,0 @@ -/* xmalloc.c -- malloc with out of memory checking - - Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, - 1999, 2000, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software Foundation, - Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifdef HAVE_CONFIG_H -# include -#endif - -#include "xalloc.h" - -#include -#include - -#ifndef SIZE_MAX -# define SIZE_MAX ((size_t) -1) -#endif - -/* 1 if calloc is known to be compatible with GNU calloc. This - matters if we are not also using the calloc module, which defines - HAVE_CALLOC and supports the GNU API even on non-GNU platforms. */ -#if defined HAVE_CALLOC || defined __GLIBC__ -enum { HAVE_GNU_CALLOC = 1 }; -#else -enum { HAVE_GNU_CALLOC = 0 }; -#endif - -/* Allocate an array of N objects, each with S bytes of memory, - dynamically, with error checking. S must be nonzero. */ - -static inline void * -xnmalloc_inline (size_t n, size_t s) -{ - void *p; - if (xalloc_oversized (n, s) || (! (p = malloc (n * s)) && n != 0)) - xalloc_die (); - return p; -} - -void * -xnmalloc (size_t n, size_t s) -{ - return xnmalloc_inline (n, s); -} - -/* Allocate N bytes of memory dynamically, with error checking. */ - -void * -xmalloc (size_t n) -{ - return xnmalloc_inline (n, 1); -} - -/* Change the size of an allocated block of memory P to an array of N - objects each of S bytes, with error checking. S must be nonzero. */ - -static inline void * -xnrealloc_inline (void *p, size_t n, size_t s) -{ - if (xalloc_oversized (n, s) || (! (p = realloc (p, n * s)) && n != 0)) - xalloc_die (); - return p; -} - -void * -xnrealloc (void *p, size_t n, size_t s) -{ - return xnrealloc_inline (p, n, s); -} - -/* Change the size of an allocated block of memory P to N bytes, - with error checking. */ - -void * -xrealloc (void *p, size_t n) -{ - return xnrealloc_inline (p, n, 1); -} - - -/* If P is null, allocate a block of at least *PN such objects; - otherwise, reallocate P so that it contains more than *PN objects - each of S bytes. *PN must be nonzero unless P is null, and S must - be nonzero. Set *PN to the new number of objects, and return the - pointer to the new block. *PN is never set to zero, and the - returned pointer is never null. - - Repeated reallocations are guaranteed to make progress, either by - allocating an initial block with a nonzero size, or by allocating a - larger block. - - In the following implementation, nonzero sizes are doubled so that - repeated reallocations have O(N log N) overall cost rather than - O(N**2) cost, but the specification for this function does not - guarantee that sizes are doubled. - - Here is an example of use: - - int *p = NULL; - size_t used = 0; - size_t allocated = 0; - - void - append_int (int value) - { - if (used == allocated) - p = x2nrealloc (p, &allocated, sizeof *p); - p[used++] = value; - } - - This causes x2nrealloc to allocate a block of some nonzero size the - first time it is called. - - To have finer-grained control over the initial size, set *PN to a - nonzero value before calling this function with P == NULL. For - example: - - int *p = NULL; - size_t used = 0; - size_t allocated = 0; - size_t allocated1 = 1000; - - void - append_int (int value) - { - if (used == allocated) - { - p = x2nrealloc (p, &allocated1, sizeof *p); - allocated = allocated1; - } - p[used++] = value; - } - - */ - -static inline void * -x2nrealloc_inline (void *p, size_t *pn, size_t s) -{ - size_t n = *pn; - - if (! p) - { - if (! n) - { - /* The approximate size to use for initial small allocation - requests, when the invoking code specifies an old size of - zero. 64 bytes is the largest "small" request for the - GNU C library malloc. */ - enum { DEFAULT_MXFAST = 64 }; - - n = DEFAULT_MXFAST / s; - n += !n; - } - } - else - { - if (SIZE_MAX / 2 / s < n) - xalloc_die (); - n *= 2; - } - - *pn = n; - return xrealloc (p, n * s); -} - -void * -x2nrealloc (void *p, size_t *pn, size_t s) -{ - return x2nrealloc_inline (p, pn, s); -} - -/* If P is null, allocate a block of at least *PN bytes; otherwise, - reallocate P so that it contains more than *PN bytes. *PN must be - nonzero unless P is null. Set *PN to the new block's size, and - return the pointer to the new block. *PN is never set to zero, and - the returned pointer is never null. */ - -void * -x2realloc (void *p, size_t *pn) -{ - return x2nrealloc_inline (p, pn, 1); -} - -/* Allocate S bytes of zeroed memory dynamically, with error checking. - There's no need for xnzalloc (N, S), since it would be equivalent - to xcalloc (N, S). */ - -void * -xzalloc (size_t s) -{ - return memset (xmalloc (s), 0, s); -} - -/* Allocate zeroed memory for N elements of S bytes, with error - checking. S must be nonzero. */ - -void * -xcalloc (size_t n, size_t s) -{ - void *p; - /* Test for overflow, since some calloc implementations don't have - proper overflow checks. But omit overflow and size-zero tests if - HAVE_GNU_CALLOC, since GNU calloc catches overflow and never - returns NULL if successful. */ - if ((! HAVE_GNU_CALLOC && xalloc_oversized (n, s)) - || (! (p = calloc (n, s)) && (HAVE_GNU_CALLOC || n != 0))) - xalloc_die (); - return p; -} - -/* Clone an object P of size S, with error checking. There's no need - for xnmemdup (P, N, S), since xmemdup (P, N * S) works without any - need for an arithmetic overflow check. */ - -void * -xmemdup (void const *p, size_t s) -{ - return memcpy (xmalloc (s), p, s); -} - -/* Clone STRING. */ - -char * -xstrdup (char const *string) -{ - return (char *) xmemdup (string, strlen (string) + 1); -} diff --git a/tests/Makefile.am b/tests/Makefile.am index 3aa5b3d..040379a 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -33,7 +33,8 @@ CLEANFILES = Recode.so PYTHON = python check-local: Recode.so - RECODE=../src/recode PYTHONPATH=.:$(srcdir) \ + export LD_LIBRARY_PATH=$(top_srcdir)/src/.libs && \ + RECODE=$(top_builddir)/src/recode PYTHONPATH=.:$(srcdir) \ $(PYTHON) $(srcdir)/pytest $(LIMIT) $(srcdir)/t*.py Recode.so: Recode.c setup.py @@ -41,5 +42,8 @@ Recode.so: Recode.c setup.py $(PYTHON) setup.py build_ext --inplace rm -fr build -Recode.c: Recode.pyx - cd $(srcdir) && cython Recode.pyx +Recode.c: Recode.pyx Makefile + rm -f Recode.c && \ + cython -o Recode.body.c Recode.pyx && \ + echo '#include "config.h"' > Recode.c && \ + cat Recode.body.c >> Recode.c diff --git a/tests/Recode.c b/tests/Recode.c index d13a2b9..7e67e40 100644 --- a/tests/Recode.c +++ b/tests/Recode.c @@ -1,25 +1,15 @@ -/* Generated by Cython 0.19 on Mon Dec 2 00:35:48 2013 */ +#include "config.h" +/* Generated by Cython 0.23.4 */ #define PY_SSIZE_T_CLEAN -#ifndef CYTHON_USE_PYLONG_INTERNALS -#ifdef PYLONG_BITS_IN_DIGIT -#define CYTHON_USE_PYLONG_INTERNALS 0 -#else -#include "pyconfig.h" -#ifdef PYLONG_BITS_IN_DIGIT -#define CYTHON_USE_PYLONG_INTERNALS 1 -#else -#define CYTHON_USE_PYLONG_INTERNALS 0 -#endif -#endif -#endif #include "Python.h" #ifndef Py_PYTHON_H #error Python headers needed to compile C extensions, please install development version of Python. -#elif PY_VERSION_HEX < 0x02040000 - #error Cython requires Python 2.4+. +#elif PY_VERSION_HEX < 0x02060000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03020000) + #error Cython requires Python 2.6+ or Python 3.2+. #else -#include /* For offsetof */ +#define CYTHON_ABI "0_23_4" +#include #ifndef offsetof #define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) #endif @@ -53,97 +43,72 @@ #define CYTHON_COMPILING_IN_PYPY 0 #define CYTHON_COMPILING_IN_CPYTHON 1 #endif -#if PY_VERSION_HEX < 0x02050000 - typedef int Py_ssize_t; - #define PY_SSIZE_T_MAX INT_MAX - #define PY_SSIZE_T_MIN INT_MIN - #define PY_FORMAT_SIZE_T "" - #define CYTHON_FORMAT_SSIZE_T "" - #define PyInt_FromSsize_t(z) PyInt_FromLong(z) - #define PyInt_AsSsize_t(o) __Pyx_PyInt_AsInt(o) - #define PyNumber_Index(o) ((PyNumber_Check(o) && !PyFloat_Check(o)) ? PyNumber_Int(o) : \ - (PyErr_Format(PyExc_TypeError, \ - "expected index value, got %.200s", Py_TYPE(o)->tp_name), \ - (PyObject*)0)) - #define __Pyx_PyIndex_Check(o) (PyNumber_Check(o) && !PyFloat_Check(o) && \ - !PyComplex_Check(o)) - #define PyIndex_Check __Pyx_PyIndex_Check - #define PyErr_WarnEx(category, message, stacklevel) PyErr_Warn(category, message) - #define __PYX_BUILD_PY_SSIZE_T "i" -#else - #define __PYX_BUILD_PY_SSIZE_T "n" - #define CYTHON_FORMAT_SSIZE_T "z" - #define __Pyx_PyIndex_Check PyIndex_Check +#if !defined(CYTHON_USE_PYLONG_INTERNALS) && CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x02070000 +#define CYTHON_USE_PYLONG_INTERNALS 1 #endif -#if PY_VERSION_HEX < 0x02060000 - #define Py_REFCNT(ob) (((PyObject*)(ob))->ob_refcnt) - #define Py_TYPE(ob) (((PyObject*)(ob))->ob_type) - #define Py_SIZE(ob) (((PyVarObject*)(ob))->ob_size) - #define PyVarObject_HEAD_INIT(type, size) \ - PyObject_HEAD_INIT(type) size, - #define PyType_Modified(t) - typedef struct { - void *buf; - PyObject *obj; - Py_ssize_t len; - Py_ssize_t itemsize; - int readonly; - int ndim; - char *format; - Py_ssize_t *shape; - Py_ssize_t *strides; - Py_ssize_t *suboffsets; - void *internal; - } Py_buffer; - #define PyBUF_SIMPLE 0 - #define PyBUF_WRITABLE 0x0001 - #define PyBUF_FORMAT 0x0004 - #define PyBUF_ND 0x0008 - #define PyBUF_STRIDES (0x0010 | PyBUF_ND) - #define PyBUF_C_CONTIGUOUS (0x0020 | PyBUF_STRIDES) - #define PyBUF_F_CONTIGUOUS (0x0040 | PyBUF_STRIDES) - #define PyBUF_ANY_CONTIGUOUS (0x0080 | PyBUF_STRIDES) - #define PyBUF_INDIRECT (0x0100 | PyBUF_STRIDES) - #define PyBUF_RECORDS (PyBUF_STRIDES | PyBUF_FORMAT | PyBUF_WRITABLE) - #define PyBUF_FULL (PyBUF_INDIRECT | PyBUF_FORMAT | PyBUF_WRITABLE) - typedef int (*getbufferproc)(PyObject *, Py_buffer *, int); - typedef void (*releasebufferproc)(PyObject *, Py_buffer *); +#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600 && !defined(Py_OptimizeFlag) +#define Py_OptimizeFlag 0 #endif +#define __PYX_BUILD_PY_SSIZE_T "n" +#define CYTHON_FORMAT_SSIZE_T "z" #if PY_MAJOR_VERSION < 3 #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" - #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \ - PyCode_New(a, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) + #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) + #define __Pyx_DefaultClassType PyClass_Type #else #define __Pyx_BUILTIN_MODULE_NAME "builtins" - #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \ + #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) + #define __Pyx_DefaultClassType PyType_Type #endif -#if PY_MAJOR_VERSION < 3 && PY_MINOR_VERSION < 6 - #define PyUnicode_FromString(s) PyUnicode_Decode(s, strlen(s), "UTF-8", "strict") -#endif -#if PY_MAJOR_VERSION >= 3 +#ifndef Py_TPFLAGS_CHECKTYPES #define Py_TPFLAGS_CHECKTYPES 0 +#endif +#ifndef Py_TPFLAGS_HAVE_INDEX #define Py_TPFLAGS_HAVE_INDEX 0 #endif -#if (PY_VERSION_HEX < 0x02060000) || (PY_MAJOR_VERSION >= 3) +#ifndef Py_TPFLAGS_HAVE_NEWBUFFER #define Py_TPFLAGS_HAVE_NEWBUFFER 0 #endif -#if PY_VERSION_HEX < 0x02060000 - #define Py_TPFLAGS_HAVE_VERSION_TAG 0 +#ifndef Py_TPFLAGS_HAVE_FINALIZE + #define Py_TPFLAGS_HAVE_FINALIZE 0 #endif #if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) #define CYTHON_PEP393_ENABLED 1 - #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ? \ + #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ?\ 0 : _PyUnicode_Ready((PyObject *)(op))) #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u) #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i) + #define __Pyx_PyUnicode_KIND(u) PyUnicode_KIND(u) + #define __Pyx_PyUnicode_DATA(u) PyUnicode_DATA(u) #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i) #else #define CYTHON_PEP393_ENABLED 0 #define __Pyx_PyUnicode_READY(op) (0) #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u) #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i])) - #define __Pyx_PyUnicode_READ(k, d, i) ((k=k), (Py_UCS4)(((Py_UNICODE*)d)[i])) + #define __Pyx_PyUnicode_KIND(u) (sizeof(Py_UNICODE)) + #define __Pyx_PyUnicode_DATA(u) ((void*)PyUnicode_AS_UNICODE(u)) + #define __Pyx_PyUnicode_READ(k, d, i) ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i])) +#endif +#if CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyUnicode_Concat(a, b) PyNumber_Add(a, b) + #define __Pyx_PyUnicode_ConcatSafe(a, b) PyNumber_Add(a, b) +#else + #define __Pyx_PyUnicode_Concat(a, b) PyUnicode_Concat(a, b) + #define __Pyx_PyUnicode_ConcatSafe(a, b) ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ?\ + PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b)) +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyUnicode_Contains) + #define PyUnicode_Contains(u, s) PySequence_Contains(u, s) +#endif +#define __Pyx_PyString_FormatSafe(a, b) ((unlikely((a) == Py_None)) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b)) +#define __Pyx_PyUnicode_FormatSafe(a, b) ((unlikely((a) == Py_None)) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b)) +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyString_Format(a, b) PyUnicode_Format(a, b) +#else + #define __Pyx_PyString_Format(a, b) PyString_Format(a, b) #endif #if PY_MAJOR_VERSION >= 3 #define PyBaseString_Type PyUnicode_Type @@ -152,35 +117,12 @@ #define PyString_Check PyUnicode_Check #define PyString_CheckExact PyUnicode_CheckExact #endif -#if PY_VERSION_HEX < 0x02060000 - #define PyBytesObject PyStringObject - #define PyBytes_Type PyString_Type - #define PyBytes_Check PyString_Check - #define PyBytes_CheckExact PyString_CheckExact - #define PyBytes_FromString PyString_FromString - #define PyBytes_FromStringAndSize PyString_FromStringAndSize - #define PyBytes_FromFormat PyString_FromFormat - #define PyBytes_DecodeEscape PyString_DecodeEscape - #define PyBytes_AsString PyString_AsString - #define PyBytes_AsStringAndSize PyString_AsStringAndSize - #define PyBytes_Size PyString_Size - #define PyBytes_AS_STRING PyString_AS_STRING - #define PyBytes_GET_SIZE PyString_GET_SIZE - #define PyBytes_Repr PyString_Repr - #define PyBytes_Concat PyString_Concat - #define PyBytes_ConcatAndDel PyString_ConcatAndDel -#endif #if PY_MAJOR_VERSION >= 3 #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj) #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj) #else - #define __Pyx_PyBaseString_Check(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj) || \ - PyString_Check(obj) || PyUnicode_Check(obj)) - #define __Pyx_PyBaseString_CheckExact(obj) (Py_TYPE(obj) == &PyBaseString_Type) -#endif -#if PY_VERSION_HEX < 0x02060000 - #define PySet_Check(obj) PyObject_TypeCheck(obj, &PySet_Type) - #define PyFrozenSet_Check(obj) PyObject_TypeCheck(obj, &PyFrozenSet_Type) + #define __Pyx_PyBaseString_Check(obj) (PyString_Check(obj) || PyUnicode_Check(obj)) + #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj)) #endif #ifndef PySet_CheckExact #define PySet_CheckExact(obj) (Py_TYPE(obj) == &PySet_Type) @@ -201,11 +143,17 @@ #define PyInt_AsSsize_t PyLong_AsSsize_t #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask + #define PyNumber_Int PyNumber_Long #endif #if PY_MAJOR_VERSION >= 3 #define PyBoolObject PyLongObject #endif -#if PY_VERSION_HEX < 0x03020000 +#if PY_MAJOR_VERSION >= 3 && CYTHON_COMPILING_IN_PYPY + #ifndef PyUnicode_InternFromString + #define PyUnicode_InternFromString(s) PyUnicode_FromString(s) + #endif +#endif +#if PY_VERSION_HEX < 0x030200A4 typedef long Py_hash_t; #define __Pyx_PyInt_FromHash_t PyInt_FromLong #define __Pyx_PyInt_AsHash_t PyInt_AsLong @@ -213,43 +161,37 @@ #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t #define __Pyx_PyInt_AsHash_t PyInt_AsSsize_t #endif -#if (PY_MAJOR_VERSION < 3) || (PY_VERSION_HEX >= 0x03010300) - #define __Pyx_PySequence_GetSlice(obj, a, b) PySequence_GetSlice(obj, a, b) - #define __Pyx_PySequence_SetSlice(obj, a, b, value) PySequence_SetSlice(obj, a, b, value) - #define __Pyx_PySequence_DelSlice(obj, a, b) PySequence_DelSlice(obj, a, b) -#else - #define __Pyx_PySequence_GetSlice(obj, a, b) (unlikely(!(obj)) ? \ - (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), (PyObject*)0) : \ - (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_GetSlice(obj, a, b)) : \ - (PyErr_Format(PyExc_TypeError, "'%.200s' object is unsliceable", (obj)->ob_type->tp_name), (PyObject*)0))) - #define __Pyx_PySequence_SetSlice(obj, a, b, value) (unlikely(!(obj)) ? \ - (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \ - (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_SetSlice(obj, a, b, value)) : \ - (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice assignment", (obj)->ob_type->tp_name), -1))) - #define __Pyx_PySequence_DelSlice(obj, a, b) (unlikely(!(obj)) ? \ - (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \ - (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_DelSlice(obj, a, b)) : \ - (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice deletion", (obj)->ob_type->tp_name), -1))) -#endif #if PY_MAJOR_VERSION >= 3 - #define PyMethod_New(func, self, klass) ((self) ? PyMethod_New(func, self) : PyInstanceMethod_New(func)) -#endif -#if PY_VERSION_HEX < 0x02050000 - #define __Pyx_GetAttrString(o,n) PyObject_GetAttrString((o),((char *)(n))) - #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),((char *)(n)),(a)) - #define __Pyx_DelAttrString(o,n) PyObject_DelAttrString((o),((char *)(n))) + #define __Pyx_PyMethod_New(func, self, klass) ((self) ? PyMethod_New(func, self) : PyInstanceMethod_New(func)) #else - #define __Pyx_GetAttrString(o,n) PyObject_GetAttrString((o),(n)) - #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),(n),(a)) - #define __Pyx_DelAttrString(o,n) PyObject_DelAttrString((o),(n)) + #define __Pyx_PyMethod_New(func, self, klass) PyMethod_New(func, self, klass) #endif -#if PY_VERSION_HEX < 0x02050000 - #define __Pyx_NAMESTR(n) ((char *)(n)) - #define __Pyx_DOCSTR(n) ((char *)(n)) +#if PY_VERSION_HEX >= 0x030500B1 +#define __Pyx_PyAsyncMethodsStruct PyAsyncMethods +#define __Pyx_PyType_AsAsync(obj) (Py_TYPE(obj)->tp_as_async) +#elif CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 +typedef struct { + unaryfunc am_await; + unaryfunc am_aiter; + unaryfunc am_anext; +} __Pyx_PyAsyncMethodsStruct; +#define __Pyx_PyType_AsAsync(obj) ((__Pyx_PyAsyncMethodsStruct*) (Py_TYPE(obj)->tp_reserved)) #else - #define __Pyx_NAMESTR(n) (n) - #define __Pyx_DOCSTR(n) (n) +#define __Pyx_PyType_AsAsync(obj) NULL +#endif +#ifndef CYTHON_RESTRICT + #if defined(__GNUC__) + #define CYTHON_RESTRICT __restrict__ + #elif defined(_MSC_VER) && _MSC_VER >= 1400 + #define CYTHON_RESTRICT __restrict + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define CYTHON_RESTRICT restrict + #else + #define CYTHON_RESTRICT + #endif #endif +#define __Pyx_void_to_None(void_result) ((void)(void_result), Py_INCREF(Py_None), Py_None) + #ifndef CYTHON_INLINE #if defined(__GNUC__) #define CYTHON_INLINE __inline__ @@ -261,24 +203,15 @@ #define CYTHON_INLINE #endif #endif -#ifndef CYTHON_RESTRICT - #if defined(__GNUC__) - #define CYTHON_RESTRICT __restrict__ - #elif defined(_MSC_VER) - #define CYTHON_RESTRICT __restrict - #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - #define CYTHON_RESTRICT restrict - #else - #define CYTHON_RESTRICT - #endif + +#if defined(WIN32) || defined(MS_WINDOWS) + #define _USE_MATH_DEFINES #endif +#include #ifdef NAN #define __PYX_NAN() ((float) NAN) #else static CYTHON_INLINE float __PYX_NAN() { - /* Initialize NaN. The sign is irrelevant, an exponent with all bits 1 and - a nonzero mantissa means NaN. If the first bit in the mantissa is 1, it is - a quiet NaN. */ float value; memset(&value, 0xFF, sizeof(value)); return value; @@ -302,10 +235,6 @@ static CYTHON_INLINE float __PYX_NAN() { #endif #endif -#if defined(WIN32) || defined(MS_WINDOWS) -#define _USE_MATH_DEFINES -#endif -#include #define __PYX_HAVE__Recode #define __PYX_HAVE_API__Recode #include "stdio.h" @@ -332,19 +261,56 @@ static CYTHON_INLINE float __PYX_NAN() { # define CYTHON_UNUSED # endif #endif +#ifndef CYTHON_NCP_UNUSED +# if CYTHON_COMPILING_IN_CPYTHON +# define CYTHON_NCP_UNUSED +# else +# define CYTHON_NCP_UNUSED CYTHON_UNUSED +# endif +#endif typedef struct {PyObject **p; char *s; const Py_ssize_t n; const char* encoding; - const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; /*proto*/ + const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; #define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0 #define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT 0 #define __PYX_DEFAULT_STRING_ENCODING "" #define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString #define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize +#define __Pyx_uchar_cast(c) ((unsigned char)c) +#define __Pyx_long_cast(x) ((long)x) +#define __Pyx_fits_Py_ssize_t(v, type, is_signed) (\ + (sizeof(type) < sizeof(Py_ssize_t)) ||\ + (sizeof(type) > sizeof(Py_ssize_t) &&\ + likely(v < (type)PY_SSIZE_T_MAX ||\ + v == (type)PY_SSIZE_T_MAX) &&\ + (!is_signed || likely(v > (type)PY_SSIZE_T_MIN ||\ + v == (type)PY_SSIZE_T_MIN))) ||\ + (sizeof(type) == sizeof(Py_ssize_t) &&\ + (is_signed || likely(v < (type)PY_SSIZE_T_MAX ||\ + v == (type)PY_SSIZE_T_MAX))) ) +#if defined (__cplusplus) && __cplusplus >= 201103L + #include + #define __Pyx_sst_abs(value) std::abs(value) +#elif SIZEOF_INT >= SIZEOF_SIZE_T + #define __Pyx_sst_abs(value) abs(value) +#elif SIZEOF_LONG >= SIZEOF_SIZE_T + #define __Pyx_sst_abs(value) labs(value) +#elif defined (_MSC_VER) && defined (_M_X64) + #define __Pyx_sst_abs(value) _abs64(value) +#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define __Pyx_sst_abs(value) llabs(value) +#elif defined (__GNUC__) + #define __Pyx_sst_abs(value) __builtin_llabs(value) +#else + #define __Pyx_sst_abs(value) ((value<0) ? -value : value) +#endif static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject*); static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length); +#define __Pyx_PyByteArray_FromString(s) PyByteArray_FromStringAndSize((const char*)s, strlen((const char*)s)) +#define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l) #define __Pyx_PyBytes_FromString PyBytes_FromString #define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize -static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(char*); +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*); #if PY_MAJOR_VERSION < 3 #define __Pyx_PyStr_FromString __Pyx_PyBytes_FromString #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize @@ -352,17 +318,19 @@ static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(char*); #define __Pyx_PyStr_FromString __Pyx_PyUnicode_FromString #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize #endif +#define __Pyx_PyObject_AsSString(s) ((signed char*) __Pyx_PyObject_AsString(s)) #define __Pyx_PyObject_AsUString(s) ((unsigned char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_FromUString(s) __Pyx_PyObject_FromString((char*)s) -#define __Pyx_PyBytes_FromUString(s) __Pyx_PyBytes_FromString((char*)s) -#define __Pyx_PyStr_FromUString(s) __Pyx_PyStr_FromString((char*)s) -#define __Pyx_PyUnicode_FromUString(s) __Pyx_PyUnicode_FromString((char*)s) +#define __Pyx_PyObject_FromCString(s) __Pyx_PyObject_FromString((const char*)s) +#define __Pyx_PyBytes_FromCString(s) __Pyx_PyBytes_FromString((const char*)s) +#define __Pyx_PyByteArray_FromCString(s) __Pyx_PyByteArray_FromString((const char*)s) +#define __Pyx_PyStr_FromCString(s) __Pyx_PyStr_FromString((const char*)s) +#define __Pyx_PyUnicode_FromCString(s) __Pyx_PyUnicode_FromString((const char*)s) #if PY_MAJOR_VERSION < 3 static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u) { const Py_UNICODE *u_end = u; while (*u_end++) ; - return u_end - u - 1; + return (size_t)(u_end - u - 1); } #else #define __Pyx_Py_UNICODE_strlen Py_UNICODE_strlen @@ -370,13 +338,13 @@ static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u) #define __Pyx_PyUnicode_FromUnicode(u) PyUnicode_FromUnicode(u, __Pyx_Py_UNICODE_strlen(u)) #define __Pyx_PyUnicode_FromUnicodeAndLength PyUnicode_FromUnicode #define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode -#define __Pyx_Owned_Py_None(b) (Py_INCREF(Py_None), Py_None) -#define __Pyx_PyBool_FromLong(b) ((b) ? (Py_INCREF(Py_True), Py_True) : (Py_INCREF(Py_False), Py_False)) +#define __Pyx_NewRef(obj) (Py_INCREF(obj), obj) +#define __Pyx_Owned_Py_None(b) __Pyx_NewRef(Py_None) +#define __Pyx_PyBool_FromLong(b) ((b) ? __Pyx_NewRef(Py_True) : __Pyx_NewRef(Py_False)) static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*); static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x); static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); -static CYTHON_INLINE size_t __Pyx_PyInt_AsSize_t(PyObject*); #if CYTHON_COMPILING_IN_CPYTHON #define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) #else @@ -385,19 +353,22 @@ static CYTHON_INLINE size_t __Pyx_PyInt_AsSize_t(PyObject*); #define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x)) #if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII static int __Pyx_sys_getdefaultencoding_not_ascii; -static int __Pyx_init_sys_getdefaultencoding_params() { - PyObject* sys = NULL; +static int __Pyx_init_sys_getdefaultencoding_params(void) { + PyObject* sys; PyObject* default_encoding = NULL; PyObject* ascii_chars_u = NULL; PyObject* ascii_chars_b = NULL; + const char* default_encoding_c; sys = PyImport_ImportModule("sys"); - if (sys == NULL) goto bad; - default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); - if (default_encoding == NULL) goto bad; - if (strcmp(PyBytes_AsString(default_encoding), "ascii") == 0) { + if (!sys) goto bad; + default_encoding = PyObject_CallMethod(sys, (char*) "getdefaultencoding", NULL); + Py_DECREF(sys); + if (!default_encoding) goto bad; + default_encoding_c = PyBytes_AsString(default_encoding); + if (!default_encoding_c) goto bad; + if (strcmp(default_encoding_c, "ascii") == 0) { __Pyx_sys_getdefaultencoding_not_ascii = 0; } else { - const char* default_encoding_c = PyBytes_AS_STRING(default_encoding); char ascii_chars[128]; int c; for (c = 0; c < 128; c++) { @@ -405,23 +376,21 @@ static int __Pyx_init_sys_getdefaultencoding_params() { } __Pyx_sys_getdefaultencoding_not_ascii = 1; ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL); - if (ascii_chars_u == NULL) goto bad; + if (!ascii_chars_u) goto bad; ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL); - if (ascii_chars_b == NULL || strncmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) { + if (!ascii_chars_b || !PyBytes_Check(ascii_chars_b) || memcmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) { PyErr_Format( PyExc_ValueError, - "This module compiled with c_string_encoding=ascii, but default encoding '%s' is not a superset of ascii.", + "This module compiled with c_string_encoding=ascii, but default encoding '%.200s' is not a superset of ascii.", default_encoding_c); goto bad; } + Py_DECREF(ascii_chars_u); + Py_DECREF(ascii_chars_b); } - Py_XDECREF(sys); - Py_XDECREF(default_encoding); - Py_XDECREF(ascii_chars_u); - Py_XDECREF(ascii_chars_b); + Py_DECREF(default_encoding); return 0; bad: - Py_XDECREF(sys); Py_XDECREF(default_encoding); Py_XDECREF(ascii_chars_u); Py_XDECREF(ascii_chars_b); @@ -434,22 +403,23 @@ bad: #define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL) #if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT static char* __PYX_DEFAULT_STRING_ENCODING; -static int __Pyx_init_sys_getdefaultencoding_params() { - PyObject* sys = NULL; +static int __Pyx_init_sys_getdefaultencoding_params(void) { + PyObject* sys; PyObject* default_encoding = NULL; char* default_encoding_c; sys = PyImport_ImportModule("sys"); - if (sys == NULL) goto bad; + if (!sys) goto bad; default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); - if (default_encoding == NULL) goto bad; - default_encoding_c = PyBytes_AS_STRING(default_encoding); + Py_DECREF(sys); + if (!default_encoding) goto bad; + default_encoding_c = PyBytes_AsString(default_encoding); + if (!default_encoding_c) goto bad; __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c)); + if (!__PYX_DEFAULT_STRING_ENCODING) goto bad; strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c); - Py_DECREF(sys); Py_DECREF(default_encoding); return 0; bad: - Py_XDECREF(sys); Py_XDECREF(default_encoding); return -1; } @@ -457,16 +427,11 @@ bad: #endif -#ifdef __GNUC__ - /* Test for GCC > 2.95 */ - #if __GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)) - #define likely(x) __builtin_expect(!!(x), 1) - #define unlikely(x) __builtin_expect(!!(x), 0) - #else /* __GNUC__ > 2 ... */ - #define likely(x) (x) - #define unlikely(x) (x) - #endif /* __GNUC__ > 2 ... */ -#else /* __GNUC__ */ +/* Test for GCC > 2.95 */ +#if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))) + #define likely(x) __builtin_expect(!!(x), 1) + #define unlikely(x) __builtin_expect(!!(x), 0) +#else /* !__GNUC__ or GCC < 2.95 */ #define likely(x) (x) #define unlikely(x) (x) #endif /* __GNUC__ */ @@ -487,10 +452,10 @@ static const char *__pyx_f[] = { }; /*--- Type declarations ---*/ -struct __pyx_obj_6Recode_Request; struct __pyx_obj_6Recode_Outer; +struct __pyx_obj_6Recode_Request; -/* "Recode.pyx":20 +/* "Recode.pyx":21 * # 02111-1307, USA. * * cdef enum bool: # <<<<<<<<<<<<<< @@ -502,31 +467,33 @@ enum __pyx_t_6Recode_bool { __pyx_e_6Recode_true = 1 }; -/* "Recode.pyx":615 - * # Recode library at REQUEST level. +/* "Recode.pyx":551 + * ## Recode library at OUTER level. * - * cdef class Request: # <<<<<<<<<<<<<< - * cdef RECODE_REQUEST request + * cdef class Outer: # <<<<<<<<<<<<<< + * cdef RECODE_OUTER outer * */ -struct __pyx_obj_6Recode_Request { +struct __pyx_obj_6Recode_Outer { PyObject_HEAD - RECODE_REQUEST request; + RECODE_OUTER outer; }; -/* "Recode.pyx":550 - * ## Recode library at OUTER level. +/* "Recode.pyx":616 + * # Recode library at REQUEST level. * - * cdef class Outer: # <<<<<<<<<<<<<< - * cdef RECODE_OUTER outer + * cdef class Request: # <<<<<<<<<<<<<< + * cdef RECODE_REQUEST request * */ -struct __pyx_obj_6Recode_Outer { +struct __pyx_obj_6Recode_Request { PyObject_HEAD - RECODE_OUTER outer; + RECODE_REQUEST request; }; + +/* --- Runtime support code (head) --- */ #ifndef CYTHON_REFNANNY #define CYTHON_REFNANNY 0 #endif @@ -540,22 +507,22 @@ struct __pyx_obj_6Recode_Outer { void (*FinishContext)(void**); } __Pyx_RefNannyAPIStruct; static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; - static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); /*proto*/ + static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL; #ifdef WITH_THREAD - #define __Pyx_RefNannySetupContext(name, acquire_gil) \ - if (acquire_gil) { \ - PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure(); \ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \ - PyGILState_Release(__pyx_gilstate_save); \ - } else { \ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \ + #define __Pyx_RefNannySetupContext(name, acquire_gil)\ + if (acquire_gil) {\ + PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\ + PyGILState_Release(__pyx_gilstate_save);\ + } else {\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\ } #else - #define __Pyx_RefNannySetupContext(name, acquire_gil) \ + #define __Pyx_RefNannySetupContext(name, acquire_gil)\ __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__) #endif - #define __Pyx_RefNannyFinishContext() \ + #define __Pyx_RefNannyFinishContext()\ __Pyx_RefNanny->FinishContext(&__pyx_refnanny) #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__) #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__) @@ -577,7 +544,15 @@ struct __pyx_obj_6Recode_Outer { #define __Pyx_XDECREF(r) Py_XDECREF(r) #define __Pyx_XGOTREF(r) #define __Pyx_XGIVEREF(r) -#endif /* CYTHON_REFNANNY */ +#endif +#define __Pyx_XDECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; __Pyx_XDECREF(tmp);\ + } while (0) +#define __Pyx_DECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; __Pyx_DECREF(tmp);\ + } while (0) #define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0) #define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0) @@ -596,16 +571,16 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject #define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n) #endif -static PyObject *__Pyx_GetBuiltinName(PyObject *name); /*proto*/ +static PyObject *__Pyx_GetBuiltinName(PyObject *name); -static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); /*proto*/ +static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); -static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[], \ - PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, \ - const char* function_name); /*proto*/ +static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[],\ + PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args,\ + const char* function_name); static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, - Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); /*proto*/ + Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); #if CYTHON_COMPILING_IN_CPYTHON static CYTHON_INLINE int __Pyx_PyList_Append(PyObject* list, PyObject* x) { @@ -623,54 +598,34 @@ static CYTHON_INLINE int __Pyx_PyList_Append(PyObject* list, PyObject* x) { #define __Pyx_PyList_Append(L,x) PyList_Append(L,x) #endif -static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name); /*proto*/ - -static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb); /*proto*/ -static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb); /*proto*/ - -static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); /*proto*/ - -static int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed, - const char *name, int exact); /*proto*/ - -static PyObject *__Pyx_FindPy2Metaclass(PyObject *bases); /*proto*/ +static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name); -static PyObject *__Pyx_CreateClass(PyObject *bases, PyObject *dict, PyObject *name, - PyObject *qualname, PyObject *modname); /*proto*/ +static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb); +static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb); -static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject *); +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); -static CYTHON_INLINE unsigned short __Pyx_PyInt_AsUnsignedShort(PyObject *); - -static CYTHON_INLINE unsigned int __Pyx_PyInt_AsUnsignedInt(PyObject *); - -static CYTHON_INLINE char __Pyx_PyInt_AsChar(PyObject *); - -static CYTHON_INLINE short __Pyx_PyInt_AsShort(PyObject *); - -static CYTHON_INLINE int __Pyx_PyInt_AsInt(PyObject *); - -static CYTHON_INLINE signed char __Pyx_PyInt_AsSignedChar(PyObject *); - -static CYTHON_INLINE signed short __Pyx_PyInt_AsSignedShort(PyObject *); - -static CYTHON_INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject *); - -static CYTHON_INLINE int __Pyx_PyInt_AsLongDouble(PyObject *); - -static CYTHON_INLINE unsigned long __Pyx_PyInt_AsUnsignedLong(PyObject *); - -static CYTHON_INLINE unsigned PY_LONG_LONG __Pyx_PyInt_AsUnsignedLongLong(PyObject *); +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw); +#else +#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw) +#endif -static CYTHON_INLINE long __Pyx_PyInt_AsLong(PyObject *); +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg); +#endif -static CYTHON_INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject *); +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg); -static CYTHON_INLINE signed long __Pyx_PyInt_AsSignedLong(PyObject *); +static CYTHON_INLINE int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed, + const char *name, int exact); -static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject *); +static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases); -static int __Pyx_check_binary_version(void); +static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name, PyObject *qualname, + PyObject *mkw, PyObject *modname, PyObject *doc); +static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObject *bases, PyObject *dict, + PyObject *mkw, int calculate_metaclass, int allow_py2_metaclass); typedef struct { int code_line; @@ -687,9 +642,43 @@ static PyCodeObject *__pyx_find_code_object(int code_line); static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object); static void __Pyx_AddTraceback(const char *funcname, int c_line, - int py_line, const char *filename); /*proto*/ + int py_line, const char *filename); + +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_enum__recode_symbol_type(enum recode_symbol_type value); + +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_enum__recode_data_type(enum recode_data_type value); + +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_enum__recode_size(enum recode_size value); + +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_enum__recode_step_type(enum recode_step_type value); + +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_enum__recode_sequence_strategy(enum recode_sequence_strategy value); + +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_enum__recode_swap_input(enum recode_swap_input value); + +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_enum__recode_error(enum recode_error value); + +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_enum__recode_list_format(enum recode_list_format value); + +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_enum__recode_programming_language(enum recode_programming_language value); + +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value); + +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_enum__alias_find_type(enum alias_find_type value); + +static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *); + +static CYTHON_INLINE enum recode_list_format __Pyx_PyInt_As_enum__recode_list_format(PyObject *); + +static CYTHON_INLINE enum __pyx_t_6Recode_bool __Pyx_PyInt_As_enum____pyx_t_6Recode_bool(PyObject *); + +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value); + +static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *); -static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/ +static int __Pyx_check_binary_version(void); + +static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /* Module declarations from 'Recode' */ @@ -700,6 +689,168 @@ int __pyx_module_is_main_Recode = 0; /* Implementation of 'Recode' */ static PyObject *__pyx_builtin_Exception; +static char __pyx_k_NUL[] = "NUL"; +static char __pyx_k_doc[] = "__doc__"; +static char __pyx_k_main[] = "__main__"; +static char __pyx_k_scan[] = "scan"; +static char __pyx_k_test[] = "__test__"; +static char __pyx_k_error[] = "error"; +static char __pyx_k_iconv[] = "iconv"; +static char __pyx_k_input[] = "input"; +static char __pyx_k_outer[] = "outer"; +static char __pyx_k_xDONE[] = "xDONE"; +static char __pyx_k_xELSE[] = "xELSE"; +static char __pyx_k_Recode[] = "Recode"; +static char __pyx_k_SIZE_1[] = "SIZE_1"; +static char __pyx_k_SIZE_2[] = "SIZE_2"; +static char __pyx_k_SIZE_4[] = "SIZE_4"; +static char __pyx_k_SIZE_N[] = "SIZE_N"; +static char __pyx_k_format[] = "format"; +static char __pyx_k_module[] = "__module__"; +static char __pyx_k_strict[] = "strict"; +static char __pyx_k_string[] = "string"; +static char __pyx_k_CHARSET[] = "CHARSET"; +static char __pyx_k_SWAP_NO[] = "SWAP_NO"; +static char __pyx_k_charset[] = "charset"; +static char __pyx_k_command[] = "command"; +static char __pyx_k_prepare[] = "__prepare__"; +static char __pyx_k_NO_ERROR[] = "NO_ERROR"; +static char __pyx_k_SWAP_YES[] = "SWAP_YES"; +static char __pyx_k_language[] = "language"; +static char __pyx_k_qualname[] = "__qualname__"; +static char __pyx_k_Exception[] = "Exception"; +static char __pyx_k_NO_FORMAT[] = "NO_FORMAT"; +static char __pyx_k_metaclass[] = "__metaclass__"; +static char __pyx_k_LANGUAGE_C[] = "LANGUAGE_C"; +static char __pyx_k_STRIP_DATA[] = "STRIP_DATA"; +static char __pyx_k_STRIP_SIZE[] = "STRIP_SIZE"; +static char __pyx_k_USER_ERROR[] = "USER_ERROR"; +static char __pyx_k_auto_abort[] = "auto_abort"; +static char __pyx_k_FULL_FORMAT[] = "FULL_FORMAT"; +static char __pyx_k_NO_LANGUAGE[] = "NO_LANGUAGE"; +static char __pyx_k_BYTE_TO_BYTE[] = "BYTE_TO_BYTE"; +static char __pyx_k_COMBINE_STEP[] = "COMBINE_STEP"; +static char __pyx_k_DATA_SURFACE[] = "DATA_SURFACE"; +static char __pyx_k_EXPLODE_DATA[] = "EXPLODE_DATA"; +static char __pyx_k_EXPLODE_STEP[] = "EXPLODE_STEP"; +static char __pyx_k_OCTAL_FORMAT[] = "OCTAL_FORMAT"; +static char __pyx_k_SYSTEM_ERROR[] = "SYSTEM_ERROR"; +static char __pyx_k_TREE_SURFACE[] = "TREE_SURFACE"; +static char __pyx_k_UCS2_TO_BYTE[] = "UCS2_TO_BYTE"; +static char __pyx_k_INVALID_INPUT[] = "INVALID_INPUT"; +static char __pyx_k_LANGUAGE_PERL[] = "LANGUAGE_PERL"; +static char __pyx_k_MAXIMUM_ERROR[] = "MAXIMUM_ERROR"; +static char __pyx_k_NOT_CANONICAL[] = "NOT_CANONICAL"; +static char __pyx_k_NO_ICONV_FLAG[] = "NO_ICONV_FLAG"; +static char __pyx_k_NO_STEP_TABLE[] = "NO_STEP_TABLE"; +static char __pyx_k_BYTE_TO_STRING[] = "BYTE_TO_STRING"; +static char __pyx_k_DECIMAL_FORMAT[] = "DECIMAL_FORMAT"; +static char __pyx_k_INTERNAL_ERROR[] = "INTERNAL_ERROR"; +static char __pyx_k_NO_SYMBOL_TYPE[] = "NO_SYMBOL_TYPE"; +static char __pyx_k_STRING_TO_UCS2[] = "STRING_TO_UCS2"; +static char __pyx_k_SWAP_UNDECIDED[] = "SWAP_UNDECIDED"; +static char __pyx_k_UCS2_TO_STRING[] = "UCS2_TO_STRING"; +static char __pyx_k_UNTRANSLATABLE[] = "UNTRANSLATABLE"; +static char __pyx_k_AUTO_ABORT_FLAG[] = "AUTO_ABORT_FLAG"; +static char __pyx_k_BYTE_ORDER_MARK[] = "BYTE_ORDER_MARK"; +static char __pyx_k_COMBINE_EXPLODE[] = "COMBINE_EXPLODE"; +static char __pyx_k_NOT_A_CHARACTER[] = "NOT_A_CHARACTER"; +static char __pyx_k_NO_CHARSET_DATA[] = "NO_CHARSET_DATA"; +static char __pyx_k_AMBIGUOUS_OUTPUT[] = "AMBIGUOUS_OUTPUT"; +static char __pyx_k_HEXADECIMAL_FORMAT[] = "HEXADECIMAL_FORMAT"; +static char __pyx_k_SEQUENCE_IN_MEMORY[] = "SEQUENCE_IN_MEMORY"; +static char __pyx_k_SEQUENCE_WITH_PIPE[] = "SEQUENCE_WITH_PIPE"; +static char __pyx_k_STRATEGY_UNDECIDED[] = "STRATEGY_UNDECIDED"; +static char __pyx_k_SEQUENCE_WITH_FILES[] = "SEQUENCE_WITH_FILES"; +static char __pyx_k_ALIAS_FIND_AS_EITHER[] = "ALIAS_FIND_AS_EITHER"; +static char __pyx_k_ALIAS_FIND_AS_CHARSET[] = "ALIAS_FIND_AS_CHARSET"; +static char __pyx_k_ALIAS_FIND_AS_SURFACE[] = "ALIAS_FIND_AS_SURFACE"; +static char __pyx_k_REPLACEMENT_CHARACTER[] = "REPLACEMENT_CHARACTER"; +static char __pyx_k_SYMBOL_CREATE_CHARSET[] = "SYMBOL_CREATE_CHARSET"; +static char __pyx_k_BYTE_ORDER_MARK_SWAPPED[] = "BYTE_ORDER_MARK_SWAPPED"; +static char __pyx_k_SYMBOL_CREATE_DATA_SURFACE[] = "SYMBOL_CREATE_DATA_SURFACE"; +static char __pyx_k_SYMBOL_CREATE_TREE_SURFACE[] = "SYMBOL_CREATE_TREE_SURFACE"; +static PyObject *__pyx_n_s_ALIAS_FIND_AS_CHARSET; +static PyObject *__pyx_n_s_ALIAS_FIND_AS_EITHER; +static PyObject *__pyx_n_s_ALIAS_FIND_AS_SURFACE; +static PyObject *__pyx_n_s_AMBIGUOUS_OUTPUT; +static PyObject *__pyx_n_s_AUTO_ABORT_FLAG; +static PyObject *__pyx_n_s_BYTE_ORDER_MARK; +static PyObject *__pyx_n_s_BYTE_ORDER_MARK_SWAPPED; +static PyObject *__pyx_n_s_BYTE_TO_BYTE; +static PyObject *__pyx_n_s_BYTE_TO_STRING; +static PyObject *__pyx_n_s_CHARSET; +static PyObject *__pyx_n_s_COMBINE_EXPLODE; +static PyObject *__pyx_n_s_COMBINE_STEP; +static PyObject *__pyx_n_s_DATA_SURFACE; +static PyObject *__pyx_n_s_DECIMAL_FORMAT; +static PyObject *__pyx_n_s_EXPLODE_DATA; +static PyObject *__pyx_n_s_EXPLODE_STEP; +static PyObject *__pyx_n_s_Exception; +static PyObject *__pyx_n_s_FULL_FORMAT; +static PyObject *__pyx_n_s_HEXADECIMAL_FORMAT; +static PyObject *__pyx_n_s_INTERNAL_ERROR; +static PyObject *__pyx_n_s_INVALID_INPUT; +static PyObject *__pyx_n_s_LANGUAGE_C; +static PyObject *__pyx_n_s_LANGUAGE_PERL; +static PyObject *__pyx_n_s_MAXIMUM_ERROR; +static PyObject *__pyx_n_s_NOT_A_CHARACTER; +static PyObject *__pyx_n_s_NOT_CANONICAL; +static PyObject *__pyx_n_s_NO_CHARSET_DATA; +static PyObject *__pyx_n_s_NO_ERROR; +static PyObject *__pyx_n_s_NO_FORMAT; +static PyObject *__pyx_n_s_NO_ICONV_FLAG; +static PyObject *__pyx_n_s_NO_LANGUAGE; +static PyObject *__pyx_n_s_NO_STEP_TABLE; +static PyObject *__pyx_n_s_NO_SYMBOL_TYPE; +static PyObject *__pyx_n_s_NUL; +static PyObject *__pyx_n_s_OCTAL_FORMAT; +static PyObject *__pyx_n_s_REPLACEMENT_CHARACTER; +static PyObject *__pyx_n_s_Recode; +static PyObject *__pyx_n_s_SEQUENCE_IN_MEMORY; +static PyObject *__pyx_n_s_SEQUENCE_WITH_FILES; +static PyObject *__pyx_n_s_SEQUENCE_WITH_PIPE; +static PyObject *__pyx_n_s_SIZE_1; +static PyObject *__pyx_n_s_SIZE_2; +static PyObject *__pyx_n_s_SIZE_4; +static PyObject *__pyx_n_s_SIZE_N; +static PyObject *__pyx_n_s_STRATEGY_UNDECIDED; +static PyObject *__pyx_n_s_STRING_TO_UCS2; +static PyObject *__pyx_n_s_STRIP_DATA; +static PyObject *__pyx_n_s_STRIP_SIZE; +static PyObject *__pyx_n_s_SWAP_NO; +static PyObject *__pyx_n_s_SWAP_UNDECIDED; +static PyObject *__pyx_n_s_SWAP_YES; +static PyObject *__pyx_n_s_SYMBOL_CREATE_CHARSET; +static PyObject *__pyx_n_s_SYMBOL_CREATE_DATA_SURFACE; +static PyObject *__pyx_n_s_SYMBOL_CREATE_TREE_SURFACE; +static PyObject *__pyx_n_s_SYSTEM_ERROR; +static PyObject *__pyx_n_s_TREE_SURFACE; +static PyObject *__pyx_n_s_UCS2_TO_BYTE; +static PyObject *__pyx_n_s_UCS2_TO_STRING; +static PyObject *__pyx_n_s_UNTRANSLATABLE; +static PyObject *__pyx_n_s_USER_ERROR; +static PyObject *__pyx_n_s_auto_abort; +static PyObject *__pyx_n_s_charset; +static PyObject *__pyx_n_s_command; +static PyObject *__pyx_n_s_doc; +static PyObject *__pyx_n_s_error; +static PyObject *__pyx_n_s_format; +static PyObject *__pyx_n_s_iconv; +static PyObject *__pyx_n_s_input; +static PyObject *__pyx_n_s_language; +static PyObject *__pyx_n_s_main; +static PyObject *__pyx_n_s_metaclass; +static PyObject *__pyx_n_s_module; +static PyObject *__pyx_n_s_outer; +static PyObject *__pyx_n_s_prepare; +static PyObject *__pyx_n_s_qualname; +static PyObject *__pyx_n_s_scan; +static PyObject *__pyx_n_s_strict; +static PyObject *__pyx_n_s_string; +static PyObject *__pyx_n_s_test; +static PyObject *__pyx_n_s_xDONE; +static PyObject *__pyx_n_s_xELSE; static int __pyx_pf_6Recode_5Outer___init__(struct __pyx_obj_6Recode_Outer *__pyx_v_self, PyObject *__pyx_v_auto_abort, PyObject *__pyx_v_iconv, PyObject *__pyx_v_strict); /* proto */ static void __pyx_pf_6Recode_5Outer_2__dealloc__(struct __pyx_obj_6Recode_Outer *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_6Recode_5Outer_4default_charset(CYTHON_UNUSED struct __pyx_obj_6Recode_Outer *__pyx_v_self); /* proto */ @@ -717,170 +868,15 @@ static PyObject *__pyx_pf_6Recode_7Request_10format_table(struct __pyx_obj_6Reco static PyObject *__pyx_pf_6Recode_7Request_12string(struct __pyx_obj_6Recode_Request *__pyx_v_self, char *__pyx_v_text); /* proto */ static PyObject *__pyx_tp_new_6Recode_Outer(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ static PyObject *__pyx_tp_new_6Recode_Request(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ -static char __pyx_k_5[] = "SYMBOL_CREATE_CHARSET"; -static char __pyx_k_6[] = "SYMBOL_CREATE_DATA_SURFACE"; -static char __pyx_k_7[] = "SYMBOL_CREATE_TREE_SURFACE"; -static char __pyx_k_8[] = "ALIAS_FIND_AS_CHARSET"; -static char __pyx_k_9[] = "ALIAS_FIND_AS_SURFACE"; -static char __pyx_k_10[] = "ALIAS_FIND_AS_EITHER"; -static char __pyx_k_11[] = "REPLACEMENT_CHARACTER"; -static char __pyx_k_12[] = "BYTE_ORDER_MARK_SWAPPED"; -static char __pyx_k__NUL[] = "NUL"; -static char __pyx_k__scan[] = "scan"; -static char __pyx_k__error[] = "error"; -static char __pyx_k__iconv[] = "iconv"; -static char __pyx_k__input[] = "input"; -static char __pyx_k__outer[] = "outer"; -static char __pyx_k__xDONE[] = "xDONE"; -static char __pyx_k__xELSE[] = "xELSE"; -static char __pyx_k__Recode[] = "Recode"; -static char __pyx_k__SIZE_1[] = "SIZE_1"; -static char __pyx_k__SIZE_2[] = "SIZE_2"; -static char __pyx_k__SIZE_4[] = "SIZE_4"; -static char __pyx_k__SIZE_N[] = "SIZE_N"; -static char __pyx_k__format[] = "format"; -static char __pyx_k__strict[] = "strict"; -static char __pyx_k__string[] = "string"; -static char __pyx_k__CHARSET[] = "CHARSET"; -static char __pyx_k__SWAP_NO[] = "SWAP_NO"; -static char __pyx_k__charset[] = "charset"; -static char __pyx_k__command[] = "command"; -static char __pyx_k__NO_ERROR[] = "NO_ERROR"; -static char __pyx_k__SWAP_YES[] = "SWAP_YES"; -static char __pyx_k____main__[] = "__main__"; -static char __pyx_k____test__[] = "__test__"; -static char __pyx_k__language[] = "language"; -static char __pyx_k__Exception[] = "Exception"; -static char __pyx_k__NO_FORMAT[] = "NO_FORMAT"; -static char __pyx_k____class__[] = "__class__"; -static char __pyx_k__LANGUAGE_C[] = "LANGUAGE_C"; -static char __pyx_k__STRIP_DATA[] = "STRIP_DATA"; -static char __pyx_k__STRIP_SIZE[] = "STRIP_SIZE"; -static char __pyx_k__USER_ERROR[] = "USER_ERROR"; -static char __pyx_k____module__[] = "__module__"; -static char __pyx_k__auto_abort[] = "auto_abort"; -static char __pyx_k__FULL_FORMAT[] = "FULL_FORMAT"; -static char __pyx_k__NO_LANGUAGE[] = "NO_LANGUAGE"; -static char __pyx_k__BYTE_TO_BYTE[] = "BYTE_TO_BYTE"; -static char __pyx_k__COMBINE_STEP[] = "COMBINE_STEP"; -static char __pyx_k__DATA_SURFACE[] = "DATA_SURFACE"; -static char __pyx_k__EXPLODE_DATA[] = "EXPLODE_DATA"; -static char __pyx_k__EXPLODE_STEP[] = "EXPLODE_STEP"; -static char __pyx_k__OCTAL_FORMAT[] = "OCTAL_FORMAT"; -static char __pyx_k__SYSTEM_ERROR[] = "SYSTEM_ERROR"; -static char __pyx_k__TREE_SURFACE[] = "TREE_SURFACE"; -static char __pyx_k__UCS2_TO_BYTE[] = "UCS2_TO_BYTE"; -static char __pyx_k____qualname__[] = "__qualname__"; -static char __pyx_k__INVALID_INPUT[] = "INVALID_INPUT"; -static char __pyx_k__LANGUAGE_PERL[] = "LANGUAGE_PERL"; -static char __pyx_k__MAXIMUM_ERROR[] = "MAXIMUM_ERROR"; -static char __pyx_k__NOT_CANONICAL[] = "NOT_CANONICAL"; -static char __pyx_k__NO_ICONV_FLAG[] = "NO_ICONV_FLAG"; -static char __pyx_k__NO_STEP_TABLE[] = "NO_STEP_TABLE"; -static char __pyx_k____metaclass__[] = "__metaclass__"; -static char __pyx_k__BYTE_TO_STRING[] = "BYTE_TO_STRING"; -static char __pyx_k__DECIMAL_FORMAT[] = "DECIMAL_FORMAT"; -static char __pyx_k__INTERNAL_ERROR[] = "INTERNAL_ERROR"; -static char __pyx_k__NO_SYMBOL_TYPE[] = "NO_SYMBOL_TYPE"; -static char __pyx_k__STRING_TO_UCS2[] = "STRING_TO_UCS2"; -static char __pyx_k__SWAP_UNDECIDED[] = "SWAP_UNDECIDED"; -static char __pyx_k__UCS2_TO_STRING[] = "UCS2_TO_STRING"; -static char __pyx_k__UNTRANSLATABLE[] = "UNTRANSLATABLE"; -static char __pyx_k__AUTO_ABORT_FLAG[] = "AUTO_ABORT_FLAG"; -static char __pyx_k__BYTE_ORDER_MARK[] = "BYTE_ORDER_MARK"; -static char __pyx_k__COMBINE_EXPLODE[] = "COMBINE_EXPLODE"; -static char __pyx_k__NOT_A_CHARACTER[] = "NOT_A_CHARACTER"; -static char __pyx_k__NO_CHARSET_DATA[] = "NO_CHARSET_DATA"; -static char __pyx_k__AMBIGUOUS_OUTPUT[] = "AMBIGUOUS_OUTPUT"; -static char __pyx_k__HEXADECIMAL_FORMAT[] = "HEXADECIMAL_FORMAT"; -static char __pyx_k__SEQUENCE_IN_MEMORY[] = "SEQUENCE_IN_MEMORY"; -static char __pyx_k__SEQUENCE_WITH_PIPE[] = "SEQUENCE_WITH_PIPE"; -static char __pyx_k__STRATEGY_UNDECIDED[] = "STRATEGY_UNDECIDED"; -static char __pyx_k__SEQUENCE_WITH_FILES[] = "SEQUENCE_WITH_FILES"; -static PyObject *__pyx_n_s_10; -static PyObject *__pyx_n_s_11; -static PyObject *__pyx_n_s_12; -static PyObject *__pyx_n_s_5; -static PyObject *__pyx_n_s_6; -static PyObject *__pyx_n_s_7; -static PyObject *__pyx_n_s_8; -static PyObject *__pyx_n_s_9; -static PyObject *__pyx_n_s__AMBIGUOUS_OUTPUT; -static PyObject *__pyx_n_s__AUTO_ABORT_FLAG; -static PyObject *__pyx_n_s__BYTE_ORDER_MARK; -static PyObject *__pyx_n_s__BYTE_TO_BYTE; -static PyObject *__pyx_n_s__BYTE_TO_STRING; -static PyObject *__pyx_n_s__CHARSET; -static PyObject *__pyx_n_s__COMBINE_EXPLODE; -static PyObject *__pyx_n_s__COMBINE_STEP; -static PyObject *__pyx_n_s__DATA_SURFACE; -static PyObject *__pyx_n_s__DECIMAL_FORMAT; -static PyObject *__pyx_n_s__EXPLODE_DATA; -static PyObject *__pyx_n_s__EXPLODE_STEP; -static PyObject *__pyx_n_s__Exception; -static PyObject *__pyx_n_s__FULL_FORMAT; -static PyObject *__pyx_n_s__HEXADECIMAL_FORMAT; -static PyObject *__pyx_n_s__INTERNAL_ERROR; -static PyObject *__pyx_n_s__INVALID_INPUT; -static PyObject *__pyx_n_s__LANGUAGE_C; -static PyObject *__pyx_n_s__LANGUAGE_PERL; -static PyObject *__pyx_n_s__MAXIMUM_ERROR; -static PyObject *__pyx_n_s__NOT_A_CHARACTER; -static PyObject *__pyx_n_s__NOT_CANONICAL; -static PyObject *__pyx_n_s__NO_CHARSET_DATA; -static PyObject *__pyx_n_s__NO_ERROR; -static PyObject *__pyx_n_s__NO_FORMAT; -static PyObject *__pyx_n_s__NO_ICONV_FLAG; -static PyObject *__pyx_n_s__NO_LANGUAGE; -static PyObject *__pyx_n_s__NO_STEP_TABLE; -static PyObject *__pyx_n_s__NO_SYMBOL_TYPE; -static PyObject *__pyx_n_s__NUL; -static PyObject *__pyx_n_s__OCTAL_FORMAT; -static PyObject *__pyx_n_s__Recode; -static PyObject *__pyx_n_s__SEQUENCE_IN_MEMORY; -static PyObject *__pyx_n_s__SEQUENCE_WITH_FILES; -static PyObject *__pyx_n_s__SEQUENCE_WITH_PIPE; -static PyObject *__pyx_n_s__SIZE_1; -static PyObject *__pyx_n_s__SIZE_2; -static PyObject *__pyx_n_s__SIZE_4; -static PyObject *__pyx_n_s__SIZE_N; -static PyObject *__pyx_n_s__STRATEGY_UNDECIDED; -static PyObject *__pyx_n_s__STRING_TO_UCS2; -static PyObject *__pyx_n_s__STRIP_DATA; -static PyObject *__pyx_n_s__STRIP_SIZE; -static PyObject *__pyx_n_s__SWAP_NO; -static PyObject *__pyx_n_s__SWAP_UNDECIDED; -static PyObject *__pyx_n_s__SWAP_YES; -static PyObject *__pyx_n_s__SYSTEM_ERROR; -static PyObject *__pyx_n_s__TREE_SURFACE; -static PyObject *__pyx_n_s__UCS2_TO_BYTE; -static PyObject *__pyx_n_s__UCS2_TO_STRING; -static PyObject *__pyx_n_s__UNTRANSLATABLE; -static PyObject *__pyx_n_s__USER_ERROR; -static PyObject *__pyx_n_s____class__; -static PyObject *__pyx_n_s____main__; -static PyObject *__pyx_n_s____metaclass__; -static PyObject *__pyx_n_s____module__; -static PyObject *__pyx_n_s____qualname__; -static PyObject *__pyx_n_s____test__; -static PyObject *__pyx_n_s__auto_abort; -static PyObject *__pyx_n_s__charset; -static PyObject *__pyx_n_s__command; -static PyObject *__pyx_n_s__error; -static PyObject *__pyx_n_s__format; -static PyObject *__pyx_n_s__iconv; -static PyObject *__pyx_n_s__input; -static PyObject *__pyx_n_s__language; -static PyObject *__pyx_n_s__outer; -static PyObject *__pyx_n_s__scan; -static PyObject *__pyx_n_s__strict; -static PyObject *__pyx_n_s__string; -static PyObject *__pyx_n_s__xDONE; -static PyObject *__pyx_n_s__xELSE; -static PyObject *__pyx_k_1; -static PyObject *__pyx_k_2; -static PyObject *__pyx_k_3; -static PyObject *__pyx_k_4; +static PyObject *__pyx_k_; + +/* "Recode.pyx":554 + * cdef RECODE_OUTER outer + * + * def __init__(self, auto_abort=False, iconv=False, strict=False): # <<<<<<<<<<<<<< + * cdef int flags + * cdef RECODE_SINGLE single + */ /* Python wrapper */ static int __pyx_pw_6Recode_5Outer_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ @@ -895,11 +891,11 @@ static int __pyx_pw_6Recode_5Outer_1__init__(PyObject *__pyx_v_self, PyObject *_ __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__auto_abort,&__pyx_n_s__iconv,&__pyx_n_s__strict,0}; + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_auto_abort,&__pyx_n_s_iconv,&__pyx_n_s_strict,0}; PyObject* values[3] = {0,0,0}; - values[0] = __pyx_k_1; - values[1] = __pyx_k_2; - values[2] = __pyx_k_3; + values[0] = ((PyObject *)Py_False); + values[1] = ((PyObject *)Py_False); + values[2] = ((PyObject *)Py_False); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); @@ -914,22 +910,22 @@ static int __pyx_pw_6Recode_5Outer_1__init__(PyObject *__pyx_v_self, PyObject *_ switch (pos_args) { case 0: if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__auto_abort); + PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_auto_abort); if (value) { values[0] = value; kw_args--; } } case 1: if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__iconv); + PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_iconv); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__strict); + PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_strict); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 553; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 554; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { @@ -946,25 +942,19 @@ static int __pyx_pw_6Recode_5Outer_1__init__(PyObject *__pyx_v_self, PyObject *_ } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__init__", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 553; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("__init__", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 554; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("Recode.Outer.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return -1; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_6Recode_5Outer___init__(((struct __pyx_obj_6Recode_Outer *)__pyx_v_self), __pyx_v_auto_abort, __pyx_v_iconv, __pyx_v_strict); + + /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "Recode.pyx":553 - * cdef RECODE_OUTER outer - * - * def __init__(self, auto_abort=False, iconv=False, strict=False): # <<<<<<<<<<<<<< - * cdef int flags - * cdef RECODE_SINGLE single - */ - static int __pyx_pf_6Recode_5Outer___init__(struct __pyx_obj_6Recode_Outer *__pyx_v_self, PyObject *__pyx_v_auto_abort, PyObject *__pyx_v_iconv, PyObject *__pyx_v_strict) { int __pyx_v_flags; RECODE_SINGLE __pyx_v_single; @@ -978,7 +968,7 @@ static int __pyx_pf_6Recode_5Outer___init__(struct __pyx_obj_6Recode_Outer *__py int __pyx_clineno = 0; __Pyx_RefNannySetupContext("__init__", 0); - /* "Recode.pyx":556 + /* "Recode.pyx":557 * cdef int flags * cdef RECODE_SINGLE single * flags = 0 # <<<<<<<<<<<<<< @@ -987,17 +977,17 @@ static int __pyx_pf_6Recode_5Outer___init__(struct __pyx_obj_6Recode_Outer *__py */ __pyx_v_flags = 0; - /* "Recode.pyx":557 + /* "Recode.pyx":558 * cdef RECODE_SINGLE single * flags = 0 * if auto_abort: # <<<<<<<<<<<<<< * flags = flags | RECODE_AUTO_ABORT_FLAG * if not iconv: */ - __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_auto_abort); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 557; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_auto_abort); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 558; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__pyx_t_1) { - /* "Recode.pyx":558 + /* "Recode.pyx":559 * flags = 0 * if auto_abort: * flags = flags | RECODE_AUTO_ABORT_FLAG # <<<<<<<<<<<<<< @@ -1005,22 +995,28 @@ static int __pyx_pf_6Recode_5Outer___init__(struct __pyx_obj_6Recode_Outer *__py * flags = flags | RECODE_NO_ICONV_FLAG */ __pyx_v_flags = (__pyx_v_flags | RECODE_AUTO_ABORT_FLAG); - goto __pyx_L3; + + /* "Recode.pyx":558 + * cdef RECODE_SINGLE single + * flags = 0 + * if auto_abort: # <<<<<<<<<<<<<< + * flags = flags | RECODE_AUTO_ABORT_FLAG + * if not iconv: + */ } - __pyx_L3:; - /* "Recode.pyx":559 + /* "Recode.pyx":560 * if auto_abort: * flags = flags | RECODE_AUTO_ABORT_FLAG * if not iconv: # <<<<<<<<<<<<<< * flags = flags | RECODE_NO_ICONV_FLAG * self.outer = recode_new_outer(flags) */ - __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_iconv); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 559; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_iconv); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_2 = ((!__pyx_t_1) != 0); if (__pyx_t_2) { - /* "Recode.pyx":560 + /* "Recode.pyx":561 * flags = flags | RECODE_AUTO_ABORT_FLAG * if not iconv: * flags = flags | RECODE_NO_ICONV_FLAG # <<<<<<<<<<<<<< @@ -1028,11 +1024,17 @@ static int __pyx_pf_6Recode_5Outer___init__(struct __pyx_obj_6Recode_Outer *__py * if strict: */ __pyx_v_flags = (__pyx_v_flags | RECODE_NO_ICONV_FLAG); - goto __pyx_L4; + + /* "Recode.pyx":560 + * if auto_abort: + * flags = flags | RECODE_AUTO_ABORT_FLAG + * if not iconv: # <<<<<<<<<<<<<< + * flags = flags | RECODE_NO_ICONV_FLAG + * self.outer = recode_new_outer(flags) + */ } - __pyx_L4:; - /* "Recode.pyx":561 + /* "Recode.pyx":562 * if not iconv: * flags = flags | RECODE_NO_ICONV_FLAG * self.outer = recode_new_outer(flags) # <<<<<<<<<<<<<< @@ -1041,17 +1043,17 @@ static int __pyx_pf_6Recode_5Outer___init__(struct __pyx_obj_6Recode_Outer *__py */ __pyx_v_self->outer = recode_new_outer(__pyx_v_flags); - /* "Recode.pyx":562 + /* "Recode.pyx":563 * flags = flags | RECODE_NO_ICONV_FLAG * self.outer = recode_new_outer(flags) * if strict: # <<<<<<<<<<<<<< * single = self.outer.single_list * while single is not NULL: */ - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_strict); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_strict); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 563; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__pyx_t_2) { - /* "Recode.pyx":563 + /* "Recode.pyx":564 * self.outer = recode_new_outer(flags) * if strict: * single = self.outer.single_list # <<<<<<<<<<<<<< @@ -1061,7 +1063,7 @@ static int __pyx_pf_6Recode_5Outer___init__(struct __pyx_obj_6Recode_Outer *__py __pyx_t_3 = __pyx_v_self->outer->single_list; __pyx_v_single = __pyx_t_3; - /* "Recode.pyx":564 + /* "Recode.pyx":565 * if strict: * single = self.outer.single_list * while single is not NULL: # <<<<<<<<<<<<<< @@ -1072,7 +1074,7 @@ static int __pyx_pf_6Recode_5Outer___init__(struct __pyx_obj_6Recode_Outer *__py __pyx_t_2 = ((__pyx_v_single != NULL) != 0); if (!__pyx_t_2) break; - /* "Recode.pyx":565 + /* "Recode.pyx":566 * single = self.outer.single_list * while single is not NULL: * single.fallback_routine = NULL # <<<<<<<<<<<<<< @@ -1081,7 +1083,7 @@ static int __pyx_pf_6Recode_5Outer___init__(struct __pyx_obj_6Recode_Outer *__py */ __pyx_v_single->fallback_routine = NULL; - /* "Recode.pyx":566 + /* "Recode.pyx":567 * while single is not NULL: * single.fallback_routine = NULL * single = single.next # <<<<<<<<<<<<<< @@ -1091,10 +1093,25 @@ static int __pyx_pf_6Recode_5Outer___init__(struct __pyx_obj_6Recode_Outer *__py __pyx_t_3 = __pyx_v_single->next; __pyx_v_single = __pyx_t_3; } - goto __pyx_L5; + + /* "Recode.pyx":563 + * flags = flags | RECODE_NO_ICONV_FLAG + * self.outer = recode_new_outer(flags) + * if strict: # <<<<<<<<<<<<<< + * single = self.outer.single_list + * while single is not NULL: + */ } - __pyx_L5:; + /* "Recode.pyx":554 + * cdef RECODE_OUTER outer + * + * def __init__(self, auto_abort=False, iconv=False, strict=False): # <<<<<<<<<<<<<< + * cdef int flags + * cdef RECODE_SINGLE single + */ + + /* function exit code */ __pyx_r = 0; goto __pyx_L0; __pyx_L1_error:; @@ -1105,28 +1122,30 @@ static int __pyx_pf_6Recode_5Outer___init__(struct __pyx_obj_6Recode_Outer *__py return __pyx_r; } +/* "Recode.pyx":569 + * single = single.next + * + * def __dealloc__(self): # <<<<<<<<<<<<<< + * recode_delete_outer(self.outer) + * + */ + /* Python wrapper */ static void __pyx_pw_6Recode_5Outer_3__dealloc__(PyObject *__pyx_v_self); /*proto*/ static void __pyx_pw_6Recode_5Outer_3__dealloc__(PyObject *__pyx_v_self) { __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0); __pyx_pf_6Recode_5Outer_2__dealloc__(((struct __pyx_obj_6Recode_Outer *)__pyx_v_self)); + + /* function exit code */ __Pyx_RefNannyFinishContext(); } -/* "Recode.pyx":568 - * single = single.next - * - * def __dealloc__(self): # <<<<<<<<<<<<<< - * recode_delete_outer(self.outer) - * - */ - static void __pyx_pf_6Recode_5Outer_2__dealloc__(struct __pyx_obj_6Recode_Outer *__pyx_v_self) { __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__dealloc__", 0); - /* "Recode.pyx":569 + /* "Recode.pyx":570 * * def __dealloc__(self): * recode_delete_outer(self.outer) # <<<<<<<<<<<<<< @@ -1135,9 +1154,26 @@ static void __pyx_pf_6Recode_5Outer_2__dealloc__(struct __pyx_obj_6Recode_Outer */ recode_delete_outer(__pyx_v_self->outer); + /* "Recode.pyx":569 + * single = single.next + * + * def __dealloc__(self): # <<<<<<<<<<<<<< + * recode_delete_outer(self.outer) + * + */ + + /* function exit code */ __Pyx_RefNannyFinishContext(); } +/* "Recode.pyx":572 + * recode_delete_outer(self.outer) + * + * def default_charset(self): # <<<<<<<<<<<<<< + * return locale_charset() + * + */ + /* Python wrapper */ static PyObject *__pyx_pw_6Recode_5Outer_5default_charset(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static PyObject *__pyx_pw_6Recode_5Outer_5default_charset(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { @@ -1145,18 +1181,12 @@ static PyObject *__pyx_pw_6Recode_5Outer_5default_charset(PyObject *__pyx_v_self __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("default_charset (wrapper)", 0); __pyx_r = __pyx_pf_6Recode_5Outer_4default_charset(((struct __pyx_obj_6Recode_Outer *)__pyx_v_self)); + + /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "Recode.pyx":571 - * recode_delete_outer(self.outer) - * - * def default_charset(self): # <<<<<<<<<<<<<< - * return locale_charset() - * - */ - static PyObject *__pyx_pf_6Recode_5Outer_4default_charset(CYTHON_UNUSED struct __pyx_obj_6Recode_Outer *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations @@ -1166,7 +1196,7 @@ static PyObject *__pyx_pf_6Recode_5Outer_4default_charset(CYTHON_UNUSED struct _ int __pyx_clineno = 0; __Pyx_RefNannySetupContext("default_charset", 0); - /* "Recode.pyx":572 + /* "Recode.pyx":573 * * def default_charset(self): * return locale_charset() # <<<<<<<<<<<<<< @@ -1174,14 +1204,21 @@ static PyObject *__pyx_pf_6Recode_5Outer_4default_charset(CYTHON_UNUSED struct _ * def all_charsets(self): */ __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyBytes_FromString(locale_charset()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_1)); - __pyx_r = ((PyObject *)__pyx_t_1); + __pyx_t_1 = __Pyx_PyBytes_FromString(locale_charset()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 573; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; + /* "Recode.pyx":572 + * recode_delete_outer(self.outer) + * + * def default_charset(self): # <<<<<<<<<<<<<< + * return locale_charset() + * + */ + + /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("Recode.Outer.default_charset", __pyx_clineno, __pyx_lineno, __pyx_filename); @@ -1192,6 +1229,14 @@ static PyObject *__pyx_pf_6Recode_5Outer_4default_charset(CYTHON_UNUSED struct _ return __pyx_r; } +/* "Recode.pyx":575 + * return locale_charset() + * + * def all_charsets(self): # <<<<<<<<<<<<<< + * list = [] + * cdef RECODE_SYMBOL symbol + */ + /* Python wrapper */ static PyObject *__pyx_pw_6Recode_5Outer_7all_charsets(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static PyObject *__pyx_pw_6Recode_5Outer_7all_charsets(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { @@ -1199,18 +1244,12 @@ static PyObject *__pyx_pw_6Recode_5Outer_7all_charsets(PyObject *__pyx_v_self, C __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("all_charsets (wrapper)", 0); __pyx_r = __pyx_pf_6Recode_5Outer_6all_charsets(((struct __pyx_obj_6Recode_Outer *)__pyx_v_self)); + + /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "Recode.pyx":574 - * return locale_charset() - * - * def all_charsets(self): # <<<<<<<<<<<<<< - * list = [] - * cdef RECODE_SYMBOL symbol - */ - static PyObject *__pyx_pf_6Recode_5Outer_6all_charsets(struct __pyx_obj_6Recode_Outer *__pyx_v_self) { PyObject *__pyx_v_list = NULL; RECODE_SYMBOL __pyx_v_symbol; @@ -1221,28 +1260,25 @@ static PyObject *__pyx_pf_6Recode_5Outer_6all_charsets(struct __pyx_obj_6Recode_ int __pyx_t_3; int __pyx_t_4; int __pyx_t_5; - int __pyx_t_6; - int __pyx_t_7; - int __pyx_t_8; - struct recode_symbol *__pyx_t_9; + struct recode_symbol *__pyx_t_6; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("all_charsets", 0); - /* "Recode.pyx":575 + /* "Recode.pyx":576 * * def all_charsets(self): * list = [] # <<<<<<<<<<<<<< * cdef RECODE_SYMBOL symbol * symbol = self.outer.symbol_list */ - __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 575; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 576; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_v_list = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0; - /* "Recode.pyx":577 + /* "Recode.pyx":578 * list = [] * cdef RECODE_SYMBOL symbol * symbol = self.outer.symbol_list # <<<<<<<<<<<<<< @@ -1252,7 +1288,7 @@ static PyObject *__pyx_pf_6Recode_5Outer_6all_charsets(struct __pyx_obj_6Recode_ __pyx_t_2 = __pyx_v_self->outer->symbol_list; __pyx_v_symbol = __pyx_t_2; - /* "Recode.pyx":578 + /* "Recode.pyx":579 * cdef RECODE_SYMBOL symbol * symbol = self.outer.symbol_list * while symbol is not NULL: # <<<<<<<<<<<<<< @@ -1264,76 +1300,100 @@ static PyObject *__pyx_pf_6Recode_5Outer_6all_charsets(struct __pyx_obj_6Recode_ if (!__pyx_t_3) break; /* "Recode.pyx":580 + * symbol = self.outer.symbol_list + * while symbol is not NULL: + * if (symbol.type == RECODE_CHARSET # <<<<<<<<<<<<<< + * and symbol is not self.outer.iconv_pivot + * and symbol is not self.outer.data_symbol + */ + __pyx_t_4 = ((__pyx_v_symbol->type == RECODE_CHARSET) != 0); + if (__pyx_t_4) { + } else { + __pyx_t_3 = __pyx_t_4; + goto __pyx_L6_bool_binop_done; + } + + /* "Recode.pyx":581 * while symbol is not NULL: * if (symbol.type == RECODE_CHARSET * and symbol is not self.outer.iconv_pivot # <<<<<<<<<<<<<< * and symbol is not self.outer.data_symbol * and symbol is not self.outer.tree_symbol): */ - __pyx_t_3 = ((__pyx_v_symbol->type == RECODE_CHARSET) != 0); - if (__pyx_t_3) { + __pyx_t_4 = ((__pyx_v_symbol != __pyx_v_self->outer->iconv_pivot) != 0); + if (__pyx_t_4) { + } else { + __pyx_t_3 = __pyx_t_4; + goto __pyx_L6_bool_binop_done; + } - /* "Recode.pyx":581 + /* "Recode.pyx":582 * if (symbol.type == RECODE_CHARSET * and symbol is not self.outer.iconv_pivot * and symbol is not self.outer.data_symbol # <<<<<<<<<<<<<< * and symbol is not self.outer.tree_symbol): * list.append(symbol.name) */ - __pyx_t_4 = ((__pyx_v_symbol != __pyx_v_self->outer->iconv_pivot) != 0); - if (__pyx_t_4) { + __pyx_t_4 = ((__pyx_v_symbol != __pyx_v_self->outer->data_symbol) != 0); + if (__pyx_t_4) { + } else { + __pyx_t_3 = __pyx_t_4; + goto __pyx_L6_bool_binop_done; + } - /* "Recode.pyx":582 + /* "Recode.pyx":583 * and symbol is not self.outer.iconv_pivot * and symbol is not self.outer.data_symbol * and symbol is not self.outer.tree_symbol): # <<<<<<<<<<<<<< * list.append(symbol.name) * symbol = symbol.next */ - __pyx_t_5 = ((__pyx_v_symbol != __pyx_v_self->outer->data_symbol) != 0); - if (__pyx_t_5) { - __pyx_t_6 = ((__pyx_v_symbol != __pyx_v_self->outer->tree_symbol) != 0); - __pyx_t_7 = __pyx_t_6; - } else { - __pyx_t_7 = __pyx_t_5; - } - __pyx_t_5 = __pyx_t_7; - } else { - __pyx_t_5 = __pyx_t_4; - } - __pyx_t_4 = __pyx_t_5; - } else { - __pyx_t_4 = __pyx_t_3; - } - if (__pyx_t_4) { + __pyx_t_4 = ((__pyx_v_symbol != __pyx_v_self->outer->tree_symbol) != 0); + __pyx_t_3 = __pyx_t_4; + __pyx_L6_bool_binop_done:; + + /* "Recode.pyx":580 + * symbol = self.outer.symbol_list + * while symbol is not NULL: + * if (symbol.type == RECODE_CHARSET # <<<<<<<<<<<<<< + * and symbol is not self.outer.iconv_pivot + * and symbol is not self.outer.data_symbol + */ + if (__pyx_t_3) { - /* "Recode.pyx":583 + /* "Recode.pyx":584 * and symbol is not self.outer.data_symbol * and symbol is not self.outer.tree_symbol): * list.append(symbol.name) # <<<<<<<<<<<<<< * symbol = symbol.next * return list */ - __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_symbol->name); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 583; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_1)); - __pyx_t_8 = __Pyx_PyList_Append(__pyx_v_list, ((PyObject *)__pyx_t_1)); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 583; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; - goto __pyx_L5; + __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_symbol->name); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 584; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __Pyx_PyList_Append(__pyx_v_list, __pyx_t_1); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 584; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "Recode.pyx":580 + * symbol = self.outer.symbol_list + * while symbol is not NULL: + * if (symbol.type == RECODE_CHARSET # <<<<<<<<<<<<<< + * and symbol is not self.outer.iconv_pivot + * and symbol is not self.outer.data_symbol + */ } - __pyx_L5:; - /* "Recode.pyx":584 + /* "Recode.pyx":585 * and symbol is not self.outer.tree_symbol): * list.append(symbol.name) * symbol = symbol.next # <<<<<<<<<<<<<< * return list * */ - __pyx_t_9 = __pyx_v_symbol->next; - __pyx_v_symbol = __pyx_t_9; + __pyx_t_6 = __pyx_v_symbol->next; + __pyx_v_symbol = __pyx_t_6; } - /* "Recode.pyx":585 + /* "Recode.pyx":586 * list.append(symbol.name) * symbol = symbol.next * return list # <<<<<<<<<<<<<< @@ -1341,12 +1401,19 @@ static PyObject *__pyx_pf_6Recode_5Outer_6all_charsets(struct __pyx_obj_6Recode_ * def all_surfaces(self): */ __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(((PyObject *)__pyx_v_list)); - __pyx_r = ((PyObject *)__pyx_v_list); + __Pyx_INCREF(__pyx_v_list); + __pyx_r = __pyx_v_list; goto __pyx_L0; - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; + /* "Recode.pyx":575 + * return locale_charset() + * + * def all_charsets(self): # <<<<<<<<<<<<<< + * list = [] + * cdef RECODE_SYMBOL symbol + */ + + /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("Recode.Outer.all_charsets", __pyx_clineno, __pyx_lineno, __pyx_filename); @@ -1358,6 +1425,14 @@ static PyObject *__pyx_pf_6Recode_5Outer_6all_charsets(struct __pyx_obj_6Recode_ return __pyx_r; } +/* "Recode.pyx":588 + * return list + * + * def all_surfaces(self): # <<<<<<<<<<<<<< + * list = [] + * cdef RECODE_SYMBOL symbol + */ + /* Python wrapper */ static PyObject *__pyx_pw_6Recode_5Outer_9all_surfaces(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static PyObject *__pyx_pw_6Recode_5Outer_9all_surfaces(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { @@ -1365,18 +1440,12 @@ static PyObject *__pyx_pw_6Recode_5Outer_9all_surfaces(PyObject *__pyx_v_self, C __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("all_surfaces (wrapper)", 0); __pyx_r = __pyx_pf_6Recode_5Outer_8all_surfaces(((struct __pyx_obj_6Recode_Outer *)__pyx_v_self)); + + /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "Recode.pyx":587 - * return list - * - * def all_surfaces(self): # <<<<<<<<<<<<<< - * list = [] - * cdef RECODE_SYMBOL symbol - */ - static PyObject *__pyx_pf_6Recode_5Outer_8all_surfaces(struct __pyx_obj_6Recode_Outer *__pyx_v_self) { PyObject *__pyx_v_list = NULL; RECODE_SYMBOL __pyx_v_symbol; @@ -1392,19 +1461,19 @@ static PyObject *__pyx_pf_6Recode_5Outer_8all_surfaces(struct __pyx_obj_6Recode_ int __pyx_clineno = 0; __Pyx_RefNannySetupContext("all_surfaces", 0); - /* "Recode.pyx":588 + /* "Recode.pyx":589 * * def all_surfaces(self): * list = [] # <<<<<<<<<<<<<< * cdef RECODE_SYMBOL symbol * symbol = self.outer.symbol_list */ - __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 588; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 589; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_v_list = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0; - /* "Recode.pyx":590 + /* "Recode.pyx":591 * list = [] * cdef RECODE_SYMBOL symbol * symbol = self.outer.symbol_list # <<<<<<<<<<<<<< @@ -1414,7 +1483,7 @@ static PyObject *__pyx_pf_6Recode_5Outer_8all_surfaces(struct __pyx_obj_6Recode_ __pyx_t_2 = __pyx_v_self->outer->symbol_list; __pyx_v_symbol = __pyx_t_2; - /* "Recode.pyx":591 + /* "Recode.pyx":592 * cdef RECODE_SYMBOL symbol * symbol = self.outer.symbol_list * while symbol is not NULL: # <<<<<<<<<<<<<< @@ -1425,7 +1494,7 @@ static PyObject *__pyx_pf_6Recode_5Outer_8all_surfaces(struct __pyx_obj_6Recode_ __pyx_t_3 = ((__pyx_v_symbol != NULL) != 0); if (!__pyx_t_3) break; - /* "Recode.pyx":592 + /* "Recode.pyx":593 * symbol = self.outer.symbol_list * while symbol is not NULL: * if symbol.type != RECODE_CHARSET: # <<<<<<<<<<<<<< @@ -1435,22 +1504,28 @@ static PyObject *__pyx_pf_6Recode_5Outer_8all_surfaces(struct __pyx_obj_6Recode_ __pyx_t_3 = ((__pyx_v_symbol->type != RECODE_CHARSET) != 0); if (__pyx_t_3) { - /* "Recode.pyx":593 + /* "Recode.pyx":594 * while symbol is not NULL: * if symbol.type != RECODE_CHARSET: * list.append(symbol.name) # <<<<<<<<<<<<<< * symbol = symbol.next * return list */ - __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_symbol->name); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_1)); - __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_list, ((PyObject *)__pyx_t_1)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; - goto __pyx_L5; + __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_symbol->name); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 594; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_list, __pyx_t_1); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 594; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "Recode.pyx":593 + * symbol = self.outer.symbol_list + * while symbol is not NULL: + * if symbol.type != RECODE_CHARSET: # <<<<<<<<<<<<<< + * list.append(symbol.name) + * symbol = symbol.next + */ } - __pyx_L5:; - /* "Recode.pyx":594 + /* "Recode.pyx":595 * if symbol.type != RECODE_CHARSET: * list.append(symbol.name) * symbol = symbol.next # <<<<<<<<<<<<<< @@ -1461,7 +1536,7 @@ static PyObject *__pyx_pf_6Recode_5Outer_8all_surfaces(struct __pyx_obj_6Recode_ __pyx_v_symbol = __pyx_t_5; } - /* "Recode.pyx":595 + /* "Recode.pyx":596 * list.append(symbol.name) * symbol = symbol.next * return list # <<<<<<<<<<<<<< @@ -1469,12 +1544,19 @@ static PyObject *__pyx_pf_6Recode_5Outer_8all_surfaces(struct __pyx_obj_6Recode_ * def concise_charset(self, format=NO_FORMAT): */ __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(((PyObject *)__pyx_v_list)); - __pyx_r = ((PyObject *)__pyx_v_list); + __Pyx_INCREF(__pyx_v_list); + __pyx_r = __pyx_v_list; goto __pyx_L0; - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; + /* "Recode.pyx":588 + * return list + * + * def all_surfaces(self): # <<<<<<<<<<<<<< + * list = [] + * cdef RECODE_SYMBOL symbol + */ + + /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("Recode.Outer.all_surfaces", __pyx_clineno, __pyx_lineno, __pyx_filename); @@ -1486,6 +1568,14 @@ static PyObject *__pyx_pf_6Recode_5Outer_8all_surfaces(struct __pyx_obj_6Recode_ return __pyx_r; } +/* "Recode.pyx":598 + * return list + * + * def concise_charset(self, format=NO_FORMAT): # <<<<<<<<<<<<<< + * ok = list_concise_charset(self.outer, NULL, format) + * if not ok: + */ + /* Python wrapper */ static PyObject *__pyx_pw_6Recode_5Outer_11concise_charset(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyObject *__pyx_pw_6Recode_5Outer_11concise_charset(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { @@ -1497,9 +1587,9 @@ static PyObject *__pyx_pw_6Recode_5Outer_11concise_charset(PyObject *__pyx_v_sel __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("concise_charset (wrapper)", 0); { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__format,0}; + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_format,0}; PyObject* values[1] = {0}; - values[0] = __pyx_k_4; + values[0] = __pyx_k_; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); @@ -1512,12 +1602,12 @@ static PyObject *__pyx_pw_6Recode_5Outer_11concise_charset(PyObject *__pyx_v_sel switch (pos_args) { case 0: if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__format); + PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_format); if (value) { values[0] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "concise_charset") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 597; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "concise_charset") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 598; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { @@ -1530,91 +1620,102 @@ static PyObject *__pyx_pw_6Recode_5Outer_11concise_charset(PyObject *__pyx_v_sel } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("concise_charset", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 597; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("concise_charset", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 598; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("Recode.Outer.concise_charset", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_6Recode_5Outer_10concise_charset(((struct __pyx_obj_6Recode_Outer *)__pyx_v_self), __pyx_v_format); + + /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "Recode.pyx":597 - * return list - * - * def concise_charset(self, format=NO_FORMAT): # <<<<<<<<<<<<<< - * ok = list_concise_charset(self.outer, NULL, format) - * if not ok: - */ - static PyObject *__pyx_pf_6Recode_5Outer_10concise_charset(struct __pyx_obj_6Recode_Outer *__pyx_v_self, PyObject *__pyx_v_format) { - PyObject *__pyx_v_ok = NULL; + enum __pyx_t_6Recode_bool __pyx_v_ok; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations enum recode_list_format __pyx_t_1; - PyObject *__pyx_t_2 = NULL; - int __pyx_t_3; - int __pyx_t_4; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("concise_charset", 0); - /* "Recode.pyx":598 + /* "Recode.pyx":599 * * def concise_charset(self, format=NO_FORMAT): * ok = list_concise_charset(self.outer, NULL, format) # <<<<<<<<<<<<<< * if not ok: * raise error */ - __pyx_t_1 = ((enum recode_list_format)PyInt_AsLong(__pyx_v_format)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 598; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_2 = PyInt_FromLong(list_concise_charset(__pyx_v_self->outer, NULL, __pyx_t_1)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 598; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_v_ok = __pyx_t_2; - __pyx_t_2 = 0; + __pyx_t_1 = ((enum recode_list_format)__Pyx_PyInt_As_enum__recode_list_format(__pyx_v_format)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 599; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_v_ok = list_concise_charset(__pyx_v_self->outer, NULL, __pyx_t_1); - /* "Recode.pyx":599 + /* "Recode.pyx":600 * def concise_charset(self, format=NO_FORMAT): * ok = list_concise_charset(self.outer, NULL, format) * if not ok: # <<<<<<<<<<<<<< * raise error * */ - __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_ok); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 599; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_4 = ((!__pyx_t_3) != 0); - if (__pyx_t_4) { + __pyx_t_2 = ((!__pyx_v_ok) != 0); + if (__pyx_t_2) { - /* "Recode.pyx":600 + /* "Recode.pyx":601 * ok = list_concise_charset(self.outer, NULL, format) * if not ok: * raise error # <<<<<<<<<<<<<< * * def full_charset(self): */ - __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__error); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_Raise(__pyx_t_2, 0, 0, 0); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - goto __pyx_L3; + __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 601; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 601; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + + /* "Recode.pyx":600 + * def concise_charset(self, format=NO_FORMAT): + * ok = list_concise_charset(self.outer, NULL, format) + * if not ok: # <<<<<<<<<<<<<< + * raise error + * + */ } - __pyx_L3:; + /* "Recode.pyx":598 + * return list + * + * def concise_charset(self, format=NO_FORMAT): # <<<<<<<<<<<<<< + * ok = list_concise_charset(self.outer, NULL, format) + * if not ok: + */ + + /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("Recode.Outer.concise_charset", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; - __Pyx_XDECREF(__pyx_v_ok); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } +/* "Recode.pyx":603 + * raise error + * + * def full_charset(self): # <<<<<<<<<<<<<< + * ok = list_full_charset(self.outer, NULL) + * if not ok: + */ + /* Python wrapper */ static PyObject *__pyx_pw_6Recode_5Outer_13full_charset(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static PyObject *__pyx_pw_6Recode_5Outer_13full_charset(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { @@ -1622,82 +1723,93 @@ static PyObject *__pyx_pw_6Recode_5Outer_13full_charset(PyObject *__pyx_v_self, __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("full_charset (wrapper)", 0); __pyx_r = __pyx_pf_6Recode_5Outer_12full_charset(((struct __pyx_obj_6Recode_Outer *)__pyx_v_self)); + + /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "Recode.pyx":602 - * raise error - * - * def full_charset(self): # <<<<<<<<<<<<<< - * ok = list_full_charset(self.outer, NULL) - * if not ok: - */ - static PyObject *__pyx_pf_6Recode_5Outer_12full_charset(struct __pyx_obj_6Recode_Outer *__pyx_v_self) { - PyObject *__pyx_v_ok = NULL; + enum __pyx_t_6Recode_bool __pyx_v_ok; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_t_2; - int __pyx_t_3; + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("full_charset", 0); - /* "Recode.pyx":603 + /* "Recode.pyx":604 * * def full_charset(self): * ok = list_full_charset(self.outer, NULL) # <<<<<<<<<<<<<< * if not ok: * raise error */ - __pyx_t_1 = PyInt_FromLong(list_full_charset(__pyx_v_self->outer, NULL)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 603; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_ok = __pyx_t_1; - __pyx_t_1 = 0; + __pyx_v_ok = list_full_charset(__pyx_v_self->outer, NULL); - /* "Recode.pyx":604 + /* "Recode.pyx":605 * def full_charset(self): * ok = list_full_charset(self.outer, NULL) * if not ok: # <<<<<<<<<<<<<< * raise error * */ - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_ok); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 604; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_3 = ((!__pyx_t_2) != 0); - if (__pyx_t_3) { + __pyx_t_1 = ((!__pyx_v_ok) != 0); + if (__pyx_t_1) { - /* "Recode.pyx":605 + /* "Recode.pyx":606 * ok = list_full_charset(self.outer, NULL) * if not ok: * raise error # <<<<<<<<<<<<<< * * # Lazy, all in one call. */ - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__error); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 605; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_Raise(__pyx_t_1, 0, 0, 0); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 605; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - goto __pyx_L3; + __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 606; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __Pyx_Raise(__pyx_t_2, 0, 0, 0); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 606; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + + /* "Recode.pyx":605 + * def full_charset(self): + * ok = list_full_charset(self.outer, NULL) + * if not ok: # <<<<<<<<<<<<<< + * raise error + * + */ } - __pyx_L3:; + /* "Recode.pyx":603 + * raise error + * + * def full_charset(self): # <<<<<<<<<<<<<< + * ok = list_full_charset(self.outer, NULL) + * if not ok: + */ + + /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("Recode.Outer.full_charset", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; - __Pyx_XDECREF(__pyx_v_ok); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } +/* "Recode.pyx":609 + * + * # Lazy, all in one call. + * def recode(self, char *command, char *input): # <<<<<<<<<<<<<< + * request = Request(self) + * request.scan(command) + */ + /* Python wrapper */ static PyObject *__pyx_pw_6Recode_5Outer_15recode(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyObject *__pyx_pw_6Recode_5Outer_15recode(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { @@ -1710,7 +1822,7 @@ static PyObject *__pyx_pw_6Recode_5Outer_15recode(PyObject *__pyx_v_self, PyObje __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("recode (wrapper)", 0); { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__command,&__pyx_n_s__input,0}; + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_command,&__pyx_n_s_input,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; @@ -1724,16 +1836,16 @@ static PyObject *__pyx_pw_6Recode_5Outer_15recode(PyObject *__pyx_v_self, PyObje kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__command)) != 0)) kw_args--; + if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_command)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__input)) != 0)) kw_args--; + if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_input)) != 0)) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("recode", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 608; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("recode", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 609; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "recode") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 608; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "recode") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 609; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; @@ -1741,30 +1853,24 @@ static PyObject *__pyx_pw_6Recode_5Outer_15recode(PyObject *__pyx_v_self, PyObje values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } - __pyx_v_command = __Pyx_PyObject_AsString(values[0]); if (unlikely((!__pyx_v_command) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 608; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_v_input = __Pyx_PyObject_AsString(values[1]); if (unlikely((!__pyx_v_input) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 608; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __pyx_v_command = __Pyx_PyObject_AsString(values[0]); if (unlikely((!__pyx_v_command) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 609; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __pyx_v_input = __Pyx_PyObject_AsString(values[1]); if (unlikely((!__pyx_v_input) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 609; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("recode", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 608; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("recode", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 609; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("Recode.Outer.recode", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_6Recode_5Outer_14recode(((struct __pyx_obj_6Recode_Outer *)__pyx_v_self), __pyx_v_command, __pyx_v_input); + + /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "Recode.pyx":608 - * - * # Lazy, all in one call. - * def recode(self, char *command, char *input): # <<<<<<<<<<<<<< - * request = Request(self) - * request.scan(command) - */ - static PyObject *__pyx_pf_6Recode_5Outer_14recode(struct __pyx_obj_6Recode_Outer *__pyx_v_self, char *__pyx_v_command, char *__pyx_v_input) { struct __pyx_obj_6Recode_Request *__pyx_v_request = NULL; PyObject *__pyx_r = NULL; @@ -1772,52 +1878,71 @@ static PyObject *__pyx_pf_6Recode_5Outer_14recode(struct __pyx_obj_6Recode_Outer PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("recode", 0); - /* "Recode.pyx":609 + /* "Recode.pyx":610 * # Lazy, all in one call. * def recode(self, char *command, char *input): * request = Request(self) # <<<<<<<<<<<<<< * request.scan(command) * return request.string(input) */ - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 609; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 610; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(((PyObject *)__pyx_v_self)); - PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_self)); __Pyx_GIVEREF(((PyObject *)__pyx_v_self)); - __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_6Recode_Request)), ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 609; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_self)); + __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6Recode_Request), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 610; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_request = ((struct __pyx_obj_6Recode_Request *)__pyx_t_2); __pyx_t_2 = 0; - /* "Recode.pyx":610 + /* "Recode.pyx":611 * def recode(self, char *command, char *input): * request = Request(self) * request.scan(command) # <<<<<<<<<<<<<< * return request.string(input) * */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_request), __pyx_n_s__scan); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 610; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_command); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 610; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_1)); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 610; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_t_1)); - __Pyx_GIVEREF(((PyObject *)__pyx_t_1)); - __pyx_t_1 = 0; - __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 610; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_request), __pyx_n_s_scan); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 611; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyBytes_FromString(__pyx_v_command); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 611; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = NULL; + if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + } + } + if (!__pyx_t_4) { + __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 611; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_GOTREF(__pyx_t_2); + } else { + __pyx_t_5 = PyTuple_New(1+1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 611; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); __pyx_t_4 = NULL; + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_5, 0+1, __pyx_t_3); + __pyx_t_3 = 0; + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_5, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 611; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "Recode.pyx":611 + /* "Recode.pyx":612 * request = Request(self) * request.scan(command) * return request.string(input) # <<<<<<<<<<<<<< @@ -1825,29 +1950,55 @@ static PyObject *__pyx_pf_6Recode_5Outer_14recode(struct __pyx_obj_6Recode_Outer * # Recode library at REQUEST level. */ __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_request), __pyx_n_s__string); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 611; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_request), __pyx_n_s_string); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 612; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyBytes_FromString(__pyx_v_input); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 611; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_3)); - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 611; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_t_3)); - __Pyx_GIVEREF(((PyObject *)__pyx_t_3)); - __pyx_t_3 = 0; - __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 611; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = __Pyx_PyBytes_FromString(__pyx_v_input); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 612; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_3 = NULL; + if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + } + } + if (!__pyx_t_3) { + __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_5); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 612; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_GOTREF(__pyx_t_2); + } else { + __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 612; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL; + __Pyx_GIVEREF(__pyx_t_5); + PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_t_5); + __pyx_t_5 = 0; + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_4, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 612; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; - __pyx_r = __pyx_t_3; - __pyx_t_3 = 0; + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; goto __pyx_L0; - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; + /* "Recode.pyx":609 + * + * # Lazy, all in one call. + * def recode(self, char *command, char *input): # <<<<<<<<<<<<<< + * request = Request(self) + * request.scan(command) + */ + + /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); __Pyx_AddTraceback("Recode.Outer.recode", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; @@ -1857,6 +2008,14 @@ static PyObject *__pyx_pf_6Recode_5Outer_14recode(struct __pyx_obj_6Recode_Outer return __pyx_r; } +/* "Recode.pyx":619 + * cdef RECODE_REQUEST request + * + * def __init__(self, Outer outer): # <<<<<<<<<<<<<< + * self.request = recode_new_request(outer.outer) + * + */ + /* Python wrapper */ static int __pyx_pw_6Recode_7Request_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static int __pyx_pw_6Recode_7Request_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { @@ -1868,7 +2027,7 @@ static int __pyx_pw_6Recode_7Request_1__init__(PyObject *__pyx_v_self, PyObject __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__outer,0}; + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_outer,0}; PyObject* values[1] = {0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; @@ -1881,11 +2040,11 @@ static int __pyx_pw_6Recode_7Request_1__init__(PyObject *__pyx_v_self, PyObject kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__outer)) != 0)) kw_args--; + if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_outer)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 618; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 619; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 1) { goto __pyx_L5_argtuple_error; @@ -1896,14 +2055,16 @@ static int __pyx_pw_6Recode_7Request_1__init__(PyObject *__pyx_v_self, PyObject } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 618; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 619; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("Recode.Request.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return -1; __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_outer), __pyx_ptype_6Recode_Outer, 1, "outer", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 618; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_outer), __pyx_ptype_6Recode_Outer, 1, "outer", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 619; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = __pyx_pf_6Recode_7Request___init__(((struct __pyx_obj_6Recode_Request *)__pyx_v_self), __pyx_v_outer); + + /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = -1; @@ -1912,20 +2073,12 @@ static int __pyx_pw_6Recode_7Request_1__init__(PyObject *__pyx_v_self, PyObject return __pyx_r; } -/* "Recode.pyx":618 - * cdef RECODE_REQUEST request - * - * def __init__(self, Outer outer): # <<<<<<<<<<<<<< - * self.request = recode_new_request(outer.outer) - * - */ - static int __pyx_pf_6Recode_7Request___init__(struct __pyx_obj_6Recode_Request *__pyx_v_self, struct __pyx_obj_6Recode_Outer *__pyx_v_outer) { int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__init__", 0); - /* "Recode.pyx":619 + /* "Recode.pyx":620 * * def __init__(self, Outer outer): * self.request = recode_new_request(outer.outer) # <<<<<<<<<<<<<< @@ -1934,33 +2087,44 @@ static int __pyx_pf_6Recode_7Request___init__(struct __pyx_obj_6Recode_Request * */ __pyx_v_self->request = recode_new_request(__pyx_v_outer->outer); + /* "Recode.pyx":619 + * cdef RECODE_REQUEST request + * + * def __init__(self, Outer outer): # <<<<<<<<<<<<<< + * self.request = recode_new_request(outer.outer) + * + */ + + /* function exit code */ __pyx_r = 0; __Pyx_RefNannyFinishContext(); return __pyx_r; } +/* "Recode.pyx":622 + * self.request = recode_new_request(outer.outer) + * + * def __dealloc__(self): # <<<<<<<<<<<<<< + * recode_delete_request(self.request) + * + */ + /* Python wrapper */ static void __pyx_pw_6Recode_7Request_3__dealloc__(PyObject *__pyx_v_self); /*proto*/ static void __pyx_pw_6Recode_7Request_3__dealloc__(PyObject *__pyx_v_self) { __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0); __pyx_pf_6Recode_7Request_2__dealloc__(((struct __pyx_obj_6Recode_Request *)__pyx_v_self)); + + /* function exit code */ __Pyx_RefNannyFinishContext(); } -/* "Recode.pyx":621 - * self.request = recode_new_request(outer.outer) - * - * def __dealloc__(self): # <<<<<<<<<<<<<< - * recode_delete_request(self.request) - * - */ - static void __pyx_pf_6Recode_7Request_2__dealloc__(struct __pyx_obj_6Recode_Request *__pyx_v_self) { __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__dealloc__", 0); - /* "Recode.pyx":622 + /* "Recode.pyx":623 * * def __dealloc__(self): * recode_delete_request(self.request) # <<<<<<<<<<<<<< @@ -1969,9 +2133,26 @@ static void __pyx_pf_6Recode_7Request_2__dealloc__(struct __pyx_obj_6Recode_Requ */ recode_delete_request(__pyx_v_self->request); + /* "Recode.pyx":622 + * self.request = recode_new_request(outer.outer) + * + * def __dealloc__(self): # <<<<<<<<<<<<<< + * recode_delete_request(self.request) + * + */ + + /* function exit code */ __Pyx_RefNannyFinishContext(); } +/* "Recode.pyx":625 + * recode_delete_request(self.request) + * + * def set_verbose(self, flag): # <<<<<<<<<<<<<< + * previous = self.request.verbose_flag != 0 + * self.request.verbose_flag = int(flag) + */ + /* Python wrapper */ static PyObject *__pyx_pw_6Recode_7Request_5set_verbose(PyObject *__pyx_v_self, PyObject *__pyx_v_flag); /*proto*/ static PyObject *__pyx_pw_6Recode_7Request_5set_verbose(PyObject *__pyx_v_self, PyObject *__pyx_v_flag) { @@ -1979,62 +2160,49 @@ static PyObject *__pyx_pw_6Recode_7Request_5set_verbose(PyObject *__pyx_v_self, __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("set_verbose (wrapper)", 0); __pyx_r = __pyx_pf_6Recode_7Request_4set_verbose(((struct __pyx_obj_6Recode_Request *)__pyx_v_self), ((PyObject *)__pyx_v_flag)); + + /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "Recode.pyx":624 - * recode_delete_request(self.request) - * - * def set_verbose(self, flag): # <<<<<<<<<<<<<< - * previous = self.request.verbose_flag != 0 - * self.request.verbose_flag = int(flag) - */ - static PyObject *__pyx_pf_6Recode_7Request_4set_verbose(struct __pyx_obj_6Recode_Request *__pyx_v_self, PyObject *__pyx_v_flag) { PyObject *__pyx_v_previous = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - enum __pyx_t_6Recode_bool __pyx_t_3; + enum __pyx_t_6Recode_bool __pyx_t_2; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("set_verbose", 0); - /* "Recode.pyx":625 + /* "Recode.pyx":626 * * def set_verbose(self, flag): * previous = self.request.verbose_flag != 0 # <<<<<<<<<<<<<< * self.request.verbose_flag = int(flag) * return previous */ - __pyx_t_1 = __Pyx_PyBool_FromLong((__pyx_v_self->request->verbose_flag != 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 625; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyBool_FromLong((__pyx_v_self->request->verbose_flag != 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 626; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_v_previous = __pyx_t_1; __pyx_t_1 = 0; - /* "Recode.pyx":626 + /* "Recode.pyx":627 * def set_verbose(self, flag): * previous = self.request.verbose_flag != 0 * self.request.verbose_flag = int(flag) # <<<<<<<<<<<<<< * return previous * */ - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 626; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = PyNumber_Int(__pyx_v_flag); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 627; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_v_flag); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_flag); - __Pyx_GIVEREF(__pyx_v_flag); - __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)(&PyInt_Type))), ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 626; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; - __pyx_t_3 = ((enum __pyx_t_6Recode_bool)PyInt_AsLong(__pyx_t_2)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 626; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_self->request->verbose_flag = __pyx_t_3; + __pyx_t_2 = ((enum __pyx_t_6Recode_bool)__Pyx_PyInt_As_enum____pyx_t_6Recode_bool(__pyx_t_1)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 627; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_self->request->verbose_flag = __pyx_t_2; - /* "Recode.pyx":627 + /* "Recode.pyx":628 * previous = self.request.verbose_flag != 0 * self.request.verbose_flag = int(flag) * return previous # <<<<<<<<<<<<<< @@ -2046,11 +2214,17 @@ static PyObject *__pyx_pf_6Recode_7Request_4set_verbose(struct __pyx_obj_6Recode __pyx_r = __pyx_v_previous; goto __pyx_L0; - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; + /* "Recode.pyx":625 + * recode_delete_request(self.request) + * + * def set_verbose(self, flag): # <<<<<<<<<<<<<< + * previous = self.request.verbose_flag != 0 + * self.request.verbose_flag = int(flag) + */ + + /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("Recode.Request.set_verbose", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; @@ -2060,6 +2234,14 @@ static PyObject *__pyx_pf_6Recode_7Request_4set_verbose(struct __pyx_obj_6Recode return __pyx_r; } +/* "Recode.pyx":630 + * return previous + * + * def scan(self, char *text): # <<<<<<<<<<<<<< + * ok = recode_scan_request(self.request, text) + * if not ok: + */ + /* Python wrapper */ static PyObject *__pyx_pw_6Recode_7Request_7scan(PyObject *__pyx_v_self, PyObject *__pyx_arg_text); /*proto*/ static PyObject *__pyx_pw_6Recode_7Request_7scan(PyObject *__pyx_v_self, PyObject *__pyx_arg_text) { @@ -2071,7 +2253,7 @@ static PyObject *__pyx_pw_6Recode_7Request_7scan(PyObject *__pyx_v_self, PyObjec __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("scan (wrapper)", 0); assert(__pyx_arg_text); { - __pyx_v_text = __Pyx_PyObject_AsString(__pyx_arg_text); if (unlikely((!__pyx_v_text) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 629; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __pyx_v_text = __Pyx_PyObject_AsString(__pyx_arg_text); if (unlikely((!__pyx_v_text) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 630; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; @@ -2080,82 +2262,93 @@ static PyObject *__pyx_pw_6Recode_7Request_7scan(PyObject *__pyx_v_self, PyObjec return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_6Recode_7Request_6scan(((struct __pyx_obj_6Recode_Request *)__pyx_v_self), ((char *)__pyx_v_text)); + + /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "Recode.pyx":629 - * return previous - * - * def scan(self, char *text): # <<<<<<<<<<<<<< - * ok = recode_scan_request(self.request, text) - * if not ok: - */ - static PyObject *__pyx_pf_6Recode_7Request_6scan(struct __pyx_obj_6Recode_Request *__pyx_v_self, char *__pyx_v_text) { - PyObject *__pyx_v_ok = NULL; + enum __pyx_t_6Recode_bool __pyx_v_ok; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_t_2; - int __pyx_t_3; + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("scan", 0); - /* "Recode.pyx":630 + /* "Recode.pyx":631 * * def scan(self, char *text): * ok = recode_scan_request(self.request, text) # <<<<<<<<<<<<<< * if not ok: * raise error */ - __pyx_t_1 = PyInt_FromLong(recode_scan_request(__pyx_v_self->request, __pyx_v_text)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 630; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_ok = __pyx_t_1; - __pyx_t_1 = 0; + __pyx_v_ok = recode_scan_request(__pyx_v_self->request, __pyx_v_text); - /* "Recode.pyx":631 + /* "Recode.pyx":632 * def scan(self, char *text): * ok = recode_scan_request(self.request, text) * if not ok: # <<<<<<<<<<<<<< * raise error * */ - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_ok); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 631; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_3 = ((!__pyx_t_2) != 0); - if (__pyx_t_3) { + __pyx_t_1 = ((!__pyx_v_ok) != 0); + if (__pyx_t_1) { - /* "Recode.pyx":632 + /* "Recode.pyx":633 * ok = recode_scan_request(self.request, text) * if not ok: * raise error # <<<<<<<<<<<<<< * * def pair_sequence(self): */ - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__error); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 632; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_Raise(__pyx_t_1, 0, 0, 0); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 632; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - goto __pyx_L3; + __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 633; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __Pyx_Raise(__pyx_t_2, 0, 0, 0); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 633; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + + /* "Recode.pyx":632 + * def scan(self, char *text): + * ok = recode_scan_request(self.request, text) + * if not ok: # <<<<<<<<<<<<<< + * raise error + * + */ } - __pyx_L3:; + /* "Recode.pyx":630 + * return previous + * + * def scan(self, char *text): # <<<<<<<<<<<<<< + * ok = recode_scan_request(self.request, text) + * if not ok: + */ + + /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("Recode.Request.scan", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; - __Pyx_XDECREF(__pyx_v_ok); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } +/* "Recode.pyx":635 + * raise error + * + * def pair_sequence(self): # <<<<<<<<<<<<<< + * list = [] + * cdef recode_step step + */ + /* Python wrapper */ static PyObject *__pyx_pw_6Recode_7Request_9pair_sequence(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static PyObject *__pyx_pw_6Recode_7Request_9pair_sequence(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { @@ -2163,18 +2356,12 @@ static PyObject *__pyx_pw_6Recode_7Request_9pair_sequence(PyObject *__pyx_v_self __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("pair_sequence (wrapper)", 0); __pyx_r = __pyx_pf_6Recode_7Request_8pair_sequence(((struct __pyx_obj_6Recode_Request *)__pyx_v_self)); + + /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "Recode.pyx":634 - * raise error - * - * def pair_sequence(self): # <<<<<<<<<<<<<< - * list = [] - * cdef recode_step step - */ - static PyObject *__pyx_pf_6Recode_7Request_8pair_sequence(struct __pyx_obj_6Recode_Request *__pyx_v_self) { PyObject *__pyx_v_list = NULL; struct recode_step __pyx_v_step; @@ -2191,19 +2378,19 @@ static PyObject *__pyx_pf_6Recode_7Request_8pair_sequence(struct __pyx_obj_6Reco int __pyx_clineno = 0; __Pyx_RefNannySetupContext("pair_sequence", 0); - /* "Recode.pyx":635 + /* "Recode.pyx":636 * * def pair_sequence(self): * list = [] # <<<<<<<<<<<<<< * cdef recode_step step * cdef unsigned counter */ - __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 635; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 636; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_v_list = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0; - /* "Recode.pyx":638 + /* "Recode.pyx":639 * cdef recode_step step * cdef unsigned counter * for counter from 0 <= counter < self.request.sequence_length: # <<<<<<<<<<<<<< @@ -2213,7 +2400,7 @@ static PyObject *__pyx_pf_6Recode_7Request_8pair_sequence(struct __pyx_obj_6Reco __pyx_t_2 = __pyx_v_self->request->sequence_length; for (__pyx_v_counter = 0; __pyx_v_counter < __pyx_t_2; __pyx_v_counter++) { - /* "Recode.pyx":639 + /* "Recode.pyx":640 * cdef unsigned counter * for counter from 0 <= counter < self.request.sequence_length: * step = self.request.sequence_array[counter] # <<<<<<<<<<<<<< @@ -2222,30 +2409,30 @@ static PyObject *__pyx_pf_6Recode_7Request_8pair_sequence(struct __pyx_obj_6Reco */ __pyx_v_step = (__pyx_v_self->request->sequence_array[__pyx_v_counter]); - /* "Recode.pyx":640 + /* "Recode.pyx":641 * for counter from 0 <= counter < self.request.sequence_length: * step = self.request.sequence_array[counter] * list.append((step.before.name, step.after.name)) # <<<<<<<<<<<<<< * return list * */ - __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_step.before->name); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 640; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_1)); - __pyx_t_3 = __Pyx_PyBytes_FromString(__pyx_v_step.after->name); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 640; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_3)); - __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 640; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_step.before->name); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 641; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyBytes_FromString(__pyx_v_step.after->name); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 641; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 641; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_t_1)); - __Pyx_GIVEREF(((PyObject *)__pyx_t_1)); - PyTuple_SET_ITEM(__pyx_t_4, 1, ((PyObject *)__pyx_t_3)); - __Pyx_GIVEREF(((PyObject *)__pyx_t_3)); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3); __pyx_t_1 = 0; __pyx_t_3 = 0; - __pyx_t_5 = __Pyx_PyList_Append(__pyx_v_list, ((PyObject *)__pyx_t_4)); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 640; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; + __pyx_t_5 = __Pyx_PyList_Append(__pyx_v_list, __pyx_t_4); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 641; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; } - /* "Recode.pyx":641 + /* "Recode.pyx":642 * step = self.request.sequence_array[counter] * list.append((step.before.name, step.after.name)) * return list # <<<<<<<<<<<<<< @@ -2253,12 +2440,19 @@ static PyObject *__pyx_pf_6Recode_7Request_8pair_sequence(struct __pyx_obj_6Reco * def format_table(self, int language, char *charset): */ __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(((PyObject *)__pyx_v_list)); - __pyx_r = ((PyObject *)__pyx_v_list); + __Pyx_INCREF(__pyx_v_list); + __pyx_r = __pyx_v_list; goto __pyx_L0; - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; + /* "Recode.pyx":635 + * raise error + * + * def pair_sequence(self): # <<<<<<<<<<<<<< + * list = [] + * cdef recode_step step + */ + + /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_3); @@ -2272,6 +2466,14 @@ static PyObject *__pyx_pf_6Recode_7Request_8pair_sequence(struct __pyx_obj_6Reco return __pyx_r; } +/* "Recode.pyx":644 + * return list + * + * def format_table(self, int language, char *charset): # <<<<<<<<<<<<<< + * cdef RECODE_OUTER outer + * cdef bool saved + */ + /* Python wrapper */ static PyObject *__pyx_pw_6Recode_7Request_11format_table(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyObject *__pyx_pw_6Recode_7Request_11format_table(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { @@ -2284,7 +2486,7 @@ static PyObject *__pyx_pw_6Recode_7Request_11format_table(PyObject *__pyx_v_self __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("format_table (wrapper)", 0); { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__language,&__pyx_n_s__charset,0}; + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_language,&__pyx_n_s_charset,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; @@ -2298,16 +2500,16 @@ static PyObject *__pyx_pw_6Recode_7Request_11format_table(PyObject *__pyx_v_self kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__language)) != 0)) kw_args--; + if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_language)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__charset)) != 0)) kw_args--; + if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_charset)) != 0)) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("format_table", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 643; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("format_table", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 644; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "format_table") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 643; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "format_table") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 644; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; @@ -2315,47 +2517,40 @@ static PyObject *__pyx_pw_6Recode_7Request_11format_table(PyObject *__pyx_v_self values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } - __pyx_v_language = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_language == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 643; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_v_charset = __Pyx_PyObject_AsString(values[1]); if (unlikely((!__pyx_v_charset) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 643; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __pyx_v_language = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_language == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 644; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __pyx_v_charset = __Pyx_PyObject_AsString(values[1]); if (unlikely((!__pyx_v_charset) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 644; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("format_table", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 643; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("format_table", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 644; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("Recode.Request.format_table", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_6Recode_7Request_10format_table(((struct __pyx_obj_6Recode_Request *)__pyx_v_self), __pyx_v_language, __pyx_v_charset); + + /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "Recode.pyx":643 - * return list - * - * def format_table(self, int language, char *charset): # <<<<<<<<<<<<<< - * cdef RECODE_OUTER outer - * cdef bool saved - */ - static PyObject *__pyx_pf_6Recode_7Request_10format_table(struct __pyx_obj_6Recode_Request *__pyx_v_self, int __pyx_v_language, char *__pyx_v_charset) { RECODE_OUTER __pyx_v_outer; enum __pyx_t_6Recode_bool __pyx_v_saved; - PyObject *__pyx_v_ok = NULL; + enum __pyx_t_6Recode_bool __pyx_v_ok; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations RECODE_OUTER __pyx_t_1; enum __pyx_t_6Recode_bool __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - int __pyx_t_4; - int __pyx_t_5; + int __pyx_t_3; + PyObject *__pyx_t_4 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("format_table", 0); - /* "Recode.pyx":646 + /* "Recode.pyx":647 * cdef RECODE_OUTER outer * cdef bool saved * outer = self.request.outer # <<<<<<<<<<<<<< @@ -2365,7 +2560,7 @@ static PyObject *__pyx_pf_6Recode_7Request_10format_table(struct __pyx_obj_6Reco __pyx_t_1 = __pyx_v_self->request->outer; __pyx_v_outer = __pyx_t_1; - /* "Recode.pyx":647 + /* "Recode.pyx":648 * cdef bool saved * outer = self.request.outer * saved = outer.iconv_pivot.ignore # <<<<<<<<<<<<<< @@ -2375,7 +2570,7 @@ static PyObject *__pyx_pf_6Recode_7Request_10format_table(struct __pyx_obj_6Reco __pyx_t_2 = __pyx_v_outer->iconv_pivot->ignore; __pyx_v_saved = __pyx_t_2; - /* "Recode.pyx":648 + /* "Recode.pyx":649 * outer = self.request.outer * saved = outer.iconv_pivot.ignore * outer.iconv_pivot.ignore = true # <<<<<<<<<<<<<< @@ -2385,18 +2580,15 @@ static PyObject *__pyx_pf_6Recode_7Request_10format_table(struct __pyx_obj_6Reco __pyx_v_outer->iconv_pivot->ignore = __pyx_e_6Recode_true; /* "Recode.pyx":650 + * saved = outer.iconv_pivot.ignore * outer.iconv_pivot.ignore = true - * ok = recode_format_table( - * self.request, language, charset) # <<<<<<<<<<<<<< + * ok = recode_format_table( # <<<<<<<<<<<<<< + * self.request, language, charset) * outer.iconv_pivot.ignore = saved - * if not ok: */ - __pyx_t_3 = PyInt_FromLong(recode_format_table(__pyx_v_self->request, ((enum recode_programming_language)__pyx_v_language), __pyx_v_charset)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 649; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_v_ok = __pyx_t_3; - __pyx_t_3 = 0; + __pyx_v_ok = recode_format_table(__pyx_v_self->request, ((enum recode_programming_language)__pyx_v_language), __pyx_v_charset); - /* "Recode.pyx":651 + /* "Recode.pyx":652 * ok = recode_format_table( * self.request, language, charset) * outer.iconv_pivot.ignore = saved # <<<<<<<<<<<<<< @@ -2405,46 +2597,67 @@ static PyObject *__pyx_pf_6Recode_7Request_10format_table(struct __pyx_obj_6Reco */ __pyx_v_outer->iconv_pivot->ignore = __pyx_v_saved; - /* "Recode.pyx":652 + /* "Recode.pyx":653 * self.request, language, charset) * outer.iconv_pivot.ignore = saved * if not ok: # <<<<<<<<<<<<<< * raise error * */ - __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_ok); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 652; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_5 = ((!__pyx_t_4) != 0); - if (__pyx_t_5) { + __pyx_t_3 = ((!__pyx_v_ok) != 0); + if (__pyx_t_3) { - /* "Recode.pyx":653 + /* "Recode.pyx":654 * outer.iconv_pivot.ignore = saved * if not ok: * raise error # <<<<<<<<<<<<<< * * def string(self, char *text): */ - __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__error); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 653; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_Raise(__pyx_t_3, 0, 0, 0); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 653; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - goto __pyx_L3; + __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 654; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __Pyx_Raise(__pyx_t_4, 0, 0, 0); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 654; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + + /* "Recode.pyx":653 + * self.request, language, charset) + * outer.iconv_pivot.ignore = saved + * if not ok: # <<<<<<<<<<<<<< + * raise error + * + */ } - __pyx_L3:; + /* "Recode.pyx":644 + * return list + * + * def format_table(self, int language, char *charset): # <<<<<<<<<<<<<< + * cdef RECODE_OUTER outer + * cdef bool saved + */ + + /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); __Pyx_AddTraceback("Recode.Request.format_table", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; - __Pyx_XDECREF(__pyx_v_ok); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } +/* "Recode.pyx":656 + * raise error + * + * def string(self, char *text): # <<<<<<<<<<<<<< + * cdef char *result + * result = recode_string(self.request, text) + */ + /* Python wrapper */ static PyObject *__pyx_pw_6Recode_7Request_13string(PyObject *__pyx_v_self, PyObject *__pyx_arg_text); /*proto*/ static PyObject *__pyx_pw_6Recode_7Request_13string(PyObject *__pyx_v_self, PyObject *__pyx_arg_text) { @@ -2456,7 +2669,7 @@ static PyObject *__pyx_pw_6Recode_7Request_13string(PyObject *__pyx_v_self, PyOb __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("string (wrapper)", 0); assert(__pyx_arg_text); { - __pyx_v_text = __Pyx_PyObject_AsString(__pyx_arg_text); if (unlikely((!__pyx_v_text) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 655; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __pyx_v_text = __Pyx_PyObject_AsString(__pyx_arg_text); if (unlikely((!__pyx_v_text) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 656; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; @@ -2465,18 +2678,12 @@ static PyObject *__pyx_pw_6Recode_7Request_13string(PyObject *__pyx_v_self, PyOb return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_6Recode_7Request_12string(((struct __pyx_obj_6Recode_Request *)__pyx_v_self), ((char *)__pyx_v_text)); + + /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "Recode.pyx":655 - * raise error - * - * def string(self, char *text): # <<<<<<<<<<<<<< - * cdef char *result - * result = recode_string(self.request, text) - */ - static PyObject *__pyx_pf_6Recode_7Request_12string(struct __pyx_obj_6Recode_Request *__pyx_v_self, char *__pyx_v_text) { char *__pyx_v_result; PyObject *__pyx_r = NULL; @@ -2488,7 +2695,7 @@ static PyObject *__pyx_pf_6Recode_7Request_12string(struct __pyx_obj_6Recode_Req int __pyx_clineno = 0; __Pyx_RefNannySetupContext("string", 0); - /* "Recode.pyx":657 + /* "Recode.pyx":658 * def string(self, char *text): * cdef char *result * result = recode_string(self.request, text) # <<<<<<<<<<<<<< @@ -2497,7 +2704,7 @@ static PyObject *__pyx_pf_6Recode_7Request_12string(struct __pyx_obj_6Recode_Req */ __pyx_v_result = recode_string(__pyx_v_self->request, __pyx_v_text); - /* "Recode.pyx":658 + /* "Recode.pyx":659 * cdef char *result * result = recode_string(self.request, text) * if result is NULL: # <<<<<<<<<<<<<< @@ -2507,23 +2714,29 @@ static PyObject *__pyx_pf_6Recode_7Request_12string(struct __pyx_obj_6Recode_Req __pyx_t_1 = ((__pyx_v_result == NULL) != 0); if (__pyx_t_1) { - /* "Recode.pyx":659 + /* "Recode.pyx":660 * result = recode_string(self.request, text) * if result is NULL: * raise error # <<<<<<<<<<<<<< * return result * */ - __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__error); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 659; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 660; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 659; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - goto __pyx_L3; + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 660; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + + /* "Recode.pyx":659 + * cdef char *result + * result = recode_string(self.request, text) + * if result is NULL: # <<<<<<<<<<<<<< + * raise error + * return result + */ } - __pyx_L3:; - /* "Recode.pyx":660 + /* "Recode.pyx":661 * if result is NULL: * raise error * return result # <<<<<<<<<<<<<< @@ -2531,14 +2744,21 @@ static PyObject *__pyx_pf_6Recode_7Request_12string(struct __pyx_obj_6Recode_Req * #bool recode_string_to_buffer( */ __Pyx_XDECREF(__pyx_r); - __pyx_t_2 = __Pyx_PyBytes_FromString(__pyx_v_result); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 660; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_2)); - __pyx_r = ((PyObject *)__pyx_t_2); + __pyx_t_2 = __Pyx_PyBytes_FromString(__pyx_v_result); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 661; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; + /* "Recode.pyx":656 + * raise error + * + * def string(self, char *text): # <<<<<<<<<<<<<< + * cdef char *result + * result = recode_string(self.request, text) + */ + + /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("Recode.Request.string", __pyx_clineno, __pyx_lineno, __pyx_filename); @@ -2551,18 +2771,26 @@ static PyObject *__pyx_pf_6Recode_7Request_12string(struct __pyx_obj_6Recode_Req static PyObject *__pyx_tp_new_6Recode_Outer(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { PyObject *o; - o = (*t->tp_alloc)(t, 0); + if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { + o = (*t->tp_alloc)(t, 0); + } else { + o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); + } if (unlikely(!o)) return 0; return o; } static void __pyx_tp_dealloc_6Recode_Outer(PyObject *o) { + #if PY_VERSION_HEX >= 0x030400a1 + if (unlikely(Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + #endif { PyObject *etype, *eval, *etb; PyErr_Fetch(&etype, &eval, &etb); ++Py_REFCNT(o); __pyx_pw_6Recode_5Outer_3__dealloc__(o); - if (PyErr_Occurred()) PyErr_WriteUnraisable(o); --Py_REFCNT(o); PyErr_Restore(etype, eval, etb); } @@ -2570,18 +2798,18 @@ static void __pyx_tp_dealloc_6Recode_Outer(PyObject *o) { } static PyMethodDef __pyx_methods_6Recode_Outer[] = { - {__Pyx_NAMESTR("default_charset"), (PyCFunction)__pyx_pw_6Recode_5Outer_5default_charset, METH_NOARGS, __Pyx_DOCSTR(0)}, - {__Pyx_NAMESTR("all_charsets"), (PyCFunction)__pyx_pw_6Recode_5Outer_7all_charsets, METH_NOARGS, __Pyx_DOCSTR(0)}, - {__Pyx_NAMESTR("all_surfaces"), (PyCFunction)__pyx_pw_6Recode_5Outer_9all_surfaces, METH_NOARGS, __Pyx_DOCSTR(0)}, - {__Pyx_NAMESTR("concise_charset"), (PyCFunction)__pyx_pw_6Recode_5Outer_11concise_charset, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}, - {__Pyx_NAMESTR("full_charset"), (PyCFunction)__pyx_pw_6Recode_5Outer_13full_charset, METH_NOARGS, __Pyx_DOCSTR(0)}, - {__Pyx_NAMESTR("recode"), (PyCFunction)__pyx_pw_6Recode_5Outer_15recode, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}, + {"default_charset", (PyCFunction)__pyx_pw_6Recode_5Outer_5default_charset, METH_NOARGS, 0}, + {"all_charsets", (PyCFunction)__pyx_pw_6Recode_5Outer_7all_charsets, METH_NOARGS, 0}, + {"all_surfaces", (PyCFunction)__pyx_pw_6Recode_5Outer_9all_surfaces, METH_NOARGS, 0}, + {"concise_charset", (PyCFunction)__pyx_pw_6Recode_5Outer_11concise_charset, METH_VARARGS|METH_KEYWORDS, 0}, + {"full_charset", (PyCFunction)__pyx_pw_6Recode_5Outer_13full_charset, METH_NOARGS, 0}, + {"recode", (PyCFunction)__pyx_pw_6Recode_5Outer_15recode, METH_VARARGS|METH_KEYWORDS, 0}, {0, 0, 0, 0} }; static PyTypeObject __pyx_type_6Recode_Outer = { PyVarObject_HEAD_INIT(0, 0) - __Pyx_NAMESTR("Recode.Outer"), /*tp_name*/ + "Recode.Outer", /*tp_name*/ sizeof(struct __pyx_obj_6Recode_Outer), /*tp_basicsize*/ 0, /*tp_itemsize*/ __pyx_tp_dealloc_6Recode_Outer, /*tp_dealloc*/ @@ -2590,8 +2818,9 @@ static PyTypeObject __pyx_type_6Recode_Outer = { 0, /*tp_setattr*/ #if PY_MAJOR_VERSION < 3 0, /*tp_compare*/ - #else - 0, /*reserved*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ #endif 0, /*tp_repr*/ 0, /*tp_as_number*/ @@ -2630,25 +2859,34 @@ static PyTypeObject __pyx_type_6Recode_Outer = { 0, /*tp_subclasses*/ 0, /*tp_weaklist*/ 0, /*tp_del*/ - #if PY_VERSION_HEX >= 0x02060000 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + 0, /*tp_finalize*/ #endif }; static PyObject *__pyx_tp_new_6Recode_Request(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { PyObject *o; - o = (*t->tp_alloc)(t, 0); + if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { + o = (*t->tp_alloc)(t, 0); + } else { + o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); + } if (unlikely(!o)) return 0; return o; } static void __pyx_tp_dealloc_6Recode_Request(PyObject *o) { + #if PY_VERSION_HEX >= 0x030400a1 + if (unlikely(Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + #endif { PyObject *etype, *eval, *etb; PyErr_Fetch(&etype, &eval, &etb); ++Py_REFCNT(o); __pyx_pw_6Recode_7Request_3__dealloc__(o); - if (PyErr_Occurred()) PyErr_WriteUnraisable(o); --Py_REFCNT(o); PyErr_Restore(etype, eval, etb); } @@ -2656,17 +2894,17 @@ static void __pyx_tp_dealloc_6Recode_Request(PyObject *o) { } static PyMethodDef __pyx_methods_6Recode_Request[] = { - {__Pyx_NAMESTR("set_verbose"), (PyCFunction)__pyx_pw_6Recode_7Request_5set_verbose, METH_O, __Pyx_DOCSTR(0)}, - {__Pyx_NAMESTR("scan"), (PyCFunction)__pyx_pw_6Recode_7Request_7scan, METH_O, __Pyx_DOCSTR(0)}, - {__Pyx_NAMESTR("pair_sequence"), (PyCFunction)__pyx_pw_6Recode_7Request_9pair_sequence, METH_NOARGS, __Pyx_DOCSTR(0)}, - {__Pyx_NAMESTR("format_table"), (PyCFunction)__pyx_pw_6Recode_7Request_11format_table, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}, - {__Pyx_NAMESTR("string"), (PyCFunction)__pyx_pw_6Recode_7Request_13string, METH_O, __Pyx_DOCSTR(0)}, + {"set_verbose", (PyCFunction)__pyx_pw_6Recode_7Request_5set_verbose, METH_O, 0}, + {"scan", (PyCFunction)__pyx_pw_6Recode_7Request_7scan, METH_O, 0}, + {"pair_sequence", (PyCFunction)__pyx_pw_6Recode_7Request_9pair_sequence, METH_NOARGS, 0}, + {"format_table", (PyCFunction)__pyx_pw_6Recode_7Request_11format_table, METH_VARARGS|METH_KEYWORDS, 0}, + {"string", (PyCFunction)__pyx_pw_6Recode_7Request_13string, METH_O, 0}, {0, 0, 0, 0} }; static PyTypeObject __pyx_type_6Recode_Request = { PyVarObject_HEAD_INIT(0, 0) - __Pyx_NAMESTR("Recode.Request"), /*tp_name*/ + "Recode.Request", /*tp_name*/ sizeof(struct __pyx_obj_6Recode_Request), /*tp_basicsize*/ 0, /*tp_itemsize*/ __pyx_tp_dealloc_6Recode_Request, /*tp_dealloc*/ @@ -2675,8 +2913,9 @@ static PyTypeObject __pyx_type_6Recode_Request = { 0, /*tp_setattr*/ #if PY_MAJOR_VERSION < 3 0, /*tp_compare*/ - #else - 0, /*reserved*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ #endif 0, /*tp_repr*/ 0, /*tp_as_number*/ @@ -2715,8 +2954,9 @@ static PyTypeObject __pyx_type_6Recode_Request = { 0, /*tp_subclasses*/ 0, /*tp_weaklist*/ 0, /*tp_del*/ - #if PY_VERSION_HEX >= 0x02060000 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + 0, /*tp_finalize*/ #endif }; @@ -2731,7 +2971,7 @@ static struct PyModuleDef __pyx_moduledef = { #else PyModuleDef_HEAD_INIT, #endif - __Pyx_NAMESTR("Recode"), + "Recode", 0, /* m_doc */ -1, /* m_size */ __pyx_methods /* m_methods */, @@ -2743,90 +2983,91 @@ static struct PyModuleDef __pyx_moduledef = { #endif static __Pyx_StringTabEntry __pyx_string_tab[] = { - {&__pyx_n_s_10, __pyx_k_10, sizeof(__pyx_k_10), 0, 0, 1, 1}, - {&__pyx_n_s_11, __pyx_k_11, sizeof(__pyx_k_11), 0, 0, 1, 1}, - {&__pyx_n_s_12, __pyx_k_12, sizeof(__pyx_k_12), 0, 0, 1, 1}, - {&__pyx_n_s_5, __pyx_k_5, sizeof(__pyx_k_5), 0, 0, 1, 1}, - {&__pyx_n_s_6, __pyx_k_6, sizeof(__pyx_k_6), 0, 0, 1, 1}, - {&__pyx_n_s_7, __pyx_k_7, sizeof(__pyx_k_7), 0, 0, 1, 1}, - {&__pyx_n_s_8, __pyx_k_8, sizeof(__pyx_k_8), 0, 0, 1, 1}, - {&__pyx_n_s_9, __pyx_k_9, sizeof(__pyx_k_9), 0, 0, 1, 1}, - {&__pyx_n_s__AMBIGUOUS_OUTPUT, __pyx_k__AMBIGUOUS_OUTPUT, sizeof(__pyx_k__AMBIGUOUS_OUTPUT), 0, 0, 1, 1}, - {&__pyx_n_s__AUTO_ABORT_FLAG, __pyx_k__AUTO_ABORT_FLAG, sizeof(__pyx_k__AUTO_ABORT_FLAG), 0, 0, 1, 1}, - {&__pyx_n_s__BYTE_ORDER_MARK, __pyx_k__BYTE_ORDER_MARK, sizeof(__pyx_k__BYTE_ORDER_MARK), 0, 0, 1, 1}, - {&__pyx_n_s__BYTE_TO_BYTE, __pyx_k__BYTE_TO_BYTE, sizeof(__pyx_k__BYTE_TO_BYTE), 0, 0, 1, 1}, - {&__pyx_n_s__BYTE_TO_STRING, __pyx_k__BYTE_TO_STRING, sizeof(__pyx_k__BYTE_TO_STRING), 0, 0, 1, 1}, - {&__pyx_n_s__CHARSET, __pyx_k__CHARSET, sizeof(__pyx_k__CHARSET), 0, 0, 1, 1}, - {&__pyx_n_s__COMBINE_EXPLODE, __pyx_k__COMBINE_EXPLODE, sizeof(__pyx_k__COMBINE_EXPLODE), 0, 0, 1, 1}, - {&__pyx_n_s__COMBINE_STEP, __pyx_k__COMBINE_STEP, sizeof(__pyx_k__COMBINE_STEP), 0, 0, 1, 1}, - {&__pyx_n_s__DATA_SURFACE, __pyx_k__DATA_SURFACE, sizeof(__pyx_k__DATA_SURFACE), 0, 0, 1, 1}, - {&__pyx_n_s__DECIMAL_FORMAT, __pyx_k__DECIMAL_FORMAT, sizeof(__pyx_k__DECIMAL_FORMAT), 0, 0, 1, 1}, - {&__pyx_n_s__EXPLODE_DATA, __pyx_k__EXPLODE_DATA, sizeof(__pyx_k__EXPLODE_DATA), 0, 0, 1, 1}, - {&__pyx_n_s__EXPLODE_STEP, __pyx_k__EXPLODE_STEP, sizeof(__pyx_k__EXPLODE_STEP), 0, 0, 1, 1}, - {&__pyx_n_s__Exception, __pyx_k__Exception, sizeof(__pyx_k__Exception), 0, 0, 1, 1}, - {&__pyx_n_s__FULL_FORMAT, __pyx_k__FULL_FORMAT, sizeof(__pyx_k__FULL_FORMAT), 0, 0, 1, 1}, - {&__pyx_n_s__HEXADECIMAL_FORMAT, __pyx_k__HEXADECIMAL_FORMAT, sizeof(__pyx_k__HEXADECIMAL_FORMAT), 0, 0, 1, 1}, - {&__pyx_n_s__INTERNAL_ERROR, __pyx_k__INTERNAL_ERROR, sizeof(__pyx_k__INTERNAL_ERROR), 0, 0, 1, 1}, - {&__pyx_n_s__INVALID_INPUT, __pyx_k__INVALID_INPUT, sizeof(__pyx_k__INVALID_INPUT), 0, 0, 1, 1}, - {&__pyx_n_s__LANGUAGE_C, __pyx_k__LANGUAGE_C, sizeof(__pyx_k__LANGUAGE_C), 0, 0, 1, 1}, - {&__pyx_n_s__LANGUAGE_PERL, __pyx_k__LANGUAGE_PERL, sizeof(__pyx_k__LANGUAGE_PERL), 0, 0, 1, 1}, - {&__pyx_n_s__MAXIMUM_ERROR, __pyx_k__MAXIMUM_ERROR, sizeof(__pyx_k__MAXIMUM_ERROR), 0, 0, 1, 1}, - {&__pyx_n_s__NOT_A_CHARACTER, __pyx_k__NOT_A_CHARACTER, sizeof(__pyx_k__NOT_A_CHARACTER), 0, 0, 1, 1}, - {&__pyx_n_s__NOT_CANONICAL, __pyx_k__NOT_CANONICAL, sizeof(__pyx_k__NOT_CANONICAL), 0, 0, 1, 1}, - {&__pyx_n_s__NO_CHARSET_DATA, __pyx_k__NO_CHARSET_DATA, sizeof(__pyx_k__NO_CHARSET_DATA), 0, 0, 1, 1}, - {&__pyx_n_s__NO_ERROR, __pyx_k__NO_ERROR, sizeof(__pyx_k__NO_ERROR), 0, 0, 1, 1}, - {&__pyx_n_s__NO_FORMAT, __pyx_k__NO_FORMAT, sizeof(__pyx_k__NO_FORMAT), 0, 0, 1, 1}, - {&__pyx_n_s__NO_ICONV_FLAG, __pyx_k__NO_ICONV_FLAG, sizeof(__pyx_k__NO_ICONV_FLAG), 0, 0, 1, 1}, - {&__pyx_n_s__NO_LANGUAGE, __pyx_k__NO_LANGUAGE, sizeof(__pyx_k__NO_LANGUAGE), 0, 0, 1, 1}, - {&__pyx_n_s__NO_STEP_TABLE, __pyx_k__NO_STEP_TABLE, sizeof(__pyx_k__NO_STEP_TABLE), 0, 0, 1, 1}, - {&__pyx_n_s__NO_SYMBOL_TYPE, __pyx_k__NO_SYMBOL_TYPE, sizeof(__pyx_k__NO_SYMBOL_TYPE), 0, 0, 1, 1}, - {&__pyx_n_s__NUL, __pyx_k__NUL, sizeof(__pyx_k__NUL), 0, 0, 1, 1}, - {&__pyx_n_s__OCTAL_FORMAT, __pyx_k__OCTAL_FORMAT, sizeof(__pyx_k__OCTAL_FORMAT), 0, 0, 1, 1}, - {&__pyx_n_s__Recode, __pyx_k__Recode, sizeof(__pyx_k__Recode), 0, 0, 1, 1}, - {&__pyx_n_s__SEQUENCE_IN_MEMORY, __pyx_k__SEQUENCE_IN_MEMORY, sizeof(__pyx_k__SEQUENCE_IN_MEMORY), 0, 0, 1, 1}, - {&__pyx_n_s__SEQUENCE_WITH_FILES, __pyx_k__SEQUENCE_WITH_FILES, sizeof(__pyx_k__SEQUENCE_WITH_FILES), 0, 0, 1, 1}, - {&__pyx_n_s__SEQUENCE_WITH_PIPE, __pyx_k__SEQUENCE_WITH_PIPE, sizeof(__pyx_k__SEQUENCE_WITH_PIPE), 0, 0, 1, 1}, - {&__pyx_n_s__SIZE_1, __pyx_k__SIZE_1, sizeof(__pyx_k__SIZE_1), 0, 0, 1, 1}, - {&__pyx_n_s__SIZE_2, __pyx_k__SIZE_2, sizeof(__pyx_k__SIZE_2), 0, 0, 1, 1}, - {&__pyx_n_s__SIZE_4, __pyx_k__SIZE_4, sizeof(__pyx_k__SIZE_4), 0, 0, 1, 1}, - {&__pyx_n_s__SIZE_N, __pyx_k__SIZE_N, sizeof(__pyx_k__SIZE_N), 0, 0, 1, 1}, - {&__pyx_n_s__STRATEGY_UNDECIDED, __pyx_k__STRATEGY_UNDECIDED, sizeof(__pyx_k__STRATEGY_UNDECIDED), 0, 0, 1, 1}, - {&__pyx_n_s__STRING_TO_UCS2, __pyx_k__STRING_TO_UCS2, sizeof(__pyx_k__STRING_TO_UCS2), 0, 0, 1, 1}, - {&__pyx_n_s__STRIP_DATA, __pyx_k__STRIP_DATA, sizeof(__pyx_k__STRIP_DATA), 0, 0, 1, 1}, - {&__pyx_n_s__STRIP_SIZE, __pyx_k__STRIP_SIZE, sizeof(__pyx_k__STRIP_SIZE), 0, 0, 1, 1}, - {&__pyx_n_s__SWAP_NO, __pyx_k__SWAP_NO, sizeof(__pyx_k__SWAP_NO), 0, 0, 1, 1}, - {&__pyx_n_s__SWAP_UNDECIDED, __pyx_k__SWAP_UNDECIDED, sizeof(__pyx_k__SWAP_UNDECIDED), 0, 0, 1, 1}, - {&__pyx_n_s__SWAP_YES, __pyx_k__SWAP_YES, sizeof(__pyx_k__SWAP_YES), 0, 0, 1, 1}, - {&__pyx_n_s__SYSTEM_ERROR, __pyx_k__SYSTEM_ERROR, sizeof(__pyx_k__SYSTEM_ERROR), 0, 0, 1, 1}, - {&__pyx_n_s__TREE_SURFACE, __pyx_k__TREE_SURFACE, sizeof(__pyx_k__TREE_SURFACE), 0, 0, 1, 1}, - {&__pyx_n_s__UCS2_TO_BYTE, __pyx_k__UCS2_TO_BYTE, sizeof(__pyx_k__UCS2_TO_BYTE), 0, 0, 1, 1}, - {&__pyx_n_s__UCS2_TO_STRING, __pyx_k__UCS2_TO_STRING, sizeof(__pyx_k__UCS2_TO_STRING), 0, 0, 1, 1}, - {&__pyx_n_s__UNTRANSLATABLE, __pyx_k__UNTRANSLATABLE, sizeof(__pyx_k__UNTRANSLATABLE), 0, 0, 1, 1}, - {&__pyx_n_s__USER_ERROR, __pyx_k__USER_ERROR, sizeof(__pyx_k__USER_ERROR), 0, 0, 1, 1}, - {&__pyx_n_s____class__, __pyx_k____class__, sizeof(__pyx_k____class__), 0, 0, 1, 1}, - {&__pyx_n_s____main__, __pyx_k____main__, sizeof(__pyx_k____main__), 0, 0, 1, 1}, - {&__pyx_n_s____metaclass__, __pyx_k____metaclass__, sizeof(__pyx_k____metaclass__), 0, 0, 1, 1}, - {&__pyx_n_s____module__, __pyx_k____module__, sizeof(__pyx_k____module__), 0, 0, 1, 1}, - {&__pyx_n_s____qualname__, __pyx_k____qualname__, sizeof(__pyx_k____qualname__), 0, 0, 1, 1}, - {&__pyx_n_s____test__, __pyx_k____test__, sizeof(__pyx_k____test__), 0, 0, 1, 1}, - {&__pyx_n_s__auto_abort, __pyx_k__auto_abort, sizeof(__pyx_k__auto_abort), 0, 0, 1, 1}, - {&__pyx_n_s__charset, __pyx_k__charset, sizeof(__pyx_k__charset), 0, 0, 1, 1}, - {&__pyx_n_s__command, __pyx_k__command, sizeof(__pyx_k__command), 0, 0, 1, 1}, - {&__pyx_n_s__error, __pyx_k__error, sizeof(__pyx_k__error), 0, 0, 1, 1}, - {&__pyx_n_s__format, __pyx_k__format, sizeof(__pyx_k__format), 0, 0, 1, 1}, - {&__pyx_n_s__iconv, __pyx_k__iconv, sizeof(__pyx_k__iconv), 0, 0, 1, 1}, - {&__pyx_n_s__input, __pyx_k__input, sizeof(__pyx_k__input), 0, 0, 1, 1}, - {&__pyx_n_s__language, __pyx_k__language, sizeof(__pyx_k__language), 0, 0, 1, 1}, - {&__pyx_n_s__outer, __pyx_k__outer, sizeof(__pyx_k__outer), 0, 0, 1, 1}, - {&__pyx_n_s__scan, __pyx_k__scan, sizeof(__pyx_k__scan), 0, 0, 1, 1}, - {&__pyx_n_s__strict, __pyx_k__strict, sizeof(__pyx_k__strict), 0, 0, 1, 1}, - {&__pyx_n_s__string, __pyx_k__string, sizeof(__pyx_k__string), 0, 0, 1, 1}, - {&__pyx_n_s__xDONE, __pyx_k__xDONE, sizeof(__pyx_k__xDONE), 0, 0, 1, 1}, - {&__pyx_n_s__xELSE, __pyx_k__xELSE, sizeof(__pyx_k__xELSE), 0, 0, 1, 1}, + {&__pyx_n_s_ALIAS_FIND_AS_CHARSET, __pyx_k_ALIAS_FIND_AS_CHARSET, sizeof(__pyx_k_ALIAS_FIND_AS_CHARSET), 0, 0, 1, 1}, + {&__pyx_n_s_ALIAS_FIND_AS_EITHER, __pyx_k_ALIAS_FIND_AS_EITHER, sizeof(__pyx_k_ALIAS_FIND_AS_EITHER), 0, 0, 1, 1}, + {&__pyx_n_s_ALIAS_FIND_AS_SURFACE, __pyx_k_ALIAS_FIND_AS_SURFACE, sizeof(__pyx_k_ALIAS_FIND_AS_SURFACE), 0, 0, 1, 1}, + {&__pyx_n_s_AMBIGUOUS_OUTPUT, __pyx_k_AMBIGUOUS_OUTPUT, sizeof(__pyx_k_AMBIGUOUS_OUTPUT), 0, 0, 1, 1}, + {&__pyx_n_s_AUTO_ABORT_FLAG, __pyx_k_AUTO_ABORT_FLAG, sizeof(__pyx_k_AUTO_ABORT_FLAG), 0, 0, 1, 1}, + {&__pyx_n_s_BYTE_ORDER_MARK, __pyx_k_BYTE_ORDER_MARK, sizeof(__pyx_k_BYTE_ORDER_MARK), 0, 0, 1, 1}, + {&__pyx_n_s_BYTE_ORDER_MARK_SWAPPED, __pyx_k_BYTE_ORDER_MARK_SWAPPED, sizeof(__pyx_k_BYTE_ORDER_MARK_SWAPPED), 0, 0, 1, 1}, + {&__pyx_n_s_BYTE_TO_BYTE, __pyx_k_BYTE_TO_BYTE, sizeof(__pyx_k_BYTE_TO_BYTE), 0, 0, 1, 1}, + {&__pyx_n_s_BYTE_TO_STRING, __pyx_k_BYTE_TO_STRING, sizeof(__pyx_k_BYTE_TO_STRING), 0, 0, 1, 1}, + {&__pyx_n_s_CHARSET, __pyx_k_CHARSET, sizeof(__pyx_k_CHARSET), 0, 0, 1, 1}, + {&__pyx_n_s_COMBINE_EXPLODE, __pyx_k_COMBINE_EXPLODE, sizeof(__pyx_k_COMBINE_EXPLODE), 0, 0, 1, 1}, + {&__pyx_n_s_COMBINE_STEP, __pyx_k_COMBINE_STEP, sizeof(__pyx_k_COMBINE_STEP), 0, 0, 1, 1}, + {&__pyx_n_s_DATA_SURFACE, __pyx_k_DATA_SURFACE, sizeof(__pyx_k_DATA_SURFACE), 0, 0, 1, 1}, + {&__pyx_n_s_DECIMAL_FORMAT, __pyx_k_DECIMAL_FORMAT, sizeof(__pyx_k_DECIMAL_FORMAT), 0, 0, 1, 1}, + {&__pyx_n_s_EXPLODE_DATA, __pyx_k_EXPLODE_DATA, sizeof(__pyx_k_EXPLODE_DATA), 0, 0, 1, 1}, + {&__pyx_n_s_EXPLODE_STEP, __pyx_k_EXPLODE_STEP, sizeof(__pyx_k_EXPLODE_STEP), 0, 0, 1, 1}, + {&__pyx_n_s_Exception, __pyx_k_Exception, sizeof(__pyx_k_Exception), 0, 0, 1, 1}, + {&__pyx_n_s_FULL_FORMAT, __pyx_k_FULL_FORMAT, sizeof(__pyx_k_FULL_FORMAT), 0, 0, 1, 1}, + {&__pyx_n_s_HEXADECIMAL_FORMAT, __pyx_k_HEXADECIMAL_FORMAT, sizeof(__pyx_k_HEXADECIMAL_FORMAT), 0, 0, 1, 1}, + {&__pyx_n_s_INTERNAL_ERROR, __pyx_k_INTERNAL_ERROR, sizeof(__pyx_k_INTERNAL_ERROR), 0, 0, 1, 1}, + {&__pyx_n_s_INVALID_INPUT, __pyx_k_INVALID_INPUT, sizeof(__pyx_k_INVALID_INPUT), 0, 0, 1, 1}, + {&__pyx_n_s_LANGUAGE_C, __pyx_k_LANGUAGE_C, sizeof(__pyx_k_LANGUAGE_C), 0, 0, 1, 1}, + {&__pyx_n_s_LANGUAGE_PERL, __pyx_k_LANGUAGE_PERL, sizeof(__pyx_k_LANGUAGE_PERL), 0, 0, 1, 1}, + {&__pyx_n_s_MAXIMUM_ERROR, __pyx_k_MAXIMUM_ERROR, sizeof(__pyx_k_MAXIMUM_ERROR), 0, 0, 1, 1}, + {&__pyx_n_s_NOT_A_CHARACTER, __pyx_k_NOT_A_CHARACTER, sizeof(__pyx_k_NOT_A_CHARACTER), 0, 0, 1, 1}, + {&__pyx_n_s_NOT_CANONICAL, __pyx_k_NOT_CANONICAL, sizeof(__pyx_k_NOT_CANONICAL), 0, 0, 1, 1}, + {&__pyx_n_s_NO_CHARSET_DATA, __pyx_k_NO_CHARSET_DATA, sizeof(__pyx_k_NO_CHARSET_DATA), 0, 0, 1, 1}, + {&__pyx_n_s_NO_ERROR, __pyx_k_NO_ERROR, sizeof(__pyx_k_NO_ERROR), 0, 0, 1, 1}, + {&__pyx_n_s_NO_FORMAT, __pyx_k_NO_FORMAT, sizeof(__pyx_k_NO_FORMAT), 0, 0, 1, 1}, + {&__pyx_n_s_NO_ICONV_FLAG, __pyx_k_NO_ICONV_FLAG, sizeof(__pyx_k_NO_ICONV_FLAG), 0, 0, 1, 1}, + {&__pyx_n_s_NO_LANGUAGE, __pyx_k_NO_LANGUAGE, sizeof(__pyx_k_NO_LANGUAGE), 0, 0, 1, 1}, + {&__pyx_n_s_NO_STEP_TABLE, __pyx_k_NO_STEP_TABLE, sizeof(__pyx_k_NO_STEP_TABLE), 0, 0, 1, 1}, + {&__pyx_n_s_NO_SYMBOL_TYPE, __pyx_k_NO_SYMBOL_TYPE, sizeof(__pyx_k_NO_SYMBOL_TYPE), 0, 0, 1, 1}, + {&__pyx_n_s_NUL, __pyx_k_NUL, sizeof(__pyx_k_NUL), 0, 0, 1, 1}, + {&__pyx_n_s_OCTAL_FORMAT, __pyx_k_OCTAL_FORMAT, sizeof(__pyx_k_OCTAL_FORMAT), 0, 0, 1, 1}, + {&__pyx_n_s_REPLACEMENT_CHARACTER, __pyx_k_REPLACEMENT_CHARACTER, sizeof(__pyx_k_REPLACEMENT_CHARACTER), 0, 0, 1, 1}, + {&__pyx_n_s_Recode, __pyx_k_Recode, sizeof(__pyx_k_Recode), 0, 0, 1, 1}, + {&__pyx_n_s_SEQUENCE_IN_MEMORY, __pyx_k_SEQUENCE_IN_MEMORY, sizeof(__pyx_k_SEQUENCE_IN_MEMORY), 0, 0, 1, 1}, + {&__pyx_n_s_SEQUENCE_WITH_FILES, __pyx_k_SEQUENCE_WITH_FILES, sizeof(__pyx_k_SEQUENCE_WITH_FILES), 0, 0, 1, 1}, + {&__pyx_n_s_SEQUENCE_WITH_PIPE, __pyx_k_SEQUENCE_WITH_PIPE, sizeof(__pyx_k_SEQUENCE_WITH_PIPE), 0, 0, 1, 1}, + {&__pyx_n_s_SIZE_1, __pyx_k_SIZE_1, sizeof(__pyx_k_SIZE_1), 0, 0, 1, 1}, + {&__pyx_n_s_SIZE_2, __pyx_k_SIZE_2, sizeof(__pyx_k_SIZE_2), 0, 0, 1, 1}, + {&__pyx_n_s_SIZE_4, __pyx_k_SIZE_4, sizeof(__pyx_k_SIZE_4), 0, 0, 1, 1}, + {&__pyx_n_s_SIZE_N, __pyx_k_SIZE_N, sizeof(__pyx_k_SIZE_N), 0, 0, 1, 1}, + {&__pyx_n_s_STRATEGY_UNDECIDED, __pyx_k_STRATEGY_UNDECIDED, sizeof(__pyx_k_STRATEGY_UNDECIDED), 0, 0, 1, 1}, + {&__pyx_n_s_STRING_TO_UCS2, __pyx_k_STRING_TO_UCS2, sizeof(__pyx_k_STRING_TO_UCS2), 0, 0, 1, 1}, + {&__pyx_n_s_STRIP_DATA, __pyx_k_STRIP_DATA, sizeof(__pyx_k_STRIP_DATA), 0, 0, 1, 1}, + {&__pyx_n_s_STRIP_SIZE, __pyx_k_STRIP_SIZE, sizeof(__pyx_k_STRIP_SIZE), 0, 0, 1, 1}, + {&__pyx_n_s_SWAP_NO, __pyx_k_SWAP_NO, sizeof(__pyx_k_SWAP_NO), 0, 0, 1, 1}, + {&__pyx_n_s_SWAP_UNDECIDED, __pyx_k_SWAP_UNDECIDED, sizeof(__pyx_k_SWAP_UNDECIDED), 0, 0, 1, 1}, + {&__pyx_n_s_SWAP_YES, __pyx_k_SWAP_YES, sizeof(__pyx_k_SWAP_YES), 0, 0, 1, 1}, + {&__pyx_n_s_SYMBOL_CREATE_CHARSET, __pyx_k_SYMBOL_CREATE_CHARSET, sizeof(__pyx_k_SYMBOL_CREATE_CHARSET), 0, 0, 1, 1}, + {&__pyx_n_s_SYMBOL_CREATE_DATA_SURFACE, __pyx_k_SYMBOL_CREATE_DATA_SURFACE, sizeof(__pyx_k_SYMBOL_CREATE_DATA_SURFACE), 0, 0, 1, 1}, + {&__pyx_n_s_SYMBOL_CREATE_TREE_SURFACE, __pyx_k_SYMBOL_CREATE_TREE_SURFACE, sizeof(__pyx_k_SYMBOL_CREATE_TREE_SURFACE), 0, 0, 1, 1}, + {&__pyx_n_s_SYSTEM_ERROR, __pyx_k_SYSTEM_ERROR, sizeof(__pyx_k_SYSTEM_ERROR), 0, 0, 1, 1}, + {&__pyx_n_s_TREE_SURFACE, __pyx_k_TREE_SURFACE, sizeof(__pyx_k_TREE_SURFACE), 0, 0, 1, 1}, + {&__pyx_n_s_UCS2_TO_BYTE, __pyx_k_UCS2_TO_BYTE, sizeof(__pyx_k_UCS2_TO_BYTE), 0, 0, 1, 1}, + {&__pyx_n_s_UCS2_TO_STRING, __pyx_k_UCS2_TO_STRING, sizeof(__pyx_k_UCS2_TO_STRING), 0, 0, 1, 1}, + {&__pyx_n_s_UNTRANSLATABLE, __pyx_k_UNTRANSLATABLE, sizeof(__pyx_k_UNTRANSLATABLE), 0, 0, 1, 1}, + {&__pyx_n_s_USER_ERROR, __pyx_k_USER_ERROR, sizeof(__pyx_k_USER_ERROR), 0, 0, 1, 1}, + {&__pyx_n_s_auto_abort, __pyx_k_auto_abort, sizeof(__pyx_k_auto_abort), 0, 0, 1, 1}, + {&__pyx_n_s_charset, __pyx_k_charset, sizeof(__pyx_k_charset), 0, 0, 1, 1}, + {&__pyx_n_s_command, __pyx_k_command, sizeof(__pyx_k_command), 0, 0, 1, 1}, + {&__pyx_n_s_doc, __pyx_k_doc, sizeof(__pyx_k_doc), 0, 0, 1, 1}, + {&__pyx_n_s_error, __pyx_k_error, sizeof(__pyx_k_error), 0, 0, 1, 1}, + {&__pyx_n_s_format, __pyx_k_format, sizeof(__pyx_k_format), 0, 0, 1, 1}, + {&__pyx_n_s_iconv, __pyx_k_iconv, sizeof(__pyx_k_iconv), 0, 0, 1, 1}, + {&__pyx_n_s_input, __pyx_k_input, sizeof(__pyx_k_input), 0, 0, 1, 1}, + {&__pyx_n_s_language, __pyx_k_language, sizeof(__pyx_k_language), 0, 0, 1, 1}, + {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, + {&__pyx_n_s_metaclass, __pyx_k_metaclass, sizeof(__pyx_k_metaclass), 0, 0, 1, 1}, + {&__pyx_n_s_module, __pyx_k_module, sizeof(__pyx_k_module), 0, 0, 1, 1}, + {&__pyx_n_s_outer, __pyx_k_outer, sizeof(__pyx_k_outer), 0, 0, 1, 1}, + {&__pyx_n_s_prepare, __pyx_k_prepare, sizeof(__pyx_k_prepare), 0, 0, 1, 1}, + {&__pyx_n_s_qualname, __pyx_k_qualname, sizeof(__pyx_k_qualname), 0, 0, 1, 1}, + {&__pyx_n_s_scan, __pyx_k_scan, sizeof(__pyx_k_scan), 0, 0, 1, 1}, + {&__pyx_n_s_strict, __pyx_k_strict, sizeof(__pyx_k_strict), 0, 0, 1, 1}, + {&__pyx_n_s_string, __pyx_k_string, sizeof(__pyx_k_string), 0, 0, 1, 1}, + {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1}, + {&__pyx_n_s_xDONE, __pyx_k_xDONE, sizeof(__pyx_k_xDONE), 0, 0, 1, 1}, + {&__pyx_n_s_xELSE, __pyx_k_xELSE, sizeof(__pyx_k_xELSE), 0, 0, 1, 1}, {0, 0, 0, 0, 0, 0, 0} }; static int __Pyx_InitCachedBuiltins(void) { - __pyx_builtin_Exception = __Pyx_GetBuiltinName(__pyx_n_s__Exception); if (!__pyx_builtin_Exception) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 469; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_builtin_Exception = __Pyx_GetBuiltinName(__pyx_n_s_Exception); if (!__pyx_builtin_Exception) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 470; __pyx_clineno = __LINE__; goto __pyx_L1_error;} return 0; __pyx_L1_error:; return -1; @@ -2857,6 +3098,7 @@ PyMODINIT_FUNC PyInit_Recode(void) PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; @@ -2871,18 +3113,24 @@ PyMODINIT_FUNC PyInit_Recode(void) } #endif __Pyx_RefNannySetupContext("PyMODINIT_FUNC PyInit_Recode(void)", 0); - if ( __Pyx_check_binary_version() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (__Pyx_check_binary_version() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #ifdef __Pyx_CyFunction_USED - if (__Pyx_CyFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (__pyx_CyFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif #ifdef __Pyx_FusedFunction_USED if (__pyx_FusedFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif + #ifdef __Pyx_Coroutine_USED + if (__pyx_Coroutine_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + #endif #ifdef __Pyx_Generator_USED if (__pyx_Generator_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif + #ifdef __Pyx_StopAsyncIteration_USED + if (__pyx_StopAsyncIteration_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + #endif /*--- Library function declarations ---*/ /*--- Threads initialization code ---*/ #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS @@ -2892,846 +3140,837 @@ PyMODINIT_FUNC PyInit_Recode(void) #endif /*--- Module creation code ---*/ #if PY_MAJOR_VERSION < 3 - __pyx_m = Py_InitModule4(__Pyx_NAMESTR("Recode"), __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); + __pyx_m = Py_InitModule4("Recode", __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); #else __pyx_m = PyModule_Create(&__pyx_moduledef); #endif if (unlikely(!__pyx_m)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} Py_INCREF(__pyx_d); - #if PY_MAJOR_VERSION >= 3 - { - PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (!PyDict_GetItemString(modules, "Recode")) { - if (unlikely(PyDict_SetItemString(modules, "Recode", __pyx_m) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - } - #endif - __pyx_b = PyImport_AddModule(__Pyx_NAMESTR(__Pyx_BUILTIN_MODULE_NAME)); if (unlikely(!__pyx_b)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_b = PyImport_AddModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_b)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #if CYTHON_COMPILING_IN_PYPY Py_INCREF(__pyx_b); #endif - if (__Pyx_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; + if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; /*--- Initialize various global constants etc. ---*/ - if (unlikely(__Pyx_InitGlobals() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (__Pyx_InitGlobals() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT) if (__Pyx_init_sys_getdefaultencoding_params() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif if (__pyx_module_is_main_Recode) { - if (__Pyx_SetAttrString(__pyx_m, "__name__", __pyx_n_s____main__) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; + if (PyObject_SetAttrString(__pyx_m, "__name__", __pyx_n_s_main) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + #if PY_MAJOR_VERSION >= 3 + { + PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (!PyDict_GetItemString(modules, "Recode")) { + if (unlikely(PyDict_SetItemString(modules, "Recode", __pyx_m) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } } + #endif /*--- Builtin init code ---*/ - if (unlikely(__Pyx_InitCachedBuiltins() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (__Pyx_InitCachedBuiltins() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /*--- Constants init code ---*/ - if (unlikely(__Pyx_InitCachedConstants() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (__Pyx_InitCachedConstants() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /*--- Global init code ---*/ /*--- Variable export code ---*/ /*--- Function export code ---*/ /*--- Type init code ---*/ - if (PyType_Ready(&__pyx_type_6Recode_Outer) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 550; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (__Pyx_SetAttrString(__pyx_m, "Outer", (PyObject *)&__pyx_type_6Recode_Outer) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 550; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyType_Ready(&__pyx_type_6Recode_Outer) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 551; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_type_6Recode_Outer.tp_print = 0; + if (PyObject_SetAttrString(__pyx_m, "Outer", (PyObject *)&__pyx_type_6Recode_Outer) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 551; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_ptype_6Recode_Outer = &__pyx_type_6Recode_Outer; - if (PyType_Ready(&__pyx_type_6Recode_Request) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 615; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (__Pyx_SetAttrString(__pyx_m, "Request", (PyObject *)&__pyx_type_6Recode_Request) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 615; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyType_Ready(&__pyx_type_6Recode_Request) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_type_6Recode_Request.tp_print = 0; + if (PyObject_SetAttrString(__pyx_m, "Request", (PyObject *)&__pyx_type_6Recode_Request) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_ptype_6Recode_Request = &__pyx_type_6Recode_Request; /*--- Type import code ---*/ /*--- Variable import code ---*/ /*--- Function import code ---*/ /*--- Execution code ---*/ + #if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) + if (__Pyx_patch_abc() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + #endif - /* "Recode.pyx":469 + /* "Recode.pyx":470 * bool recode_perform_task(RECODE_TASK) * * class error(Exception): # <<<<<<<<<<<<<< * pass * */ - __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 469; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_1)); - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 469; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 470; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_builtin_Exception); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_Exception); __Pyx_GIVEREF(__pyx_builtin_Exception); - __pyx_t_3 = __Pyx_CreateClass(((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_1), __pyx_n_s__error, __pyx_n_s__error, __pyx_n_s__Recode); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 469; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_builtin_Exception); + __pyx_t_2 = __Pyx_CalculateMetaclass(NULL, __pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 470; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_2, __pyx_t_1, __pyx_n_s_error, __pyx_n_s_error, (PyObject *) NULL, __pyx_n_s_Recode, (PyObject *) NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 470; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; - if (PyDict_SetItem(__pyx_d, __pyx_n_s__error, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 469; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = __Pyx_Py3ClassCreate(__pyx_t_2, __pyx_n_s_error, __pyx_t_1, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 470; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_error, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 470; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "Recode.pyx":474 + /* "Recode.pyx":475 * ## Enums repeated for Python. * * NO_SYMBOL_TYPE = RECODE_NO_SYMBOL_TYPE # <<<<<<<<<<<<<< * CHARSET = RECODE_CHARSET * DATA_SURFACE = RECODE_DATA_SURFACE */ - __pyx_t_1 = PyInt_FromLong(RECODE_NO_SYMBOL_TYPE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 474; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyInt_From_enum__recode_symbol_type(RECODE_NO_SYMBOL_TYPE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 475; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s__NO_SYMBOL_TYPE, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 474; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_d, __pyx_n_s_NO_SYMBOL_TYPE, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 475; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "Recode.pyx":475 + /* "Recode.pyx":476 * * NO_SYMBOL_TYPE = RECODE_NO_SYMBOL_TYPE * CHARSET = RECODE_CHARSET # <<<<<<<<<<<<<< * DATA_SURFACE = RECODE_DATA_SURFACE * TREE_SURFACE = RECODE_TREE_SURFACE */ - __pyx_t_1 = PyInt_FromLong(RECODE_CHARSET); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 475; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyInt_From_enum__recode_symbol_type(RECODE_CHARSET); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 476; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s__CHARSET, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 475; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_d, __pyx_n_s_CHARSET, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 476; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "Recode.pyx":476 + /* "Recode.pyx":477 * NO_SYMBOL_TYPE = RECODE_NO_SYMBOL_TYPE * CHARSET = RECODE_CHARSET * DATA_SURFACE = RECODE_DATA_SURFACE # <<<<<<<<<<<<<< * TREE_SURFACE = RECODE_TREE_SURFACE * */ - __pyx_t_1 = PyInt_FromLong(RECODE_DATA_SURFACE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 476; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyInt_From_enum__recode_symbol_type(RECODE_DATA_SURFACE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 477; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s__DATA_SURFACE, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 476; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_d, __pyx_n_s_DATA_SURFACE, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 477; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "Recode.pyx":477 + /* "Recode.pyx":478 * CHARSET = RECODE_CHARSET * DATA_SURFACE = RECODE_DATA_SURFACE * TREE_SURFACE = RECODE_TREE_SURFACE # <<<<<<<<<<<<<< * * NO_CHARSET_DATA = RECODE_NO_CHARSET_DATA */ - __pyx_t_1 = PyInt_FromLong(RECODE_TREE_SURFACE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 477; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyInt_From_enum__recode_symbol_type(RECODE_TREE_SURFACE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 478; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s__TREE_SURFACE, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 477; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_d, __pyx_n_s_TREE_SURFACE, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 478; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "Recode.pyx":479 + /* "Recode.pyx":480 * TREE_SURFACE = RECODE_TREE_SURFACE * * NO_CHARSET_DATA = RECODE_NO_CHARSET_DATA # <<<<<<<<<<<<<< * STRIP_DATA = RECODE_STRIP_DATA * EXPLODE_DATA = RECODE_EXPLODE_DATA */ - __pyx_t_1 = PyInt_FromLong(RECODE_NO_CHARSET_DATA); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 479; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyInt_From_enum__recode_data_type(RECODE_NO_CHARSET_DATA); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 480; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s__NO_CHARSET_DATA, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 479; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_d, __pyx_n_s_NO_CHARSET_DATA, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 480; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "Recode.pyx":480 + /* "Recode.pyx":481 * * NO_CHARSET_DATA = RECODE_NO_CHARSET_DATA * STRIP_DATA = RECODE_STRIP_DATA # <<<<<<<<<<<<<< * EXPLODE_DATA = RECODE_EXPLODE_DATA * */ - __pyx_t_1 = PyInt_FromLong(RECODE_STRIP_DATA); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 480; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyInt_From_enum__recode_data_type(RECODE_STRIP_DATA); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 481; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s__STRIP_DATA, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 480; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_d, __pyx_n_s_STRIP_DATA, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 481; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "Recode.pyx":481 + /* "Recode.pyx":482 * NO_CHARSET_DATA = RECODE_NO_CHARSET_DATA * STRIP_DATA = RECODE_STRIP_DATA * EXPLODE_DATA = RECODE_EXPLODE_DATA # <<<<<<<<<<<<<< * * SIZE_1 = RECODE_1 */ - __pyx_t_1 = PyInt_FromLong(RECODE_EXPLODE_DATA); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 481; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyInt_From_enum__recode_data_type(RECODE_EXPLODE_DATA); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 482; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s__EXPLODE_DATA, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 481; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_d, __pyx_n_s_EXPLODE_DATA, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 482; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "Recode.pyx":483 + /* "Recode.pyx":484 * EXPLODE_DATA = RECODE_EXPLODE_DATA * * SIZE_1 = RECODE_1 # <<<<<<<<<<<<<< * SIZE_2 = RECODE_2 * SIZE_4 = RECODE_4 */ - __pyx_t_1 = PyInt_FromLong(RECODE_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 483; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyInt_From_enum__recode_size(RECODE_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 484; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s__SIZE_1, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 483; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_d, __pyx_n_s_SIZE_1, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 484; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "Recode.pyx":484 + /* "Recode.pyx":485 * * SIZE_1 = RECODE_1 * SIZE_2 = RECODE_2 # <<<<<<<<<<<<<< * SIZE_4 = RECODE_4 * SIZE_N = RECODE_N */ - __pyx_t_1 = PyInt_FromLong(RECODE_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 484; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyInt_From_enum__recode_size(RECODE_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 485; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s__SIZE_2, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 484; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_d, __pyx_n_s_SIZE_2, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 485; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "Recode.pyx":485 + /* "Recode.pyx":486 * SIZE_1 = RECODE_1 * SIZE_2 = RECODE_2 * SIZE_4 = RECODE_4 # <<<<<<<<<<<<<< * SIZE_N = RECODE_N * */ - __pyx_t_1 = PyInt_FromLong(RECODE_4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 485; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyInt_From_enum__recode_size(RECODE_4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 486; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s__SIZE_4, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 485; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_d, __pyx_n_s_SIZE_4, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 486; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "Recode.pyx":486 + /* "Recode.pyx":487 * SIZE_2 = RECODE_2 * SIZE_4 = RECODE_4 * SIZE_N = RECODE_N # <<<<<<<<<<<<<< * * NO_STEP_TABLE = RECODE_NO_STEP_TABLE */ - __pyx_t_1 = PyInt_FromLong(RECODE_N); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 486; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyInt_From_enum__recode_size(RECODE_N); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 487; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s__SIZE_N, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 486; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_d, __pyx_n_s_SIZE_N, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 487; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "Recode.pyx":488 + /* "Recode.pyx":489 * SIZE_N = RECODE_N * * NO_STEP_TABLE = RECODE_NO_STEP_TABLE # <<<<<<<<<<<<<< * BYTE_TO_BYTE = RECODE_BYTE_TO_BYTE * BYTE_TO_STRING = RECODE_BYTE_TO_STRING */ - __pyx_t_1 = PyInt_FromLong(RECODE_NO_STEP_TABLE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 488; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyInt_From_enum__recode_step_type(RECODE_NO_STEP_TABLE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 489; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s__NO_STEP_TABLE, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 488; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_d, __pyx_n_s_NO_STEP_TABLE, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 489; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "Recode.pyx":489 + /* "Recode.pyx":490 * * NO_STEP_TABLE = RECODE_NO_STEP_TABLE * BYTE_TO_BYTE = RECODE_BYTE_TO_BYTE # <<<<<<<<<<<<<< * BYTE_TO_STRING = RECODE_BYTE_TO_STRING * UCS2_TO_BYTE = RECODE_UCS2_TO_BYTE */ - __pyx_t_1 = PyInt_FromLong(RECODE_BYTE_TO_BYTE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 489; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyInt_From_enum__recode_step_type(RECODE_BYTE_TO_BYTE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 490; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s__BYTE_TO_BYTE, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 489; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_d, __pyx_n_s_BYTE_TO_BYTE, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 490; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "Recode.pyx":490 + /* "Recode.pyx":491 * NO_STEP_TABLE = RECODE_NO_STEP_TABLE * BYTE_TO_BYTE = RECODE_BYTE_TO_BYTE * BYTE_TO_STRING = RECODE_BYTE_TO_STRING # <<<<<<<<<<<<<< * UCS2_TO_BYTE = RECODE_UCS2_TO_BYTE * UCS2_TO_STRING = RECODE_UCS2_TO_STRING */ - __pyx_t_1 = PyInt_FromLong(RECODE_BYTE_TO_STRING); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 490; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyInt_From_enum__recode_step_type(RECODE_BYTE_TO_STRING); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 491; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s__BYTE_TO_STRING, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 490; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_d, __pyx_n_s_BYTE_TO_STRING, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 491; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "Recode.pyx":491 + /* "Recode.pyx":492 * BYTE_TO_BYTE = RECODE_BYTE_TO_BYTE * BYTE_TO_STRING = RECODE_BYTE_TO_STRING * UCS2_TO_BYTE = RECODE_UCS2_TO_BYTE # <<<<<<<<<<<<<< * UCS2_TO_STRING = RECODE_UCS2_TO_STRING * STRING_TO_UCS2 = RECODE_STRING_TO_UCS2 */ - __pyx_t_1 = PyInt_FromLong(RECODE_UCS2_TO_BYTE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 491; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyInt_From_enum__recode_step_type(RECODE_UCS2_TO_BYTE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 492; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s__UCS2_TO_BYTE, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 491; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_d, __pyx_n_s_UCS2_TO_BYTE, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 492; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "Recode.pyx":492 + /* "Recode.pyx":493 * BYTE_TO_STRING = RECODE_BYTE_TO_STRING * UCS2_TO_BYTE = RECODE_UCS2_TO_BYTE * UCS2_TO_STRING = RECODE_UCS2_TO_STRING # <<<<<<<<<<<<<< * STRING_TO_UCS2 = RECODE_STRING_TO_UCS2 * COMBINE_EXPLODE = RECODE_COMBINE_EXPLODE */ - __pyx_t_1 = PyInt_FromLong(RECODE_UCS2_TO_STRING); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 492; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyInt_From_enum__recode_step_type(RECODE_UCS2_TO_STRING); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 493; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s__UCS2_TO_STRING, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 492; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_d, __pyx_n_s_UCS2_TO_STRING, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 493; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "Recode.pyx":493 + /* "Recode.pyx":494 * UCS2_TO_BYTE = RECODE_UCS2_TO_BYTE * UCS2_TO_STRING = RECODE_UCS2_TO_STRING * STRING_TO_UCS2 = RECODE_STRING_TO_UCS2 # <<<<<<<<<<<<<< * COMBINE_EXPLODE = RECODE_COMBINE_EXPLODE * COMBINE_STEP = RECODE_COMBINE_STEP */ - __pyx_t_1 = PyInt_FromLong(RECODE_STRING_TO_UCS2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 493; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyInt_From_enum__recode_step_type(RECODE_STRING_TO_UCS2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 494; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s__STRING_TO_UCS2, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 493; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_d, __pyx_n_s_STRING_TO_UCS2, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 494; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "Recode.pyx":494 + /* "Recode.pyx":495 * UCS2_TO_STRING = RECODE_UCS2_TO_STRING * STRING_TO_UCS2 = RECODE_STRING_TO_UCS2 * COMBINE_EXPLODE = RECODE_COMBINE_EXPLODE # <<<<<<<<<<<<<< * COMBINE_STEP = RECODE_COMBINE_STEP * EXPLODE_STEP = RECODE_EXPLODE_STEP */ - __pyx_t_1 = PyInt_FromLong(RECODE_COMBINE_EXPLODE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 494; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyInt_From_enum__recode_step_type(RECODE_COMBINE_EXPLODE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 495; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s__COMBINE_EXPLODE, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 494; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_d, __pyx_n_s_COMBINE_EXPLODE, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 495; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "Recode.pyx":495 + /* "Recode.pyx":496 * STRING_TO_UCS2 = RECODE_STRING_TO_UCS2 * COMBINE_EXPLODE = RECODE_COMBINE_EXPLODE * COMBINE_STEP = RECODE_COMBINE_STEP # <<<<<<<<<<<<<< * EXPLODE_STEP = RECODE_EXPLODE_STEP * */ - __pyx_t_1 = PyInt_FromLong(RECODE_COMBINE_STEP); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 495; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyInt_From_enum__recode_step_type(RECODE_COMBINE_STEP); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 496; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s__COMBINE_STEP, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 495; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_d, __pyx_n_s_COMBINE_STEP, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 496; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "Recode.pyx":496 + /* "Recode.pyx":497 * COMBINE_EXPLODE = RECODE_COMBINE_EXPLODE * COMBINE_STEP = RECODE_COMBINE_STEP * EXPLODE_STEP = RECODE_EXPLODE_STEP # <<<<<<<<<<<<<< * * STRATEGY_UNDECIDED = RECODE_STRATEGY_UNDECIDED */ - __pyx_t_1 = PyInt_FromLong(RECODE_EXPLODE_STEP); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 496; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyInt_From_enum__recode_step_type(RECODE_EXPLODE_STEP); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 497; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s__EXPLODE_STEP, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 496; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_d, __pyx_n_s_EXPLODE_STEP, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 497; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "Recode.pyx":498 + /* "Recode.pyx":499 * EXPLODE_STEP = RECODE_EXPLODE_STEP * * STRATEGY_UNDECIDED = RECODE_STRATEGY_UNDECIDED # <<<<<<<<<<<<<< * SEQUENCE_IN_MEMORY = RECODE_SEQUENCE_IN_MEMORY * SEQUENCE_WITH_FILES = RECODE_SEQUENCE_WITH_FILES */ - __pyx_t_1 = PyInt_FromLong(RECODE_STRATEGY_UNDECIDED); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 498; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyInt_From_enum__recode_sequence_strategy(RECODE_STRATEGY_UNDECIDED); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 499; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s__STRATEGY_UNDECIDED, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 498; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_d, __pyx_n_s_STRATEGY_UNDECIDED, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 499; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "Recode.pyx":499 + /* "Recode.pyx":500 * * STRATEGY_UNDECIDED = RECODE_STRATEGY_UNDECIDED * SEQUENCE_IN_MEMORY = RECODE_SEQUENCE_IN_MEMORY # <<<<<<<<<<<<<< * SEQUENCE_WITH_FILES = RECODE_SEQUENCE_WITH_FILES * SEQUENCE_WITH_PIPE = RECODE_SEQUENCE_WITH_PIPE */ - __pyx_t_1 = PyInt_FromLong(RECODE_SEQUENCE_IN_MEMORY); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 499; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyInt_From_enum__recode_sequence_strategy(RECODE_SEQUENCE_IN_MEMORY); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 500; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s__SEQUENCE_IN_MEMORY, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 499; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_d, __pyx_n_s_SEQUENCE_IN_MEMORY, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 500; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "Recode.pyx":500 + /* "Recode.pyx":501 * STRATEGY_UNDECIDED = RECODE_STRATEGY_UNDECIDED * SEQUENCE_IN_MEMORY = RECODE_SEQUENCE_IN_MEMORY * SEQUENCE_WITH_FILES = RECODE_SEQUENCE_WITH_FILES # <<<<<<<<<<<<<< * SEQUENCE_WITH_PIPE = RECODE_SEQUENCE_WITH_PIPE * */ - __pyx_t_1 = PyInt_FromLong(RECODE_SEQUENCE_WITH_FILES); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 500; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyInt_From_enum__recode_sequence_strategy(RECODE_SEQUENCE_WITH_FILES); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 501; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s__SEQUENCE_WITH_FILES, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 500; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_d, __pyx_n_s_SEQUENCE_WITH_FILES, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 501; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "Recode.pyx":501 + /* "Recode.pyx":502 * SEQUENCE_IN_MEMORY = RECODE_SEQUENCE_IN_MEMORY * SEQUENCE_WITH_FILES = RECODE_SEQUENCE_WITH_FILES * SEQUENCE_WITH_PIPE = RECODE_SEQUENCE_WITH_PIPE # <<<<<<<<<<<<<< * * SWAP_UNDECIDED = RECODE_SWAP_UNDECIDED */ - __pyx_t_1 = PyInt_FromLong(RECODE_SEQUENCE_WITH_PIPE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 501; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyInt_From_enum__recode_sequence_strategy(RECODE_SEQUENCE_WITH_PIPE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 502; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s__SEQUENCE_WITH_PIPE, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 501; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_d, __pyx_n_s_SEQUENCE_WITH_PIPE, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 502; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "Recode.pyx":503 + /* "Recode.pyx":504 * SEQUENCE_WITH_PIPE = RECODE_SEQUENCE_WITH_PIPE * * SWAP_UNDECIDED = RECODE_SWAP_UNDECIDED # <<<<<<<<<<<<<< * SWAP_NO = RECODE_SWAP_NO * SWAP_YES = RECODE_SWAP_YES */ - __pyx_t_1 = PyInt_FromLong(RECODE_SWAP_UNDECIDED); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 503; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyInt_From_enum__recode_swap_input(RECODE_SWAP_UNDECIDED); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 504; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s__SWAP_UNDECIDED, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 503; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_d, __pyx_n_s_SWAP_UNDECIDED, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 504; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "Recode.pyx":504 + /* "Recode.pyx":505 * * SWAP_UNDECIDED = RECODE_SWAP_UNDECIDED * SWAP_NO = RECODE_SWAP_NO # <<<<<<<<<<<<<< * SWAP_YES = RECODE_SWAP_YES * */ - __pyx_t_1 = PyInt_FromLong(RECODE_SWAP_NO); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 504; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyInt_From_enum__recode_swap_input(RECODE_SWAP_NO); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 505; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s__SWAP_NO, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 504; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_d, __pyx_n_s_SWAP_NO, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 505; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "Recode.pyx":505 + /* "Recode.pyx":506 * SWAP_UNDECIDED = RECODE_SWAP_UNDECIDED * SWAP_NO = RECODE_SWAP_NO * SWAP_YES = RECODE_SWAP_YES # <<<<<<<<<<<<<< * * NO_ERROR = RECODE_NO_ERROR */ - __pyx_t_1 = PyInt_FromLong(RECODE_SWAP_YES); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 505; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyInt_From_enum__recode_swap_input(RECODE_SWAP_YES); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 506; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s__SWAP_YES, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 505; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_d, __pyx_n_s_SWAP_YES, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 506; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "Recode.pyx":507 + /* "Recode.pyx":508 * SWAP_YES = RECODE_SWAP_YES * * NO_ERROR = RECODE_NO_ERROR # <<<<<<<<<<<<<< * NOT_CANONICAL = RECODE_NOT_CANONICAL * AMBIGUOUS_OUTPUT = RECODE_AMBIGUOUS_OUTPUT */ - __pyx_t_1 = PyInt_FromLong(RECODE_NO_ERROR); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 507; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyInt_From_enum__recode_error(RECODE_NO_ERROR); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 508; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s__NO_ERROR, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 507; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_d, __pyx_n_s_NO_ERROR, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 508; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "Recode.pyx":508 + /* "Recode.pyx":509 * * NO_ERROR = RECODE_NO_ERROR * NOT_CANONICAL = RECODE_NOT_CANONICAL # <<<<<<<<<<<<<< * AMBIGUOUS_OUTPUT = RECODE_AMBIGUOUS_OUTPUT * UNTRANSLATABLE = RECODE_UNTRANSLATABLE */ - __pyx_t_1 = PyInt_FromLong(RECODE_NOT_CANONICAL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 508; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyInt_From_enum__recode_error(RECODE_NOT_CANONICAL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 509; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s__NOT_CANONICAL, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 508; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_d, __pyx_n_s_NOT_CANONICAL, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 509; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "Recode.pyx":509 + /* "Recode.pyx":510 * NO_ERROR = RECODE_NO_ERROR * NOT_CANONICAL = RECODE_NOT_CANONICAL * AMBIGUOUS_OUTPUT = RECODE_AMBIGUOUS_OUTPUT # <<<<<<<<<<<<<< * UNTRANSLATABLE = RECODE_UNTRANSLATABLE * INVALID_INPUT = RECODE_INVALID_INPUT */ - __pyx_t_1 = PyInt_FromLong(RECODE_AMBIGUOUS_OUTPUT); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 509; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyInt_From_enum__recode_error(RECODE_AMBIGUOUS_OUTPUT); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 510; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s__AMBIGUOUS_OUTPUT, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 509; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_d, __pyx_n_s_AMBIGUOUS_OUTPUT, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 510; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "Recode.pyx":510 + /* "Recode.pyx":511 * NOT_CANONICAL = RECODE_NOT_CANONICAL * AMBIGUOUS_OUTPUT = RECODE_AMBIGUOUS_OUTPUT * UNTRANSLATABLE = RECODE_UNTRANSLATABLE # <<<<<<<<<<<<<< * INVALID_INPUT = RECODE_INVALID_INPUT * SYSTEM_ERROR = RECODE_SYSTEM_ERROR */ - __pyx_t_1 = PyInt_FromLong(RECODE_UNTRANSLATABLE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 510; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyInt_From_enum__recode_error(RECODE_UNTRANSLATABLE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 511; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s__UNTRANSLATABLE, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 510; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_d, __pyx_n_s_UNTRANSLATABLE, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 511; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "Recode.pyx":511 + /* "Recode.pyx":512 * AMBIGUOUS_OUTPUT = RECODE_AMBIGUOUS_OUTPUT * UNTRANSLATABLE = RECODE_UNTRANSLATABLE * INVALID_INPUT = RECODE_INVALID_INPUT # <<<<<<<<<<<<<< * SYSTEM_ERROR = RECODE_SYSTEM_ERROR * USER_ERROR = RECODE_USER_ERROR */ - __pyx_t_1 = PyInt_FromLong(RECODE_INVALID_INPUT); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 511; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyInt_From_enum__recode_error(RECODE_INVALID_INPUT); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 512; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s__INVALID_INPUT, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 511; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_d, __pyx_n_s_INVALID_INPUT, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 512; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "Recode.pyx":512 + /* "Recode.pyx":513 * UNTRANSLATABLE = RECODE_UNTRANSLATABLE * INVALID_INPUT = RECODE_INVALID_INPUT * SYSTEM_ERROR = RECODE_SYSTEM_ERROR # <<<<<<<<<<<<<< * USER_ERROR = RECODE_USER_ERROR * INTERNAL_ERROR = RECODE_INTERNAL_ERROR */ - __pyx_t_1 = PyInt_FromLong(RECODE_SYSTEM_ERROR); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 512; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyInt_From_enum__recode_error(RECODE_SYSTEM_ERROR); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 513; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s__SYSTEM_ERROR, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 512; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_d, __pyx_n_s_SYSTEM_ERROR, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 513; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "Recode.pyx":513 + /* "Recode.pyx":514 * INVALID_INPUT = RECODE_INVALID_INPUT * SYSTEM_ERROR = RECODE_SYSTEM_ERROR * USER_ERROR = RECODE_USER_ERROR # <<<<<<<<<<<<<< * INTERNAL_ERROR = RECODE_INTERNAL_ERROR * MAXIMUM_ERROR = RECODE_MAXIMUM_ERROR */ - __pyx_t_1 = PyInt_FromLong(RECODE_USER_ERROR); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 513; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyInt_From_enum__recode_error(RECODE_USER_ERROR); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 514; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s__USER_ERROR, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 513; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_d, __pyx_n_s_USER_ERROR, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 514; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "Recode.pyx":514 + /* "Recode.pyx":515 * SYSTEM_ERROR = RECODE_SYSTEM_ERROR * USER_ERROR = RECODE_USER_ERROR * INTERNAL_ERROR = RECODE_INTERNAL_ERROR # <<<<<<<<<<<<<< * MAXIMUM_ERROR = RECODE_MAXIMUM_ERROR * */ - __pyx_t_1 = PyInt_FromLong(RECODE_INTERNAL_ERROR); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 514; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyInt_From_enum__recode_error(RECODE_INTERNAL_ERROR); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 515; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s__INTERNAL_ERROR, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 514; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_d, __pyx_n_s_INTERNAL_ERROR, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 515; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "Recode.pyx":515 + /* "Recode.pyx":516 * USER_ERROR = RECODE_USER_ERROR * INTERNAL_ERROR = RECODE_INTERNAL_ERROR * MAXIMUM_ERROR = RECODE_MAXIMUM_ERROR # <<<<<<<<<<<<<< * * NO_FORMAT = RECODE_NO_FORMAT */ - __pyx_t_1 = PyInt_FromLong(RECODE_MAXIMUM_ERROR); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 515; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyInt_From_enum__recode_error(RECODE_MAXIMUM_ERROR); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 516; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s__MAXIMUM_ERROR, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 515; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_d, __pyx_n_s_MAXIMUM_ERROR, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 516; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "Recode.pyx":517 + /* "Recode.pyx":518 * MAXIMUM_ERROR = RECODE_MAXIMUM_ERROR * * NO_FORMAT = RECODE_NO_FORMAT # <<<<<<<<<<<<<< * DECIMAL_FORMAT = RECODE_DECIMAL_FORMAT * OCTAL_FORMAT = RECODE_OCTAL_FORMAT */ - __pyx_t_1 = PyInt_FromLong(RECODE_NO_FORMAT); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 517; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyInt_From_enum__recode_list_format(RECODE_NO_FORMAT); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 518; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s__NO_FORMAT, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 517; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_d, __pyx_n_s_NO_FORMAT, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 518; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "Recode.pyx":518 + /* "Recode.pyx":519 * * NO_FORMAT = RECODE_NO_FORMAT * DECIMAL_FORMAT = RECODE_DECIMAL_FORMAT # <<<<<<<<<<<<<< * OCTAL_FORMAT = RECODE_OCTAL_FORMAT * HEXADECIMAL_FORMAT = RECODE_HEXADECIMAL_FORMAT */ - __pyx_t_1 = PyInt_FromLong(RECODE_DECIMAL_FORMAT); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 518; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyInt_From_enum__recode_list_format(RECODE_DECIMAL_FORMAT); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 519; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s__DECIMAL_FORMAT, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 518; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_d, __pyx_n_s_DECIMAL_FORMAT, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 519; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "Recode.pyx":519 + /* "Recode.pyx":520 * NO_FORMAT = RECODE_NO_FORMAT * DECIMAL_FORMAT = RECODE_DECIMAL_FORMAT * OCTAL_FORMAT = RECODE_OCTAL_FORMAT # <<<<<<<<<<<<<< * HEXADECIMAL_FORMAT = RECODE_HEXADECIMAL_FORMAT * FULL_FORMAT = RECODE_FULL_FORMAT */ - __pyx_t_1 = PyInt_FromLong(RECODE_OCTAL_FORMAT); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 519; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyInt_From_enum__recode_list_format(RECODE_OCTAL_FORMAT); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 520; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s__OCTAL_FORMAT, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 519; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_d, __pyx_n_s_OCTAL_FORMAT, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 520; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "Recode.pyx":520 + /* "Recode.pyx":521 * DECIMAL_FORMAT = RECODE_DECIMAL_FORMAT * OCTAL_FORMAT = RECODE_OCTAL_FORMAT * HEXADECIMAL_FORMAT = RECODE_HEXADECIMAL_FORMAT # <<<<<<<<<<<<<< * FULL_FORMAT = RECODE_FULL_FORMAT * */ - __pyx_t_1 = PyInt_FromLong(RECODE_HEXADECIMAL_FORMAT); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 520; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyInt_From_enum__recode_list_format(RECODE_HEXADECIMAL_FORMAT); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 521; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s__HEXADECIMAL_FORMAT, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 520; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_d, __pyx_n_s_HEXADECIMAL_FORMAT, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 521; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "Recode.pyx":521 + /* "Recode.pyx":522 * OCTAL_FORMAT = RECODE_OCTAL_FORMAT * HEXADECIMAL_FORMAT = RECODE_HEXADECIMAL_FORMAT * FULL_FORMAT = RECODE_FULL_FORMAT # <<<<<<<<<<<<<< * * NO_LANGUAGE = RECODE_NO_LANGUAGE */ - __pyx_t_1 = PyInt_FromLong(RECODE_FULL_FORMAT); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 521; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyInt_From_enum__recode_list_format(RECODE_FULL_FORMAT); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 522; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s__FULL_FORMAT, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 521; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_d, __pyx_n_s_FULL_FORMAT, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 522; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "Recode.pyx":523 + /* "Recode.pyx":524 * FULL_FORMAT = RECODE_FULL_FORMAT * * NO_LANGUAGE = RECODE_NO_LANGUAGE # <<<<<<<<<<<<<< * LANGUAGE_C = RECODE_LANGUAGE_C * LANGUAGE_PERL = RECODE_LANGUAGE_PERL */ - __pyx_t_1 = PyInt_FromLong(RECODE_NO_LANGUAGE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 523; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyInt_From_enum__recode_programming_language(RECODE_NO_LANGUAGE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 524; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s__NO_LANGUAGE, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 523; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_d, __pyx_n_s_NO_LANGUAGE, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 524; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "Recode.pyx":524 + /* "Recode.pyx":525 * * NO_LANGUAGE = RECODE_NO_LANGUAGE * LANGUAGE_C = RECODE_LANGUAGE_C # <<<<<<<<<<<<<< * LANGUAGE_PERL = RECODE_LANGUAGE_PERL * */ - __pyx_t_1 = PyInt_FromLong(RECODE_LANGUAGE_C); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 524; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyInt_From_enum__recode_programming_language(RECODE_LANGUAGE_C); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 525; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s__LANGUAGE_C, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 524; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_d, __pyx_n_s_LANGUAGE_C, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 525; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "Recode.pyx":525 + /* "Recode.pyx":526 * NO_LANGUAGE = RECODE_NO_LANGUAGE * LANGUAGE_C = RECODE_LANGUAGE_C * LANGUAGE_PERL = RECODE_LANGUAGE_PERL # <<<<<<<<<<<<<< * * NUL = NUL_ */ - __pyx_t_1 = PyInt_FromLong(RECODE_LANGUAGE_PERL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 525; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyInt_From_enum__recode_programming_language(RECODE_LANGUAGE_PERL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 526; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s__LANGUAGE_PERL, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 525; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_d, __pyx_n_s_LANGUAGE_PERL, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 526; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "Recode.pyx":527 + /* "Recode.pyx":528 * LANGUAGE_PERL = RECODE_LANGUAGE_PERL * * NUL = NUL_ # <<<<<<<<<<<<<< * STRIP_SIZE = STRIP_SIZE_ * */ - __pyx_t_1 = PyInt_FromLong(NUL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 527; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyInt_From_int(NUL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 528; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s__NUL, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 527; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_d, __pyx_n_s_NUL, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 528; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "Recode.pyx":528 + /* "Recode.pyx":529 * * NUL = NUL_ * STRIP_SIZE = STRIP_SIZE_ # <<<<<<<<<<<<<< * * SYMBOL_CREATE_CHARSET = SYMBOL_CREATE_CHARSET_ */ - __pyx_t_1 = PyInt_FromLong(STRIP_SIZE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 528; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyInt_From_int(STRIP_SIZE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s__STRIP_SIZE, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 528; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_d, __pyx_n_s_STRIP_SIZE, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "Recode.pyx":530 + /* "Recode.pyx":531 * STRIP_SIZE = STRIP_SIZE_ * * SYMBOL_CREATE_CHARSET = SYMBOL_CREATE_CHARSET_ # <<<<<<<<<<<<<< * SYMBOL_CREATE_DATA_SURFACE = SYMBOL_CREATE_DATA_SURFACE_ * SYMBOL_CREATE_TREE_SURFACE = SYMBOL_CREATE_TREE_SURFACE_ */ - __pyx_t_1 = PyInt_FromLong(SYMBOL_CREATE_CHARSET); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 530; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyInt_From_enum__alias_find_type(SYMBOL_CREATE_CHARSET); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 531; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_5, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 530; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_d, __pyx_n_s_SYMBOL_CREATE_CHARSET, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 531; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "Recode.pyx":531 + /* "Recode.pyx":532 * * SYMBOL_CREATE_CHARSET = SYMBOL_CREATE_CHARSET_ * SYMBOL_CREATE_DATA_SURFACE = SYMBOL_CREATE_DATA_SURFACE_ # <<<<<<<<<<<<<< * SYMBOL_CREATE_TREE_SURFACE = SYMBOL_CREATE_TREE_SURFACE_ * ALIAS_FIND_AS_CHARSET = ALIAS_FIND_AS_CHARSET_ */ - __pyx_t_1 = PyInt_FromLong(SYMBOL_CREATE_DATA_SURFACE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 531; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyInt_From_enum__alias_find_type(SYMBOL_CREATE_DATA_SURFACE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_6, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 531; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_d, __pyx_n_s_SYMBOL_CREATE_DATA_SURFACE, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "Recode.pyx":532 + /* "Recode.pyx":533 * SYMBOL_CREATE_CHARSET = SYMBOL_CREATE_CHARSET_ * SYMBOL_CREATE_DATA_SURFACE = SYMBOL_CREATE_DATA_SURFACE_ * SYMBOL_CREATE_TREE_SURFACE = SYMBOL_CREATE_TREE_SURFACE_ # <<<<<<<<<<<<<< * ALIAS_FIND_AS_CHARSET = ALIAS_FIND_AS_CHARSET_ * ALIAS_FIND_AS_SURFACE = ALIAS_FIND_AS_SURFACE_ */ - __pyx_t_1 = PyInt_FromLong(SYMBOL_CREATE_TREE_SURFACE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyInt_From_enum__alias_find_type(SYMBOL_CREATE_TREE_SURFACE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 533; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_7, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_d, __pyx_n_s_SYMBOL_CREATE_TREE_SURFACE, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 533; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "Recode.pyx":533 + /* "Recode.pyx":534 * SYMBOL_CREATE_DATA_SURFACE = SYMBOL_CREATE_DATA_SURFACE_ * SYMBOL_CREATE_TREE_SURFACE = SYMBOL_CREATE_TREE_SURFACE_ * ALIAS_FIND_AS_CHARSET = ALIAS_FIND_AS_CHARSET_ # <<<<<<<<<<<<<< * ALIAS_FIND_AS_SURFACE = ALIAS_FIND_AS_SURFACE_ * ALIAS_FIND_AS_EITHER = ALIAS_FIND_AS_EITHER_ */ - __pyx_t_1 = PyInt_FromLong(ALIAS_FIND_AS_CHARSET); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 533; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyInt_From_enum__alias_find_type(ALIAS_FIND_AS_CHARSET); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 534; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_8, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 533; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ALIAS_FIND_AS_CHARSET, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 534; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "Recode.pyx":534 + /* "Recode.pyx":535 * SYMBOL_CREATE_TREE_SURFACE = SYMBOL_CREATE_TREE_SURFACE_ * ALIAS_FIND_AS_CHARSET = ALIAS_FIND_AS_CHARSET_ * ALIAS_FIND_AS_SURFACE = ALIAS_FIND_AS_SURFACE_ # <<<<<<<<<<<<<< * ALIAS_FIND_AS_EITHER = ALIAS_FIND_AS_EITHER_ * */ - __pyx_t_1 = PyInt_FromLong(ALIAS_FIND_AS_SURFACE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 534; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyInt_From_enum__alias_find_type(ALIAS_FIND_AS_SURFACE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 535; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_9, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 534; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ALIAS_FIND_AS_SURFACE, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 535; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "Recode.pyx":535 + /* "Recode.pyx":536 * ALIAS_FIND_AS_CHARSET = ALIAS_FIND_AS_CHARSET_ * ALIAS_FIND_AS_SURFACE = ALIAS_FIND_AS_SURFACE_ * ALIAS_FIND_AS_EITHER = ALIAS_FIND_AS_EITHER_ # <<<<<<<<<<<<<< * * xDONE = DONE */ - __pyx_t_1 = PyInt_FromLong(ALIAS_FIND_AS_EITHER); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 535; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyInt_From_enum__alias_find_type(ALIAS_FIND_AS_EITHER); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 536; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_10, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 535; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ALIAS_FIND_AS_EITHER, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 536; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "Recode.pyx":537 + /* "Recode.pyx":538 * ALIAS_FIND_AS_EITHER = ALIAS_FIND_AS_EITHER_ * * xDONE = DONE # <<<<<<<<<<<<<< * xELSE = ELSE_ * */ - __pyx_t_1 = PyInt_FromLong(DONE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 537; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyInt_From_int(DONE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 538; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s__xDONE, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 537; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_d, __pyx_n_s_xDONE, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 538; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "Recode.pyx":538 + /* "Recode.pyx":539 * * xDONE = DONE * xELSE = ELSE_ # <<<<<<<<<<<<<< * * REPLACEMENT_CHARACTER = REPLACEMENT_CHARACTER_ */ - __pyx_t_1 = PyInt_FromLong(ELSE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 538; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyInt_From_int(ELSE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 539; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s__xELSE, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 538; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_d, __pyx_n_s_xELSE, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 539; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "Recode.pyx":540 + /* "Recode.pyx":541 * xELSE = ELSE_ * * REPLACEMENT_CHARACTER = REPLACEMENT_CHARACTER_ # <<<<<<<<<<<<<< * NOT_A_CHARACTER = NOT_A_CHARACTER_ * BYTE_ORDER_MARK = BYTE_ORDER_MARK_ */ - __pyx_t_1 = PyInt_FromLong(REPLACEMENT_CHARACTER); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 540; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyInt_From_int(REPLACEMENT_CHARACTER); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 541; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_11, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 540; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_d, __pyx_n_s_REPLACEMENT_CHARACTER, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 541; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "Recode.pyx":541 + /* "Recode.pyx":542 * * REPLACEMENT_CHARACTER = REPLACEMENT_CHARACTER_ * NOT_A_CHARACTER = NOT_A_CHARACTER_ # <<<<<<<<<<<<<< * BYTE_ORDER_MARK = BYTE_ORDER_MARK_ * BYTE_ORDER_MARK_SWAPPED = BYTE_ORDER_MARK_SWAPPED_ */ - __pyx_t_1 = PyInt_FromLong(NOT_A_CHARACTER); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 541; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyInt_From_int(NOT_A_CHARACTER); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 542; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s__NOT_A_CHARACTER, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 541; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_d, __pyx_n_s_NOT_A_CHARACTER, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 542; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "Recode.pyx":542 + /* "Recode.pyx":543 * REPLACEMENT_CHARACTER = REPLACEMENT_CHARACTER_ * NOT_A_CHARACTER = NOT_A_CHARACTER_ * BYTE_ORDER_MARK = BYTE_ORDER_MARK_ # <<<<<<<<<<<<<< * BYTE_ORDER_MARK_SWAPPED = BYTE_ORDER_MARK_SWAPPED_ * */ - __pyx_t_1 = PyInt_FromLong(BYTE_ORDER_MARK); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 542; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyInt_From_int(BYTE_ORDER_MARK); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s__BYTE_ORDER_MARK, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 542; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_d, __pyx_n_s_BYTE_ORDER_MARK, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "Recode.pyx":543 + /* "Recode.pyx":544 * NOT_A_CHARACTER = NOT_A_CHARACTER_ * BYTE_ORDER_MARK = BYTE_ORDER_MARK_ * BYTE_ORDER_MARK_SWAPPED = BYTE_ORDER_MARK_SWAPPED_ # <<<<<<<<<<<<<< * * AUTO_ABORT_FLAG = RECODE_AUTO_ABORT_FLAG */ - __pyx_t_1 = PyInt_FromLong(BYTE_ORDER_MARK_SWAPPED); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyInt_From_int(BYTE_ORDER_MARK_SWAPPED); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 544; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_12, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_d, __pyx_n_s_BYTE_ORDER_MARK_SWAPPED, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 544; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "Recode.pyx":545 + /* "Recode.pyx":546 * BYTE_ORDER_MARK_SWAPPED = BYTE_ORDER_MARK_SWAPPED_ * * AUTO_ABORT_FLAG = RECODE_AUTO_ABORT_FLAG # <<<<<<<<<<<<<< * NO_ICONV_FLAG = RECODE_NO_ICONV_FLAG * */ - __pyx_t_1 = PyInt_FromLong(RECODE_AUTO_ABORT_FLAG); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 545; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyInt_From_int(RECODE_AUTO_ABORT_FLAG); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 546; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s__AUTO_ABORT_FLAG, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 545; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_d, __pyx_n_s_AUTO_ABORT_FLAG, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 546; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "Recode.pyx":546 + /* "Recode.pyx":547 * * AUTO_ABORT_FLAG = RECODE_AUTO_ABORT_FLAG * NO_ICONV_FLAG = RECODE_NO_ICONV_FLAG # <<<<<<<<<<<<<< * * ## Recode library at OUTER level. */ - __pyx_t_1 = PyInt_FromLong(RECODE_NO_ICONV_FLAG); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 546; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyInt_From_int(RECODE_NO_ICONV_FLAG); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 547; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s__NO_ICONV_FLAG, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 546; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_d, __pyx_n_s_NO_ICONV_FLAG, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 547; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "Recode.pyx":553 - * cdef RECODE_OUTER outer - * - * def __init__(self, auto_abort=False, iconv=False, strict=False): # <<<<<<<<<<<<<< - * cdef int flags - * cdef RECODE_SINGLE single - */ - __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 553; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_k_1 = __pyx_t_1; - __Pyx_GIVEREF(__pyx_t_1); - __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 553; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_k_2 = __pyx_t_1; - __Pyx_GIVEREF(__pyx_t_1); - __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 553; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_k_3 = __pyx_t_1; - __Pyx_GIVEREF(__pyx_t_1); - __pyx_t_1 = 0; - - /* "Recode.pyx":597 + /* "Recode.pyx":598 * return list * * def concise_charset(self, format=NO_FORMAT): # <<<<<<<<<<<<<< * ok = list_concise_charset(self.outer, NULL, format) * if not ok: */ - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__NO_FORMAT); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 597; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_NO_FORMAT); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 598; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - __pyx_k_4 = __pyx_t_1; + __pyx_k_ = __pyx_t_1; __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; /* "Recode.pyx":1 - * # Python interface to the Recode C library, for testing. # <<<<<<<<<<<<<< + * # -*- coding: utf-8 -*- # <<<<<<<<<<<<<< + * # Python interface to the Recode C library, for testing. * # Copyright 1996-2000, 2008 Free Software Foundation, Inc. - * # Franois Pinard , 1988. */ __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_1)); - if (PyDict_SetItem(__pyx_d, __pyx_n_s____test__, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /*--- Wrapped vars code ---*/ + goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); if (__pyx_m) { - __Pyx_AddTraceback("init Recode", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__pyx_d) { + __Pyx_AddTraceback("init Recode", __pyx_clineno, __pyx_lineno, __pyx_filename); + } Py_DECREF(__pyx_m); __pyx_m = 0; } else if (!PyErr_Occurred()) { PyErr_SetString(PyExc_ImportError, "init Recode"); @@ -3745,7 +3984,7 @@ PyMODINIT_FUNC PyInit_Recode(void) #endif } -/* Runtime support code */ +/* --- Runtime support code --- */ #if CYTHON_REFNANNY static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { PyObject *m = NULL, *p = NULL; @@ -3760,7 +3999,7 @@ end: Py_XDECREF(m); return (__Pyx_RefNannyAPIStruct *)r; } -#endif /* CYTHON_REFNANNY */ +#endif static PyObject *__Pyx_GetBuiltinName(PyObject *name) { PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name); @@ -3769,7 +4008,7 @@ static PyObject *__Pyx_GetBuiltinName(PyObject *name) { #if PY_MAJOR_VERSION >= 3 "name '%U' is not defined", name); #else - "name '%s' is not defined", PyString_AS_STRING(name)); + "name '%.200s' is not defined", PyString_AS_STRING(name)); #endif } return result; @@ -3874,12 +4113,12 @@ arg_passed_twice: goto bad; invalid_keyword_type: PyErr_Format(PyExc_TypeError, - "%s() keywords must be strings", function_name); + "%.200s() keywords must be strings", function_name); goto bad; invalid_keyword: PyErr_Format(PyExc_TypeError, #if PY_MAJOR_VERSION < 3 - "%s() got an unexpected keyword argument '%s'", + "%.200s() got an unexpected keyword argument '%.200s'", function_name, PyString_AsString(key)); #else "%s() got an unexpected keyword argument '%U'", @@ -3909,7 +4148,7 @@ static void __Pyx_RaiseArgtupleInvalid( more_or_less = "exactly"; } PyErr_Format(PyExc_TypeError, - "%s() takes %s %" CYTHON_FORMAT_SSIZE_T "d positional argument%s (%" CYTHON_FORMAT_SSIZE_T "d given)", + "%.200s() takes %.8s %" CYTHON_FORMAT_SSIZE_T "d positional argument%.1s (%" CYTHON_FORMAT_SSIZE_T "d given)", func_name, more_or_less, num_expected, (num_expected == 1) ? "" : "s", num_found); } @@ -3918,7 +4157,7 @@ static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name) { PyObject *result; #if CYTHON_COMPILING_IN_CPYTHON result = PyDict_GetItem(__pyx_d, name); - if (result) { + if (likely(result)) { Py_INCREF(result); } else { #else @@ -3980,11 +4219,7 @@ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, goto raise_error; } } - #if PY_VERSION_HEX < 0x02050000 - if (PyClass_Check(type)) { - #else if (PyType_Check(type)) { - #endif #if CYTHON_COMPILING_IN_PYPY if (!value) { Py_INCREF(Py_None); @@ -3999,17 +4234,6 @@ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, goto raise_error; } value = type; - #if PY_VERSION_HEX < 0x02050000 - if (PyInstance_Check(type)) { - type = (PyObject*) ((PyInstanceObject*)type)->in_class; - Py_INCREF(type); - } else { - type = 0; - PyErr_SetString(PyExc_TypeError, - "raise: exception must be an old-style class or instance"); - goto raise_error; - } - #else type = (PyObject*) Py_TYPE(type); Py_INCREF(type); if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) { @@ -4017,7 +4241,6 @@ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, "raise: exception class must be a subclass of BaseException"); goto raise_error; } - #endif } __Pyx_ErrRestore(type, value, tb); return; @@ -4027,7 +4250,7 @@ raise_error: Py_XDECREF(tb); return; } -#else /* Python 3+ */ +#else static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { PyObject* owned_instance = NULL; if (tb == Py_None) { @@ -4048,27 +4271,43 @@ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject value = type; type = (PyObject*) Py_TYPE(value); } else if (PyExceptionClass_Check(type)) { - PyObject *args; - if (!value) - args = PyTuple_New(0); - else if (PyTuple_Check(value)) { - Py_INCREF(value); - args = value; - } else - args = PyTuple_Pack(1, value); - if (!args) - goto bad; - owned_instance = PyEval_CallObject(type, args); - Py_DECREF(args); - if (!owned_instance) - goto bad; - value = owned_instance; - if (!PyExceptionInstance_Check(value)) { - PyErr_Format(PyExc_TypeError, - "calling %R should have returned an instance of " - "BaseException, not %R", - type, Py_TYPE(value)); - goto bad; + PyObject *instance_class = NULL; + if (value && PyExceptionInstance_Check(value)) { + instance_class = (PyObject*) Py_TYPE(value); + if (instance_class != type) { + int is_subclass = PyObject_IsSubclass(instance_class, type); + if (!is_subclass) { + instance_class = NULL; + } else if (unlikely(is_subclass == -1)) { + goto bad; + } else { + type = instance_class; + } + } + } + if (!instance_class) { + PyObject *args; + if (!value) + args = PyTuple_New(0); + else if (PyTuple_Check(value)) { + Py_INCREF(value); + args = value; + } else + args = PyTuple_Pack(1, value); + if (!args) + goto bad; + owned_instance = PyObject_Call(type, args, NULL); + Py_DECREF(args); + if (!owned_instance) + goto bad; + value = owned_instance; + if (!PyExceptionInstance_Check(value)) { + PyErr_Format(PyExc_TypeError, + "calling %R should have returned an instance of " + "BaseException, not %R", + type, Py_TYPE(value)); + goto bad; + } } } else { PyErr_SetString(PyExc_TypeError, @@ -4100,6 +4339,13 @@ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject } PyErr_SetObject(type, value); if (tb) { +#if CYTHON_COMPILING_IN_PYPY + PyObject *tmp_type, *tmp_value, *tmp_tb; + PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb); + Py_INCREF(tb); + PyErr_Restore(tmp_type, tmp_value, tb); + Py_XDECREF(tmp_tb); +#else PyThreadState *tstate = PyThreadState_GET(); PyObject* tmp_tb = tstate->curexc_traceback; if (tb != tmp_tb) { @@ -4107,6 +4353,7 @@ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject tstate->curexc_traceback = tb; Py_XDECREF(tmp_tb); } +#endif } bad: Py_XDECREF(owned_instance); @@ -4114,624 +4361,1438 @@ bad: } #endif -static int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed, +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) { + PyObject *result; + ternaryfunc call = func->ob_type->tp_call; + if (unlikely(!call)) + return PyObject_Call(func, arg, kw); + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) + return NULL; + result = (*call)(func, arg, kw); + Py_LeaveRecursiveCall(); + if (unlikely(!result) && unlikely(!PyErr_Occurred())) { + PyErr_SetString( + PyExc_SystemError, + "NULL result without error in PyObject_Call"); + } + return result; +} +#endif + +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg) { + PyObject *self, *result; + PyCFunction cfunc; + cfunc = PyCFunction_GET_FUNCTION(func); + self = PyCFunction_GET_SELF(func); + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) + return NULL; + result = cfunc(self, arg); + Py_LeaveRecursiveCall(); + if (unlikely(!result) && unlikely(!PyErr_Occurred())) { + PyErr_SetString( + PyExc_SystemError, + "NULL result without error in PyObject_Call"); + } + return result; +} +#endif + +#if CYTHON_COMPILING_IN_CPYTHON +static PyObject* __Pyx__PyObject_CallOneArg(PyObject *func, PyObject *arg) { + PyObject *result; + PyObject *args = PyTuple_New(1); + if (unlikely(!args)) return NULL; + Py_INCREF(arg); + PyTuple_SET_ITEM(args, 0, arg); + result = __Pyx_PyObject_Call(func, args, NULL); + Py_DECREF(args); + return result; +} +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { +#ifdef __Pyx_CyFunction_USED + if (likely(PyCFunction_Check(func) || PyObject_TypeCheck(func, __pyx_CyFunctionType))) { +#else + if (likely(PyCFunction_Check(func))) { +#endif + if (likely(PyCFunction_GET_FLAGS(func) & METH_O)) { + return __Pyx_PyObject_CallMethO(func, arg); + } + } + return __Pyx__PyObject_CallOneArg(func, arg); +} +#else +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { + PyObject *result; + PyObject *args = PyTuple_Pack(1, arg); + if (unlikely(!args)) return NULL; + result = __Pyx_PyObject_Call(func, args, NULL); + Py_DECREF(args); + return result; +} +#endif + +static void __Pyx_RaiseArgumentTypeInvalid(const char* name, PyObject *obj, PyTypeObject *type) { + PyErr_Format(PyExc_TypeError, + "Argument '%.200s' has incorrect type (expected %.200s, got %.200s)", + name, type->tp_name, Py_TYPE(obj)->tp_name); +} +static CYTHON_INLINE int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed, const char *name, int exact) { - if (!type) { - PyErr_Format(PyExc_SystemError, "Missing type object"); + if (unlikely(!type)) { + PyErr_SetString(PyExc_SystemError, "Missing type object"); return 0; } if (none_allowed && obj == Py_None) return 1; else if (exact) { - if (Py_TYPE(obj) == type) return 1; + if (likely(Py_TYPE(obj) == type)) return 1; + #if PY_MAJOR_VERSION == 2 + else if ((type == &PyBaseString_Type) && likely(__Pyx_PyBaseString_CheckExact(obj))) return 1; + #endif } else { - if (PyObject_TypeCheck(obj, type)) return 1; + if (likely(PyObject_TypeCheck(obj, type))) return 1; } - PyErr_Format(PyExc_TypeError, - "Argument '%s' has incorrect type (expected %s, got %s)", - name, type->tp_name, Py_TYPE(obj)->tp_name); + __Pyx_RaiseArgumentTypeInvalid(name, obj, type); return 0; } -static PyObject *__Pyx_FindPy2Metaclass(PyObject *bases) { - PyObject *metaclass; +static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases) { + Py_ssize_t i, nbases = PyTuple_GET_SIZE(bases); + for (i=0; i < nbases; i++) { + PyTypeObject *tmptype; + PyObject *tmp = PyTuple_GET_ITEM(bases, i); + tmptype = Py_TYPE(tmp); #if PY_MAJOR_VERSION < 3 - if (PyTuple_Check(bases) && PyTuple_GET_SIZE(bases) > 0) { - PyObject *base = PyTuple_GET_ITEM(bases, 0); - metaclass = __Pyx_PyObject_GetAttrStr(base, __pyx_n_s____class__); + if (tmptype == &PyClass_Type) + continue; +#endif if (!metaclass) { - PyErr_Clear(); - metaclass = (PyObject*) Py_TYPE(base); + metaclass = tmptype; + continue; } - } else { - metaclass = (PyObject *) &PyClass_Type; + if (PyType_IsSubtype(metaclass, tmptype)) + continue; + if (PyType_IsSubtype(tmptype, metaclass)) { + metaclass = tmptype; + continue; + } + PyErr_SetString(PyExc_TypeError, + "metaclass conflict: " + "the metaclass of a derived class " + "must be a (non-strict) subclass " + "of the metaclasses of all its bases"); + return NULL; } + if (!metaclass) { +#if PY_MAJOR_VERSION < 3 + metaclass = &PyClass_Type; #else - if (PyTuple_Check(bases) && PyTuple_GET_SIZE(bases) > 0) { - PyObject *base = PyTuple_GET_ITEM(bases, 0); - metaclass = (PyObject*) Py_TYPE(base); - } else { - metaclass = (PyObject *) &PyType_Type; - } + metaclass = &PyType_Type; #endif - Py_INCREF(metaclass); - return metaclass; -} - -static PyObject *__Pyx_CreateClass(PyObject *bases, PyObject *dict, PyObject *name, - PyObject *qualname, PyObject *modname) { - PyObject *result; - PyObject *metaclass; - if (PyDict_SetItem(dict, __pyx_n_s____module__, modname) < 0) - return NULL; - if (PyDict_SetItem(dict, __pyx_n_s____qualname__, qualname) < 0) - return NULL; - metaclass = PyDict_GetItem(dict, __pyx_n_s____metaclass__); - if (metaclass) { - Py_INCREF(metaclass); - } else { - metaclass = __Pyx_FindPy2Metaclass(bases); } - result = PyObject_CallFunctionObjArgs(metaclass, name, bases, dict, NULL); - Py_DECREF(metaclass); - return result; + Py_INCREF((PyObject*) metaclass); + return (PyObject*) metaclass; } -static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject* x) { - const unsigned char neg_one = (unsigned char)-1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; - if (sizeof(unsigned char) < sizeof(long)) { - long val = __Pyx_PyInt_AsLong(x); - if (unlikely(val != (long)(unsigned char)val)) { - if (!unlikely(val == -1 && PyErr_Occurred())) { - PyErr_SetString(PyExc_OverflowError, - (is_unsigned && unlikely(val < 0)) ? - "can't convert negative value to unsigned char" : - "value too large to convert to unsigned char"); +static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name, + PyObject *qualname, PyObject *mkw, PyObject *modname, PyObject *doc) { + PyObject *ns; + if (metaclass) { + PyObject *prep = __Pyx_PyObject_GetAttrStr(metaclass, __pyx_n_s_prepare); + if (prep) { + PyObject *pargs = PyTuple_Pack(2, name, bases); + if (unlikely(!pargs)) { + Py_DECREF(prep); + return NULL; } - return (unsigned char)-1; + ns = PyObject_Call(prep, pargs, mkw); + Py_DECREF(prep); + Py_DECREF(pargs); + } else { + if (unlikely(!PyErr_ExceptionMatches(PyExc_AttributeError))) + return NULL; + PyErr_Clear(); + ns = PyDict_New(); } - return (unsigned char)val; + } else { + ns = PyDict_New(); } - return (unsigned char)__Pyx_PyInt_AsUnsignedLong(x); + if (unlikely(!ns)) + return NULL; + if (unlikely(PyObject_SetItem(ns, __pyx_n_s_module, modname) < 0)) goto bad; + if (unlikely(PyObject_SetItem(ns, __pyx_n_s_qualname, qualname) < 0)) goto bad; + if (unlikely(doc && PyObject_SetItem(ns, __pyx_n_s_doc, doc) < 0)) goto bad; + return ns; +bad: + Py_DECREF(ns); + return NULL; } - -static CYTHON_INLINE unsigned short __Pyx_PyInt_AsUnsignedShort(PyObject* x) { - const unsigned short neg_one = (unsigned short)-1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; - if (sizeof(unsigned short) < sizeof(long)) { - long val = __Pyx_PyInt_AsLong(x); - if (unlikely(val != (long)(unsigned short)val)) { - if (!unlikely(val == -1 && PyErr_Occurred())) { - PyErr_SetString(PyExc_OverflowError, - (is_unsigned && unlikely(val < 0)) ? - "can't convert negative value to unsigned short" : - "value too large to convert to unsigned short"); - } - return (unsigned short)-1; +static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObject *bases, + PyObject *dict, PyObject *mkw, + int calculate_metaclass, int allow_py2_metaclass) { + PyObject *result, *margs; + PyObject *owned_metaclass = NULL; + if (allow_py2_metaclass) { + owned_metaclass = PyObject_GetItem(dict, __pyx_n_s_metaclass); + if (owned_metaclass) { + metaclass = owned_metaclass; + } else if (likely(PyErr_ExceptionMatches(PyExc_KeyError))) { + PyErr_Clear(); + } else { + return NULL; } - return (unsigned short)val; } - return (unsigned short)__Pyx_PyInt_AsUnsignedLong(x); -} - -static CYTHON_INLINE unsigned int __Pyx_PyInt_AsUnsignedInt(PyObject* x) { - const unsigned int neg_one = (unsigned int)-1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; - if (sizeof(unsigned int) < sizeof(long)) { - long val = __Pyx_PyInt_AsLong(x); - if (unlikely(val != (long)(unsigned int)val)) { - if (!unlikely(val == -1 && PyErr_Occurred())) { - PyErr_SetString(PyExc_OverflowError, - (is_unsigned && unlikely(val < 0)) ? - "can't convert negative value to unsigned int" : - "value too large to convert to unsigned int"); - } - return (unsigned int)-1; - } - return (unsigned int)val; + if (calculate_metaclass && (!metaclass || PyType_Check(metaclass))) { + metaclass = __Pyx_CalculateMetaclass((PyTypeObject*) metaclass, bases); + Py_XDECREF(owned_metaclass); + if (unlikely(!metaclass)) + return NULL; + owned_metaclass = metaclass; } - return (unsigned int)__Pyx_PyInt_AsUnsignedLong(x); -} - -static CYTHON_INLINE char __Pyx_PyInt_AsChar(PyObject* x) { - const char neg_one = (char)-1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; - if (sizeof(char) < sizeof(long)) { - long val = __Pyx_PyInt_AsLong(x); - if (unlikely(val != (long)(char)val)) { - if (!unlikely(val == -1 && PyErr_Occurred())) { - PyErr_SetString(PyExc_OverflowError, - (is_unsigned && unlikely(val < 0)) ? - "can't convert negative value to char" : - "value too large to convert to char"); - } - return (char)-1; - } - return (char)val; + margs = PyTuple_Pack(3, name, bases, dict); + if (unlikely(!margs)) { + result = NULL; + } else { + result = PyObject_Call(metaclass, margs, mkw); + Py_DECREF(margs); } - return (char)__Pyx_PyInt_AsLong(x); + Py_XDECREF(owned_metaclass); + return result; } -static CYTHON_INLINE short __Pyx_PyInt_AsShort(PyObject* x) { - const short neg_one = (short)-1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; - if (sizeof(short) < sizeof(long)) { - long val = __Pyx_PyInt_AsLong(x); - if (unlikely(val != (long)(short)val)) { - if (!unlikely(val == -1 && PyErr_Occurred())) { - PyErr_SetString(PyExc_OverflowError, - (is_unsigned && unlikely(val < 0)) ? - "can't convert negative value to short" : - "value too large to convert to short"); - } - return (short)-1; - } - return (short)val; +static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) { + int start = 0, mid = 0, end = count - 1; + if (end >= 0 && code_line > entries[end].code_line) { + return count; } - return (short)__Pyx_PyInt_AsLong(x); -} - -static CYTHON_INLINE int __Pyx_PyInt_AsInt(PyObject* x) { - const int neg_one = (int)-1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; - if (sizeof(int) < sizeof(long)) { - long val = __Pyx_PyInt_AsLong(x); - if (unlikely(val != (long)(int)val)) { - if (!unlikely(val == -1 && PyErr_Occurred())) { - PyErr_SetString(PyExc_OverflowError, - (is_unsigned && unlikely(val < 0)) ? - "can't convert negative value to int" : - "value too large to convert to int"); - } - return (int)-1; - } - return (int)val; + while (start < end) { + mid = start + (end - start) / 2; + if (code_line < entries[mid].code_line) { + end = mid; + } else if (code_line > entries[mid].code_line) { + start = mid + 1; + } else { + return mid; + } + } + if (code_line <= entries[mid].code_line) { + return mid; + } else { + return mid + 1; + } +} +static PyCodeObject *__pyx_find_code_object(int code_line) { + PyCodeObject* code_object; + int pos; + if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) { + return NULL; + } + pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); + if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) { + return NULL; + } + code_object = __pyx_code_cache.entries[pos].code_object; + Py_INCREF(code_object); + return code_object; +} +static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { + int pos, i; + __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries; + if (unlikely(!code_line)) { + return; + } + if (unlikely(!entries)) { + entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry)); + if (likely(entries)) { + __pyx_code_cache.entries = entries; + __pyx_code_cache.max_count = 64; + __pyx_code_cache.count = 1; + entries[0].code_line = code_line; + entries[0].code_object = code_object; + Py_INCREF(code_object); + } + return; + } + pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); + if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) { + PyCodeObject* tmp = entries[pos].code_object; + entries[pos].code_object = code_object; + Py_DECREF(tmp); + return; + } + if (__pyx_code_cache.count == __pyx_code_cache.max_count) { + int new_max = __pyx_code_cache.max_count + 64; + entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc( + __pyx_code_cache.entries, (size_t)new_max*sizeof(__Pyx_CodeObjectCacheEntry)); + if (unlikely(!entries)) { + return; + } + __pyx_code_cache.entries = entries; + __pyx_code_cache.max_count = new_max; + } + for (i=__pyx_code_cache.count; i>pos; i--) { + entries[i] = entries[i-1]; } - return (int)__Pyx_PyInt_AsLong(x); + entries[pos].code_line = code_line; + entries[pos].code_object = code_object; + __pyx_code_cache.count++; + Py_INCREF(code_object); } -static CYTHON_INLINE signed char __Pyx_PyInt_AsSignedChar(PyObject* x) { - const signed char neg_one = (signed char)-1, const_zero = 0; +#include "compile.h" +#include "frameobject.h" +#include "traceback.h" +static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( + const char *funcname, int c_line, + int py_line, const char *filename) { + PyCodeObject *py_code = 0; + PyObject *py_srcfile = 0; + PyObject *py_funcname = 0; + #if PY_MAJOR_VERSION < 3 + py_srcfile = PyString_FromString(filename); + #else + py_srcfile = PyUnicode_FromString(filename); + #endif + if (!py_srcfile) goto bad; + if (c_line) { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); + #else + py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); + #endif + } + else { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromString(funcname); + #else + py_funcname = PyUnicode_FromString(funcname); + #endif + } + if (!py_funcname) goto bad; + py_code = __Pyx_PyCode_New( + 0, + 0, + 0, + 0, + 0, + __pyx_empty_bytes, /*PyObject *code,*/ + __pyx_empty_tuple, /*PyObject *consts,*/ + __pyx_empty_tuple, /*PyObject *names,*/ + __pyx_empty_tuple, /*PyObject *varnames,*/ + __pyx_empty_tuple, /*PyObject *freevars,*/ + __pyx_empty_tuple, /*PyObject *cellvars,*/ + py_srcfile, /*PyObject *filename,*/ + py_funcname, /*PyObject *name,*/ + py_line, + __pyx_empty_bytes /*PyObject *lnotab*/ + ); + Py_DECREF(py_srcfile); + Py_DECREF(py_funcname); + return py_code; +bad: + Py_XDECREF(py_srcfile); + Py_XDECREF(py_funcname); + return NULL; +} +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename) { + PyCodeObject *py_code = 0; + PyFrameObject *py_frame = 0; + py_code = __pyx_find_code_object(c_line ? c_line : py_line); + if (!py_code) { + py_code = __Pyx_CreateCodeObjectForTraceback( + funcname, c_line, py_line, filename); + if (!py_code) goto bad; + __pyx_insert_code_object(c_line ? c_line : py_line, py_code); + } + py_frame = PyFrame_New( + PyThreadState_GET(), /*PyThreadState *tstate,*/ + py_code, /*PyCodeObject *code,*/ + __pyx_d, /*PyObject *globals,*/ + 0 /*PyObject *locals*/ + ); + if (!py_frame) goto bad; + py_frame->f_lineno = py_line; + PyTraceBack_Here(py_frame); +bad: + Py_XDECREF(py_code); + Py_XDECREF(py_frame); +} + +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_enum__recode_symbol_type(enum recode_symbol_type value) { + const enum recode_symbol_type neg_one = (enum recode_symbol_type) -1, const_zero = (enum recode_symbol_type) 0; const int is_unsigned = neg_one > const_zero; - if (sizeof(signed char) < sizeof(long)) { - long val = __Pyx_PyInt_AsLong(x); - if (unlikely(val != (long)(signed char)val)) { - if (!unlikely(val == -1 && PyErr_Occurred())) { - PyErr_SetString(PyExc_OverflowError, - (is_unsigned && unlikely(val < 0)) ? - "can't convert negative value to signed char" : - "value too large to convert to signed char"); - } - return (signed char)-1; + if (is_unsigned) { + if (sizeof(enum recode_symbol_type) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(enum recode_symbol_type) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); + } else if (sizeof(enum recode_symbol_type) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); + } + } else { + if (sizeof(enum recode_symbol_type) <= sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(enum recode_symbol_type) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); } - return (signed char)val; } - return (signed char)__Pyx_PyInt_AsSignedLong(x); + { + int one = 1; int little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&value; + return _PyLong_FromByteArray(bytes, sizeof(enum recode_symbol_type), + little, !is_unsigned); + } } -static CYTHON_INLINE signed short __Pyx_PyInt_AsSignedShort(PyObject* x) { - const signed short neg_one = (signed short)-1, const_zero = 0; +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_enum__recode_data_type(enum recode_data_type value) { + const enum recode_data_type neg_one = (enum recode_data_type) -1, const_zero = (enum recode_data_type) 0; const int is_unsigned = neg_one > const_zero; - if (sizeof(signed short) < sizeof(long)) { - long val = __Pyx_PyInt_AsLong(x); - if (unlikely(val != (long)(signed short)val)) { - if (!unlikely(val == -1 && PyErr_Occurred())) { - PyErr_SetString(PyExc_OverflowError, - (is_unsigned && unlikely(val < 0)) ? - "can't convert negative value to signed short" : - "value too large to convert to signed short"); - } - return (signed short)-1; + if (is_unsigned) { + if (sizeof(enum recode_data_type) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(enum recode_data_type) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); + } else if (sizeof(enum recode_data_type) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); + } + } else { + if (sizeof(enum recode_data_type) <= sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(enum recode_data_type) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); } - return (signed short)val; } - return (signed short)__Pyx_PyInt_AsSignedLong(x); + { + int one = 1; int little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&value; + return _PyLong_FromByteArray(bytes, sizeof(enum recode_data_type), + little, !is_unsigned); + } } -static CYTHON_INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject* x) { - const signed int neg_one = (signed int)-1, const_zero = 0; +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_enum__recode_size(enum recode_size value) { + const enum recode_size neg_one = (enum recode_size) -1, const_zero = (enum recode_size) 0; const int is_unsigned = neg_one > const_zero; - if (sizeof(signed int) < sizeof(long)) { - long val = __Pyx_PyInt_AsLong(x); - if (unlikely(val != (long)(signed int)val)) { - if (!unlikely(val == -1 && PyErr_Occurred())) { - PyErr_SetString(PyExc_OverflowError, - (is_unsigned && unlikely(val < 0)) ? - "can't convert negative value to signed int" : - "value too large to convert to signed int"); - } - return (signed int)-1; + if (is_unsigned) { + if (sizeof(enum recode_size) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(enum recode_size) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); + } else if (sizeof(enum recode_size) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); + } + } else { + if (sizeof(enum recode_size) <= sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(enum recode_size) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); } - return (signed int)val; } - return (signed int)__Pyx_PyInt_AsSignedLong(x); + { + int one = 1; int little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&value; + return _PyLong_FromByteArray(bytes, sizeof(enum recode_size), + little, !is_unsigned); + } } -static CYTHON_INLINE int __Pyx_PyInt_AsLongDouble(PyObject* x) { - const int neg_one = (int)-1, const_zero = 0; +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_enum__recode_step_type(enum recode_step_type value) { + const enum recode_step_type neg_one = (enum recode_step_type) -1, const_zero = (enum recode_step_type) 0; const int is_unsigned = neg_one > const_zero; - if (sizeof(int) < sizeof(long)) { - long val = __Pyx_PyInt_AsLong(x); - if (unlikely(val != (long)(int)val)) { - if (!unlikely(val == -1 && PyErr_Occurred())) { - PyErr_SetString(PyExc_OverflowError, - (is_unsigned && unlikely(val < 0)) ? - "can't convert negative value to int" : - "value too large to convert to int"); - } - return (int)-1; + if (is_unsigned) { + if (sizeof(enum recode_step_type) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(enum recode_step_type) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); + } else if (sizeof(enum recode_step_type) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); + } + } else { + if (sizeof(enum recode_step_type) <= sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(enum recode_step_type) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); } - return (int)val; } - return (int)__Pyx_PyInt_AsLong(x); + { + int one = 1; int little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&value; + return _PyLong_FromByteArray(bytes, sizeof(enum recode_step_type), + little, !is_unsigned); + } } -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 -#if CYTHON_USE_PYLONG_INTERNALS -#include "longintrepr.h" -#endif -#endif -static CYTHON_INLINE unsigned long __Pyx_PyInt_AsUnsignedLong(PyObject* x) { - const unsigned long neg_one = (unsigned long)-1, const_zero = 0; +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_enum__recode_sequence_strategy(enum recode_sequence_strategy value) { + const enum recode_sequence_strategy neg_one = (enum recode_sequence_strategy) -1, const_zero = (enum recode_sequence_strategy) 0; const int is_unsigned = neg_one > const_zero; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_Check(x))) { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to unsigned long"); - return (unsigned long)-1; + if (is_unsigned) { + if (sizeof(enum recode_sequence_strategy) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(enum recode_sequence_strategy) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); + } else if (sizeof(enum recode_sequence_strategy) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); } - return (unsigned long)val; - } else -#endif - if (likely(PyLong_Check(x))) { - if (is_unsigned) { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 -#if CYTHON_USE_PYLONG_INTERNALS - if (sizeof(digit) <= sizeof(unsigned long)) { - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: return (unsigned long) ((PyLongObject*)x)->ob_digit[0]; - } - } -#endif -#endif - if (unlikely(Py_SIZE(x) < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to unsigned long"); - return (unsigned long)-1; - } - return (unsigned long)PyLong_AsUnsignedLong(x); - } else { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 -#if CYTHON_USE_PYLONG_INTERNALS - if (sizeof(digit) <= sizeof(unsigned long)) { - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: return +(unsigned long) ((PyLongObject*)x)->ob_digit[0]; - case -1: return -(unsigned long) ((PyLongObject*)x)->ob_digit[0]; - } - } -#endif -#endif - return (unsigned long)PyLong_AsLong(x); + } else { + if (sizeof(enum recode_sequence_strategy) <= sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(enum recode_sequence_strategy) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); + } + } + { + int one = 1; int little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&value; + return _PyLong_FromByteArray(bytes, sizeof(enum recode_sequence_strategy), + little, !is_unsigned); + } +} + +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_enum__recode_swap_input(enum recode_swap_input value) { + const enum recode_swap_input neg_one = (enum recode_swap_input) -1, const_zero = (enum recode_swap_input) 0; + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(enum recode_swap_input) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(enum recode_swap_input) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); + } else if (sizeof(enum recode_swap_input) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); } } else { - unsigned long val; - PyObject *tmp = __Pyx_PyNumber_Int(x); - if (!tmp) return (unsigned long)-1; - val = __Pyx_PyInt_AsUnsignedLong(tmp); - Py_DECREF(tmp); - return val; + if (sizeof(enum recode_swap_input) <= sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(enum recode_swap_input) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); + } + } + { + int one = 1; int little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&value; + return _PyLong_FromByteArray(bytes, sizeof(enum recode_swap_input), + little, !is_unsigned); } } -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 -#if CYTHON_USE_PYLONG_INTERNALS -#include "longintrepr.h" -#endif -#endif -static CYTHON_INLINE unsigned PY_LONG_LONG __Pyx_PyInt_AsUnsignedLongLong(PyObject* x) { - const unsigned PY_LONG_LONG neg_one = (unsigned PY_LONG_LONG)-1, const_zero = 0; +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_enum__recode_error(enum recode_error value) { + const enum recode_error neg_one = (enum recode_error) -1, const_zero = (enum recode_error) 0; const int is_unsigned = neg_one > const_zero; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_Check(x))) { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to unsigned PY_LONG_LONG"); - return (unsigned PY_LONG_LONG)-1; + if (is_unsigned) { + if (sizeof(enum recode_error) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(enum recode_error) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); + } else if (sizeof(enum recode_error) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); } - return (unsigned PY_LONG_LONG)val; - } else -#endif - if (likely(PyLong_Check(x))) { - if (is_unsigned) { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 -#if CYTHON_USE_PYLONG_INTERNALS - if (sizeof(digit) <= sizeof(unsigned PY_LONG_LONG)) { - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: return (unsigned PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0]; - } - } -#endif -#endif - if (unlikely(Py_SIZE(x) < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to unsigned PY_LONG_LONG"); - return (unsigned PY_LONG_LONG)-1; - } - return (unsigned PY_LONG_LONG)PyLong_AsUnsignedLongLong(x); - } else { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 -#if CYTHON_USE_PYLONG_INTERNALS - if (sizeof(digit) <= sizeof(unsigned PY_LONG_LONG)) { - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: return +(unsigned PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0]; - case -1: return -(unsigned PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0]; - } - } -#endif -#endif - return (unsigned PY_LONG_LONG)PyLong_AsLongLong(x); + } else { + if (sizeof(enum recode_error) <= sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(enum recode_error) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); + } + } + { + int one = 1; int little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&value; + return _PyLong_FromByteArray(bytes, sizeof(enum recode_error), + little, !is_unsigned); + } +} + +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_enum__recode_list_format(enum recode_list_format value) { + const enum recode_list_format neg_one = (enum recode_list_format) -1, const_zero = (enum recode_list_format) 0; + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(enum recode_list_format) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(enum recode_list_format) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); + } else if (sizeof(enum recode_list_format) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); } } else { - unsigned PY_LONG_LONG val; - PyObject *tmp = __Pyx_PyNumber_Int(x); - if (!tmp) return (unsigned PY_LONG_LONG)-1; - val = __Pyx_PyInt_AsUnsignedLongLong(tmp); - Py_DECREF(tmp); - return val; + if (sizeof(enum recode_list_format) <= sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(enum recode_list_format) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); + } + } + { + int one = 1; int little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&value; + return _PyLong_FromByteArray(bytes, sizeof(enum recode_list_format), + little, !is_unsigned); } } -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_enum__recode_programming_language(enum recode_programming_language value) { + const enum recode_programming_language neg_one = (enum recode_programming_language) -1, const_zero = (enum recode_programming_language) 0; + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(enum recode_programming_language) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(enum recode_programming_language) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); + } else if (sizeof(enum recode_programming_language) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); + } + } else { + if (sizeof(enum recode_programming_language) <= sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(enum recode_programming_language) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); + } + } + { + int one = 1; int little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&value; + return _PyLong_FromByteArray(bytes, sizeof(enum recode_programming_language), + little, !is_unsigned); + } +} + +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) { + const int neg_one = (int) -1, const_zero = (int) 0; + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(int) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(int) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); + } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); + } + } else { + if (sizeof(int) <= sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); + } + } + { + int one = 1; int little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&value; + return _PyLong_FromByteArray(bytes, sizeof(int), + little, !is_unsigned); + } +} + +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_enum__alias_find_type(enum alias_find_type value) { + const enum alias_find_type neg_one = (enum alias_find_type) -1, const_zero = (enum alias_find_type) 0; + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(enum alias_find_type) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(enum alias_find_type) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); + } else if (sizeof(enum alias_find_type) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); + } + } else { + if (sizeof(enum alias_find_type) <= sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(enum alias_find_type) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); + } + } + { + int one = 1; int little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&value; + return _PyLong_FromByteArray(bytes, sizeof(enum alias_find_type), + little, !is_unsigned); + } +} + +#define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value)\ + __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 0) +#define __PYX_VERIFY_RETURN_INT_EXC(target_type, func_type, func_value)\ + __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 1) +#define __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, exc)\ + {\ + func_type value = func_value;\ + if (sizeof(target_type) < sizeof(func_type)) {\ + if (unlikely(value != (func_type) (target_type) value)) {\ + func_type zero = 0;\ + if (exc && unlikely(value == (func_type)-1 && PyErr_Occurred()))\ + return (target_type) -1;\ + if (is_unsigned && unlikely(value < zero))\ + goto raise_neg_overflow;\ + else\ + goto raise_overflow;\ + }\ + }\ + return (target_type) value;\ + } + #if CYTHON_USE_PYLONG_INTERNALS -#include "longintrepr.h" + #include "longintrepr.h" #endif -#endif -static CYTHON_INLINE long __Pyx_PyInt_AsLong(PyObject* x) { - const long neg_one = (long)-1, const_zero = 0; + +static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { + const int neg_one = (int) -1, const_zero = (int) 0; const int is_unsigned = neg_one > const_zero; #if PY_MAJOR_VERSION < 3 if (likely(PyInt_Check(x))) { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to long"); - return (long)-1; + if (sizeof(int) < sizeof(long)) { + __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (int) val; } - return (long)val; } else #endif if (likely(PyLong_Check(x))) { if (is_unsigned) { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS - if (sizeof(digit) <= sizeof(long)) { - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: return (long) ((PyLongObject*)x)->ob_digit[0]; - } + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (int) 0; + case 1: __PYX_VERIFY_RETURN_INT(int, digit, digits[0]) + case 2: + if (8 * sizeof(int) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) >= 2 * PyLong_SHIFT) { + return (int) (((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + case 3: + if (8 * sizeof(int) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) >= 3 * PyLong_SHIFT) { + return (int) (((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + case 4: + if (8 * sizeof(int) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) >= 4 * PyLong_SHIFT) { + return (int) (((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; } #endif -#endif +#if CYTHON_COMPILING_IN_CPYTHON if (unlikely(Py_SIZE(x) < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to long"); - return (long)-1; + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (int) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if (sizeof(int) <= sizeof(unsigned long)) { + __PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x)) + } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) } - return (long)PyLong_AsUnsignedLong(x); } else { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS - if (sizeof(digit) <= sizeof(long)) { - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: return +(long) ((PyLongObject*)x)->ob_digit[0]; - case -1: return -(long) ((PyLongObject*)x)->ob_digit[0]; - } + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (int) 0; + case -1: __PYX_VERIFY_RETURN_INT(int, sdigit, -(sdigit) digits[0]) + case 1: __PYX_VERIFY_RETURN_INT(int, digit, +digits[0]) + case -2: + if (8 * sizeof(int) - 1 > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { + return (int) (((int)-1)*(((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 2: + if (8 * sizeof(int) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { + return (int) ((((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case -3: + if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { + return (int) (((int)-1)*(((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 3: + if (8 * sizeof(int) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { + return (int) ((((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case -4: + if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) { + return (int) (((int)-1)*(((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 4: + if (8 * sizeof(int) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) { + return (int) ((((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; } #endif + if (sizeof(int) <= sizeof(long)) { + __PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x)) + } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x)) + } + } + { +#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) + PyErr_SetString(PyExc_RuntimeError, + "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); +#else + int val; + PyObject *v = __Pyx_PyNumber_Int(x); + #if PY_MAJOR_VERSION < 3 + if (likely(v) && !PyLong_Check(v)) { + PyObject *tmp = v; + v = PyNumber_Long(tmp); + Py_DECREF(tmp); + } + #endif + if (likely(v)) { + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + int ret = _PyLong_AsByteArray((PyLongObject *)v, + bytes, sizeof(val), + is_little, !is_unsigned); + Py_DECREF(v); + if (likely(!ret)) + return val; + } #endif - return (long)PyLong_AsLong(x); + return (int) -1; } } else { - long val; + int val; PyObject *tmp = __Pyx_PyNumber_Int(x); - if (!tmp) return (long)-1; - val = __Pyx_PyInt_AsLong(tmp); + if (!tmp) return (int) -1; + val = __Pyx_PyInt_As_int(tmp); Py_DECREF(tmp); return val; } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to int"); + return (int) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to int"); + return (int) -1; } -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 -#if CYTHON_USE_PYLONG_INTERNALS -#include "longintrepr.h" -#endif -#endif -static CYTHON_INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject* x) { - const PY_LONG_LONG neg_one = (PY_LONG_LONG)-1, const_zero = 0; +static CYTHON_INLINE enum recode_list_format __Pyx_PyInt_As_enum__recode_list_format(PyObject *x) { + const enum recode_list_format neg_one = (enum recode_list_format) -1, const_zero = (enum recode_list_format) 0; const int is_unsigned = neg_one > const_zero; #if PY_MAJOR_VERSION < 3 if (likely(PyInt_Check(x))) { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to PY_LONG_LONG"); - return (PY_LONG_LONG)-1; + if (sizeof(enum recode_list_format) < sizeof(long)) { + __PYX_VERIFY_RETURN_INT(enum recode_list_format, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (enum recode_list_format) val; } - return (PY_LONG_LONG)val; } else #endif if (likely(PyLong_Check(x))) { if (is_unsigned) { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS - if (sizeof(digit) <= sizeof(PY_LONG_LONG)) { - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: return (PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0]; - } + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (enum recode_list_format) 0; + case 1: __PYX_VERIFY_RETURN_INT(enum recode_list_format, digit, digits[0]) + case 2: + if (8 * sizeof(enum recode_list_format) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(enum recode_list_format, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(enum recode_list_format) >= 2 * PyLong_SHIFT) { + return (enum recode_list_format) (((((enum recode_list_format)digits[1]) << PyLong_SHIFT) | (enum recode_list_format)digits[0])); + } + } + break; + case 3: + if (8 * sizeof(enum recode_list_format) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(enum recode_list_format, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(enum recode_list_format) >= 3 * PyLong_SHIFT) { + return (enum recode_list_format) (((((((enum recode_list_format)digits[2]) << PyLong_SHIFT) | (enum recode_list_format)digits[1]) << PyLong_SHIFT) | (enum recode_list_format)digits[0])); + } + } + break; + case 4: + if (8 * sizeof(enum recode_list_format) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(enum recode_list_format, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(enum recode_list_format) >= 4 * PyLong_SHIFT) { + return (enum recode_list_format) (((((((((enum recode_list_format)digits[3]) << PyLong_SHIFT) | (enum recode_list_format)digits[2]) << PyLong_SHIFT) | (enum recode_list_format)digits[1]) << PyLong_SHIFT) | (enum recode_list_format)digits[0])); + } + } + break; } #endif -#endif +#if CYTHON_COMPILING_IN_CPYTHON if (unlikely(Py_SIZE(x) < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to PY_LONG_LONG"); - return (PY_LONG_LONG)-1; + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (enum recode_list_format) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if (sizeof(enum recode_list_format) <= sizeof(unsigned long)) { + __PYX_VERIFY_RETURN_INT_EXC(enum recode_list_format, unsigned long, PyLong_AsUnsignedLong(x)) + } else if (sizeof(enum recode_list_format) <= sizeof(unsigned PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(enum recode_list_format, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) } - return (PY_LONG_LONG)PyLong_AsUnsignedLongLong(x); } else { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS - if (sizeof(digit) <= sizeof(PY_LONG_LONG)) { - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: return +(PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0]; - case -1: return -(PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0]; - } + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (enum recode_list_format) 0; + case -1: __PYX_VERIFY_RETURN_INT(enum recode_list_format, sdigit, -(sdigit) digits[0]) + case 1: __PYX_VERIFY_RETURN_INT(enum recode_list_format, digit, +digits[0]) + case -2: + if (8 * sizeof(enum recode_list_format) - 1 > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(enum recode_list_format, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(enum recode_list_format) - 1 > 2 * PyLong_SHIFT) { + return (enum recode_list_format) (((enum recode_list_format)-1)*(((((enum recode_list_format)digits[1]) << PyLong_SHIFT) | (enum recode_list_format)digits[0]))); + } + } + break; + case 2: + if (8 * sizeof(enum recode_list_format) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(enum recode_list_format, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(enum recode_list_format) - 1 > 2 * PyLong_SHIFT) { + return (enum recode_list_format) ((((((enum recode_list_format)digits[1]) << PyLong_SHIFT) | (enum recode_list_format)digits[0]))); + } + } + break; + case -3: + if (8 * sizeof(enum recode_list_format) - 1 > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(enum recode_list_format, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(enum recode_list_format) - 1 > 3 * PyLong_SHIFT) { + return (enum recode_list_format) (((enum recode_list_format)-1)*(((((((enum recode_list_format)digits[2]) << PyLong_SHIFT) | (enum recode_list_format)digits[1]) << PyLong_SHIFT) | (enum recode_list_format)digits[0]))); + } + } + break; + case 3: + if (8 * sizeof(enum recode_list_format) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(enum recode_list_format, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(enum recode_list_format) - 1 > 3 * PyLong_SHIFT) { + return (enum recode_list_format) ((((((((enum recode_list_format)digits[2]) << PyLong_SHIFT) | (enum recode_list_format)digits[1]) << PyLong_SHIFT) | (enum recode_list_format)digits[0]))); + } + } + break; + case -4: + if (8 * sizeof(enum recode_list_format) - 1 > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(enum recode_list_format, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(enum recode_list_format) - 1 > 4 * PyLong_SHIFT) { + return (enum recode_list_format) (((enum recode_list_format)-1)*(((((((((enum recode_list_format)digits[3]) << PyLong_SHIFT) | (enum recode_list_format)digits[2]) << PyLong_SHIFT) | (enum recode_list_format)digits[1]) << PyLong_SHIFT) | (enum recode_list_format)digits[0]))); + } + } + break; + case 4: + if (8 * sizeof(enum recode_list_format) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(enum recode_list_format, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(enum recode_list_format) - 1 > 4 * PyLong_SHIFT) { + return (enum recode_list_format) ((((((((((enum recode_list_format)digits[3]) << PyLong_SHIFT) | (enum recode_list_format)digits[2]) << PyLong_SHIFT) | (enum recode_list_format)digits[1]) << PyLong_SHIFT) | (enum recode_list_format)digits[0]))); + } + } + break; } #endif + if (sizeof(enum recode_list_format) <= sizeof(long)) { + __PYX_VERIFY_RETURN_INT_EXC(enum recode_list_format, long, PyLong_AsLong(x)) + } else if (sizeof(enum recode_list_format) <= sizeof(PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(enum recode_list_format, PY_LONG_LONG, PyLong_AsLongLong(x)) + } + } + { +#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) + PyErr_SetString(PyExc_RuntimeError, + "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); +#else + enum recode_list_format val; + PyObject *v = __Pyx_PyNumber_Int(x); + #if PY_MAJOR_VERSION < 3 + if (likely(v) && !PyLong_Check(v)) { + PyObject *tmp = v; + v = PyNumber_Long(tmp); + Py_DECREF(tmp); + } + #endif + if (likely(v)) { + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + int ret = _PyLong_AsByteArray((PyLongObject *)v, + bytes, sizeof(val), + is_little, !is_unsigned); + Py_DECREF(v); + if (likely(!ret)) + return val; + } #endif - return (PY_LONG_LONG)PyLong_AsLongLong(x); + return (enum recode_list_format) -1; } } else { - PY_LONG_LONG val; + enum recode_list_format val; PyObject *tmp = __Pyx_PyNumber_Int(x); - if (!tmp) return (PY_LONG_LONG)-1; - val = __Pyx_PyInt_AsLongLong(tmp); + if (!tmp) return (enum recode_list_format) -1; + val = __Pyx_PyInt_As_enum__recode_list_format(tmp); Py_DECREF(tmp); return val; } -} - -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 -#if CYTHON_USE_PYLONG_INTERNALS -#include "longintrepr.h" -#endif -#endif -static CYTHON_INLINE signed long __Pyx_PyInt_AsSignedLong(PyObject* x) { - const signed long neg_one = (signed long)-1, const_zero = 0; +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to enum recode_list_format"); + return (enum recode_list_format) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to enum recode_list_format"); + return (enum recode_list_format) -1; +} + +static CYTHON_INLINE enum __pyx_t_6Recode_bool __Pyx_PyInt_As_enum____pyx_t_6Recode_bool(PyObject *x) { + const enum __pyx_t_6Recode_bool neg_one = (enum __pyx_t_6Recode_bool) -1, const_zero = (enum __pyx_t_6Recode_bool) 0; const int is_unsigned = neg_one > const_zero; #if PY_MAJOR_VERSION < 3 if (likely(PyInt_Check(x))) { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to signed long"); - return (signed long)-1; + if (sizeof(enum __pyx_t_6Recode_bool) < sizeof(long)) { + __PYX_VERIFY_RETURN_INT(enum __pyx_t_6Recode_bool, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (enum __pyx_t_6Recode_bool) val; } - return (signed long)val; } else #endif if (likely(PyLong_Check(x))) { if (is_unsigned) { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS - if (sizeof(digit) <= sizeof(signed long)) { - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: return (signed long) ((PyLongObject*)x)->ob_digit[0]; - } + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (enum __pyx_t_6Recode_bool) 0; + case 1: __PYX_VERIFY_RETURN_INT(enum __pyx_t_6Recode_bool, digit, digits[0]) + case 2: + if (8 * sizeof(enum __pyx_t_6Recode_bool) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(enum __pyx_t_6Recode_bool, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(enum __pyx_t_6Recode_bool) >= 2 * PyLong_SHIFT) { + return (enum __pyx_t_6Recode_bool) (((((enum __pyx_t_6Recode_bool)digits[1]) << PyLong_SHIFT) | (enum __pyx_t_6Recode_bool)digits[0])); + } + } + break; + case 3: + if (8 * sizeof(enum __pyx_t_6Recode_bool) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(enum __pyx_t_6Recode_bool, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(enum __pyx_t_6Recode_bool) >= 3 * PyLong_SHIFT) { + return (enum __pyx_t_6Recode_bool) (((((((enum __pyx_t_6Recode_bool)digits[2]) << PyLong_SHIFT) | (enum __pyx_t_6Recode_bool)digits[1]) << PyLong_SHIFT) | (enum __pyx_t_6Recode_bool)digits[0])); + } + } + break; + case 4: + if (8 * sizeof(enum __pyx_t_6Recode_bool) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(enum __pyx_t_6Recode_bool, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(enum __pyx_t_6Recode_bool) >= 4 * PyLong_SHIFT) { + return (enum __pyx_t_6Recode_bool) (((((((((enum __pyx_t_6Recode_bool)digits[3]) << PyLong_SHIFT) | (enum __pyx_t_6Recode_bool)digits[2]) << PyLong_SHIFT) | (enum __pyx_t_6Recode_bool)digits[1]) << PyLong_SHIFT) | (enum __pyx_t_6Recode_bool)digits[0])); + } + } + break; } #endif -#endif +#if CYTHON_COMPILING_IN_CPYTHON if (unlikely(Py_SIZE(x) < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to signed long"); - return (signed long)-1; + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (enum __pyx_t_6Recode_bool) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if (sizeof(enum __pyx_t_6Recode_bool) <= sizeof(unsigned long)) { + __PYX_VERIFY_RETURN_INT_EXC(enum __pyx_t_6Recode_bool, unsigned long, PyLong_AsUnsignedLong(x)) + } else if (sizeof(enum __pyx_t_6Recode_bool) <= sizeof(unsigned PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(enum __pyx_t_6Recode_bool, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) } - return (signed long)PyLong_AsUnsignedLong(x); } else { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS - if (sizeof(digit) <= sizeof(signed long)) { - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: return +(signed long) ((PyLongObject*)x)->ob_digit[0]; - case -1: return -(signed long) ((PyLongObject*)x)->ob_digit[0]; - } + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (enum __pyx_t_6Recode_bool) 0; + case -1: __PYX_VERIFY_RETURN_INT(enum __pyx_t_6Recode_bool, sdigit, -(sdigit) digits[0]) + case 1: __PYX_VERIFY_RETURN_INT(enum __pyx_t_6Recode_bool, digit, +digits[0]) + case -2: + if (8 * sizeof(enum __pyx_t_6Recode_bool) - 1 > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(enum __pyx_t_6Recode_bool, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(enum __pyx_t_6Recode_bool) - 1 > 2 * PyLong_SHIFT) { + return (enum __pyx_t_6Recode_bool) (((enum __pyx_t_6Recode_bool)-1)*(((((enum __pyx_t_6Recode_bool)digits[1]) << PyLong_SHIFT) | (enum __pyx_t_6Recode_bool)digits[0]))); + } + } + break; + case 2: + if (8 * sizeof(enum __pyx_t_6Recode_bool) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(enum __pyx_t_6Recode_bool, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(enum __pyx_t_6Recode_bool) - 1 > 2 * PyLong_SHIFT) { + return (enum __pyx_t_6Recode_bool) ((((((enum __pyx_t_6Recode_bool)digits[1]) << PyLong_SHIFT) | (enum __pyx_t_6Recode_bool)digits[0]))); + } + } + break; + case -3: + if (8 * sizeof(enum __pyx_t_6Recode_bool) - 1 > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(enum __pyx_t_6Recode_bool, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(enum __pyx_t_6Recode_bool) - 1 > 3 * PyLong_SHIFT) { + return (enum __pyx_t_6Recode_bool) (((enum __pyx_t_6Recode_bool)-1)*(((((((enum __pyx_t_6Recode_bool)digits[2]) << PyLong_SHIFT) | (enum __pyx_t_6Recode_bool)digits[1]) << PyLong_SHIFT) | (enum __pyx_t_6Recode_bool)digits[0]))); + } + } + break; + case 3: + if (8 * sizeof(enum __pyx_t_6Recode_bool) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(enum __pyx_t_6Recode_bool, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(enum __pyx_t_6Recode_bool) - 1 > 3 * PyLong_SHIFT) { + return (enum __pyx_t_6Recode_bool) ((((((((enum __pyx_t_6Recode_bool)digits[2]) << PyLong_SHIFT) | (enum __pyx_t_6Recode_bool)digits[1]) << PyLong_SHIFT) | (enum __pyx_t_6Recode_bool)digits[0]))); + } + } + break; + case -4: + if (8 * sizeof(enum __pyx_t_6Recode_bool) - 1 > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(enum __pyx_t_6Recode_bool, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(enum __pyx_t_6Recode_bool) - 1 > 4 * PyLong_SHIFT) { + return (enum __pyx_t_6Recode_bool) (((enum __pyx_t_6Recode_bool)-1)*(((((((((enum __pyx_t_6Recode_bool)digits[3]) << PyLong_SHIFT) | (enum __pyx_t_6Recode_bool)digits[2]) << PyLong_SHIFT) | (enum __pyx_t_6Recode_bool)digits[1]) << PyLong_SHIFT) | (enum __pyx_t_6Recode_bool)digits[0]))); + } + } + break; + case 4: + if (8 * sizeof(enum __pyx_t_6Recode_bool) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(enum __pyx_t_6Recode_bool, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(enum __pyx_t_6Recode_bool) - 1 > 4 * PyLong_SHIFT) { + return (enum __pyx_t_6Recode_bool) ((((((((((enum __pyx_t_6Recode_bool)digits[3]) << PyLong_SHIFT) | (enum __pyx_t_6Recode_bool)digits[2]) << PyLong_SHIFT) | (enum __pyx_t_6Recode_bool)digits[1]) << PyLong_SHIFT) | (enum __pyx_t_6Recode_bool)digits[0]))); + } + } + break; } #endif + if (sizeof(enum __pyx_t_6Recode_bool) <= sizeof(long)) { + __PYX_VERIFY_RETURN_INT_EXC(enum __pyx_t_6Recode_bool, long, PyLong_AsLong(x)) + } else if (sizeof(enum __pyx_t_6Recode_bool) <= sizeof(PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(enum __pyx_t_6Recode_bool, PY_LONG_LONG, PyLong_AsLongLong(x)) + } + } + { +#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) + PyErr_SetString(PyExc_RuntimeError, + "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); +#else + enum __pyx_t_6Recode_bool val; + PyObject *v = __Pyx_PyNumber_Int(x); + #if PY_MAJOR_VERSION < 3 + if (likely(v) && !PyLong_Check(v)) { + PyObject *tmp = v; + v = PyNumber_Long(tmp); + Py_DECREF(tmp); + } + #endif + if (likely(v)) { + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + int ret = _PyLong_AsByteArray((PyLongObject *)v, + bytes, sizeof(val), + is_little, !is_unsigned); + Py_DECREF(v); + if (likely(!ret)) + return val; + } #endif - return (signed long)PyLong_AsLong(x); + return (enum __pyx_t_6Recode_bool) -1; } } else { - signed long val; + enum __pyx_t_6Recode_bool val; PyObject *tmp = __Pyx_PyNumber_Int(x); - if (!tmp) return (signed long)-1; - val = __Pyx_PyInt_AsSignedLong(tmp); + if (!tmp) return (enum __pyx_t_6Recode_bool) -1; + val = __Pyx_PyInt_As_enum____pyx_t_6Recode_bool(tmp); Py_DECREF(tmp); return val; } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to enum __pyx_t_6Recode_bool"); + return (enum __pyx_t_6Recode_bool) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to enum __pyx_t_6Recode_bool"); + return (enum __pyx_t_6Recode_bool) -1; } -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 -#if CYTHON_USE_PYLONG_INTERNALS -#include "longintrepr.h" -#endif -#endif -static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject* x) { - const signed PY_LONG_LONG neg_one = (signed PY_LONG_LONG)-1, const_zero = 0; +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) { + const long neg_one = (long) -1, const_zero = (long) 0; + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(long) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(long) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); + } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); + } + } else { + if (sizeof(long) <= sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); + } + } + { + int one = 1; int little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&value; + return _PyLong_FromByteArray(bytes, sizeof(long), + little, !is_unsigned); + } +} + +static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) { + const long neg_one = (long) -1, const_zero = (long) 0; const int is_unsigned = neg_one > const_zero; #if PY_MAJOR_VERSION < 3 if (likely(PyInt_Check(x))) { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to signed PY_LONG_LONG"); - return (signed PY_LONG_LONG)-1; + if (sizeof(long) < sizeof(long)) { + __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (long) val; } - return (signed PY_LONG_LONG)val; } else #endif if (likely(PyLong_Check(x))) { if (is_unsigned) { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS - if (sizeof(digit) <= sizeof(signed PY_LONG_LONG)) { - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: return (signed PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0]; - } + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (long) 0; + case 1: __PYX_VERIFY_RETURN_INT(long, digit, digits[0]) + case 2: + if (8 * sizeof(long) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) >= 2 * PyLong_SHIFT) { + return (long) (((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + case 3: + if (8 * sizeof(long) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) >= 3 * PyLong_SHIFT) { + return (long) (((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + case 4: + if (8 * sizeof(long) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) >= 4 * PyLong_SHIFT) { + return (long) (((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; } #endif -#endif +#if CYTHON_COMPILING_IN_CPYTHON if (unlikely(Py_SIZE(x) < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to signed PY_LONG_LONG"); - return (signed PY_LONG_LONG)-1; + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (long) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if (sizeof(long) <= sizeof(unsigned long)) { + __PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x)) + } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) } - return (signed PY_LONG_LONG)PyLong_AsUnsignedLongLong(x); } else { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS - if (sizeof(digit) <= sizeof(signed PY_LONG_LONG)) { - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: return +(signed PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0]; - case -1: return -(signed PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0]; - } + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (long) 0; + case -1: __PYX_VERIFY_RETURN_INT(long, sdigit, -(sdigit) digits[0]) + case 1: __PYX_VERIFY_RETURN_INT(long, digit, +digits[0]) + case -2: + if (8 * sizeof(long) - 1 > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + return (long) (((long)-1)*(((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 2: + if (8 * sizeof(long) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + return (long) ((((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case -3: + if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + return (long) (((long)-1)*(((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 3: + if (8 * sizeof(long) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + return (long) ((((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case -4: + if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { + return (long) (((long)-1)*(((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 4: + if (8 * sizeof(long) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { + return (long) ((((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; } #endif + if (sizeof(long) <= sizeof(long)) { + __PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x)) + } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x)) + } + } + { +#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) + PyErr_SetString(PyExc_RuntimeError, + "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); +#else + long val; + PyObject *v = __Pyx_PyNumber_Int(x); + #if PY_MAJOR_VERSION < 3 + if (likely(v) && !PyLong_Check(v)) { + PyObject *tmp = v; + v = PyNumber_Long(tmp); + Py_DECREF(tmp); + } + #endif + if (likely(v)) { + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + int ret = _PyLong_AsByteArray((PyLongObject *)v, + bytes, sizeof(val), + is_little, !is_unsigned); + Py_DECREF(v); + if (likely(!ret)) + return val; + } #endif - return (signed PY_LONG_LONG)PyLong_AsLongLong(x); + return (long) -1; } } else { - signed PY_LONG_LONG val; + long val; PyObject *tmp = __Pyx_PyNumber_Int(x); - if (!tmp) return (signed PY_LONG_LONG)-1; - val = __Pyx_PyInt_AsSignedLongLong(tmp); + if (!tmp) return (long) -1; + val = __Pyx_PyInt_As_long(tmp); Py_DECREF(tmp); return val; } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to long"); + return (long) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to long"); + return (long) -1; } static int __Pyx_check_binary_version(void) { @@ -4744,177 +5805,11 @@ static int __Pyx_check_binary_version(void) { "compiletime version %s of module '%.100s' " "does not match runtime version %s", ctversion, __Pyx_MODULE_NAME, rtversion); - #if PY_VERSION_HEX < 0x02050000 - return PyErr_Warn(NULL, message); - #else return PyErr_WarnEx(NULL, message, 1); - #endif } return 0; } -static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) { - int start = 0, mid = 0, end = count - 1; - if (end >= 0 && code_line > entries[end].code_line) { - return count; - } - while (start < end) { - mid = (start + end) / 2; - if (code_line < entries[mid].code_line) { - end = mid; - } else if (code_line > entries[mid].code_line) { - start = mid + 1; - } else { - return mid; - } - } - if (code_line <= entries[mid].code_line) { - return mid; - } else { - return mid + 1; - } -} -static PyCodeObject *__pyx_find_code_object(int code_line) { - PyCodeObject* code_object; - int pos; - if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) { - return NULL; - } - pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); - if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) { - return NULL; - } - code_object = __pyx_code_cache.entries[pos].code_object; - Py_INCREF(code_object); - return code_object; -} -static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { - int pos, i; - __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries; - if (unlikely(!code_line)) { - return; - } - if (unlikely(!entries)) { - entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry)); - if (likely(entries)) { - __pyx_code_cache.entries = entries; - __pyx_code_cache.max_count = 64; - __pyx_code_cache.count = 1; - entries[0].code_line = code_line; - entries[0].code_object = code_object; - Py_INCREF(code_object); - } - return; - } - pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); - if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) { - PyCodeObject* tmp = entries[pos].code_object; - entries[pos].code_object = code_object; - Py_DECREF(tmp); - return; - } - if (__pyx_code_cache.count == __pyx_code_cache.max_count) { - int new_max = __pyx_code_cache.max_count + 64; - entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc( - __pyx_code_cache.entries, new_max*sizeof(__Pyx_CodeObjectCacheEntry)); - if (unlikely(!entries)) { - return; - } - __pyx_code_cache.entries = entries; - __pyx_code_cache.max_count = new_max; - } - for (i=__pyx_code_cache.count; i>pos; i--) { - entries[i] = entries[i-1]; - } - entries[pos].code_line = code_line; - entries[pos].code_object = code_object; - __pyx_code_cache.count++; - Py_INCREF(code_object); -} - -#include "compile.h" -#include "frameobject.h" -#include "traceback.h" -static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( - const char *funcname, int c_line, - int py_line, const char *filename) { - PyCodeObject *py_code = 0; - PyObject *py_srcfile = 0; - PyObject *py_funcname = 0; - #if PY_MAJOR_VERSION < 3 - py_srcfile = PyString_FromString(filename); - #else - py_srcfile = PyUnicode_FromString(filename); - #endif - if (!py_srcfile) goto bad; - if (c_line) { - #if PY_MAJOR_VERSION < 3 - py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); - #else - py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); - #endif - } - else { - #if PY_MAJOR_VERSION < 3 - py_funcname = PyString_FromString(funcname); - #else - py_funcname = PyUnicode_FromString(funcname); - #endif - } - if (!py_funcname) goto bad; - py_code = __Pyx_PyCode_New( - 0, /*int argcount,*/ - 0, /*int kwonlyargcount,*/ - 0, /*int nlocals,*/ - 0, /*int stacksize,*/ - 0, /*int flags,*/ - __pyx_empty_bytes, /*PyObject *code,*/ - __pyx_empty_tuple, /*PyObject *consts,*/ - __pyx_empty_tuple, /*PyObject *names,*/ - __pyx_empty_tuple, /*PyObject *varnames,*/ - __pyx_empty_tuple, /*PyObject *freevars,*/ - __pyx_empty_tuple, /*PyObject *cellvars,*/ - py_srcfile, /*PyObject *filename,*/ - py_funcname, /*PyObject *name,*/ - py_line, /*int firstlineno,*/ - __pyx_empty_bytes /*PyObject *lnotab*/ - ); - Py_DECREF(py_srcfile); - Py_DECREF(py_funcname); - return py_code; -bad: - Py_XDECREF(py_srcfile); - Py_XDECREF(py_funcname); - return NULL; -} -static void __Pyx_AddTraceback(const char *funcname, int c_line, - int py_line, const char *filename) { - PyCodeObject *py_code = 0; - PyObject *py_globals = 0; - PyFrameObject *py_frame = 0; - py_code = __pyx_find_code_object(c_line ? c_line : py_line); - if (!py_code) { - py_code = __Pyx_CreateCodeObjectForTraceback( - funcname, c_line, py_line, filename); - if (!py_code) goto bad; - __pyx_insert_code_object(c_line ? c_line : py_line, py_code); - } - py_globals = PyModule_GetDict(__pyx_m); - if (!py_globals) goto bad; - py_frame = PyFrame_New( - PyThreadState_GET(), /*PyThreadState *tstate,*/ - py_code, /*PyCodeObject *code,*/ - py_globals, /*PyObject *globals,*/ - 0 /*PyObject *locals*/ - ); - if (!py_frame) goto bad; - py_frame->f_lineno = py_line; - PyTraceBack_Here(py_frame); -bad: - Py_XDECREF(py_code); - Py_XDECREF(py_frame); -} - static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { while (t->p) { #if PY_MAJOR_VERSION < 3 @@ -4925,7 +5820,7 @@ static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { } else { *t->p = PyString_FromStringAndSize(t->s, t->n - 1); } - #else /* Python 3+ has unicode identifiers */ + #else if (t->is_unicode | t->is_str) { if (t->intern) { *t->p = PyUnicode_InternFromString(t->s); @@ -4945,15 +5840,15 @@ static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { return 0; } -static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(char* c_str) { - return __Pyx_PyUnicode_FromStringAndSize(c_str, strlen(c_str)); +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char* c_str) { + return __Pyx_PyUnicode_FromStringAndSize(c_str, (Py_ssize_t)strlen(c_str)); } static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject* o) { Py_ssize_t ignore; return __Pyx_PyObject_AsStringAndSize(o, &ignore); } static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) { -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT +#if CYTHON_COMPILING_IN_CPYTHON && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT) if ( #if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII __Pyx_sys_getdefaultencoding_not_ascii && @@ -4975,29 +5870,35 @@ static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_ } } } -#endif /*__PYX_DEFAULT_STRING_ENCODING_IS_ASCII*/ +#endif *length = PyBytes_GET_SIZE(defenc); return defenc_c; -#else /* PY_VERSION_HEX < 0x03030000 */ - if (PyUnicode_READY(o) == -1) return NULL; +#else + if (__Pyx_PyUnicode_READY(o) == -1) return NULL; #if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII if (PyUnicode_IS_ASCII(o)) { - *length = PyUnicode_GET_DATA_SIZE(o); + *length = PyUnicode_GET_LENGTH(o); return PyUnicode_AsUTF8(o); } else { PyUnicode_AsASCIIString(o); return NULL; } -#else /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII */ +#else return PyUnicode_AsUTF8AndSize(o, length); -#endif /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII */ -#endif /* PY_VERSION_HEX < 0x03030000 */ +#endif +#endif + } else +#endif +#if (!CYTHON_COMPILING_IN_PYPY) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE)) + if (PyByteArray_Check(o)) { + *length = PyByteArray_GET_SIZE(o); + return PyByteArray_AS_STRING(o); } else -#endif /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT */ +#endif { char* result; int r = PyBytes_AsStringAndSize(o, &result, length); - if (r < 0) { + if (unlikely(r < 0)) { return NULL; } else { return result; @@ -5018,7 +5919,7 @@ static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x) { #else if (PyLong_Check(x)) #endif - return Py_INCREF(x), x; + return __Pyx_NewRef(x); m = Py_TYPE(x)->tp_as_number; #if PY_MAJOR_VERSION < 3 if (m && m->nb_int) { @@ -5042,7 +5943,7 @@ static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x) { if (!PyLong_Check(res)) { #endif PyErr_Format(PyExc_TypeError, - "__%s__ returned non-%s (type %.200s)", + "__%.4s__ returned non-%.4s (type %.200s)", name, name, Py_TYPE(res)->tp_name); Py_DECREF(res); return NULL; @@ -5056,34 +5957,68 @@ static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x) { } static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { Py_ssize_t ival; - PyObject* x = PyNumber_Index(b); + PyObject *x; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_CheckExact(b))) { + if (sizeof(Py_ssize_t) >= sizeof(long)) + return PyInt_AS_LONG(b); + else + return PyInt_AsSsize_t(x); + } +#endif + if (likely(PyLong_CheckExact(b))) { + #if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)b)->ob_digit; + const Py_ssize_t size = Py_SIZE(b); + if (likely(__Pyx_sst_abs(size) <= 1)) { + ival = likely(size) ? digits[0] : 0; + if (size == -1) ival = -ival; + return ival; + } else { + switch (size) { + case 2: + if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { + return (Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -2: + if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case 3: + if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { + return (Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -3: + if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case 4: + if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { + return (Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -4: + if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + } + } + #endif + return PyLong_AsSsize_t(b); + } + x = PyNumber_Index(b); if (!x) return -1; ival = PyInt_AsSsize_t(x); Py_DECREF(x); return ival; } static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { -#if PY_VERSION_HEX < 0x02050000 - if (ival <= LONG_MAX) - return PyInt_FromLong((long)ival); - else { - unsigned char *bytes = (unsigned char *) &ival; - int one = 1; int little = (int)*(unsigned char*)&one; - return _PyLong_FromByteArray(bytes, sizeof(size_t), little, 0); - } -#else - return PyInt_FromSize_t(ival); -#endif -} -static CYTHON_INLINE size_t __Pyx_PyInt_AsSize_t(PyObject* x) { - unsigned PY_LONG_LONG val = __Pyx_PyInt_AsUnsignedLongLong(x); - if (unlikely(val != (unsigned PY_LONG_LONG)(size_t)val)) { - if ((val != (unsigned PY_LONG_LONG)-1) || !PyErr_Occurred()) - PyErr_SetString(PyExc_OverflowError, - "value too large to convert to size_t"); - return (size_t)-1; - } - return (size_t)val; + return PyInt_FromSize_t(ival); } diff --git a/tests/setup.py.in b/tests/setup.py.in index 7c3d7ad..114d6c8 100644 --- a/tests/setup.py.in +++ b/tests/setup.py.in @@ -17,8 +17,11 @@ try: setup(ext_modules=[ Extension('Recode', ['Recode.c'], - include_dirs=[top_builddir, os.path.join(top_srcdir, 'src')], - libraries=['recode']) + include_dirs=[top_builddir, os.path.join(top_srcdir, 'src'), + os.path.join(top_srcdir, 'lib')], + library_dirs=[os.path.join(top_srcdir, 'src', '.libs'), + os.path.join(top_srcdir, 'lib', '.libs')], + libraries=['recode', 'gnu']) ]) finally: