diff options
-rw-r--r-- | src/library.js | 11 | ||||
-rw-r--r-- | src/preamble.js | 96 | ||||
-rw-r--r-- | tests/python/LICENSE | 279 | ||||
-rw-r--r-- | tests/python/ccproxy.py | 88 | ||||
-rw-r--r-- | tests/python/python.ll | 519786 | ||||
-rw-r--r-- | tests/python/readme.txt | 19 | ||||
-rw-r--r-- | tests/runner.py | 14 |
7 files changed, 520246 insertions, 47 deletions
diff --git a/src/library.js b/src/library.js index 166806ba..9a979ade 100644 --- a/src/library.js +++ b/src/library.js @@ -29,6 +29,10 @@ var Library = { __print__(Pointer_stringify(p) + '\n'); }, + fputc: function(chr, stream) { + __print__(String.fromCharCode(chr)); + }, + putchar: function(p) { __print__(String.fromCharCode(p)); }, @@ -55,8 +59,8 @@ var Library = { }, fwrite: function(ptr, size, count, stream) { - print('[fwrite] ' + Pointer_stringify(ptr).slice(0,count)); - return count; // or 0? + __print__(intArrayToString(Array_copy(ptr, count))); + return count; }, fclose: function(stream) { @@ -85,6 +89,9 @@ var Library = { return 0; // XXX }, + clearerr: function(stream) { + }, + // stdlib.h abs: 'Math.abs', diff --git a/src/preamble.js b/src/preamble.js index aa58e172..da6660ba 100644 --- a/src/preamble.js +++ b/src/preamble.js @@ -152,15 +152,11 @@ function Pointer_make(slab, pos, allocator) { } function Pointer_stringify(ptr) { - ptr = Pointer_niceify(ptr); - var ret = ""; var i = 0; var t; while (1) { -// if ((ptr.pos + i) >= ptr.slab.length) { return "<< Invalid read: " + (ptr.pos+i) + " : " + ptr.slab.length + " >>"; } else {} - if ((ptr.pos+i) >= ptr.slab.length) { break; } else {} - t = String.fromCharCode(ptr.slab[ptr.pos + i]); + t = String.fromCharCode(IHEAP[ptr + i]); if (t == "\0") { break; } else {} ret += t; i += 1; @@ -263,48 +259,54 @@ function __formatString() { while (curr) { // Note: should be curr != 0, technically. But this helps catch bugs with undefineds curr = IHEAP[textIndex]; next = IHEAP[textIndex+1]; - if (curr == '%'.charCodeAt(0) && ['d', 'u', 'f', '.'].indexOf(String.fromCharCode(next)) != -1) { - var currArg; - var argText; - // Handle very very simply formatting, namely only %.Xf - if (next == '.'.charCodeAt(0)) { - var limit = 0; - while(1) { - var limitChr = IHEAP[textIndex+2]; - if (!(limitChr >= '0'.charCodeAt(0) && limitChr <= '9'.charCodeAt(0))) break; - limit *= 10; - limit += limitChr - '0'.charCodeAt(0); - textIndex++; - } - textIndex--; + if (curr == '%'.charCodeAt(0)) { + if (next == 'l'.charCodeAt(0)) { + textIndex++; next = IHEAP[textIndex+1]; - currArg = getNextArg(next); - argText = String(+currArg); // +: boolean=>int - var dotIndex = argText.indexOf('.'); - if (dotIndex == -1) { - dotIndex = argText.length; - argText += '.'; + } + if (['d', 'u', 'f', '.'].indexOf(String.fromCharCode(next)) != -1) { + var currArg; + var argText; + // Handle very very simply formatting, namely only %.Xf + if (next == '.'.charCodeAt(0)) { + var limit = 0; + while(1) { + var limitChr = IHEAP[textIndex+2]; + if (!(limitChr >= '0'.charCodeAt(0) && limitChr <= '9'.charCodeAt(0))) break; + limit *= 10; + limit += limitChr - '0'.charCodeAt(0); + textIndex++; + } + textIndex--; + next = IHEAP[textIndex+1]; + currArg = getNextArg(next); + argText = String(+currArg); // +: boolean=>int + var dotIndex = argText.indexOf('.'); + if (dotIndex == -1) { + dotIndex = argText.length; + argText += '.'; + } + argText += '00000000000'; // padding + argText = argText.substr(0, dotIndex+1+limit); + textIndex += 2; + } else if (next == 'u'.charCodeAt(0)) { + currArg = getNextArg(next); + argText = String(unSign(currArg, 32)); + } else { + currArg = getNextArg(next); + argText = String(+currArg); // +: boolean=>int } - argText += '00000000000'; // padding - argText = argText.substr(0, dotIndex+1+limit); + argText.split('').forEach(function(chr) { + ret.push(chr.charCodeAt(0)); + }); + textIndex += 2; + } else if (next == 's'.charCodeAt(0)) { + ret = ret.concat(String_copy(getNextArg(next))); + textIndex += 2; + } else if (next == 'c'.charCodeAt(0)) { + ret = ret.concat(getNextArg(next)); textIndex += 2; - } else if (next == 'u'.charCodeAt(0)) { - currArg = getNextArg(next); - argText = String(unSign(currArg, 32)); - } else { - currArg = getNextArg(next); - argText = String(+currArg); // +: boolean=>int } - argText.split('').forEach(function(chr) { - ret.push(chr.charCodeAt(0)); - }); - textIndex += 2; - } else if (curr == '%'.charCodeAt(0) && next == 's'.charCodeAt(0)) { - ret = ret.concat(String_copy(getNextArg(next))); - textIndex += 2; - } else if (curr == '%'.charCodeAt(0) && next == 'c'.charCodeAt(0)) { - ret = ret.concat(getNextArg(next)); - textIndex += 2; } else { ret.push(curr); textIndex += 1; @@ -418,6 +420,14 @@ function intArrayFromString(stringy) { return ret; } +function intArrayToString(array) { + var ret = ''; + for (var i = 0; i < array.length; i++) { + ret += String.fromCharCode(array[i]); + } + return ret; +} + // Converts a value we have as signed, into an unsigned value. For // example, -1 in int32 would be a very large number as unsigned. function unSign(value, bits) { diff --git a/tests/python/LICENSE b/tests/python/LICENSE new file mode 100644 index 00000000..5cdb01e8 --- /dev/null +++ b/tests/python/LICENSE @@ -0,0 +1,279 @@ +A. HISTORY OF THE SOFTWARE +========================== + +Python was created in the early 1990s by Guido van Rossum at Stichting +Mathematisch Centrum (CWI, see http://www.cwi.nl) in the Netherlands +as a successor of a language called ABC. Guido remains Python's +principal author, although it includes many contributions from others. + +In 1995, Guido continued his work on Python at the Corporation for +National Research Initiatives (CNRI, see http://www.cnri.reston.va.us) +in Reston, Virginia where he released several versions of the +software. + +In May 2000, Guido and the Python core development team moved to +BeOpen.com to form the BeOpen PythonLabs team. In October of the same +year, the PythonLabs team moved to Digital Creations (now Zope +Corporation, see http://www.zope.com). In 2001, the Python Software +Foundation (PSF, see http://www.python.org/psf/) was formed, a +non-profit organization created specifically to own Python-related +Intellectual Property. Zope Corporation is a sponsoring member of +the PSF. + +All Python releases are Open Source (see http://www.opensource.org for +the Open Source Definition). Historically, most, but not all, Python +releases have also been GPL-compatible; the table below summarizes +the various releases. + + Release Derived Year Owner GPL- + from compatible? (1) + + 0.9.0 thru 1.2 1991-1995 CWI yes + 1.3 thru 1.5.2 1.2 1995-1999 CNRI yes + 1.6 1.5.2 2000 CNRI no + 2.0 1.6 2000 BeOpen.com no + 1.6.1 1.6 2001 CNRI yes (2) + 2.1 2.0+1.6.1 2001 PSF no + 2.0.1 2.0+1.6.1 2001 PSF yes + 2.1.1 2.1+2.0.1 2001 PSF yes + 2.2 2.1.1 2001 PSF yes + 2.1.2 2.1.1 2002 PSF yes + 2.1.3 2.1.2 2002 PSF yes + 2.2.1 2.2 2002 PSF yes + 2.2.2 2.2.1 2002 PSF yes + 2.2.3 2.2.2 2003 PSF yes + 2.3 2.2.2 2002-2003 PSF yes + 2.3.1 2.3 2002-2003 PSF yes + 2.3.2 2.3.1 2002-2003 PSF yes + 2.3.3 2.3.2 2002-2003 PSF yes + 2.3.4 2.3.3 2004 PSF yes + 2.3.5 2.3.4 2005 PSF yes + 2.4 2.3 2004 PSF yes + 2.4.1 2.4 2005 PSF yes + 2.4.2 2.4.1 2005 PSF yes + 2.4.3 2.4.2 2006 PSF yes + 2.4.4 2.4.3 2006 PSF yes + 2.5 2.4 2006 PSF yes + 2.5.1 2.5 2007 PSF yes + 2.5.2 2.5.1 2008 PSF yes + 2.5.3 2.5.2 2008 PSF yes + 2.6 2.5 2008 PSF yes + 2.6.1 2.6 2008 PSF yes + 2.6.2 2.6.1 2009 PSF yes + 2.6.3 2.6.2 2009 PSF yes + 2.6.4 2.6.3 2009 PSF yes + 2.6.5 2.6.4 2010 PSF yes + 2.7 2.6 2010 PSF yes + +Footnotes: + +(1) GPL-compatible doesn't mean that we're distributing Python under + the GPL. All Python licenses, unlike the GPL, let you distribute + a modified version without making your changes open source. The + GPL-compatible licenses make it possible to combine Python with + other software that is released under the GPL; the others don't. + +(2) According to Richard Stallman, 1.6.1 is not GPL-compatible, + because its license has a choice of law clause. According to + CNRI, however, Stallman's lawyer has told CNRI's lawyer that 1.6.1 + is "not incompatible" with the GPL. + +Thanks to the many outside volunteers who have worked under Guido's +direction to make these releases possible. + + +B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING PYTHON +=============================================================== + +PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2 +-------------------------------------------- + +1. This LICENSE AGREEMENT is between the Python Software Foundation +("PSF"), and the Individual or Organization ("Licensee") accessing and +otherwise using this software ("Python") in source or binary form and +its associated documentation. + +2. Subject to the terms and conditions of this License Agreement, PSF hereby +grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, +analyze, test, perform and/or display publicly, prepare derivative works, +distribute, and otherwise use Python alone or in any derivative version, +provided, however, that PSF's License Agreement and PSF's notice of copyright, +i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 +Python Software Foundation; All Rights Reserved" are retained in Python alone or +in any derivative version prepared by Licensee. + +3. In the event Licensee prepares a derivative work that is based on +or incorporates Python or any part thereof, and wants to make +the derivative work available to others as provided herein, then +Licensee hereby agrees to include in any such work a brief summary of +the changes made to Python. + +4. PSF is making Python available to Licensee on an "AS IS" +basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON +FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS +A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON, +OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +6. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +7. Nothing in this License Agreement shall be deemed to create any +relationship of agency, partnership, or joint venture between PSF and +Licensee. This License Agreement does not grant permission to use PSF +trademarks or trade name in a trademark sense to endorse or promote +products or services of Licensee, or any third party. + +8. By copying, installing or otherwise using Python, Licensee +agrees to be bound by the terms and conditions of this License +Agreement. + + +BEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0 +------------------------------------------- + +BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1 + +1. This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an +office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the +Individual or Organization ("Licensee") accessing and otherwise using +this software in source or binary form and its associated +documentation ("the Software"). + +2. Subject to the terms and conditions of this BeOpen Python License +Agreement, BeOpen hereby grants Licensee a non-exclusive, +royalty-free, world-wide license to reproduce, analyze, test, perform +and/or display publicly, prepare derivative works, distribute, and +otherwise use the Software alone or in any derivative version, +provided, however, that the BeOpen Python License is retained in the +Software, alone or in any derivative version prepared by Licensee. + +3. BeOpen is making the Software available to Licensee on an "AS IS" +basis. BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE +SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS +AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY +DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +5. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +6. This License Agreement shall be governed by and interpreted in all +respects by the law of the State of California, excluding conflict of +law provisions. Nothing in this License Agreement shall be deemed to +create any relationship of agency, partnership, or joint venture +between BeOpen and Licensee. This License Agreement does not grant +permission to use BeOpen trademarks or trade names in a trademark +sense to endorse or promote products or services of Licensee, or any +third party. As an exception, the "BeOpen Python" logos available at +http://www.pythonlabs.com/logos.html may be used according to the +permissions granted on that web page. + +7. By copying, installing or otherwise using the software, Licensee +agrees to be bound by the terms and conditions of this License +Agreement. + + +CNRI LICENSE AGREEMENT FOR PYTHON 1.6.1 +--------------------------------------- + +1. This LICENSE AGREEMENT is between the Corporation for National +Research Initiatives, having an office at 1895 Preston White Drive, +Reston, VA 20191 ("CNRI"), and the Individual or Organization +("Licensee") accessing and otherwise using Python 1.6.1 software in +source or binary form and its associated documentation. + +2. Subject to the terms and conditions of this License Agreement, CNRI +hereby grants Licensee a nonexclusive, royalty-free, world-wide +license to reproduce, analyze, test, perform and/or display publicly, +prepare derivative works, distribute, and otherwise use Python 1.6.1 +alone or in any derivative version, provided, however, that CNRI's +License Agreement and CNRI's notice of copyright, i.e., "Copyright (c) +1995-2001 Corporation for National Research Initiatives; All Rights +Reserved" are retained in Python 1.6.1 alone or in any derivative +version prepared by Licensee. Alternately, in lieu of CNRI's License +Agreement, Licensee may substitute the following text (omitting the +quotes): "Python 1.6.1 is made available subject to the terms and +conditions in CNRI's License Agreement. This Agreement together with +Python 1.6.1 may be located on the Internet using the following +unique, persistent identifier (known as a handle): 1895.22/1013. This +Agreement may also be obtained from a proxy server on the Internet +using the following URL: http://hdl.handle.net/1895.22/1013". + +3. In the event Licensee prepares a derivative work that is based on +or incorporates Python 1.6.1 or any part thereof, and wants to make +the derivative work available to others as provided herein, then +Licensee hereby agrees to include in any such work a brief summary of +the changes made to Python 1.6.1. + +4. CNRI is making Python 1.6.1 available to Licensee on an "AS IS" +basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON +1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS +A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1, +OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +6. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +7. This License Agreement shall be governed by the federal +intellectual property law of the United States, including without +limitation the federal copyright law, and, to the extent such +U.S. federal law does not apply, by the law of the Commonwealth of +Virginia, excluding Virginia's conflict of law provisions. +Notwithstanding the foregoing, with regard to derivative works based +on Python 1.6.1 that incorporate non-separable material that was +previously distributed under the GNU General Public License (GPL), the +law of the Commonwealth of Virginia shall govern this License +Agreement only as to issues arising under or with respect to +Paragraphs 4, 5, and 7 of this License Agreement. Nothing in this +License Agreement shall be deemed to create any relationship of +agency, partnership, or joint venture between CNRI and Licensee. This +License Agreement does not grant permission to use CNRI trademarks or +trade name in a trademark sense to endorse or promote products or +services of Licensee, or any third party. + +8. By clicking on the "ACCEPT" button where indicated, or by copying, +installing or otherwise using Python 1.6.1, Licensee agrees to be +bound by the terms and conditions of this License Agreement. + + ACCEPT + + +CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2 +-------------------------------------------------- + +Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam, +The Netherlands. All rights reserved. + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of Stichting Mathematisch +Centrum or CWI not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO +THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE +FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/tests/python/ccproxy.py b/tests/python/ccproxy.py new file mode 100644 index 00000000..853b30f4 --- /dev/null +++ b/tests/python/ccproxy.py @@ -0,0 +1,88 @@ +#!/usr/bin/env python + +from __future__ import with_statement + +import sys +import os +import subprocess + +CC='..LLVM_GCC_DIR../llvm-gcc' +CC_ARG_SKIP = ['-g', '-O1', '-O2', '-O3'] +CC_ADDITIONAL_ARGS = ['-m32', '-U__i386__', '-U__x86_64__', '-UX87_DOUBLE_ROUNDING', '-UHAVE_GCC_ASM_FOR_X87'] + +#CC='llvm-gcc' +#CC_ARG_SKIP = ['-g', '-O1', '-O2', '-O3'] +#CC_ADDITIONAL_ARGS = ['-U__i386__', '-U__x86_64__'] + +LINK='..LLVM_DIR../llvm-link' +ALLOWED_LINK_ARGS = ['-f', '-help', '-o', '-print-after', '-print-after-all', '-print-before', + '-print-before-all', '-time-passes', '-v', '-verify-dom-info', '-version' ] +#LINK_ARG_SKIP = ['-pthread', '-DNDEBUG', '-g', '-O3', '-Wall', '-Wstrict-prototypes', +# '-lpthread', '-ldl', '-lutil', '-Xlinker', '-export-dynamic', '-lm', '-shared'] + +# ---------------- End configs ------------- + +# no-op if called as ranlibproxy.py +if os.path.basename(sys.argv[0])=='ranlibproxy.py': + sys.exit(0) + + +use_linker = True +#use_linker = False + +opts = [] +files = [] +for arg in sys.argv[1:]: + if arg.startswith('-'): + opts.append(arg) + else: + files.append(arg) + if arg.endswith('.c'): + use_linker = False + +if '--version' in opts: + use_linker = False + +if use_linker: + call = LINK + newargs = [] + found_o = False + for arg in sys.argv[1:]: + if os.path.basename(sys.argv[0])=='arproxy.py': + if arg.endswith('.a'): + newargs.append('-o=%s' % arg) + elif arg.endswith('.o'): + newargs.append(arg) + else: + pass + continue + if found_o: + newargs.append('-o=%s' % arg) + found_o = False + continue + if arg.startswith('-'): + if arg == '-o': + found_o = True + continue + prefix = arg.split('=')[0] + if prefix in ALLOWED_LINK_ARGS: + newargs.append(arg) + else: + # not option, so just append + newargs.append(arg) +else: + call = CC + newargs = [ arg for arg in sys.argv[1:] if arg not in CC_ARG_SKIP ] + CC_ADDITIONAL_ARGS + if 'conftest.c' not in files: + newargs.append('-emit-llvm') + if CC=='llvm-gcc': + newargs.append('-c') + +with open('ccproxy.log', 'a') as f: + f.write('## Called with %s\n' % ' '.join(sys.argv)) + f.write('** Calling %s %s\n\n' % (call, ' '.join(newargs))) + f.flush() + +print "Running:", call, newargs + +os.execvp(call, [call] + newargs) diff --git a/tests/python/python.ll b/tests/python/python.ll new file mode 100644 index 00000000..093f363f --- /dev/null +++ b/tests/python/python.ll @@ -0,0 +1,519786 @@ +; ModuleID = 'python.bc' +target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:32:32-n8:16:32" +target triple = "i386-pc-linux-gnu" + +%0 = type { %1 } +%1 = type { %struct._expr*, %struct.asdl_seq*, %struct.asdl_seq*, %struct._expr*, %struct._expr* } +%2 = type { %struct._comprehension } +%3 = type { %4 } +%4 = type { %struct._expr*, %struct._expr*, %struct._expr* } +%5 = type { %6 } +%6 = type { %struct.NullImporter*, %struct._arguments*, %struct.asdl_seq*, %struct.asdl_seq* } +%7 = type { %union.PyGC_Head*, %union.PyGC_Head*, i32 } +%8 = type { %struct.SRE_REPEAT* } +%9 = type { %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %10 } +%10 = type { i8*, %struct.NullImporter* (%struct.NullImporter*, %struct.NullImporter*)*, [8 x i8] } +%11 = type { %struct.NullImporter* (%struct.NullImporter*, %struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*, %struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*, %struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*, %struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*, %struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*, %struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*, %struct.NullImporter*, %struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*)*, i32 (%struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*, %struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*, %struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*, %struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*, %struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*, %struct.NullImporter*)*, i32 (%struct.NullImporter**, %struct.NullImporter**)*, %struct.NullImporter* (%struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*, %struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*, %struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*, %struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*, %struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*, %struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*, %struct.NullImporter*, %struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*, %struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*, %struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*, %struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*, %struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*, %struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*, %struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*, %struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*, %struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*, %struct.NullImporter*)*, [4 x i8] } +%12 = type { i32, %struct.PyTypeObject*, i32, i8*, i32, i32, void (%struct.NullImporter*)*, i32 (%struct.NullImporter*, %struct.FILE*, i32)*, %struct.NullImporter* (%struct.NullImporter*, i8*)*, i32 (%struct.NullImporter*, i8*, %struct.NullImporter*)*, i32 (%struct.NullImporter*, %struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*)*, %struct.PyNumberMethods*, %struct.PySequenceMethods*, %struct.PyMappingMethods*, i32 (%struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*, %struct.NullImporter*, %struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*, %struct.NullImporter*)*, i32 (%struct.NullImporter*, %struct.NullImporter*, %struct.NullImporter*)*, %struct.PyBufferProcs*, i32, i8*, i32 (%struct.NullImporter*, i32 (%struct.NullImporter*, i8*)*, i8*)*, i32 (%struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*, %struct.NullImporter*, i32)*, i32, %struct.NullImporter* (%struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*)*, %struct.PyMethodDef*, %struct.PyMemberDef*, %struct.PyGetSetDef*, %struct.PyTypeObject*, %struct.NullImporter*, %struct.NullImporter* (%struct.NullImporter*, %struct.NullImporter*, %struct.NullImporter*)*, i32 (%struct.NullImporter*, %struct.NullImporter*, %struct.NullImporter*)*, i32, i32 (%struct.NullImporter*, %struct.NullImporter*, %struct.NullImporter*)*, %struct.NullImporter* (%struct.PyTypeObject*, i32)*, %struct.NullImporter* (%struct.PyTypeObject*, %struct.NullImporter*, %struct.NullImporter*)*, [36 x i8] } +%13 = type { i32 (%struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*, %struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*, i32)*, %struct.NullImporter* (%struct.NullImporter*, i32)*, %struct.NullImporter* (%struct.NullImporter*, i32, i32)*, i32 (%struct.NullImporter*, i32, %struct.NullImporter*)*, i32 (%struct.NullImporter*, i32, i32, %struct.NullImporter*)*, [12 x i8] } +%14 = type { i32 (%struct.NullImporter*, i32, i8**)*, i32 (%struct.NullImporter*, i32, i8**)*, i32 (%struct.NullImporter*, i32*)*, i32 (%struct.NullImporter*, i32, i8**)*, [8 x i8] } +%15 = type { %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %16 } +%16 = type { i8*, [12 x i8] } +%17 = type { i32, %struct.PyTypeObject*, i32, i8*, i32, i32, void (%struct.NullImporter*)*, i32 (%struct.NullImporter*, %struct.FILE*, i32)*, %struct.NullImporter* (%struct.NullImporter*, i8*)*, i32 (%struct.NullImporter*, i8*, %struct.NullImporter*)*, i32 (%struct.NullImporter*, %struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*)*, %struct.PyNumberMethods*, %struct.PySequenceMethods*, %struct.PyMappingMethods*, i32 (%struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*, %struct.NullImporter*, %struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*, %struct.NullImporter*)*, i32 (%struct.NullImporter*, %struct.NullImporter*, %struct.NullImporter*)*, %struct.PyBufferProcs*, i32, i8*, i32 (%struct.NullImporter*, i32 (%struct.NullImporter*, i8*)*, i8*)*, i32 (%struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*, %struct.NullImporter*, i32)*, i32, %struct.NullImporter* (%struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*)*, %struct.PyMethodDef*, %struct.PyMemberDef*, %struct.PyGetSetDef*, %struct.PyTypeObject*, %struct.NullImporter*, %struct.NullImporter* (%struct.NullImporter*, %struct.NullImporter*, %struct.NullImporter*)*, i32 (%struct.NullImporter*, %struct.NullImporter*, %struct.NullImporter*)*, i32, i32 (%struct.NullImporter*, %struct.NullImporter*, %struct.NullImporter*)*, %struct.NullImporter* (%struct.PyTypeObject*, i32)*, %struct.NullImporter* (%struct.PyTypeObject*, %struct.NullImporter*, %struct.NullImporter*)*, void (i8*)*, [32 x i8] } +%18 = type { %struct.PyMethodDef, %10 } +%19 = type { i32, %struct.PyTypeObject*, i32, i8*, i32, i32, void (%struct.NullImporter*)*, i32 (%struct.NullImporter*, %struct.FILE*, i32)*, %struct.NullImporter* (%struct.NullImporter*, i8*)*, i32 (%struct.NullImporter*, i8*, %struct.NullImporter*)*, i32 (%struct.NullImporter*, %struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*)*, %struct.PyNumberMethods*, %struct.PySequenceMethods*, %struct.PyMappingMethods*, i32 (%struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*, %struct.NullImporter*, %struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*, %struct.NullImporter*)*, i32 (%struct.NullImporter*, %struct.NullImporter*, %struct.NullImporter*)*, %struct.PyBufferProcs*, i32, i8*, i32 (%struct.NullImporter*, i32 (%struct.NullImporter*, i8*)*, i8*)*, i32 (%struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*, %struct.NullImporter*, i32)*, i32, %struct.NullImporter* (%struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*)*, %struct.PyMethodDef*, %struct.PyMemberDef*, [72 x i8] } +%20 = type { i32, %struct.PyTypeObject*, i32, i8*, i32, i32, void (%struct.NullImporter*)*, i32 (%struct.NullImporter*, %struct.FILE*, i32)*, %struct.NullImporter* (%struct.NullImporter*, i8*)*, i32 (%struct.NullImporter*, i8*, %struct.NullImporter*)*, i32 (%struct.NullImporter*, %struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*)*, %struct.PyNumberMethods*, %struct.PySequenceMethods*, %struct.PyMappingMethods*, i32 (%struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*, %struct.NullImporter*, %struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*, %struct.NullImporter*)*, i32 (%struct.NullImporter*, %struct.NullImporter*, %struct.NullImporter*)*, %struct.PyBufferProcs*, i32, i8*, [104 x i8] } +%21 = type { %22, %23 } +%22 = type { i8*, %struct.NullImporter* (%struct.NullImporter*, i8*)*, i32 (%struct.NullImporter*, %struct.NullImporter*, i8*)*, [8 x i8] } +%23 = type { i8*, [16 x i8] } +%24 = type { i32, %struct.PyTypeObject*, i32, i8*, i32, i32, void (%struct.NullImporter*)*, i32 (%struct.NullImporter*, %struct.FILE*, i32)*, %struct.NullImporter* (%struct.NullImporter*, i8*)*, i32 (%struct.NullImporter*, i8*, %struct.NullImporter*)*, i32 (%struct.NullImporter*, %struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*)*, %struct.PyNumberMethods*, %struct.PySequenceMethods*, %struct.PyMappingMethods*, i32 (%struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*, %struct.NullImporter*, %struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*, %struct.NullImporter*)*, i32 (%struct.NullImporter*, %struct.NullImporter*, %struct.NullImporter*)*, %struct.PyBufferProcs*, i32, i8*, i32 (%struct.NullImporter*, i32 (%struct.NullImporter*, i8*)*, i8*)*, i32 (%struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*, %struct.NullImporter*, i32)*, i32, %struct.NullImporter* (%struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*)*, %struct.PyMethodDef*, %struct.PyMemberDef*, %struct.PyGetSetDef*, [68 x i8] } +%25 = type { i32 (i8*)*, i8* } +%26 = type { i32 (%struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*, %struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*, i32)*, %struct.NullImporter* (%struct.NullImporter*, i32)*, %struct.NullImporter* (%struct.NullImporter*, i32, i32)*, i32 (%struct.NullImporter*, i32, %struct.NullImporter*)*, i32 (%struct.NullImporter*, i32, i32, %struct.NullImporter*)*, i32 (%struct.NullImporter*, %struct.NullImporter*)*, [8 x i8] } +%27 = type { %struct.PyMemberDef, %struct.PyMemberDef, %struct.PyMemberDef, %struct.PyMemberDef, %struct.PyMemberDef, %23 } +%28 = type { %29, %23 } +%29 = type { i8*, %struct.NullImporter* (%struct.NullImporter*, i8*)*, i32 (%struct.NullImporter*, %struct.NullImporter*, i8*)*, i8*, [4 x i8] } +%30 = type { %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %31, %31, %31, %31, %31, %31, %31, %31, %31, %31, %31, %31, %31, %31, %31, %31, %31, %31, %31, %31, %31, %31, %31, %31, %31, %31, %31, %31, %31, %31, %31, %31, %31, %31, %31, %struct.PyMethodDef, %struct.PyMethodDef, %10 } +%31 = type { i8*, %struct.NullImporter* (%struct.NullImporter*, %struct.NullImporter*)*, i32, [4 x i8] } +%32 = type { %33, %33, %33, %33, %33, %33, %33, %33, %33, %33, %33, %33, %33, %33, %23 } +%33 = type { i8*, i32, i32, i32, [4 x i8] } +%34 = type { %struct.PyMethodDef, %31, %struct.PyMethodDef, %10 } +%35 = type { %struct.PyMemberDef, %struct.PyMemberDef, %23 } +%36 = type { %33, %33, %23 } +%37 = type { %38, %23 } +%38 = type { i8*, %struct.NullImporter* (%struct.NullImporter*, i8*)*, [12 x i8] } +%39 = type { i32, %struct.PyTypeObject*, i32, i8*, i32, i32, void (%struct.NullImporter*)*, i32 (%struct.NullImporter*, %struct.FILE*, i32)*, %struct.NullImporter* (%struct.NullImporter*, i8*)*, i32 (%struct.NullImporter*, i8*, %struct.NullImporter*)*, i32 (%struct.NullImporter*, %struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*)*, %struct.PyNumberMethods*, %struct.PySequenceMethods*, %struct.PyMappingMethods*, i32 (%struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*, %struct.NullImporter*, %struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*, %struct.NullImporter*)*, i32 (%struct.NullImporter*, %struct.NullImporter*, %struct.NullImporter*)*, %struct.PyBufferProcs*, i32, i8*, i32 (%struct.NullImporter*, i32 (%struct.NullImporter*, i8*)*, i8*)*, i32 (%struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*, %struct.NullImporter*, i32)*, i32, %struct.NullImporter* (%struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*)*, %struct.PyMethodDef*, %struct.PyMemberDef*, %struct.PyGetSetDef*, %struct.PyTypeObject*, %struct.NullImporter*, %struct.NullImporter* (%struct.NullImporter*, %struct.NullImporter*, %struct.NullImporter*)*, i32 (%struct.NullImporter*, %struct.NullImporter*, %struct.NullImporter*)*, [52 x i8] } +%40 = type { %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %16 } +%41 = type { %33, %23 } +%42 = type { %38, %38, %38, %23 } +%43 = type { %33, %33, %33, %33, %23 } +%44 = type { %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %16 } +%45 = type { %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %10 } +%46 = type { %struct.NullImporter* (%struct.NullImporter*, %struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*, %struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*, %struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*, %struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*, %struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*, %struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*, %struct.NullImporter*, %struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*)*, i32 (%struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*, %struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*, %struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*, %struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*, %struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*, %struct.NullImporter*)*, [88 x i8] } +%47 = type { %struct._frozen, %struct._frozen, %48 } +%48 = type { i8*, i8*, [4 x i8] } +%49 = type { i64, i64, i8* } +%50 = type { %31, %31, %31, %struct.PyMethodDef } +%51 = type { %22, %22, %22, %23 } +%52 = type { %struct.PyMemberDef, %23 } +%53 = type { %struct.PyMemberDef, %struct.PyMemberDef, %struct.PyMemberDef, %23 } +%54 = type { %31, %16 } +%55 = type { %struct.PyMemberDef, %struct.PyMemberDef, %struct.PyMemberDef, %struct.PyMemberDef, %struct.PyMemberDef, %struct.PyMemberDef, %23 } +%56 = type { %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %10 } +%57 = type { %struct.PyMemberDef, %struct.PyMemberDef, %struct.PyMemberDef, %struct.PyMemberDef, %23 } +%58 = type { %29, %29, %29, %23 } +%59 = type { i32, %struct.PyTypeObject*, i32, i8*, i32, i32, [172 x i8] } +%60 = type { %struct.PyStructSequence_Field, %struct.PyStructSequence_Field, %struct.PyStructSequence_Field, %struct.PyStructSequence_Field, %struct.PyStructSequence_Field, %struct.PyStructSequence_Field, %struct.PyStructSequence_Field, %struct.PyStructSequence_Field, %struct.PyStructSequence_Field, %struct.PyStructSequence_Field, %struct.PyStructSequence_Field, %61 } +%61 = type { i8*, [4 x i8] } +%62 = type { %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %31, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %10 } +%63 = type { %struct.PyGetSetDef, %struct.PyGetSetDef, %23 } +%64 = type { %33, %33, %33, %33, %33, %23 } +%65 = type { %29, %29, %29, %29, %29, %29, %29, %23 } +%66 = type { i32, %struct.PyTypeObject*, i32, i8*, i32, i32, void (%struct.NullImporter*)*, i32 (%struct.NullImporter*, %struct.FILE*, i32)*, %struct.NullImporter* (%struct.NullImporter*, i8*)*, i32 (%struct.NullImporter*, i8*, %struct.NullImporter*)*, i32 (%struct.NullImporter*, %struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*)*, %struct.PyNumberMethods*, %struct.PySequenceMethods*, %struct.PyMappingMethods*, i32 (%struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*, %struct.NullImporter*, %struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*, %struct.NullImporter*)*, i32 (%struct.NullImporter*, %struct.NullImporter*, %struct.NullImporter*)*, %struct.PyBufferProcs*, i32, i8*, i32 (%struct.NullImporter*, i32 (%struct.NullImporter*, i8*)*, i8*)*, i32 (%struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*, %struct.NullImporter*, i32)*, i32, %struct.NullImporter* (%struct.NullImporter*)*, %struct.NullImporter* (%struct.NullImporter*)*, %struct.PyMethodDef*, %struct.PyMemberDef*, %struct.PyGetSetDef*, %struct.PyTypeObject*, %struct.NullImporter*, [60 x i8] } +%67 = type { %33, %33, %33, %33, %33, %33, %33, %23 } +%68 = type { %22, %22, %22, %22, %22, %22, %22, %22, %23 } +%69 = type { %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %struct.PyMethodDef, %10 } +%70 = type { %33, %33, %33, %23 } +%71 = type { %struct.PyMethodDef, %struct.Py |