Cython 3.2.0__cp39-abi3-win32.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- Cython/Build/BuildExecutable.py +169 -0
- Cython/Build/Cache.py +199 -0
- Cython/Build/Cythonize.py +350 -0
- Cython/Build/Dependencies.py +1314 -0
- Cython/Build/Distutils.py +1 -0
- Cython/Build/Inline.py +463 -0
- Cython/Build/IpythonMagic.py +560 -0
- Cython/Build/SharedModule.py +94 -0
- Cython/Build/Tests/TestCyCache.py +194 -0
- Cython/Build/Tests/TestCythonizeArgsParser.py +481 -0
- Cython/Build/Tests/TestDependencies.py +133 -0
- Cython/Build/Tests/TestInline.py +177 -0
- Cython/Build/Tests/TestIpythonMagic.py +287 -0
- Cython/Build/Tests/TestRecythonize.py +212 -0
- Cython/Build/Tests/TestStripLiterals.py +155 -0
- Cython/Build/Tests/__init__.py +1 -0
- Cython/Build/__init__.py +11 -0
- Cython/CodeWriter.py +815 -0
- Cython/Compiler/AnalysedTreeTransforms.py +97 -0
- Cython/Compiler/Annotate.py +328 -0
- Cython/Compiler/AutoDocTransforms.py +320 -0
- Cython/Compiler/Buffer.py +680 -0
- Cython/Compiler/Builtin.py +984 -0
- Cython/Compiler/CmdLine.py +263 -0
- Cython/Compiler/Code.pxd +149 -0
- Cython/Compiler/Code.py +3746 -0
- Cython/Compiler/Code.pyd +0 -0
- Cython/Compiler/CodeGeneration.py +33 -0
- Cython/Compiler/CythonScope.py +191 -0
- Cython/Compiler/Dataclass.py +864 -0
- Cython/Compiler/DebugFlags.py +24 -0
- Cython/Compiler/Errors.py +297 -0
- Cython/Compiler/ExprNodes.py +15562 -0
- Cython/Compiler/FlowControl.pxd +97 -0
- Cython/Compiler/FlowControl.py +1451 -0
- Cython/Compiler/FlowControl.pyd +0 -0
- Cython/Compiler/FusedNode.py +971 -0
- Cython/Compiler/FusedNode.pyd +0 -0
- Cython/Compiler/Future.py +16 -0
- Cython/Compiler/Interpreter.py +57 -0
- Cython/Compiler/Lexicon.py +421 -0
- Cython/Compiler/LineTable.py +114 -0
- Cython/Compiler/LineTable.pyd +0 -0
- Cython/Compiler/Main.py +857 -0
- Cython/Compiler/MatchCaseNodes.py +259 -0
- Cython/Compiler/MemoryView.py +905 -0
- Cython/Compiler/ModuleNode.py +4235 -0
- Cython/Compiler/Naming.py +363 -0
- Cython/Compiler/Nodes.py +10831 -0
- Cython/Compiler/Optimize.py +5288 -0
- Cython/Compiler/Options.py +843 -0
- Cython/Compiler/ParseTreeTransforms.pxd +78 -0
- Cython/Compiler/ParseTreeTransforms.py +4638 -0
- Cython/Compiler/Parsing.pxd +9 -0
- Cython/Compiler/Parsing.py +4775 -0
- Cython/Compiler/Parsing.pyd +0 -0
- Cython/Compiler/Pipeline.py +439 -0
- Cython/Compiler/PyrexTypes.py +5870 -0
- Cython/Compiler/Pythran.py +232 -0
- Cython/Compiler/Scanning.pxd +48 -0
- Cython/Compiler/Scanning.py +701 -0
- Cython/Compiler/Scanning.pyd +0 -0
- Cython/Compiler/StringEncoding.py +298 -0
- Cython/Compiler/Symtab.py +3073 -0
- Cython/Compiler/Tests/TestBuffer.py +105 -0
- Cython/Compiler/Tests/TestBuiltin.py +72 -0
- Cython/Compiler/Tests/TestCmdLine.py +586 -0
- Cython/Compiler/Tests/TestCode.py +144 -0
- Cython/Compiler/Tests/TestFlowControl.py +65 -0
- Cython/Compiler/Tests/TestGrammar.py +202 -0
- Cython/Compiler/Tests/TestMemView.py +71 -0
- Cython/Compiler/Tests/TestParseTreeTransforms.py +285 -0
- Cython/Compiler/Tests/TestScanning.py +134 -0
- Cython/Compiler/Tests/TestSignatureMatching.py +73 -0
- Cython/Compiler/Tests/TestStringEncoding.py +21 -0
- Cython/Compiler/Tests/TestTreeFragment.py +63 -0
- Cython/Compiler/Tests/TestTreePath.py +103 -0
- Cython/Compiler/Tests/TestTypes.py +75 -0
- Cython/Compiler/Tests/TestUtilityLoad.py +112 -0
- Cython/Compiler/Tests/TestVisitor.py +61 -0
- Cython/Compiler/Tests/Utils.py +36 -0
- Cython/Compiler/Tests/__init__.py +1 -0
- Cython/Compiler/TreeFragment.py +278 -0
- Cython/Compiler/TreePath.py +303 -0
- Cython/Compiler/TypeInference.py +591 -0
- Cython/Compiler/TypeSlots.py +1174 -0
- Cython/Compiler/UFuncs.py +311 -0
- Cython/Compiler/UtilNodes.py +389 -0
- Cython/Compiler/UtilityCode.py +344 -0
- Cython/Compiler/Version.py +8 -0
- Cython/Compiler/Visitor.pxd +53 -0
- Cython/Compiler/Visitor.py +861 -0
- Cython/Compiler/Visitor.pyd +0 -0
- Cython/Compiler/__init__.py +1 -0
- Cython/Coverage.py +448 -0
- Cython/Debugger/Cygdb.py +177 -0
- Cython/Debugger/DebugWriter.py +82 -0
- Cython/Debugger/Tests/TestLibCython.py +275 -0
- Cython/Debugger/Tests/__init__.py +1 -0
- Cython/Debugger/Tests/cfuncs.c +8 -0
- Cython/Debugger/Tests/codefile +49 -0
- Cython/Debugger/Tests/test_libcython_in_gdb.py +578 -0
- Cython/Debugger/Tests/test_libpython_in_gdb.py +90 -0
- Cython/Debugger/__init__.py +1 -0
- Cython/Debugger/libcython.py +1548 -0
- Cython/Debugger/libpython.py +2821 -0
- Cython/Debugging.py +20 -0
- Cython/Distutils/__init__.py +2 -0
- Cython/Distutils/build_ext.py +139 -0
- Cython/Distutils/extension.py +96 -0
- Cython/Distutils/old_build_ext.py +351 -0
- Cython/Includes/cpython/__init__.pxd +173 -0
- Cython/Includes/cpython/array.pxd +178 -0
- Cython/Includes/cpython/bool.pxd +37 -0
- Cython/Includes/cpython/buffer.pxd +112 -0
- Cython/Includes/cpython/bytearray.pxd +33 -0
- Cython/Includes/cpython/bytes.pxd +200 -0
- Cython/Includes/cpython/cellobject.pxd +35 -0
- Cython/Includes/cpython/ceval.pxd +8 -0
- Cython/Includes/cpython/codecs.pxd +121 -0
- Cython/Includes/cpython/complex.pxd +60 -0
- Cython/Includes/cpython/contextvars.pxd +145 -0
- Cython/Includes/cpython/conversion.pxd +36 -0
- Cython/Includes/cpython/datetime.pxd +395 -0
- Cython/Includes/cpython/descr.pxd +26 -0
- Cython/Includes/cpython/dict.pxd +187 -0
- Cython/Includes/cpython/exc.pxd +263 -0
- Cython/Includes/cpython/fileobject.pxd +57 -0
- Cython/Includes/cpython/float.pxd +47 -0
- Cython/Includes/cpython/function.pxd +65 -0
- Cython/Includes/cpython/genobject.pxd +25 -0
- Cython/Includes/cpython/getargs.pxd +12 -0
- Cython/Includes/cpython/instance.pxd +25 -0
- Cython/Includes/cpython/iterator.pxd +36 -0
- Cython/Includes/cpython/iterobject.pxd +24 -0
- Cython/Includes/cpython/list.pxd +92 -0
- Cython/Includes/cpython/long.pxd +149 -0
- Cython/Includes/cpython/longintrepr.pxd +14 -0
- Cython/Includes/cpython/mapping.pxd +63 -0
- Cython/Includes/cpython/marshal.pxd +66 -0
- Cython/Includes/cpython/mem.pxd +120 -0
- Cython/Includes/cpython/memoryview.pxd +50 -0
- Cython/Includes/cpython/method.pxd +49 -0
- Cython/Includes/cpython/module.pxd +208 -0
- Cython/Includes/cpython/number.pxd +258 -0
- Cython/Includes/cpython/object.pxd +433 -0
- Cython/Includes/cpython/pycapsule.pxd +143 -0
- Cython/Includes/cpython/pylifecycle.pxd +68 -0
- Cython/Includes/cpython/pyport.pxd +8 -0
- Cython/Includes/cpython/pystate.pxd +95 -0
- Cython/Includes/cpython/pythread.pxd +53 -0
- Cython/Includes/cpython/ref.pxd +141 -0
- Cython/Includes/cpython/sequence.pxd +134 -0
- Cython/Includes/cpython/set.pxd +119 -0
- Cython/Includes/cpython/slice.pxd +70 -0
- Cython/Includes/cpython/time.pxd +129 -0
- Cython/Includes/cpython/tuple.pxd +72 -0
- Cython/Includes/cpython/type.pxd +53 -0
- Cython/Includes/cpython/unicode.pxd +639 -0
- Cython/Includes/cpython/version.pxd +32 -0
- Cython/Includes/cpython/weakref.pxd +78 -0
- Cython/Includes/libc/__init__.pxd +1 -0
- Cython/Includes/libc/complex.pxd +35 -0
- Cython/Includes/libc/errno.pxd +127 -0
- Cython/Includes/libc/float.pxd +43 -0
- Cython/Includes/libc/limits.pxd +28 -0
- Cython/Includes/libc/locale.pxd +46 -0
- Cython/Includes/libc/math.pxd +209 -0
- Cython/Includes/libc/setjmp.pxd +10 -0
- Cython/Includes/libc/signal.pxd +64 -0
- Cython/Includes/libc/stddef.pxd +9 -0
- Cython/Includes/libc/stdint.pxd +105 -0
- Cython/Includes/libc/stdio.pxd +80 -0
- Cython/Includes/libc/stdlib.pxd +72 -0
- Cython/Includes/libc/string.pxd +50 -0
- Cython/Includes/libc/threads.pxd +234 -0
- Cython/Includes/libc/time.pxd +52 -0
- Cython/Includes/libcpp/__init__.pxd +4 -0
- Cython/Includes/libcpp/algorithm.pxd +320 -0
- Cython/Includes/libcpp/any.pxd +16 -0
- Cython/Includes/libcpp/atomic.pxd +59 -0
- Cython/Includes/libcpp/barrier.pxd +22 -0
- Cython/Includes/libcpp/bit.pxd +29 -0
- Cython/Includes/libcpp/cast.pxd +12 -0
- Cython/Includes/libcpp/cmath.pxd +518 -0
- Cython/Includes/libcpp/complex.pxd +106 -0
- Cython/Includes/libcpp/condition_variable.pxd +322 -0
- Cython/Includes/libcpp/deque.pxd +165 -0
- Cython/Includes/libcpp/exception.pxd +86 -0
- Cython/Includes/libcpp/execution.pxd +15 -0
- Cython/Includes/libcpp/forward_list.pxd +63 -0
- Cython/Includes/libcpp/functional.pxd +26 -0
- Cython/Includes/libcpp/future.pxd +103 -0
- Cython/Includes/libcpp/iterator.pxd +34 -0
- Cython/Includes/libcpp/latch.pxd +17 -0
- Cython/Includes/libcpp/limits.pxd +61 -0
- Cython/Includes/libcpp/list.pxd +117 -0
- Cython/Includes/libcpp/map.pxd +252 -0
- Cython/Includes/libcpp/memory.pxd +115 -0
- Cython/Includes/libcpp/mutex.pxd +387 -0
- Cython/Includes/libcpp/numbers.pxd +15 -0
- Cython/Includes/libcpp/numeric.pxd +131 -0
- Cython/Includes/libcpp/optional.pxd +34 -0
- Cython/Includes/libcpp/pair.pxd +1 -0
- Cython/Includes/libcpp/queue.pxd +25 -0
- Cython/Includes/libcpp/random.pxd +166 -0
- Cython/Includes/libcpp/semaphore.pxd +43 -0
- Cython/Includes/libcpp/set.pxd +228 -0
- Cython/Includes/libcpp/shared_mutex.pxd +96 -0
- Cython/Includes/libcpp/span.pxd +87 -0
- Cython/Includes/libcpp/stack.pxd +11 -0
- Cython/Includes/libcpp/stop_token.pxd +117 -0
- Cython/Includes/libcpp/string.pxd +355 -0
- Cython/Includes/libcpp/string_view.pxd +183 -0
- Cython/Includes/libcpp/typeindex.pxd +15 -0
- Cython/Includes/libcpp/typeinfo.pxd +10 -0
- Cython/Includes/libcpp/unordered_map.pxd +193 -0
- Cython/Includes/libcpp/unordered_set.pxd +152 -0
- Cython/Includes/libcpp/utility.pxd +30 -0
- Cython/Includes/libcpp/vector.pxd +186 -0
- Cython/Includes/numpy/math.pxd +150 -0
- Cython/Includes/openmp.pxd +50 -0
- Cython/Includes/posix/__init__.pxd +1 -0
- Cython/Includes/posix/dlfcn.pxd +14 -0
- Cython/Includes/posix/fcntl.pxd +86 -0
- Cython/Includes/posix/ioctl.pxd +4 -0
- Cython/Includes/posix/mman.pxd +101 -0
- Cython/Includes/posix/resource.pxd +57 -0
- Cython/Includes/posix/select.pxd +21 -0
- Cython/Includes/posix/signal.pxd +73 -0
- Cython/Includes/posix/stat.pxd +98 -0
- Cython/Includes/posix/stdio.pxd +37 -0
- Cython/Includes/posix/stdlib.pxd +29 -0
- Cython/Includes/posix/strings.pxd +9 -0
- Cython/Includes/posix/time.pxd +71 -0
- Cython/Includes/posix/types.pxd +30 -0
- Cython/Includes/posix/uio.pxd +26 -0
- Cython/Includes/posix/unistd.pxd +271 -0
- Cython/Includes/posix/wait.pxd +38 -0
- Cython/Plex/Actions.pxd +24 -0
- Cython/Plex/Actions.py +119 -0
- Cython/Plex/Actions.pyd +0 -0
- Cython/Plex/DFA.pxd +14 -0
- Cython/Plex/DFA.py +164 -0
- Cython/Plex/DFA.pyd +0 -0
- Cython/Plex/Errors.py +48 -0
- Cython/Plex/Lexicons.py +178 -0
- Cython/Plex/Machines.pxd +36 -0
- Cython/Plex/Machines.py +238 -0
- Cython/Plex/Machines.pyd +0 -0
- Cython/Plex/Regexps.py +535 -0
- Cython/Plex/Scanners.pxd +45 -0
- Cython/Plex/Scanners.py +328 -0
- Cython/Plex/Scanners.pyd +0 -0
- Cython/Plex/Transitions.pxd +14 -0
- Cython/Plex/Transitions.py +239 -0
- Cython/Plex/Transitions.pyd +0 -0
- Cython/Plex/__init__.py +34 -0
- Cython/Runtime/__init__.py +1 -0
- Cython/Runtime/refnanny.pyd +0 -0
- Cython/Runtime/refnanny.pyx +237 -0
- Cython/Shadow.py +690 -0
- Cython/Shadow.pyi +521 -0
- Cython/StringIOTree.py +170 -0
- Cython/StringIOTree.pyd +0 -0
- Cython/Tempita/__init__.py +4 -0
- Cython/Tempita/_looper.py +154 -0
- Cython/Tempita/_tempita.py +1091 -0
- Cython/Tempita/_tempita.pyd +0 -0
- Cython/TestUtils.py +422 -0
- Cython/Tests/TestCodeWriter.py +128 -0
- Cython/Tests/TestCythonUtils.py +202 -0
- Cython/Tests/TestJediTyper.py +223 -0
- Cython/Tests/TestShadow.py +114 -0
- Cython/Tests/TestStringIOTree.py +67 -0
- Cython/Tests/TestTestUtils.py +90 -0
- Cython/Tests/__init__.py +1 -0
- Cython/Tests/xmlrunner.py +390 -0
- Cython/Utility/AsyncGen.c +1031 -0
- Cython/Utility/Buffer.c +865 -0
- Cython/Utility/BufferFormatFromTypeInfo.pxd +2 -0
- Cython/Utility/Builtins.c +810 -0
- Cython/Utility/CConvert.pyx +134 -0
- Cython/Utility/CMath.c +104 -0
- Cython/Utility/CommonStructures.c +226 -0
- Cython/Utility/Complex.c +378 -0
- Cython/Utility/Coroutine.c +2300 -0
- Cython/Utility/CpdefEnums.pyx +103 -0
- Cython/Utility/CppConvert.pyx +282 -0
- Cython/Utility/CppSupport.cpp +151 -0
- Cython/Utility/CythonFunction.c +1832 -0
- Cython/Utility/Dataclasses.c +101 -0
- Cython/Utility/Embed.c +121 -0
- Cython/Utility/Exceptions.c +1016 -0
- Cython/Utility/ExtensionTypes.c +996 -0
- Cython/Utility/FunctionArguments.c +1043 -0
- Cython/Utility/FusedFunction.pyx +44 -0
- Cython/Utility/ImportExport.c +907 -0
- Cython/Utility/MemoryView.pxd +188 -0
- Cython/Utility/MemoryView.pyx +1482 -0
- Cython/Utility/MemoryView_C.c +927 -0
- Cython/Utility/ModuleSetupCode.c +3203 -0
- Cython/Utility/NumpyImportArray.c +46 -0
- Cython/Utility/ObjectHandling.c +3273 -0
- Cython/Utility/Optimize.c +1603 -0
- Cython/Utility/Overflow.c +384 -0
- Cython/Utility/Printing.c +86 -0
- Cython/Utility/Profile.c +732 -0
- Cython/Utility/StringTools.c +1379 -0
- Cython/Utility/Synchronization.c +399 -0
- Cython/Utility/TString.c +356 -0
- Cython/Utility/TestCyUtilityLoader.pyx +8 -0
- Cython/Utility/TestCythonScope.pyx +75 -0
- Cython/Utility/TestUtilityLoader.c +12 -0
- Cython/Utility/TypeConversion.c +1385 -0
- Cython/Utility/UFuncs.pyx +50 -0
- Cython/Utility/UFuncs_C.c +89 -0
- Cython/Utility/__init__.py +28 -0
- Cython/Utility/arrayarray.h +167 -0
- Cython/Utils.py +687 -0
- Cython/Utils.pyd +0 -0
- Cython/__init__.py +10 -0
- Cython/__init__.pyi +7 -0
- Cython/py.typed +0 -0
- cython-3.2.0.dist-info/METADATA +85 -0
- cython-3.2.0.dist-info/RECORD +333 -0
- cython-3.2.0.dist-info/WHEEL +5 -0
- cython-3.2.0.dist-info/entry_points.txt +4 -0
- cython-3.2.0.dist-info/top_level.txt +3 -0
- cython.py +29 -0
- pyximport/__init__.py +4 -0
- pyximport/pyxbuild.py +160 -0
- pyximport/pyximport.py +482 -0
|
@@ -0,0 +1,384 @@
|
|
|
1
|
+
/*
|
|
2
|
+
These functions provide integer arithmetic with integer checking. They do not
|
|
3
|
+
actually raise an exception when an overflow is detected, but rather set a bit
|
|
4
|
+
in the overflow parameter. (This parameter may be reused across several
|
|
5
|
+
arithmetic operations, so should be or-ed rather than assigned to.)
|
|
6
|
+
|
|
7
|
+
The implementation is divided into two parts, the signed and unsigned basecases,
|
|
8
|
+
which is where the magic happens, and a generic template matching a specific
|
|
9
|
+
type to an implementation based on its (c-compile-time) size and signedness.
|
|
10
|
+
|
|
11
|
+
When possible, branching is avoided, and preference is given to speed over
|
|
12
|
+
accuracy (a low rate of falsely "detected" overflows are acceptable,
|
|
13
|
+
undetected overflows are not).
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
TODO: Hook up checking.
|
|
17
|
+
TODO: Conditionally support 128-bit with intmax_t?
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
/////////////// Common.proto ///////////////
|
|
21
|
+
|
|
22
|
+
static int __Pyx_check_twos_complement(void) {
|
|
23
|
+
if ((-1) != (~0)) {
|
|
24
|
+
PyErr_SetString(PyExc_RuntimeError, "Two's complement required for overflow checks.");
|
|
25
|
+
return 1;
|
|
26
|
+
} else if ((sizeof(short) == sizeof(int))) {
|
|
27
|
+
PyErr_SetString(PyExc_RuntimeError, "sizeof(short) < sizeof(int) required for overflow checks.");
|
|
28
|
+
return 1;
|
|
29
|
+
} else {
|
|
30
|
+
return 0;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
#define __PYX_SIGN_BIT(type) ((((unsigned type) 1) << (sizeof(type) * 8 - 1)))
|
|
35
|
+
#define __PYX_HALF_MAX(type) ((((type) 1) << (sizeof(type) * 8 - 2)))
|
|
36
|
+
#define __PYX_MIN(type) ((__PYX_IS_UNSIGNED(type) ? (type) 0 : 0 - __PYX_HALF_MAX(type) - __PYX_HALF_MAX(type)))
|
|
37
|
+
#define __PYX_MAX(type) ((~__PYX_MIN(type)))
|
|
38
|
+
|
|
39
|
+
#define __Pyx_add_no_overflow(a, b, overflow) ((a) + (b))
|
|
40
|
+
#define __Pyx_add_const_no_overflow(a, b, overflow) ((a) + (b))
|
|
41
|
+
#define __Pyx_sub_no_overflow(a, b, overflow) ((a) - (b))
|
|
42
|
+
#define __Pyx_sub_const_no_overflow(a, b, overflow) ((a) - (b))
|
|
43
|
+
#define __Pyx_mul_no_overflow(a, b, overflow) ((a) * (b))
|
|
44
|
+
#define __Pyx_mul_const_no_overflow(a, b, overflow) ((a) * (b))
|
|
45
|
+
#define __Pyx_div_no_overflow(a, b, overflow) ((a) / (b))
|
|
46
|
+
#define __Pyx_div_const_no_overflow(a, b, overflow) ((a) / (b))
|
|
47
|
+
|
|
48
|
+
#if defined(__has_builtin)
|
|
49
|
+
# if __has_builtin(__builtin_add_overflow) && !defined(__ibmxl__)
|
|
50
|
+
# define __PYX_HAVE_BUILTIN_OVERFLOW
|
|
51
|
+
# endif
|
|
52
|
+
#elif defined(__GNUC__) && (__GNUC__ >= 5) && (!defined(__INTEL_COMPILER) || (__INTEL_COMPILER >= 1800))
|
|
53
|
+
# define __PYX_HAVE_BUILTIN_OVERFLOW
|
|
54
|
+
#endif
|
|
55
|
+
|
|
56
|
+
#if defined(__GNUC__)
|
|
57
|
+
# define __Pyx_is_constant(x) (__builtin_constant_p(x))
|
|
58
|
+
#elif defined(__has_builtin)
|
|
59
|
+
# if __has_builtin(__builtin_constant_p)
|
|
60
|
+
# define __Pyx_is_constant(x) (__builtin_constant_p(x))
|
|
61
|
+
# endif
|
|
62
|
+
#else
|
|
63
|
+
# define __Pyx_is_constant(x) (0)
|
|
64
|
+
#endif
|
|
65
|
+
|
|
66
|
+
/////////////// Common.init ///////////////
|
|
67
|
+
|
|
68
|
+
if (likely(__Pyx_check_twos_complement() == 0)); else
|
|
69
|
+
// error propagation code is appended automatically
|
|
70
|
+
|
|
71
|
+
/////////////// BaseCaseUnsigned.proto ///////////////
|
|
72
|
+
|
|
73
|
+
static CYTHON_INLINE {{UINT}} __Pyx_add_{{NAME}}_checking_overflow({{UINT}} a, {{UINT}} b, int *overflow);
|
|
74
|
+
static CYTHON_INLINE {{UINT}} __Pyx_sub_{{NAME}}_checking_overflow({{UINT}} a, {{UINT}} b, int *overflow);
|
|
75
|
+
static CYTHON_INLINE {{UINT}} __Pyx_mul_{{NAME}}_checking_overflow({{UINT}} a, {{UINT}} b, int *overflow);
|
|
76
|
+
static CYTHON_INLINE {{UINT}} __Pyx_div_{{NAME}}_checking_overflow({{UINT}} a, {{UINT}} b, int *overflow);
|
|
77
|
+
|
|
78
|
+
// Use these when b is known at compile time.
|
|
79
|
+
#define __Pyx_add_const_{{NAME}}_checking_overflow __Pyx_add_{{NAME}}_checking_overflow
|
|
80
|
+
#define __Pyx_sub_const_{{NAME}}_checking_overflow __Pyx_sub_{{NAME}}_checking_overflow
|
|
81
|
+
#if defined(__PYX_HAVE_BUILTIN_OVERFLOW)
|
|
82
|
+
#define __Pyx_mul_const_{{NAME}}_checking_overflow __Pyx_mul_{{NAME}}_checking_overflow
|
|
83
|
+
#else
|
|
84
|
+
static CYTHON_INLINE {{UINT}} __Pyx_mul_const_{{NAME}}_checking_overflow({{UINT}} a, {{UINT}} constant, int *overflow);
|
|
85
|
+
#endif
|
|
86
|
+
#define __Pyx_div_const_{{NAME}}_checking_overflow __Pyx_div_{{NAME}}_checking_overflow
|
|
87
|
+
|
|
88
|
+
/////////////// BaseCaseUnsigned ///////////////
|
|
89
|
+
|
|
90
|
+
#if defined(__PYX_HAVE_BUILTIN_OVERFLOW)
|
|
91
|
+
|
|
92
|
+
static CYTHON_INLINE {{UINT}} __Pyx_add_{{NAME}}_checking_overflow({{UINT}} a, {{UINT}} b, int *overflow) {
|
|
93
|
+
{{UINT}} result;
|
|
94
|
+
*overflow |= __builtin_add_overflow(a, b, &result);
|
|
95
|
+
return result;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
static CYTHON_INLINE {{UINT}} __Pyx_sub_{{NAME}}_checking_overflow({{UINT}} a, {{UINT}} b, int *overflow) {
|
|
99
|
+
{{UINT}} result;
|
|
100
|
+
*overflow |= __builtin_sub_overflow(a, b, &result);
|
|
101
|
+
return result;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
static CYTHON_INLINE {{UINT}} __Pyx_mul_{{NAME}}_checking_overflow({{UINT}} a, {{UINT}} b, int *overflow) {
|
|
105
|
+
{{UINT}} result;
|
|
106
|
+
*overflow |= __builtin_mul_overflow(a, b, &result);
|
|
107
|
+
return result;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
#else
|
|
111
|
+
|
|
112
|
+
static CYTHON_INLINE {{UINT}} __Pyx_add_{{NAME}}_checking_overflow({{UINT}} a, {{UINT}} b, int *overflow) {
|
|
113
|
+
{{UINT}} r = a + b;
|
|
114
|
+
*overflow |= r < a;
|
|
115
|
+
return r;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
static CYTHON_INLINE {{UINT}} __Pyx_sub_{{NAME}}_checking_overflow({{UINT}} a, {{UINT}} b, int *overflow) {
|
|
119
|
+
{{UINT}} r = a - b;
|
|
120
|
+
*overflow |= r > a;
|
|
121
|
+
return r;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
static CYTHON_INLINE {{UINT}} __Pyx_mul_{{NAME}}_checking_overflow({{UINT}} a, {{UINT}} b, int *overflow) {
|
|
125
|
+
// if we have a constant, use the constant version
|
|
126
|
+
if (__Pyx_is_constant(b)) {
|
|
127
|
+
return __Pyx_mul_const_{{NAME}}_checking_overflow(a, b, overflow);
|
|
128
|
+
} else if (__Pyx_is_constant(a)) {
|
|
129
|
+
return __Pyx_mul_const_{{NAME}}_checking_overflow(b, a, overflow);
|
|
130
|
+
} else if ((sizeof({{UINT}}) < sizeof(unsigned long))) {
|
|
131
|
+
unsigned long big_r = ((unsigned long) a) * ((unsigned long) b);
|
|
132
|
+
{{UINT}} r = ({{UINT}}) big_r;
|
|
133
|
+
*overflow |= big_r != r;
|
|
134
|
+
return r;
|
|
135
|
+
} else if ((sizeof({{UINT}}) < sizeof(unsigned PY_LONG_LONG))) {
|
|
136
|
+
unsigned PY_LONG_LONG big_r = ((unsigned PY_LONG_LONG) a) * ((unsigned PY_LONG_LONG) b);
|
|
137
|
+
{{UINT}} r = ({{UINT}}) big_r;
|
|
138
|
+
*overflow |= big_r != r;
|
|
139
|
+
return r;
|
|
140
|
+
} else {
|
|
141
|
+
return __Pyx_mul_const_{{NAME}}_checking_overflow(a, b, overflow);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
static CYTHON_INLINE {{UINT}} __Pyx_mul_const_{{NAME}}_checking_overflow({{UINT}} a, {{UINT}} b, int *overflow) {
|
|
146
|
+
// note that deliberately the overflow check is written such that it divides by b; this
|
|
147
|
+
// function is used when b is a constant thus the compiler should be able to eliminate the
|
|
148
|
+
// (very slow on most CPUs!) division operation
|
|
149
|
+
{{UINT}} prod;
|
|
150
|
+
if (__Pyx_is_constant(a) && !__Pyx_is_constant(b)) {
|
|
151
|
+
// if a is a compile-time constant and b isn't, swap them
|
|
152
|
+
{{UINT}} temp = b;
|
|
153
|
+
b = a;
|
|
154
|
+
a = temp;
|
|
155
|
+
}
|
|
156
|
+
prod = a * b;
|
|
157
|
+
if (b != 0)
|
|
158
|
+
*overflow |= a > (__PYX_MAX({{UINT}}) / b);
|
|
159
|
+
return prod;
|
|
160
|
+
}
|
|
161
|
+
#endif // __PYX_HAVE_BUILTIN_OVERFLOW
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
static CYTHON_INLINE {{UINT}} __Pyx_div_{{NAME}}_checking_overflow({{UINT}} a, {{UINT}} b, int *overflow) {
|
|
165
|
+
if (b == 0) {
|
|
166
|
+
*overflow |= 1;
|
|
167
|
+
return 0;
|
|
168
|
+
}
|
|
169
|
+
return a / b;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
/////////////// BaseCaseSigned.proto ///////////////
|
|
174
|
+
|
|
175
|
+
static CYTHON_INLINE {{INT}} __Pyx_add_{{NAME}}_checking_overflow({{INT}} a, {{INT}} b, int *overflow);
|
|
176
|
+
static CYTHON_INLINE {{INT}} __Pyx_sub_{{NAME}}_checking_overflow({{INT}} a, {{INT}} b, int *overflow);
|
|
177
|
+
static CYTHON_INLINE {{INT}} __Pyx_mul_{{NAME}}_checking_overflow({{INT}} a, {{INT}} b, int *overflow);
|
|
178
|
+
static CYTHON_INLINE {{INT}} __Pyx_div_{{NAME}}_checking_overflow({{INT}} a, {{INT}} b, int *overflow);
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
// Use when b is known at compile time.
|
|
182
|
+
#define __Pyx_add_const_{{NAME}}_checking_overflow __Pyx_add_{{NAME}}_checking_overflow
|
|
183
|
+
#define __Pyx_sub_const_{{NAME}}_checking_overflow __Pyx_sub_{{NAME}}_checking_overflow
|
|
184
|
+
#if defined(__PYX_HAVE_BUILTIN_OVERFLOW)
|
|
185
|
+
#define __Pyx_mul_const_{{NAME}}_checking_overflow __Pyx_mul_{{NAME}}_checking_overflow
|
|
186
|
+
#else
|
|
187
|
+
static CYTHON_INLINE {{INT}} __Pyx_mul_const_{{NAME}}_checking_overflow({{INT}} a, {{INT}} constant, int *overflow);
|
|
188
|
+
#endif
|
|
189
|
+
#define __Pyx_div_const_{{NAME}}_checking_overflow __Pyx_div_{{NAME}}_checking_overflow
|
|
190
|
+
|
|
191
|
+
/////////////// BaseCaseSigned ///////////////
|
|
192
|
+
|
|
193
|
+
#if defined(__PYX_HAVE_BUILTIN_OVERFLOW)
|
|
194
|
+
|
|
195
|
+
static CYTHON_INLINE {{INT}} __Pyx_add_{{NAME}}_checking_overflow({{INT}} a, {{INT}} b, int *overflow) {
|
|
196
|
+
{{INT}} result;
|
|
197
|
+
*overflow |= __builtin_add_overflow(a, b, &result);
|
|
198
|
+
return result;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
static CYTHON_INLINE {{INT}} __Pyx_sub_{{NAME}}_checking_overflow({{INT}} a, {{INT}} b, int *overflow) {
|
|
202
|
+
{{INT}} result;
|
|
203
|
+
*overflow |= __builtin_sub_overflow(a, b, &result);
|
|
204
|
+
return result;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
static CYTHON_INLINE {{INT}} __Pyx_mul_{{NAME}}_checking_overflow({{INT}} a, {{INT}} b, int *overflow) {
|
|
208
|
+
{{INT}} result;
|
|
209
|
+
*overflow |= __builtin_mul_overflow(a, b, &result);
|
|
210
|
+
return result;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
#else
|
|
214
|
+
|
|
215
|
+
static CYTHON_INLINE {{INT}} __Pyx_add_{{NAME}}_checking_overflow({{INT}} a, {{INT}} b, int *overflow) {
|
|
216
|
+
if ((sizeof({{INT}}) < sizeof(long))) {
|
|
217
|
+
long big_r = ((long) a) + ((long) b);
|
|
218
|
+
{{INT}} r = ({{INT}}) big_r;
|
|
219
|
+
*overflow |= big_r != r;
|
|
220
|
+
return r;
|
|
221
|
+
} else if ((sizeof({{INT}}) < sizeof(PY_LONG_LONG))) {
|
|
222
|
+
PY_LONG_LONG big_r = ((PY_LONG_LONG) a) + ((PY_LONG_LONG) b);
|
|
223
|
+
{{INT}} r = ({{INT}}) big_r;
|
|
224
|
+
*overflow |= big_r != r;
|
|
225
|
+
return r;
|
|
226
|
+
} else {
|
|
227
|
+
// Signed overflow undefined, but unsigned overflow is well defined. Casting is
|
|
228
|
+
// implementation-defined, but we assume two's complement (see __Pyx_check_twos_complement
|
|
229
|
+
// above), and arithmetic in two's-complement is the same as unsigned arithmetic.
|
|
230
|
+
unsigned {{INT}} r = (unsigned {{INT}}) a + (unsigned {{INT}}) b;
|
|
231
|
+
// Overflow happened if the operands have the same sign, but the result
|
|
232
|
+
// has opposite sign.
|
|
233
|
+
*overflow |= (((unsigned {{INT}})a ^ r) & ((unsigned {{INT}})b ^ r)) >> (8 * sizeof({{INT}}) - 1);
|
|
234
|
+
return ({{INT}}) r;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
static CYTHON_INLINE {{INT}} __Pyx_sub_{{NAME}}_checking_overflow({{INT}} a, {{INT}} b, int *overflow) {
|
|
239
|
+
// Compilers don't handle widening as well in the subtraction case, so don't bother
|
|
240
|
+
unsigned {{INT}} r = (unsigned {{INT}}) a - (unsigned {{INT}}) b;
|
|
241
|
+
// Overflow happened if the operands differing signs, and the result
|
|
242
|
+
// has opposite sign to a.
|
|
243
|
+
*overflow |= (((unsigned {{INT}})a ^ (unsigned {{INT}})b) & ((unsigned {{INT}})a ^ r)) >> (8 * sizeof({{INT}}) - 1);
|
|
244
|
+
return ({{INT}}) r;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
static CYTHON_INLINE {{INT}} __Pyx_mul_{{NAME}}_checking_overflow({{INT}} a, {{INT}} b, int *overflow) {
|
|
248
|
+
// if we have a constant, use the constant version
|
|
249
|
+
if (__Pyx_is_constant(b)) {
|
|
250
|
+
return __Pyx_mul_const_{{NAME}}_checking_overflow(a, b, overflow);
|
|
251
|
+
} else if (__Pyx_is_constant(a)) {
|
|
252
|
+
return __Pyx_mul_const_{{NAME}}_checking_overflow(b, a, overflow);
|
|
253
|
+
} else if ((sizeof({{INT}}) < sizeof(long))) {
|
|
254
|
+
long big_r = ((long) a) * ((long) b);
|
|
255
|
+
{{INT}} r = ({{INT}}) big_r;
|
|
256
|
+
*overflow |= big_r != r;
|
|
257
|
+
return ({{INT}}) r;
|
|
258
|
+
} else if ((sizeof({{INT}}) < sizeof(PY_LONG_LONG))) {
|
|
259
|
+
PY_LONG_LONG big_r = ((PY_LONG_LONG) a) * ((PY_LONG_LONG) b);
|
|
260
|
+
{{INT}} r = ({{INT}}) big_r;
|
|
261
|
+
*overflow |= big_r != r;
|
|
262
|
+
return ({{INT}}) r;
|
|
263
|
+
} else {
|
|
264
|
+
return __Pyx_mul_const_{{NAME}}_checking_overflow(a, b, overflow);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
static CYTHON_INLINE {{INT}} __Pyx_mul_const_{{NAME}}_checking_overflow({{INT}} a, {{INT}} b, int *overflow) {
|
|
269
|
+
// note that deliberately all these comparisons are written such that they divide by b; this
|
|
270
|
+
// function is used when b is a constant thus the compiler should be able to eliminate the
|
|
271
|
+
// (very slow on most CPUs!) division operations
|
|
272
|
+
if (__Pyx_is_constant(a) && !__Pyx_is_constant(b)) {
|
|
273
|
+
// if a is a compile-time constant and b isn't, swap them
|
|
274
|
+
{{INT}} temp = b;
|
|
275
|
+
b = a;
|
|
276
|
+
a = temp;
|
|
277
|
+
}
|
|
278
|
+
if (b > 1) {
|
|
279
|
+
*overflow |= a > __PYX_MAX({{INT}}) / b;
|
|
280
|
+
*overflow |= a < __PYX_MIN({{INT}}) / b;
|
|
281
|
+
} else if (b == -1) {
|
|
282
|
+
*overflow |= a == __PYX_MIN({{INT}});
|
|
283
|
+
} else if (b < -1) {
|
|
284
|
+
*overflow |= a > __PYX_MIN({{INT}}) / b;
|
|
285
|
+
*overflow |= a < __PYX_MAX({{INT}}) / b;
|
|
286
|
+
}
|
|
287
|
+
return ({{INT}}) (((unsigned {{INT}})a) * ((unsigned {{INT}}) b));
|
|
288
|
+
}
|
|
289
|
+
#endif // defined(__PYX_HAVE_BUILTIN_OVERFLOW)
|
|
290
|
+
|
|
291
|
+
static CYTHON_INLINE {{INT}} __Pyx_div_{{NAME}}_checking_overflow({{INT}} a, {{INT}} b, int *overflow) {
|
|
292
|
+
if (b == 0) {
|
|
293
|
+
*overflow |= 1;
|
|
294
|
+
return 0;
|
|
295
|
+
}
|
|
296
|
+
*overflow |= a == __PYX_MIN({{INT}}) && b == -1;
|
|
297
|
+
return ({{INT}}) ((unsigned {{INT}}) a / (unsigned {{INT}}) b);
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
|
|
301
|
+
/////////////// SizeCheck.init ///////////////
|
|
302
|
+
|
|
303
|
+
if (likely(__Pyx_check_sane_{{NAME}}() == 0)); else
|
|
304
|
+
// error propagation code is appended automatically
|
|
305
|
+
|
|
306
|
+
/////////////// SizeCheck.proto ///////////////
|
|
307
|
+
|
|
308
|
+
static int __Pyx_check_sane_{{NAME}}(void) {
|
|
309
|
+
if (((sizeof({{TYPE}}) <= sizeof(int)) ||
|
|
310
|
+
(sizeof({{TYPE}}) == sizeof(PY_LONG_LONG)) ||
|
|
311
|
+
(sizeof({{TYPE}}) == sizeof(long)))) {
|
|
312
|
+
return 0;
|
|
313
|
+
} else {
|
|
314
|
+
PyErr_Format(PyExc_RuntimeError, \
|
|
315
|
+
"Bad size for int type %.{{max(60, len(TYPE))}}s: %d", "{{TYPE}}", (int) sizeof({{TYPE}}));
|
|
316
|
+
return 1;
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
|
|
321
|
+
/////////////// Binop.proto ///////////////
|
|
322
|
+
|
|
323
|
+
static CYTHON_INLINE {{TYPE}} __Pyx_{{BINOP}}_{{NAME}}_checking_overflow({{TYPE}} a, {{TYPE}} b, int *overflow);
|
|
324
|
+
|
|
325
|
+
/////////////// Binop ///////////////
|
|
326
|
+
|
|
327
|
+
static CYTHON_INLINE {{TYPE}} __Pyx_{{BINOP}}_{{NAME}}_checking_overflow({{TYPE}} a, {{TYPE}} b, int *overflow) {
|
|
328
|
+
if ((sizeof({{TYPE}}) < sizeof(int))) {
|
|
329
|
+
return __Pyx_{{BINOP}}_no_overflow(a, b, overflow);
|
|
330
|
+
} else if (__PYX_IS_UNSIGNED({{TYPE}})) {
|
|
331
|
+
if ((sizeof({{TYPE}}) == sizeof(unsigned int))) {
|
|
332
|
+
return ({{TYPE}}) __Pyx_{{BINOP}}_unsigned_int_checking_overflow(a, b, overflow);
|
|
333
|
+
} else if ((sizeof({{TYPE}}) == sizeof(unsigned long))) {
|
|
334
|
+
return ({{TYPE}}) __Pyx_{{BINOP}}_unsigned_long_checking_overflow(a, b, overflow);
|
|
335
|
+
} else if ((sizeof({{TYPE}}) == sizeof(unsigned PY_LONG_LONG))) {
|
|
336
|
+
return ({{TYPE}}) __Pyx_{{BINOP}}_unsigned_long_long_checking_overflow(a, b, overflow);
|
|
337
|
+
} else {
|
|
338
|
+
Py_FatalError(
|
|
339
|
+
"__Pyx_{{BINOP}}_{{NAME}}_checking_overflow({{TYPE}}) executed an unexpected code path. "
|
|
340
|
+
"Please report this as a bug in Cython"
|
|
341
|
+
);
|
|
342
|
+
return 0; /* handled elsewhere */
|
|
343
|
+
}
|
|
344
|
+
} else {
|
|
345
|
+
if ((sizeof({{TYPE}}) == sizeof(int))) {
|
|
346
|
+
return ({{TYPE}}) __Pyx_{{BINOP}}_int_checking_overflow(a, b, overflow);
|
|
347
|
+
} else if ((sizeof({{TYPE}}) == sizeof(long))) {
|
|
348
|
+
return ({{TYPE}}) __Pyx_{{BINOP}}_long_checking_overflow(a, b, overflow);
|
|
349
|
+
} else if ((sizeof({{TYPE}}) == sizeof(PY_LONG_LONG))) {
|
|
350
|
+
return ({{TYPE}}) __Pyx_{{BINOP}}_long_long_checking_overflow(a, b, overflow);
|
|
351
|
+
} else {
|
|
352
|
+
Py_FatalError(
|
|
353
|
+
"__Pyx_{{BINOP}}_{{NAME}}_checking_overflow({{TYPE}}) executed an unexpected code path. "
|
|
354
|
+
"Please report this as a bug in Cython"
|
|
355
|
+
);
|
|
356
|
+
return 0; /* handled elsewhere */
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
/////////////// LeftShift.proto ///////////////
|
|
362
|
+
|
|
363
|
+
static CYTHON_INLINE {{TYPE}} __Pyx_lshift_{{NAME}}_checking_overflow({{TYPE}} a, {{TYPE}} b, int *overflow) {
|
|
364
|
+
int overflow_check =
|
|
365
|
+
#if {{SIGNED}}
|
|
366
|
+
(a < 0) || (b < 0) ||
|
|
367
|
+
#endif
|
|
368
|
+
// the following must be a _logical_ OR as the RHS is undefined if the LHS is true
|
|
369
|
+
(b >= ({{TYPE}}) (8 * sizeof({{TYPE}}))) || (a > (__PYX_MAX({{TYPE}}) >> b));
|
|
370
|
+
if (overflow_check) {
|
|
371
|
+
*overflow |= 1;
|
|
372
|
+
return 0;
|
|
373
|
+
} else {
|
|
374
|
+
return a << b;
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
#define __Pyx_lshift_const_{{NAME}}_checking_overflow __Pyx_lshift_{{NAME}}_checking_overflow
|
|
378
|
+
|
|
379
|
+
|
|
380
|
+
/////////////// UnaryNegOverflows.proto ///////////////
|
|
381
|
+
|
|
382
|
+
// from intobject.c
|
|
383
|
+
#define __Pyx_UNARY_NEG_WOULD_OVERFLOW(x) \
|
|
384
|
+
(((x) < 0) & ((unsigned long)(x) == 0-(unsigned long)(x)))
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
////////////////////// Print.proto //////////////////////
|
|
2
|
+
|
|
3
|
+
static int __Pyx_Print(PyObject*, PyObject *, int); /*proto*/
|
|
4
|
+
|
|
5
|
+
////////////////////// Print.module_state_decls /////////////
|
|
6
|
+
//@substitute: naming
|
|
7
|
+
PyObject* $print_function;
|
|
8
|
+
PyObject* $print_function_kwargs;
|
|
9
|
+
|
|
10
|
+
////////////////////// Print.cleanup //////////////////////
|
|
11
|
+
|
|
12
|
+
Py_CLEAR(NAMED_CGLOBAL(print_function));
|
|
13
|
+
Py_CLEAR(NAMED_CGLOBAL(print_function_kwargs));
|
|
14
|
+
|
|
15
|
+
////////////////////// Print //////////////////////
|
|
16
|
+
|
|
17
|
+
static int __Pyx_Print(PyObject* stream, PyObject *arg_tuple, int newline) {
|
|
18
|
+
PyObject* kwargs = 0;
|
|
19
|
+
PyObject* result = 0;
|
|
20
|
+
PyObject* end_string;
|
|
21
|
+
if (unlikely(!NAMED_CGLOBAL(print_function))) {
|
|
22
|
+
NAMED_CGLOBAL(print_function) = PyObject_GetAttr(NAMED_CGLOBAL(builtins_cname), PYIDENT("print"));
|
|
23
|
+
if (!NAMED_CGLOBAL(print_function))
|
|
24
|
+
return -1;
|
|
25
|
+
}
|
|
26
|
+
if (stream) {
|
|
27
|
+
kwargs = PyDict_New();
|
|
28
|
+
if (unlikely(!kwargs))
|
|
29
|
+
return -1;
|
|
30
|
+
if (unlikely(PyDict_SetItem(kwargs, PYIDENT("file"), stream) < 0))
|
|
31
|
+
goto bad;
|
|
32
|
+
if (!newline) {
|
|
33
|
+
end_string = PyUnicode_FromStringAndSize(" ", 1);
|
|
34
|
+
if (unlikely(!end_string))
|
|
35
|
+
goto bad;
|
|
36
|
+
if (PyDict_SetItem(kwargs, PYIDENT("end"), end_string) < 0) {
|
|
37
|
+
Py_DECREF(end_string);
|
|
38
|
+
goto bad;
|
|
39
|
+
}
|
|
40
|
+
Py_DECREF(end_string);
|
|
41
|
+
}
|
|
42
|
+
} else if (!newline) {
|
|
43
|
+
if (unlikely(!NAMED_CGLOBAL(print_function_kwargs))) {
|
|
44
|
+
NAMED_CGLOBAL(print_function_kwargs) = PyDict_New();
|
|
45
|
+
if (unlikely(!NAMED_CGLOBAL(print_function_kwargs)))
|
|
46
|
+
return -1;
|
|
47
|
+
end_string = PyUnicode_FromStringAndSize(" ", 1);
|
|
48
|
+
if (unlikely(!end_string))
|
|
49
|
+
return -1;
|
|
50
|
+
if (PyDict_SetItem(NAMED_CGLOBAL(print_function_kwargs), PYIDENT("end"), end_string) < 0) {
|
|
51
|
+
Py_DECREF(end_string);
|
|
52
|
+
return -1;
|
|
53
|
+
}
|
|
54
|
+
Py_DECREF(end_string);
|
|
55
|
+
}
|
|
56
|
+
kwargs = NAMED_CGLOBAL(print_function_kwargs);
|
|
57
|
+
}
|
|
58
|
+
result = PyObject_Call(NAMED_CGLOBAL(print_function), arg_tuple, kwargs);
|
|
59
|
+
if (unlikely(kwargs) && (kwargs != NAMED_CGLOBAL(print_function_kwargs)))
|
|
60
|
+
Py_DECREF(kwargs);
|
|
61
|
+
if (!result)
|
|
62
|
+
return -1;
|
|
63
|
+
Py_DECREF(result);
|
|
64
|
+
return 0;
|
|
65
|
+
bad:
|
|
66
|
+
if (kwargs != NAMED_CGLOBAL(print_function_kwargs))
|
|
67
|
+
Py_XDECREF(kwargs);
|
|
68
|
+
return -1;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
////////////////////// PrintOne.proto //////////////////////
|
|
72
|
+
//@requires: Print
|
|
73
|
+
|
|
74
|
+
static int __Pyx_PrintOne(PyObject* stream, PyObject *o); /*proto*/
|
|
75
|
+
|
|
76
|
+
////////////////////// PrintOne //////////////////////
|
|
77
|
+
|
|
78
|
+
static int __Pyx_PrintOne(PyObject* stream, PyObject *o) {
|
|
79
|
+
int res;
|
|
80
|
+
PyObject* arg_tuple = PyTuple_Pack(1, o);
|
|
81
|
+
if (unlikely(!arg_tuple))
|
|
82
|
+
return -1;
|
|
83
|
+
res = __Pyx_Print(stream, arg_tuple, 1);
|
|
84
|
+
Py_DECREF(arg_tuple);
|
|
85
|
+
return res;
|
|
86
|
+
}
|