Cython 3.1.0__py3-none-any.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 +323 -0
- Cython/Build/Dependencies.py +1306 -0
- Cython/Build/Distutils.py +1 -0
- Cython/Build/Inline.py +463 -0
- Cython/Build/IpythonMagic.py +560 -0
- Cython/Build/SharedModule.py +76 -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 +8 -0
- Cython/CodeWriter.py +811 -0
- Cython/Compiler/AnalysedTreeTransforms.py +97 -0
- Cython/Compiler/Annotate.py +326 -0
- Cython/Compiler/AutoDocTransforms.py +320 -0
- Cython/Compiler/Buffer.py +680 -0
- Cython/Compiler/Builtin.py +934 -0
- Cython/Compiler/CmdLine.py +259 -0
- Cython/Compiler/Code.pxd +148 -0
- Cython/Compiler/Code.py +3375 -0
- Cython/Compiler/CodeGeneration.py +33 -0
- Cython/Compiler/CythonScope.py +187 -0
- Cython/Compiler/Dataclass.py +868 -0
- Cython/Compiler/DebugFlags.py +24 -0
- Cython/Compiler/Errors.py +295 -0
- Cython/Compiler/ExprNodes.py +15267 -0
- Cython/Compiler/FlowControl.pxd +97 -0
- Cython/Compiler/FlowControl.py +1455 -0
- Cython/Compiler/FusedNode.py +1002 -0
- Cython/Compiler/Future.py +16 -0
- Cython/Compiler/Interpreter.py +57 -0
- Cython/Compiler/Lexicon.py +340 -0
- Cython/Compiler/LineTable.py +114 -0
- Cython/Compiler/Main.py +853 -0
- Cython/Compiler/MatchCaseNodes.py +259 -0
- Cython/Compiler/MemoryView.py +922 -0
- Cython/Compiler/ModuleNode.py +4024 -0
- Cython/Compiler/Naming.py +374 -0
- Cython/Compiler/Nodes.py +10826 -0
- Cython/Compiler/Optimize.py +5256 -0
- Cython/Compiler/Options.py +835 -0
- Cython/Compiler/ParseTreeTransforms.pxd +77 -0
- Cython/Compiler/ParseTreeTransforms.py +4509 -0
- Cython/Compiler/Parsing.pxd +9 -0
- Cython/Compiler/Parsing.py +4789 -0
- Cython/Compiler/Pipeline.py +439 -0
- Cython/Compiler/PyrexTypes.py +5762 -0
- Cython/Compiler/Pythran.py +232 -0
- Cython/Compiler/Scanning.pxd +40 -0
- Cython/Compiler/Scanning.py +577 -0
- Cython/Compiler/StringEncoding.py +347 -0
- Cython/Compiler/Symtab.py +3080 -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 +86 -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 +33 -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 +584 -0
- Cython/Compiler/TypeSlots.py +1181 -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/__init__.py +1 -0
- Cython/Coverage.py +448 -0
- Cython/Debugger/Cygdb.py +175 -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 +174 -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 +67 -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 +84 -0
- Cython/Includes/libc/time.pxd +51 -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/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 +130 -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 +44 -0
- Cython/Includes/libcpp/set.pxd +228 -0
- Cython/Includes/libcpp/shared_mutex.pxd +72 -0
- Cython/Includes/libcpp/span.pxd +87 -0
- Cython/Includes/libcpp/stack.pxd +11 -0
- Cython/Includes/libcpp/stop_token.pxd +105 -0
- Cython/Includes/libcpp/string.pxd +355 -0
- Cython/Includes/libcpp/string_view.pxd +181 -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/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/DFA.pxd +14 -0
- Cython/Plex/DFA.py +164 -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/Regexps.py +539 -0
- Cython/Plex/Scanners.pxd +47 -0
- Cython/Plex/Scanners.py +360 -0
- Cython/Plex/Transitions.pxd +14 -0
- Cython/Plex/Transitions.py +239 -0
- Cython/Plex/__init__.py +34 -0
- Cython/Runtime/__init__.py +1 -0
- Cython/Runtime/refnanny.pyx +237 -0
- Cython/Shadow.py +690 -0
- Cython/Shadow.pyi +521 -0
- Cython/StringIOTree.py +170 -0
- Cython/Tempita/__init__.py +4 -0
- Cython/Tempita/_looper.py +154 -0
- Cython/Tempita/_tempita.py +1091 -0
- Cython/TestUtils.py +410 -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 +1002 -0
- Cython/Utility/Buffer.c +875 -0
- Cython/Utility/BufferFormatFromTypeInfo.pxd +2 -0
- Cython/Utility/Builtins.c +776 -0
- Cython/Utility/CConvert.pyx +134 -0
- Cython/Utility/CMath.c +104 -0
- Cython/Utility/CommonStructures.c +118 -0
- Cython/Utility/Complex.c +378 -0
- Cython/Utility/Coroutine.c +2206 -0
- Cython/Utility/CpdefEnums.pyx +103 -0
- Cython/Utility/CppConvert.pyx +279 -0
- Cython/Utility/CppSupport.cpp +143 -0
- Cython/Utility/CythonFunction.c +1794 -0
- Cython/Utility/Dataclasses.c +185 -0
- Cython/Utility/Dataclasses.py +112 -0
- Cython/Utility/Embed.c +125 -0
- Cython/Utility/Exceptions.c +1012 -0
- Cython/Utility/ExtensionTypes.c +809 -0
- Cython/Utility/FunctionArguments.c +965 -0
- Cython/Utility/ImportExport.c +987 -0
- Cython/Utility/Lock.c +136 -0
- Cython/Utility/MemoryView.pxd +187 -0
- Cython/Utility/MemoryView.pyx +1481 -0
- Cython/Utility/MemoryView_C.c +1046 -0
- Cython/Utility/ModuleSetupCode.c +3059 -0
- Cython/Utility/NumpyImportArray.c +46 -0
- Cython/Utility/ObjectHandling.c +3342 -0
- Cython/Utility/Optimize.c +1589 -0
- Cython/Utility/Overflow.c +404 -0
- Cython/Utility/Printing.c +86 -0
- Cython/Utility/Profile.c +709 -0
- Cython/Utility/StringTools.c +1259 -0
- Cython/Utility/TestCyUtilityLoader.pyx +8 -0
- Cython/Utility/TestCythonScope.pyx +75 -0
- Cython/Utility/TestUtilityLoader.c +12 -0
- Cython/Utility/TypeConversion.c +1284 -0
- Cython/Utility/UFuncs.pyx +50 -0
- Cython/Utility/UFuncs_C.c +89 -0
- Cython/Utility/__init__.py +28 -0
- Cython/Utility/arrayarray.h +148 -0
- Cython/Utils.py +687 -0
- Cython/__init__.py +10 -0
- Cython/__init__.pyi +7 -0
- Cython/py.typed +0 -0
- cython-3.1.0.dist-info/COPYING.txt +19 -0
- cython-3.1.0.dist-info/LICENSE.txt +176 -0
- cython-3.1.0.dist-info/METADATA +636 -0
- cython-3.1.0.dist-info/RECORD +316 -0
- cython-3.1.0.dist-info/WHEEL +5 -0
- cython-3.1.0.dist-info/entry_points.txt +4 -0
- cython-3.1.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,259 @@
|
|
|
1
|
+
# Nodes for structural pattern matching.
|
|
2
|
+
#
|
|
3
|
+
# In a separate file because they're unlikely to be useful for much else.
|
|
4
|
+
|
|
5
|
+
from .Nodes import Node, StatNode, ErrorNode
|
|
6
|
+
from .Errors import error
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class MatchNode(StatNode):
|
|
10
|
+
"""
|
|
11
|
+
subject ExprNode The expression to be matched
|
|
12
|
+
cases [MatchCaseNode] list of cases
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
child_attrs = ["subject", "cases"]
|
|
16
|
+
|
|
17
|
+
def validate_irrefutable(self):
|
|
18
|
+
found_irrefutable_case = None
|
|
19
|
+
for case in self.cases:
|
|
20
|
+
if isinstance(case, ErrorNode):
|
|
21
|
+
# This validation happens before error nodes have been
|
|
22
|
+
# transformed into actual errors, so we need to ignore them
|
|
23
|
+
continue
|
|
24
|
+
if found_irrefutable_case:
|
|
25
|
+
error(
|
|
26
|
+
found_irrefutable_case.pos,
|
|
27
|
+
f"{found_irrefutable_case.pattern.irrefutable_message()} makes remaining patterns unreachable"
|
|
28
|
+
)
|
|
29
|
+
break
|
|
30
|
+
if case.is_irrefutable():
|
|
31
|
+
found_irrefutable_case = case
|
|
32
|
+
case.validate_irrefutable()
|
|
33
|
+
|
|
34
|
+
def analyse_expressions(self, env):
|
|
35
|
+
error(self.pos, "Structural pattern match is not yet implemented")
|
|
36
|
+
return self
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
class MatchCaseNode(Node):
|
|
40
|
+
"""
|
|
41
|
+
pattern PatternNode
|
|
42
|
+
body StatListNode
|
|
43
|
+
guard ExprNode or None
|
|
44
|
+
"""
|
|
45
|
+
|
|
46
|
+
child_attrs = ["pattern", "body", "guard"]
|
|
47
|
+
|
|
48
|
+
def is_irrefutable(self):
|
|
49
|
+
if isinstance(self.pattern, ErrorNode):
|
|
50
|
+
return True # value doesn't really matter
|
|
51
|
+
return self.pattern.is_irrefutable() and not self.guard
|
|
52
|
+
|
|
53
|
+
def validate_targets(self):
|
|
54
|
+
if isinstance(self.pattern, ErrorNode):
|
|
55
|
+
return
|
|
56
|
+
self.pattern.get_targets()
|
|
57
|
+
|
|
58
|
+
def validate_irrefutable(self):
|
|
59
|
+
if isinstance(self.pattern, ErrorNode):
|
|
60
|
+
return
|
|
61
|
+
self.pattern.validate_irrefutable()
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
class PatternNode(Node):
|
|
65
|
+
"""
|
|
66
|
+
PatternNode is not an expression because
|
|
67
|
+
it does several things (evaluating a boolean expression,
|
|
68
|
+
assignment of targets), and they need to be done at different
|
|
69
|
+
times.
|
|
70
|
+
|
|
71
|
+
as_targets [NameNode] any target assign by "as"
|
|
72
|
+
"""
|
|
73
|
+
|
|
74
|
+
child_attrs = ["as_targets"]
|
|
75
|
+
|
|
76
|
+
def __init__(self, pos, **kwds):
|
|
77
|
+
if "as_targets" not in kwds:
|
|
78
|
+
kwds["as_targets"] = []
|
|
79
|
+
super(PatternNode, self).__init__(pos, **kwds)
|
|
80
|
+
|
|
81
|
+
def is_irrefutable(self):
|
|
82
|
+
return False
|
|
83
|
+
|
|
84
|
+
def get_targets(self):
|
|
85
|
+
targets = self.get_main_pattern_targets()
|
|
86
|
+
for target in self.as_targets:
|
|
87
|
+
self.add_target_to_targets(targets, target.name)
|
|
88
|
+
return targets
|
|
89
|
+
|
|
90
|
+
def update_targets_with_targets(self, targets, other_targets):
|
|
91
|
+
for name in targets.intersection(other_targets):
|
|
92
|
+
error(self.pos, f"multiple assignments to name '{name}' in pattern")
|
|
93
|
+
targets.update(other_targets)
|
|
94
|
+
|
|
95
|
+
def add_target_to_targets(self, targets, target):
|
|
96
|
+
if target in targets:
|
|
97
|
+
error(self.pos, f"multiple assignments to name '{target}' in pattern")
|
|
98
|
+
targets.add(target)
|
|
99
|
+
|
|
100
|
+
def get_main_pattern_targets(self):
|
|
101
|
+
# exclude "as" target
|
|
102
|
+
raise NotImplementedError
|
|
103
|
+
|
|
104
|
+
def validate_irrefutable(self):
|
|
105
|
+
for attr in self.child_attrs:
|
|
106
|
+
child = getattr(self, attr)
|
|
107
|
+
if child is not None and isinstance(child, PatternNode):
|
|
108
|
+
child.validate_irrefutable()
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
class MatchValuePatternNode(PatternNode):
|
|
112
|
+
"""
|
|
113
|
+
value ExprNode # todo be more specific
|
|
114
|
+
is_is_check bool Picks "is" or equality check
|
|
115
|
+
"""
|
|
116
|
+
|
|
117
|
+
child_attrs = PatternNode.child_attrs + ["value"]
|
|
118
|
+
is_is_check = False
|
|
119
|
+
|
|
120
|
+
def get_main_pattern_targets(self):
|
|
121
|
+
return set()
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
class MatchAndAssignPatternNode(PatternNode):
|
|
125
|
+
"""
|
|
126
|
+
target NameNode or None the target to assign to (None = wildcard)
|
|
127
|
+
is_star bool
|
|
128
|
+
"""
|
|
129
|
+
|
|
130
|
+
target = None
|
|
131
|
+
is_star = False
|
|
132
|
+
|
|
133
|
+
child_atts = PatternNode.child_attrs + ["target"]
|
|
134
|
+
|
|
135
|
+
def is_irrefutable(self):
|
|
136
|
+
return not self.is_star
|
|
137
|
+
|
|
138
|
+
def irrefutable_message(self):
|
|
139
|
+
if self.target:
|
|
140
|
+
return "name capture '%s'" % self.target.name
|
|
141
|
+
else:
|
|
142
|
+
return "wildcard"
|
|
143
|
+
|
|
144
|
+
def get_main_pattern_targets(self):
|
|
145
|
+
if self.target:
|
|
146
|
+
return {self.target.name}
|
|
147
|
+
else:
|
|
148
|
+
return set()
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
class OrPatternNode(PatternNode):
|
|
152
|
+
"""
|
|
153
|
+
alternatives list of PatternNodes
|
|
154
|
+
"""
|
|
155
|
+
|
|
156
|
+
child_attrs = PatternNode.child_attrs + ["alternatives"]
|
|
157
|
+
|
|
158
|
+
def get_first_irrefutable(self):
|
|
159
|
+
for alternative in self.alternatives:
|
|
160
|
+
if alternative.is_irrefutable():
|
|
161
|
+
return alternative
|
|
162
|
+
return None
|
|
163
|
+
|
|
164
|
+
def is_irrefutable(self):
|
|
165
|
+
return self.get_first_irrefutable() is not None
|
|
166
|
+
|
|
167
|
+
def irrefutable_message(self):
|
|
168
|
+
return self.get_first_irrefutable().irrefutable_message()
|
|
169
|
+
|
|
170
|
+
def get_main_pattern_targets(self):
|
|
171
|
+
child_targets = None
|
|
172
|
+
for alternative in self.alternatives:
|
|
173
|
+
alternative_targets = alternative.get_targets()
|
|
174
|
+
if child_targets is not None and child_targets != alternative_targets:
|
|
175
|
+
error(self.pos, "alternative patterns bind different names")
|
|
176
|
+
child_targets = alternative_targets
|
|
177
|
+
return child_targets
|
|
178
|
+
|
|
179
|
+
def validate_irrefutable(self):
|
|
180
|
+
super(OrPatternNode, self).validate_irrefutable()
|
|
181
|
+
found_irrefutable_case = None
|
|
182
|
+
for alternative in self.alternatives:
|
|
183
|
+
if found_irrefutable_case:
|
|
184
|
+
error(
|
|
185
|
+
found_irrefutable_case.pos,
|
|
186
|
+
f"{found_irrefutable_case.irrefutable_message()} makes remaining patterns unreachable"
|
|
187
|
+
)
|
|
188
|
+
break
|
|
189
|
+
if alternative.is_irrefutable():
|
|
190
|
+
found_irrefutable_case = alternative
|
|
191
|
+
alternative.validate_irrefutable()
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
class MatchSequencePatternNode(PatternNode):
|
|
195
|
+
"""
|
|
196
|
+
patterns list of PatternNodes
|
|
197
|
+
"""
|
|
198
|
+
|
|
199
|
+
child_attrs = PatternNode.child_attrs + ["patterns"]
|
|
200
|
+
|
|
201
|
+
def get_main_pattern_targets(self):
|
|
202
|
+
targets = set()
|
|
203
|
+
for pattern in self.patterns:
|
|
204
|
+
self.update_targets_with_targets(targets, pattern.get_targets())
|
|
205
|
+
return targets
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
class MatchMappingPatternNode(PatternNode):
|
|
209
|
+
"""
|
|
210
|
+
keys list of NameNodes
|
|
211
|
+
value_patterns list of PatternNodes of equal length to keys
|
|
212
|
+
double_star_capture_target NameNode or None
|
|
213
|
+
"""
|
|
214
|
+
|
|
215
|
+
keys = []
|
|
216
|
+
value_patterns = []
|
|
217
|
+
double_star_capture_target = None
|
|
218
|
+
|
|
219
|
+
child_attrs = PatternNode.child_attrs + [
|
|
220
|
+
"keys",
|
|
221
|
+
"value_patterns",
|
|
222
|
+
"double_star_capture_target",
|
|
223
|
+
]
|
|
224
|
+
|
|
225
|
+
def get_main_pattern_targets(self):
|
|
226
|
+
targets = set()
|
|
227
|
+
for pattern in self.value_patterns:
|
|
228
|
+
self.update_targets_with_targets(targets, pattern.get_targets())
|
|
229
|
+
if self.double_star_capture_target:
|
|
230
|
+
self.add_target_to_targets(targets, self.double_star_capture_target.name)
|
|
231
|
+
return targets
|
|
232
|
+
|
|
233
|
+
|
|
234
|
+
class ClassPatternNode(PatternNode):
|
|
235
|
+
"""
|
|
236
|
+
class_ NameNode or AttributeNode
|
|
237
|
+
positional_patterns list of PatternNodes
|
|
238
|
+
keyword_pattern_names list of NameNodes
|
|
239
|
+
keyword_pattern_patterns list of PatternNodes
|
|
240
|
+
(same length as keyword_pattern_names)
|
|
241
|
+
"""
|
|
242
|
+
|
|
243
|
+
class_ = None
|
|
244
|
+
positional_patterns = []
|
|
245
|
+
keyword_pattern_names = []
|
|
246
|
+
keyword_pattern_patterns = []
|
|
247
|
+
|
|
248
|
+
child_attrs = PatternNode.child_attrs + [
|
|
249
|
+
"class_",
|
|
250
|
+
"positional_patterns",
|
|
251
|
+
"keyword_pattern_names",
|
|
252
|
+
"keyword_pattern_patterns",
|
|
253
|
+
]
|
|
254
|
+
|
|
255
|
+
def get_main_pattern_targets(self):
|
|
256
|
+
targets = set()
|
|
257
|
+
for pattern in self.positional_patterns + self.keyword_pattern_patterns:
|
|
258
|
+
self.update_targets_with_targets(targets, pattern.get_targets())
|
|
259
|
+
return targets
|