You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

4283 lines
332 KiB

<!DOCTYPE html>
<!-- Generated by Cython 0.29.2 -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Cython: local.py</title>
<style type="text/css">
body.cython { font-family: courier; font-size: 12; }
.cython.tag { }
.cython.line { margin: 0em }
.cython.code { font-size: 9; color: #444444; display: none; margin: 0px 0px 0px 8px; border-left: 8px none; }
.cython.line .run { background-color: #B0FFB0; }
.cython.line .mis { background-color: #FFB0B0; }
.cython.code.run { border-left: 8px solid #B0FFB0; }
.cython.code.mis { border-left: 8px solid #FFB0B0; }
.cython.code .py_c_api { color: red; }
.cython.code .py_macro_api { color: #FF7000; }
.cython.code .pyx_c_api { color: #FF3000; }
.cython.code .pyx_macro_api { color: #FF7000; }
.cython.code .refnanny { color: #FFA000; }
.cython.code .trace { color: #FFA000; }
.cython.code .error_goto { color: #FFA000; }
.cython.code .coerce { color: #008000; border: 1px dotted #008000 }
.cython.code .py_attr { color: #FF0000; font-weight: bold; }
.cython.code .c_attr { color: #0000FF; }
.cython.code .py_call { color: #FF0000; font-weight: bold; }
.cython.code .c_call { color: #0000FF; }
.cython.score-0 {background-color: #FFFFff;}
.cython.score-1 {background-color: #FFFFe7;}
.cython.score-2 {background-color: #FFFFd4;}
.cython.score-3 {background-color: #FFFFc4;}
.cython.score-4 {background-color: #FFFFb6;}
.cython.score-5 {background-color: #FFFFaa;}
.cython.score-6 {background-color: #FFFF9f;}
.cython.score-7 {background-color: #FFFF96;}
.cython.score-8 {background-color: #FFFF8d;}
.cython.score-9 {background-color: #FFFF86;}
.cython.score-10 {background-color: #FFFF7f;}
.cython.score-11 {background-color: #FFFF79;}
.cython.score-12 {background-color: #FFFF73;}
.cython.score-13 {background-color: #FFFF6e;}
.cython.score-14 {background-color: #FFFF6a;}
.cython.score-15 {background-color: #FFFF66;}
.cython.score-16 {background-color: #FFFF62;}
.cython.score-17 {background-color: #FFFF5e;}
.cython.score-18 {background-color: #FFFF5b;}
.cython.score-19 {background-color: #FFFF57;}
.cython.score-20 {background-color: #FFFF55;}
.cython.score-21 {background-color: #FFFF52;}
.cython.score-22 {background-color: #FFFF4f;}
.cython.score-23 {background-color: #FFFF4d;}
.cython.score-24 {background-color: #FFFF4b;}
.cython.score-25 {background-color: #FFFF48;}
.cython.score-26 {background-color: #FFFF46;}
.cython.score-27 {background-color: #FFFF44;}
.cython.score-28 {background-color: #FFFF43;}
.cython.score-29 {background-color: #FFFF41;}
.cython.score-30 {background-color: #FFFF3f;}
.cython.score-31 {background-color: #FFFF3e;}
.cython.score-32 {background-color: #FFFF3c;}
.cython.score-33 {background-color: #FFFF3b;}
.cython.score-34 {background-color: #FFFF39;}
.cython.score-35 {background-color: #FFFF38;}
.cython.score-36 {background-color: #FFFF37;}
.cython.score-37 {background-color: #FFFF36;}
.cython.score-38 {background-color: #FFFF35;}
.cython.score-39 {background-color: #FFFF34;}
.cython.score-40 {background-color: #FFFF33;}
.cython.score-41 {background-color: #FFFF32;}
.cython.score-42 {background-color: #FFFF31;}
.cython.score-43 {background-color: #FFFF30;}
.cython.score-44 {background-color: #FFFF2f;}
.cython.score-45 {background-color: #FFFF2e;}
.cython.score-46 {background-color: #FFFF2d;}
.cython.score-47 {background-color: #FFFF2c;}
.cython.score-48 {background-color: #FFFF2b;}
.cython.score-49 {background-color: #FFFF2b;}
.cython.score-50 {background-color: #FFFF2a;}
.cython.score-51 {background-color: #FFFF29;}
.cython.score-52 {background-color: #FFFF29;}
.cython.score-53 {background-color: #FFFF28;}
.cython.score-54 {background-color: #FFFF27;}
.cython.score-55 {background-color: #FFFF27;}
.cython.score-56 {background-color: #FFFF26;}
.cython.score-57 {background-color: #FFFF26;}
.cython.score-58 {background-color: #FFFF25;}
.cython.score-59 {background-color: #FFFF24;}
.cython.score-60 {background-color: #FFFF24;}
.cython.score-61 {background-color: #FFFF23;}
.cython.score-62 {background-color: #FFFF23;}
.cython.score-63 {background-color: #FFFF22;}
.cython.score-64 {background-color: #FFFF22;}
.cython.score-65 {background-color: #FFFF22;}
.cython.score-66 {background-color: #FFFF21;}
.cython.score-67 {background-color: #FFFF21;}
.cython.score-68 {background-color: #FFFF20;}
.cython.score-69 {background-color: #FFFF20;}
.cython.score-70 {background-color: #FFFF1f;}
.cython.score-71 {background-color: #FFFF1f;}
.cython.score-72 {background-color: #FFFF1f;}
.cython.score-73 {background-color: #FFFF1e;}
.cython.score-74 {background-color: #FFFF1e;}
.cython.score-75 {background-color: #FFFF1e;}
.cython.score-76 {background-color: #FFFF1d;}
.cython.score-77 {background-color: #FFFF1d;}
.cython.score-78 {background-color: #FFFF1c;}
.cython.score-79 {background-color: #FFFF1c;}
.cython.score-80 {background-color: #FFFF1c;}
.cython.score-81 {background-color: #FFFF1c;}
.cython.score-82 {background-color: #FFFF1b;}
.cython.score-83 {background-color: #FFFF1b;}
.cython.score-84 {background-color: #FFFF1b;}
.cython.score-85 {background-color: #FFFF1a;}
.cython.score-86 {background-color: #FFFF1a;}
.cython.score-87 {background-color: #FFFF1a;}
.cython.score-88 {background-color: #FFFF1a;}
.cython.score-89 {background-color: #FFFF19;}
.cython.score-90 {background-color: #FFFF19;}
.cython.score-91 {background-color: #FFFF19;}
.cython.score-92 {background-color: #FFFF19;}
.cython.score-93 {background-color: #FFFF18;}
.cython.score-94 {background-color: #FFFF18;}
.cython.score-95 {background-color: #FFFF18;}
.cython.score-96 {background-color: #FFFF18;}
.cython.score-97 {background-color: #FFFF17;}
.cython.score-98 {background-color: #FFFF17;}
.cython.score-99 {background-color: #FFFF17;}
.cython.score-100 {background-color: #FFFF17;}
.cython.score-101 {background-color: #FFFF16;}
.cython.score-102 {background-color: #FFFF16;}
.cython.score-103 {background-color: #FFFF16;}
.cython.score-104 {background-color: #FFFF16;}
.cython.score-105 {background-color: #FFFF16;}
.cython.score-106 {background-color: #FFFF15;}
.cython.score-107 {background-color: #FFFF15;}
.cython.score-108 {background-color: #FFFF15;}
.cython.score-109 {background-color: #FFFF15;}
.cython.score-110 {background-color: #FFFF15;}
.cython.score-111 {background-color: #FFFF15;}
.cython.score-112 {background-color: #FFFF14;}
.cython.score-113 {background-color: #FFFF14;}
.cython.score-114 {background-color: #FFFF14;}
.cython.score-115 {background-color: #FFFF14;}
.cython.score-116 {background-color: #FFFF14;}
.cython.score-117 {background-color: #FFFF14;}
.cython.score-118 {background-color: #FFFF13;}
.cython.score-119 {background-color: #FFFF13;}
.cython.score-120 {background-color: #FFFF13;}
.cython.score-121 {background-color: #FFFF13;}
.cython.score-122 {background-color: #FFFF13;}
.cython.score-123 {background-color: #FFFF13;}
.cython.score-124 {background-color: #FFFF13;}
.cython.score-125 {background-color: #FFFF12;}
.cython.score-126 {background-color: #FFFF12;}
.cython.score-127 {background-color: #FFFF12;}
.cython.score-128 {background-color: #FFFF12;}
.cython.score-129 {background-color: #FFFF12;}
.cython.score-130 {background-color: #FFFF12;}
.cython.score-131 {background-color: #FFFF12;}
.cython.score-132 {background-color: #FFFF11;}
.cython.score-133 {background-color: #FFFF11;}
.cython.score-134 {background-color: #FFFF11;}
.cython.score-135 {background-color: #FFFF11;}
.cython.score-136 {background-color: #FFFF11;}
.cython.score-137 {background-color: #FFFF11;}
.cython.score-138 {background-color: #FFFF11;}
.cython.score-139 {background-color: #FFFF11;}
.cython.score-140 {background-color: #FFFF11;}
.cython.score-141 {background-color: #FFFF10;}
.cython.score-142 {background-color: #FFFF10;}
.cython.score-143 {background-color: #FFFF10;}
.cython.score-144 {background-color: #FFFF10;}
.cython.score-145 {background-color: #FFFF10;}
.cython.score-146 {background-color: #FFFF10;}
.cython.score-147 {background-color: #FFFF10;}
.cython.score-148 {background-color: #FFFF10;}
.cython.score-149 {background-color: #FFFF10;}
.cython.score-150 {background-color: #FFFF0f;}
.cython.score-151 {background-color: #FFFF0f;}
.cython.score-152 {background-color: #FFFF0f;}
.cython.score-153 {background-color: #FFFF0f;}
.cython.score-154 {background-color: #FFFF0f;}
.cython.score-155 {background-color: #FFFF0f;}
.cython.score-156 {background-color: #FFFF0f;}
.cython.score-157 {background-color: #FFFF0f;}
.cython.score-158 {background-color: #FFFF0f;}
.cython.score-159 {background-color: #FFFF0f;}
.cython.score-160 {background-color: #FFFF0f;}
.cython.score-161 {background-color: #FFFF0e;}
.cython.score-162 {background-color: #FFFF0e;}
.cython.score-163 {background-color: #FFFF0e;}
.cython.score-164 {background-color: #FFFF0e;}
.cython.score-165 {background-color: #FFFF0e;}
.cython.score-166 {background-color: #FFFF0e;}
.cython.score-167 {background-color: #FFFF0e;}
.cython.score-168 {background-color: #FFFF0e;}
.cython.score-169 {background-color: #FFFF0e;}
.cython.score-170 {background-color: #FFFF0e;}
.cython.score-171 {background-color: #FFFF0e;}
.cython.score-172 {background-color: #FFFF0e;}
.cython.score-173 {background-color: #FFFF0d;}
.cython.score-174 {background-color: #FFFF0d;}
.cython.score-175 {background-color: #FFFF0d;}
.cython.score-176 {background-color: #FFFF0d;}
.cython.score-177 {background-color: #FFFF0d;}
.cython.score-178 {background-color: #FFFF0d;}
.cython.score-179 {background-color: #FFFF0d;}
.cython.score-180 {background-color: #FFFF0d;}
.cython.score-181 {background-color: #FFFF0d;}
.cython.score-182 {background-color: #FFFF0d;}
.cython.score-183 {background-color: #FFFF0d;}
.cython.score-184 {background-color: #FFFF0d;}
.cython.score-185 {background-color: #FFFF0d;}
.cython.score-186 {background-color: #FFFF0d;}
.cython.score-187 {background-color: #FFFF0c;}
.cython.score-188 {background-color: #FFFF0c;}
.cython.score-189 {background-color: #FFFF0c;}
.cython.score-190 {background-color: #FFFF0c;}
.cython.score-191 {background-color: #FFFF0c;}
.cython.score-192 {background-color: #FFFF0c;}
.cython.score-193 {background-color: #FFFF0c;}
.cython.score-194 {background-color: #FFFF0c;}
.cython.score-195 {background-color: #FFFF0c;}
.cython.score-196 {background-color: #FFFF0c;}
.cython.score-197 {background-color: #FFFF0c;}
.cython.score-198 {background-color: #FFFF0c;}
.cython.score-199 {background-color: #FFFF0c;}
.cython.score-200 {background-color: #FFFF0c;}
.cython.score-201 {background-color: #FFFF0c;}
.cython.score-202 {background-color: #FFFF0c;}
.cython.score-203 {background-color: #FFFF0b;}
.cython.score-204 {background-color: #FFFF0b;}
.cython.score-205 {background-color: #FFFF0b;}
.cython.score-206 {background-color: #FFFF0b;}
.cython.score-207 {background-color: #FFFF0b;}
.cython.score-208 {background-color: #FFFF0b;}
.cython.score-209 {background-color: #FFFF0b;}
.cython.score-210 {background-color: #FFFF0b;}
.cython.score-211 {background-color: #FFFF0b;}
.cython.score-212 {background-color: #FFFF0b;}
.cython.score-213 {background-color: #FFFF0b;}
.cython.score-214 {background-color: #FFFF0b;}
.cython.score-215 {background-color: #FFFF0b;}
.cython.score-216 {background-color: #FFFF0b;}
.cython.score-217 {background-color: #FFFF0b;}
.cython.score-218 {background-color: #FFFF0b;}
.cython.score-219 {background-color: #FFFF0b;}
.cython.score-220 {background-color: #FFFF0b;}
.cython.score-221 {background-color: #FFFF0b;}
.cython.score-222 {background-color: #FFFF0a;}
.cython.score-223 {background-color: #FFFF0a;}
.cython.score-224 {background-color: #FFFF0a;}
.cython.score-225 {background-color: #FFFF0a;}
.cython.score-226 {background-color: #FFFF0a;}
.cython.score-227 {background-color: #FFFF0a;}
.cython.score-228 {background-color: #FFFF0a;}
.cython.score-229 {background-color: #FFFF0a;}
.cython.score-230 {background-color: #FFFF0a;}
.cython.score-231 {background-color: #FFFF0a;}
.cython.score-232 {background-color: #FFFF0a;}
.cython.score-233 {background-color: #FFFF0a;}
.cython.score-234 {background-color: #FFFF0a;}
.cython.score-235 {background-color: #FFFF0a;}
.cython.score-236 {background-color: #FFFF0a;}
.cython.score-237 {background-color: #FFFF0a;}
.cython.score-238 {background-color: #FFFF0a;}
.cython.score-239 {background-color: #FFFF0a;}
.cython.score-240 {background-color: #FFFF0a;}
.cython.score-241 {background-color: #FFFF0a;}
.cython.score-242 {background-color: #FFFF0a;}
.cython.score-243 {background-color: #FFFF0a;}
.cython.score-244 {background-color: #FFFF0a;}
.cython.score-245 {background-color: #FFFF0a;}
.cython.score-246 {background-color: #FFFF09;}
.cython.score-247 {background-color: #FFFF09;}
.cython.score-248 {background-color: #FFFF09;}
.cython.score-249 {background-color: #FFFF09;}
.cython.score-250 {background-color: #FFFF09;}
.cython.score-251 {background-color: #FFFF09;}
.cython.score-252 {background-color: #FFFF09;}
.cython.score-253 {background-color: #FFFF09;}
.cython.score-254 {background-color: #FFFF09;}
</style>
</head>
<body class="cython">
<p><span style="border-bottom: solid 1px grey;">Generated by Cython 0.29.2</span></p>
<p>
<span style="background-color: #FFFF00">Yellow lines</span> hint at Python interaction.<br />
Click on a line that starts with a "<code>+</code>" to see the C code that Cython generated for it.
</p>
<p>Raw output: <a href="local.c">local.c</a></p>
<div class="cython"><pre class="cython line score-8" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">001</span>: # cython: auto_pickle=False,embedsignature=True,always_allow_keywords=False</pre>
<pre class='cython code score-8 '> __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyDict_NewPresized</span>(0);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
if (<span class='py_c_api'>PyDict_SetItem</span>(__pyx_d, __pyx_n_s_test, __pyx_t_1) &lt; 0) <span class='error_goto'>__PYX_ERR(0, 1, __pyx_L1_error)</span>
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
</pre><pre class="cython line score-0">&#xA0;<span class="">002</span>: """</pre>
<pre class="cython line score-0">&#xA0;<span class="">003</span>: Greenlet-local objects.</pre>
<pre class="cython line score-0">&#xA0;<span class="">004</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">005</span>: This module is based on `_threading_local.py`__ from the standard</pre>
<pre class="cython line score-0">&#xA0;<span class="">006</span>: library of Python 3.4.</pre>
<pre class="cython line score-0">&#xA0;<span class="">007</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">008</span>: __ https://github.com/python/cpython/blob/3.4/Lib/_threading_local.py</pre>
<pre class="cython line score-0">&#xA0;<span class="">009</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">010</span>: Greenlet-local objects support the management of greenlet-local data.</pre>
<pre class="cython line score-0">&#xA0;<span class="">011</span>: If you have data that you want to be local to a greenlet, simply create</pre>
<pre class="cython line score-0">&#xA0;<span class="">012</span>: a greenlet-local object and use its attributes:</pre>
<pre class="cython line score-0">&#xA0;<span class="">013</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">014</span>: &gt;&gt;&gt; mydata = local()</pre>
<pre class="cython line score-0">&#xA0;<span class="">015</span>: &gt;&gt;&gt; mydata.number = 42</pre>
<pre class="cython line score-0">&#xA0;<span class="">016</span>: &gt;&gt;&gt; mydata.number</pre>
<pre class="cython line score-0">&#xA0;<span class="">017</span>: 42</pre>
<pre class="cython line score-0">&#xA0;<span class="">018</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">019</span>: You can also access the local-object's dictionary:</pre>
<pre class="cython line score-0">&#xA0;<span class="">020</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">021</span>: &gt;&gt;&gt; mydata.__dict__</pre>
<pre class="cython line score-0">&#xA0;<span class="">022</span>: {'number': 42}</pre>
<pre class="cython line score-0">&#xA0;<span class="">023</span>: &gt;&gt;&gt; mydata.__dict__.setdefault('widgets', [])</pre>
<pre class="cython line score-0">&#xA0;<span class="">024</span>: []</pre>
<pre class="cython line score-0">&#xA0;<span class="">025</span>: &gt;&gt;&gt; mydata.widgets</pre>
<pre class="cython line score-0">&#xA0;<span class="">026</span>: []</pre>
<pre class="cython line score-0">&#xA0;<span class="">027</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">028</span>: What's important about greenlet-local objects is that their data are</pre>
<pre class="cython line score-0">&#xA0;<span class="">029</span>: local to a greenlet. If we access the data in a different greenlet:</pre>
<pre class="cython line score-0">&#xA0;<span class="">030</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">031</span>: &gt;&gt;&gt; log = []</pre>
<pre class="cython line score-0">&#xA0;<span class="">032</span>: &gt;&gt;&gt; def f():</pre>
<pre class="cython line score-0">&#xA0;<span class="">033</span>: ... items = list(mydata.__dict__.items())</pre>
<pre class="cython line score-0">&#xA0;<span class="">034</span>: ... items.sort()</pre>
<pre class="cython line score-0">&#xA0;<span class="">035</span>: ... log.append(items)</pre>
<pre class="cython line score-0">&#xA0;<span class="">036</span>: ... mydata.number = 11</pre>
<pre class="cython line score-0">&#xA0;<span class="">037</span>: ... log.append(mydata.number)</pre>
<pre class="cython line score-0">&#xA0;<span class="">038</span>: &gt;&gt;&gt; greenlet = gevent.spawn(f)</pre>
<pre class="cython line score-0">&#xA0;<span class="">039</span>: &gt;&gt;&gt; greenlet.join()</pre>
<pre class="cython line score-0">&#xA0;<span class="">040</span>: &gt;&gt;&gt; log</pre>
<pre class="cython line score-0">&#xA0;<span class="">041</span>: [[], 11]</pre>
<pre class="cython line score-0">&#xA0;<span class="">042</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">043</span>: we get different data. Furthermore, changes made in the other greenlet</pre>
<pre class="cython line score-0">&#xA0;<span class="">044</span>: don't affect data seen in this greenlet:</pre>
<pre class="cython line score-0">&#xA0;<span class="">045</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">046</span>: &gt;&gt;&gt; mydata.number</pre>
<pre class="cython line score-0">&#xA0;<span class="">047</span>: 42</pre>
<pre class="cython line score-0">&#xA0;<span class="">048</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">049</span>: Of course, values you get from a local object, including a __dict__</pre>
<pre class="cython line score-0">&#xA0;<span class="">050</span>: attribute, are for whatever greenlet was current at the time the</pre>
<pre class="cython line score-0">&#xA0;<span class="">051</span>: attribute was read. For that reason, you generally don't want to save</pre>
<pre class="cython line score-0">&#xA0;<span class="">052</span>: these values across greenlets, as they apply only to the greenlet they</pre>
<pre class="cython line score-0">&#xA0;<span class="">053</span>: came from.</pre>
<pre class="cython line score-0">&#xA0;<span class="">054</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">055</span>: You can create custom local objects by subclassing the local class:</pre>
<pre class="cython line score-0">&#xA0;<span class="">056</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">057</span>: &gt;&gt;&gt; class MyLocal(local):</pre>
<pre class="cython line score-0">&#xA0;<span class="">058</span>: ... number = 2</pre>
<pre class="cython line score-0">&#xA0;<span class="">059</span>: ... initialized = False</pre>
<pre class="cython line score-0">&#xA0;<span class="">060</span>: ... def __init__(self, **kw):</pre>
<pre class="cython line score-0">&#xA0;<span class="">061</span>: ... if self.initialized:</pre>
<pre class="cython line score-0">&#xA0;<span class="">062</span>: ... raise SystemError('__init__ called too many times')</pre>
<pre class="cython line score-0">&#xA0;<span class="">063</span>: ... self.initialized = True</pre>
<pre class="cython line score-0">&#xA0;<span class="">064</span>: ... self.__dict__.update(kw)</pre>
<pre class="cython line score-0">&#xA0;<span class="">065</span>: ... def squared(self):</pre>
<pre class="cython line score-0">&#xA0;<span class="">066</span>: ... return self.number ** 2</pre>
<pre class="cython line score-0">&#xA0;<span class="">067</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">068</span>: This can be useful to support default values, methods and</pre>
<pre class="cython line score-0">&#xA0;<span class="">069</span>: initialization. Note that if you define an __init__ method, it will be</pre>
<pre class="cython line score-0">&#xA0;<span class="">070</span>: called each time the local object is used in a separate greenlet. This</pre>
<pre class="cython line score-0">&#xA0;<span class="">071</span>: is necessary to initialize each greenlet's dictionary.</pre>
<pre class="cython line score-0">&#xA0;<span class="">072</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">073</span>: Now if we create a local object:</pre>
<pre class="cython line score-0">&#xA0;<span class="">074</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">075</span>: &gt;&gt;&gt; mydata = MyLocal(color='red')</pre>
<pre class="cython line score-0">&#xA0;<span class="">076</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">077</span>: Now we have a default number:</pre>
<pre class="cython line score-0">&#xA0;<span class="">078</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">079</span>: &gt;&gt;&gt; mydata.number</pre>
<pre class="cython line score-0">&#xA0;<span class="">080</span>: 2</pre>
<pre class="cython line score-0">&#xA0;<span class="">081</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">082</span>: an initial color:</pre>
<pre class="cython line score-0">&#xA0;<span class="">083</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">084</span>: &gt;&gt;&gt; mydata.color</pre>
<pre class="cython line score-0">&#xA0;<span class="">085</span>: 'red'</pre>
<pre class="cython line score-0">&#xA0;<span class="">086</span>: &gt;&gt;&gt; del mydata.color</pre>
<pre class="cython line score-0">&#xA0;<span class="">087</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">088</span>: And a method that operates on the data:</pre>
<pre class="cython line score-0">&#xA0;<span class="">089</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">090</span>: &gt;&gt;&gt; mydata.squared()</pre>
<pre class="cython line score-0">&#xA0;<span class="">091</span>: 4</pre>
<pre class="cython line score-0">&#xA0;<span class="">092</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">093</span>: As before, we can access the data in a separate greenlet:</pre>
<pre class="cython line score-0">&#xA0;<span class="">094</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">095</span>: &gt;&gt;&gt; log = []</pre>
<pre class="cython line score-0">&#xA0;<span class="">096</span>: &gt;&gt;&gt; greenlet = gevent.spawn(f)</pre>
<pre class="cython line score-0">&#xA0;<span class="">097</span>: &gt;&gt;&gt; greenlet.join()</pre>
<pre class="cython line score-0">&#xA0;<span class="">098</span>: &gt;&gt;&gt; log</pre>
<pre class="cython line score-0">&#xA0;<span class="">099</span>: [[('color', 'red'), ('initialized', True)], 11]</pre>
<pre class="cython line score-0">&#xA0;<span class="">100</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">101</span>: without affecting this greenlet's data:</pre>
<pre class="cython line score-0">&#xA0;<span class="">102</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">103</span>: &gt;&gt;&gt; mydata.number</pre>
<pre class="cython line score-0">&#xA0;<span class="">104</span>: 2</pre>
<pre class="cython line score-0">&#xA0;<span class="">105</span>: &gt;&gt;&gt; mydata.color</pre>
<pre class="cython line score-0">&#xA0;<span class="">106</span>: Traceback (most recent call last):</pre>
<pre class="cython line score-0">&#xA0;<span class="">107</span>: ...</pre>
<pre class="cython line score-0">&#xA0;<span class="">108</span>: AttributeError: 'MyLocal' object has no attribute 'color'</pre>
<pre class="cython line score-0">&#xA0;<span class="">109</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">110</span>: Note that subclasses can define slots, but they are not greenlet</pre>
<pre class="cython line score-0">&#xA0;<span class="">111</span>: local. They are shared across greenlets::</pre>
<pre class="cython line score-0">&#xA0;<span class="">112</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">113</span>: &gt;&gt;&gt; class MyLocal(local):</pre>
<pre class="cython line score-0">&#xA0;<span class="">114</span>: ... __slots__ = 'number'</pre>
<pre class="cython line score-0">&#xA0;<span class="">115</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">116</span>: &gt;&gt;&gt; mydata = MyLocal()</pre>
<pre class="cython line score-0">&#xA0;<span class="">117</span>: &gt;&gt;&gt; mydata.number = 42</pre>
<pre class="cython line score-0">&#xA0;<span class="">118</span>: &gt;&gt;&gt; mydata.color = 'red'</pre>
<pre class="cython line score-0">&#xA0;<span class="">119</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">120</span>: So, the separate greenlet:</pre>
<pre class="cython line score-0">&#xA0;<span class="">121</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">122</span>: &gt;&gt;&gt; greenlet = gevent.spawn(f)</pre>
<pre class="cython line score-0">&#xA0;<span class="">123</span>: &gt;&gt;&gt; greenlet.join()</pre>
<pre class="cython line score-0">&#xA0;<span class="">124</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">125</span>: affects what we see:</pre>
<pre class="cython line score-0">&#xA0;<span class="">126</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">127</span>: &gt;&gt;&gt; mydata.number</pre>
<pre class="cython line score-0">&#xA0;<span class="">128</span>: 11</pre>
<pre class="cython line score-0">&#xA0;<span class="">129</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">130</span>: &gt;&gt;&gt; del mydata</pre>
<pre class="cython line score-0">&#xA0;<span class="">131</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">132</span>: .. versionchanged:: 1.1a2</pre>
<pre class="cython line score-0">&#xA0;<span class="">133</span>: Update the implementation to match Python 3.4 instead of Python 2.5.</pre>
<pre class="cython line score-0">&#xA0;<span class="">134</span>: This results in locals being eligible for garbage collection as soon</pre>
<pre class="cython line score-0">&#xA0;<span class="">135</span>: as their greenlet exits.</pre>
<pre class="cython line score-0">&#xA0;<span class="">136</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">137</span>: .. versionchanged:: 1.2.3</pre>
<pre class="cython line score-0">&#xA0;<span class="">138</span>: Use a weak-reference to clear the greenlet link we establish in case</pre>
<pre class="cython line score-0">&#xA0;<span class="">139</span>: the local object dies before the greenlet does.</pre>
<pre class="cython line score-0">&#xA0;<span class="">140</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">141</span>: .. versionchanged:: 1.3a1</pre>
<pre class="cython line score-0">&#xA0;<span class="">142</span>: Implement the methods for attribute access directly, handling</pre>
<pre class="cython line score-0">&#xA0;<span class="">143</span>: descriptors directly here. This allows removing the use of a lock</pre>
<pre class="cython line score-0">&#xA0;<span class="">144</span>: and facilitates greatly improved performance.</pre>
<pre class="cython line score-0">&#xA0;<span class="">145</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">146</span>: .. versionchanged:: 1.3a1</pre>
<pre class="cython line score-0">&#xA0;<span class="">147</span>: The ``__init__`` method of subclasses of ``local`` is no longer</pre>
<pre class="cython line score-0">&#xA0;<span class="">148</span>: called with a lock held. CPython does not use such a lock in its</pre>
<pre class="cython line score-0">&#xA0;<span class="">149</span>: native implementation. This could potentially show as a difference</pre>
<pre class="cython line score-0">&#xA0;<span class="">150</span>: if code that uses multiple dependent attributes in ``__slots__``</pre>
<pre class="cython line score-0">&#xA0;<span class="">151</span>: (which are shared across all greenlets) switches during ``__init__``.</pre>
<pre class="cython line score-0">&#xA0;<span class="">152</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">153</span>: """</pre>
<pre class="cython line score-0">&#xA0;<span class="">154</span>: from __future__ import print_function</pre>
<pre class="cython line score-0">&#xA0;<span class="">155</span>: </pre>
<pre class="cython line score-16" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">156</span>: from copy import copy</pre>
<pre class='cython code score-16 '> __pyx_t_1 = <span class='py_c_api'>PyList_New</span>(1);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 156, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_n_s_copy_2);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_n_s_copy_2);
<span class='py_macro_api'>PyList_SET_ITEM</span>(__pyx_t_1, 0, __pyx_n_s_copy_2);
__pyx_t_2 = <span class='pyx_c_api'>__Pyx_Import</span>(__pyx_n_s_copy_2, __pyx_t_1, 0);<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 156, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
__pyx_t_1 = <span class='pyx_c_api'>__Pyx_ImportFrom</span>(__pyx_t_2, __pyx_n_s_copy_2);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 156, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_1);
<span class='refnanny'>__Pyx_XGOTREF</span>(__pyx_v_6gevent_6_local_copy);
<span class='pyx_macro_api'>__Pyx_DECREF_SET</span>(__pyx_v_6gevent_6_local_copy, __pyx_t_1);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_1);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
</pre><pre class="cython line score-16" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">157</span>: from weakref import ref</pre>
<pre class='cython code score-16 '> __pyx_t_2 = <span class='py_c_api'>PyList_New</span>(1);<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 157, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_n_s_ref);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_n_s_ref);
<span class='py_macro_api'>PyList_SET_ITEM</span>(__pyx_t_2, 0, __pyx_n_s_ref);
__pyx_t_1 = <span class='pyx_c_api'>__Pyx_Import</span>(__pyx_n_s_weakref, __pyx_t_2, 0);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 157, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
__pyx_t_2 = <span class='pyx_c_api'>__Pyx_ImportFrom</span>(__pyx_t_1, __pyx_n_s_ref);<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 157, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_2);
<span class='refnanny'>__Pyx_XGOTREF</span>(__pyx_v_6gevent_6_local_ref);
<span class='pyx_macro_api'>__Pyx_DECREF_SET</span>(__pyx_v_6gevent_6_local_ref, __pyx_t_2);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_2);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
</pre><pre class="cython line score-0">&#xA0;<span class="">158</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">159</span>: </pre>
<pre class="cython line score-19" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">160</span>: locals()['getcurrent'] = __import__('greenlet').getcurrent</pre>
<pre class='cython code score-19 '> __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyObject_Call</span>(__pyx_builtin___import__, __pyx_tuple_, NULL);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 160, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
__pyx_t_2 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(__pyx_t_1, __pyx_n_s_getcurrent);<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 160, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
__pyx_t_1 = <span class='pyx_c_api'>__Pyx_Globals</span>();<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 160, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
if (unlikely(<span class='py_c_api'>PyDict_SetItem</span>(__pyx_t_1, __pyx_n_s_getcurrent, __pyx_t_2) &lt; 0)) <span class='error_goto'>__PYX_ERR(0, 160, __pyx_L1_error)</span>
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
/* … */
__pyx_tuple_ = <span class='py_c_api'>PyTuple_Pack</span>(1, __pyx_n_s_greenlet);<span class='error_goto'> if (unlikely(!__pyx_tuple_)) __PYX_ERR(0, 160, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_tuple_);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_tuple_);
</pre><pre class="cython line score-13" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">161</span>: locals()['greenlet_init'] = lambda: None</pre>
<pre class='cython code score-13 '>/* Python wrapper */
static PyObject *__pyx_pw_6gevent_6_local_4lambda(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyMethodDef __pyx_mdef_6gevent_6_local_4lambda = {"lambda", (PyCFunction)__pyx_pw_6gevent_6_local_4lambda, METH_NOARGS, 0};
static PyObject *__pyx_pw_6gevent_6_local_4lambda(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
PyObject *__pyx_r = 0;
<span class='refnanny'>__Pyx_RefNannyDeclarations</span>
<span class='refnanny'>__Pyx_RefNannySetupContext</span>("lambda (wrapper)", 0);
__pyx_r = __pyx_lambda_funcdef_6gevent_6_local_lambda(__pyx_self);
/* function exit code */
<span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
return __pyx_r;
}
static PyObject *__pyx_lambda_funcdef_6gevent_6_local_lambda(CYTHON_UNUSED PyObject *__pyx_self) {
PyObject *__pyx_r = NULL;
<span class='refnanny'>__Pyx_RefNannyDeclarations</span>
<span class='refnanny'>__Pyx_RefNannySetupContext</span>("lambda", 0);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_r);
__pyx_r = Py_None; <span class='pyx_macro_api'>__Pyx_INCREF</span>(Py_None);
goto __pyx_L0;
/* function exit code */
__pyx_L0:;
<span class='refnanny'>__Pyx_XGIVEREF</span>(__pyx_r);
<span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
return __pyx_r;
}
/* … */
__pyx_t_2 = <span class='pyx_c_api'>__Pyx_CyFunction_NewEx</span>(&amp;__pyx_mdef_6gevent_6_local_4lambda, 0, __pyx_n_s_lambda, NULL, __pyx_n_s_gevent__local, __pyx_d, NULL);<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 161, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
__pyx_t_1 = <span class='pyx_c_api'>__Pyx_Globals</span>();<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 161, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
if (unlikely(<span class='py_c_api'>PyDict_SetItem</span>(__pyx_t_1, __pyx_n_s_greenlet_init, __pyx_t_2) &lt; 0)) <span class='error_goto'>__PYX_ERR(0, 161, __pyx_L1_error)</span>
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
</pre><pre class="cython line score-0">&#xA0;<span class="">162</span>: </pre>
<pre class="cython line score-13" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">163</span>: __all__ = [</pre>
<pre class='cython code score-13 '> __pyx_t_2 = <span class='py_c_api'>PyList_New</span>(1);<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 163, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_n_s_local);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_n_s_local);
<span class='py_macro_api'>PyList_SET_ITEM</span>(__pyx_t_2, 0, __pyx_n_s_local);
if (<span class='py_c_api'>PyDict_SetItem</span>(__pyx_d, __pyx_n_s_all, __pyx_t_2) &lt; 0) <span class='error_goto'>__PYX_ERR(0, 163, __pyx_L1_error)</span>
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
</pre><pre class="cython line score-0">&#xA0;<span class="">164</span>: "local",</pre>
<pre class="cython line score-0">&#xA0;<span class="">165</span>: ]</pre>
<pre class="cython line score-0">&#xA0;<span class="">166</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">167</span>: # The key used in the Thread objects' attribute dicts.</pre>
<pre class="cython line score-0">&#xA0;<span class="">168</span>: # We keep it a string for speed but make it unlikely to clash with</pre>
<pre class="cython line score-0">&#xA0;<span class="">169</span>: # a "real" attribute.</pre>
<pre class="cython line score-2" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">170</span>: key_prefix = '_gevent_local_localimpl_'</pre>
<pre class='cython code score-2 '> <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_n_s_gevent_local_localimpl);
<span class='refnanny'>__Pyx_XGOTREF</span>(__pyx_v_6gevent_6_local_key_prefix);
<span class='pyx_macro_api'>__Pyx_DECREF_SET</span>(__pyx_v_6gevent_6_local_key_prefix, __pyx_n_s_gevent_local_localimpl);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_n_s_gevent_local_localimpl);
</pre><pre class="cython line score-0">&#xA0;<span class="">171</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">172</span>: # The overall structure is as follows:</pre>
<pre class="cython line score-0">&#xA0;<span class="">173</span>: # For each local() object:</pre>
<pre class="cython line score-0">&#xA0;<span class="">174</span>: # greenlet.__dict__[key_prefix + str(id(local))]</pre>
<pre class="cython line score-0">&#xA0;<span class="">175</span>: # =&gt; _localimpl.dicts[id(greenlet)] =&gt; (ref(greenlet), {})</pre>
<pre class="cython line score-0">&#xA0;<span class="">176</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">177</span>: # That final tuple is actually a localimpl_dict_entry object.</pre>
<pre class="cython line score-0">&#xA0;<span class="">178</span>: </pre>
<pre class="cython line score-34" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">179</span>: def all_local_dicts_for_greenlet(greenlet):</pre>
<pre class='cython code score-34 '>static PyObject *__pyx_pw_6gevent_6_local_1all_local_dicts_for_greenlet(PyObject *__pyx_self, PyObject *__pyx_v_greenlet); /*proto*/
static PyObject *__pyx_f_6gevent_6_local_all_local_dicts_for_greenlet(PyGreenlet *__pyx_v_greenlet, CYTHON_UNUSED int __pyx_skip_dispatch) {
PyObject *__pyx_v_result = 0;
struct __pyx_obj_6gevent_6_local__localimpl *__pyx_v_local_impl = 0;
struct __pyx_obj_6gevent_6_local__localimpl_dict_entry *__pyx_v_entry = 0;
PyObject *__pyx_v_k = 0;
PyObject *__pyx_v_greenlet_dict = 0;
PyObject *__pyx_v_id_greenlet = NULL;
PyObject *__pyx_v_v = NULL;
PyObject *__pyx_r = NULL;
<span class='refnanny'>__Pyx_RefNannyDeclarations</span>
<span class='refnanny'>__Pyx_RefNannySetupContext</span>("all_local_dicts_for_greenlet", 0);
/* … */
/* function exit code */
__pyx_L1_error:;
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_1);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_5);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_6);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_10);
<span class='pyx_c_api'>__Pyx_AddTraceback</span>("gevent._local.all_local_dicts_for_greenlet", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_result);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>((PyObject *)__pyx_v_local_impl);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>((PyObject *)__pyx_v_entry);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_k);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_greenlet_dict);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_id_greenlet);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_v);
<span class='refnanny'>__Pyx_XGIVEREF</span>(__pyx_r);
<span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
return __pyx_r;
}
/* Python wrapper */
static PyObject *__pyx_pw_6gevent_6_local_1all_local_dicts_for_greenlet(PyObject *__pyx_self, PyObject *__pyx_v_greenlet); /*proto*/
static char __pyx_doc_6gevent_6_local_all_local_dicts_for_greenlet[] = "all_local_dicts_for_greenlet(greenlet greenlet)\n\n Internal debug helper for getting the local values associated\n with a greenlet. This is subject to change or removal at any time.\n\n :return: A list of ((type, id), {}) pairs, where the first element\n is the type and id of the local object and the second object is its\n instance dictionary, as seen from this greenlet.\n\n .. versionadded:: 1.3a2\n ";
static PyMethodDef __pyx_mdef_6gevent_6_local_1all_local_dicts_for_greenlet = {"all_local_dicts_for_greenlet", (PyCFunction)__pyx_pw_6gevent_6_local_1all_local_dicts_for_greenlet, METH_O, __pyx_doc_6gevent_6_local_all_local_dicts_for_greenlet};
static PyObject *__pyx_pw_6gevent_6_local_1all_local_dicts_for_greenlet(PyObject *__pyx_self, PyObject *__pyx_v_greenlet) {
PyObject *__pyx_r = 0;
<span class='refnanny'>__Pyx_RefNannyDeclarations</span>
<span class='refnanny'>__Pyx_RefNannySetupContext</span>("all_local_dicts_for_greenlet (wrapper)", 0);
if (unlikely(!<span class='pyx_c_api'>__Pyx_ArgTypeTest</span>(((PyObject *)__pyx_v_greenlet), __pyx_ptype_6gevent_6_local_greenlet, 1, "greenlet", 0))) <span class='error_goto'>__PYX_ERR(0, 179, __pyx_L1_error)</span>
__pyx_r = __pyx_pf_6gevent_6_local_all_local_dicts_for_greenlet(__pyx_self, ((PyGreenlet *)__pyx_v_greenlet));
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__pyx_r = NULL;
__pyx_L0:;
<span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
return __pyx_r;
}
static PyObject *__pyx_pf_6gevent_6_local_all_local_dicts_for_greenlet(CYTHON_UNUSED PyObject *__pyx_self, PyGreenlet *__pyx_v_greenlet) {
PyObject *__pyx_r = NULL;
<span class='refnanny'>__Pyx_RefNannyDeclarations</span>
<span class='refnanny'>__Pyx_RefNannySetupContext</span>("all_local_dicts_for_greenlet", 0);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_r);
__pyx_t_1 = __pyx_f_6gevent_6_local_all_local_dicts_for_greenlet(__pyx_v_greenlet, 0);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 179, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
__pyx_r = __pyx_t_1;
__pyx_t_1 = 0;
goto __pyx_L0;
/* function exit code */
__pyx_L1_error:;
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_1);
<span class='pyx_c_api'>__Pyx_AddTraceback</span>("gevent._local.all_local_dicts_for_greenlet", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
<span class='refnanny'>__Pyx_XGIVEREF</span>(__pyx_r);
<span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
return __pyx_r;
}
/* … */
__pyx_tuple__2 = <span class='py_c_api'>PyTuple_Pack</span>(1, __pyx_n_s_greenlet);<span class='error_goto'> if (unlikely(!__pyx_tuple__2)) __PYX_ERR(0, 179, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_tuple__2);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_tuple__2);
/* … */
__pyx_t_2 = <span class='pyx_c_api'>__Pyx_CyFunction_NewEx</span>(&amp;__pyx_mdef_6gevent_6_local_1all_local_dicts_for_greenlet, 0, __pyx_n_s_all_local_dicts_for_greenlet, NULL, __pyx_n_s_gevent__local, __pyx_d, ((PyObject *)__pyx_codeobj__3));<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 179, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
if (<span class='py_c_api'>PyDict_SetItem</span>(__pyx_d, __pyx_n_s_all_local_dicts_for_greenlet, __pyx_t_2) &lt; 0) <span class='error_goto'>__PYX_ERR(0, 179, __pyx_L1_error)</span>
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
__pyx_codeobj__3 = (PyObject*)<span class='pyx_c_api'>__Pyx_PyCode_New</span>(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__2, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_gevent_local_py, __pyx_n_s_all_local_dicts_for_greenlet, 179, __pyx_empty_bytes);<span class='error_goto'> if (unlikely(!__pyx_codeobj__3)) __PYX_ERR(0, 179, __pyx_L1_error)</span>
</pre><pre class="cython line score-0">&#xA0;<span class="">180</span>: """</pre>
<pre class="cython line score-0">&#xA0;<span class="">181</span>: Internal debug helper for getting the local values associated</pre>
<pre class="cython line score-0">&#xA0;<span class="">182</span>: with a greenlet. This is subject to change or removal at any time.</pre>
<pre class="cython line score-0">&#xA0;<span class="">183</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">184</span>: :return: A list of ((type, id), {}) pairs, where the first element</pre>
<pre class="cython line score-0">&#xA0;<span class="">185</span>: is the type and id of the local object and the second object is its</pre>
<pre class="cython line score-0">&#xA0;<span class="">186</span>: instance dictionary, as seen from this greenlet.</pre>
<pre class="cython line score-0">&#xA0;<span class="">187</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">188</span>: .. versionadded:: 1.3a2</pre>
<pre class="cython line score-0">&#xA0;<span class="">189</span>: """</pre>
<pre class="cython line score-0">&#xA0;<span class="">190</span>: </pre>
<pre class="cython line score-5" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">191</span>: result = []</pre>
<pre class='cython code score-5 '> __pyx_t_1 = <span class='py_c_api'>PyList_New</span>(0);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 191, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
__pyx_v_result = ((PyObject*)__pyx_t_1);
__pyx_t_1 = 0;
</pre><pre class="cython line score-2" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">192</span>: id_greenlet = id(greenlet)</pre>
<pre class='cython code score-2 '> __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyObject_CallOneArg</span>(__pyx_builtin_id, ((PyObject *)__pyx_v_greenlet));<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 192, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
__pyx_v_id_greenlet = __pyx_t_1;
__pyx_t_1 = 0;
</pre><pre class="cython line score-12" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">193</span>: greenlet_dict = greenlet.__dict__</pre>
<pre class='cython code score-12 '> __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(((PyObject *)__pyx_v_greenlet), __pyx_n_s_dict);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 193, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
if (!(likely(<span class='py_c_api'>PyDict_CheckExact</span>(__pyx_t_1))||((__pyx_t_1) == Py_None)||(<span class='py_c_api'>PyErr_Format</span>(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_t_1)-&gt;tp_name), 0))) <span class='error_goto'>__PYX_ERR(0, 193, __pyx_L1_error)</span>
__pyx_v_greenlet_dict = ((PyObject*)__pyx_t_1);
__pyx_t_1 = 0;
</pre><pre class="cython line score-18" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">194</span>: for k, v in greenlet_dict.items():</pre>
<pre class='cython code score-18 '> __pyx_t_2 = 0;
if (unlikely(__pyx_v_greenlet_dict == Py_None)) {
<span class='py_c_api'>PyErr_Format</span>(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
<span class='error_goto'>__PYX_ERR(0, 194, __pyx_L1_error)</span>
}
__pyx_t_5 = __Pyx_dict_iterator(__pyx_v_greenlet_dict, 1, __pyx_n_s_items, (&amp;__pyx_t_3), (&amp;__pyx_t_4));<span class='error_goto'> if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 194, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_1);
__pyx_t_1 = __pyx_t_5;
__pyx_t_5 = 0;
while (1) {
__pyx_t_7 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_3, &amp;__pyx_t_2, &amp;__pyx_t_5, &amp;__pyx_t_6, NULL, __pyx_t_4);
if (unlikely(__pyx_t_7 == 0)) break;
if (unlikely(__pyx_t_7 == -1)) <span class='error_goto'>__PYX_ERR(0, 194, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_6);
if (!(likely(<span class='py_c_api'>PyString_CheckExact</span>(__pyx_t_5))||((__pyx_t_5) == Py_None)||(<span class='py_c_api'>PyErr_Format</span>(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_5)-&gt;tp_name), 0))) <span class='error_goto'>__PYX_ERR(0, 194, __pyx_L1_error)</span>
<span class='pyx_macro_api'>__Pyx_XDECREF_SET</span>(__pyx_v_k, ((PyObject*)__pyx_t_5));
__pyx_t_5 = 0;
<span class='pyx_macro_api'>__Pyx_XDECREF_SET</span>(__pyx_v_v, __pyx_t_6);
__pyx_t_6 = 0;
</pre><pre class="cython line score-7" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">195</span>: if not k.startswith(key_prefix):</pre>
<pre class='cython code score-7 '> if (unlikely(__pyx_v_k == Py_None)) {
<span class='py_c_api'>PyErr_Format</span>(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "startswith");
<span class='error_goto'>__PYX_ERR(0, 195, __pyx_L1_error)</span>
}
__pyx_t_8 = <span class='pyx_c_api'>__Pyx_PyStr_Tailmatch</span>(__pyx_v_k, __pyx_v_6gevent_6_local_key_prefix, 0, PY_SSIZE_T_MAX, -1);<span class='error_goto'> if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 195, __pyx_L1_error)</span>
__pyx_t_9 = ((!(__pyx_t_8 != 0)) != 0);
if (__pyx_t_9) {
/* … */
}
</pre><pre class="cython line score-0" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">196</span>: continue</pre>
<pre class='cython code score-0 '> goto __pyx_L3_continue;
</pre><pre class="cython line score-20" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">197</span>: local_impl = v()</pre>
<pre class='cython code score-20 '> <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_v);
__pyx_t_5 = __pyx_v_v; __pyx_t_10 = NULL;
if (CYTHON_UNPACK_METHODS &amp;&amp; unlikely(<span class='py_c_api'>PyMethod_Check</span>(__pyx_t_5))) {
__pyx_t_10 = <span class='py_macro_api'>PyMethod_GET_SELF</span>(__pyx_t_5);
if (likely(__pyx_t_10)) {
PyObject* function = <span class='py_macro_api'>PyMethod_GET_FUNCTION</span>(__pyx_t_5);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_10);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(function);
<span class='pyx_macro_api'>__Pyx_DECREF_SET</span>(__pyx_t_5, function);
}
}
__pyx_t_6 = (__pyx_t_10) ? <span class='pyx_c_api'>__Pyx_PyObject_CallOneArg</span>(__pyx_t_5, __pyx_t_10) : <span class='pyx_c_api'>__Pyx_PyObject_CallNoArg</span>(__pyx_t_5);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_10); __pyx_t_10 = 0;
if (unlikely(!__pyx_t_6)) <span class='error_goto'>__PYX_ERR(0, 197, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_6);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_5); __pyx_t_5 = 0;
if (!(likely(((__pyx_t_6) == Py_None) || likely(<span class='pyx_c_api'>__Pyx_TypeTest</span>(__pyx_t_6, __pyx_ptype_6gevent_6_local__localimpl))))) <span class='error_goto'>__PYX_ERR(0, 197, __pyx_L1_error)</span>
<span class='pyx_macro_api'>__Pyx_XDECREF_SET</span>(__pyx_v_local_impl, ((struct __pyx_obj_6gevent_6_local__localimpl *)__pyx_t_6));
__pyx_t_6 = 0;
</pre><pre class="cython line score-0" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">198</span>: if local_impl is None:</pre>
<pre class='cython code score-0 '> __pyx_t_9 = (((PyObject *)__pyx_v_local_impl) == Py_None);
__pyx_t_8 = (__pyx_t_9 != 0);
if (__pyx_t_8) {
/* … */
}
</pre><pre class="cython line score-0" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">199</span>: continue</pre>
<pre class='cython code score-0 '> goto __pyx_L3_continue;
</pre><pre class="cython line score-10" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">200</span>: entry = local_impl.dicts.get(id_greenlet)</pre>
<pre class='cython code score-10 '> if (unlikely(__pyx_v_local_impl-&gt;dicts == Py_None)) {
<span class='py_c_api'>PyErr_Format</span>(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
<span class='error_goto'>__PYX_ERR(0, 200, __pyx_L1_error)</span>
}
__pyx_t_6 = <span class='pyx_c_api'>__Pyx_PyDict_GetItemDefault</span>(__pyx_v_local_impl-&gt;dicts, __pyx_v_id_greenlet, Py_None);<span class='error_goto'> if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 200, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_6);
if (!(likely(((__pyx_t_6) == Py_None) || likely(<span class='pyx_c_api'>__Pyx_TypeTest</span>(__pyx_t_6, __pyx_ptype_6gevent_6_local__localimpl_dict_entry))))) <span class='error_goto'>__PYX_ERR(0, 200, __pyx_L1_error)</span>
<span class='pyx_macro_api'>__Pyx_XDECREF_SET</span>(__pyx_v_entry, ((struct __pyx_obj_6gevent_6_local__localimpl_dict_entry *)__pyx_t_6));
__pyx_t_6 = 0;
</pre><pre class="cython line score-0" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">201</span>: if entry is None:</pre>
<pre class='cython code score-0 '> __pyx_t_8 = (((PyObject *)__pyx_v_entry) == Py_None);
__pyx_t_9 = (__pyx_t_8 != 0);
if (__pyx_t_9) {
/* … */
}
</pre><pre class="cython line score-0">&#xA0;<span class="">202</span>: # Not yet used in this greenlet.</pre>
<pre class="cython line score-0" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">203</span>: continue</pre>
<pre class='cython code score-0 '> goto __pyx_L3_continue;
</pre><pre class="cython line score-23" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">204</span>: assert entry.wrgreenlet() is greenlet</pre>
<pre class='cython code score-23 '> #ifndef CYTHON_WITHOUT_ASSERTIONS
if (unlikely(!Py_OptimizeFlag)) {
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_entry-&gt;wrgreenlet);
__pyx_t_5 = __pyx_v_entry-&gt;wrgreenlet; __pyx_t_10 = NULL;
if (CYTHON_UNPACK_METHODS &amp;&amp; likely(<span class='py_c_api'>PyMethod_Check</span>(__pyx_t_5))) {
__pyx_t_10 = <span class='py_macro_api'>PyMethod_GET_SELF</span>(__pyx_t_5);
if (likely(__pyx_t_10)) {
PyObject* function = <span class='py_macro_api'>PyMethod_GET_FUNCTION</span>(__pyx_t_5);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_10);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(function);
<span class='pyx_macro_api'>__Pyx_DECREF_SET</span>(__pyx_t_5, function);
}
}
__pyx_t_6 = (__pyx_t_10) ? <span class='pyx_c_api'>__Pyx_PyObject_CallOneArg</span>(__pyx_t_5, __pyx_t_10) : <span class='pyx_c_api'>__Pyx_PyObject_CallNoArg</span>(__pyx_t_5);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_10); __pyx_t_10 = 0;
if (unlikely(!__pyx_t_6)) <span class='error_goto'>__PYX_ERR(0, 204, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_6);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_5); __pyx_t_5 = 0;
__pyx_t_9 = (__pyx_t_6 == ((PyObject *)__pyx_v_greenlet));
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!(__pyx_t_9 != 0))) {
<span class='py_c_api'>PyErr_SetNone</span>(PyExc_AssertionError);
<span class='error_goto'>__PYX_ERR(0, 204, __pyx_L1_error)</span>
}
}
#endif
</pre><pre class="cython line score-13" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">205</span>: result.append((local_impl.localtypeid, entry.localdict))</pre>
<pre class='cython code score-13 '> __pyx_t_6 = <span class='py_c_api'>PyTuple_New</span>(2);<span class='error_goto'> if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 205, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_6);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_local_impl-&gt;localtypeid);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_v_local_impl-&gt;localtypeid);
<span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_6, 0, __pyx_v_local_impl-&gt;localtypeid);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_entry-&gt;localdict);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_v_entry-&gt;localdict);
<span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_6, 1, __pyx_v_entry-&gt;localdict);
__pyx_t_11 = <span class='pyx_c_api'>__Pyx_PyList_Append</span>(__pyx_v_result, __pyx_t_6);<span class='error_goto'> if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(0, 205, __pyx_L1_error)</span>
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_6); __pyx_t_6 = 0;
__pyx_L3_continue:;
}
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
</pre><pre class="cython line score-0">&#xA0;<span class="">206</span>: </pre>
<pre class="cython line score-2" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">207</span>: return result</pre>
<pre class='cython code score-2 '> <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_r);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_result);
__pyx_r = __pyx_v_result;
goto __pyx_L0;
</pre><pre class="cython line score-0">&#xA0;<span class="">208</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">209</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">210</span>: class _wrefdict(dict):</pre>
<pre class="cython line score-0">&#xA0;<span class="">211</span>: """A dict that can be weak referenced"""</pre>
<pre class="cython line score-0">&#xA0;<span class="">212</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">213</span>: class _greenlet_deleted(object):</pre>
<pre class="cython line score-0">&#xA0;<span class="">214</span>: """</pre>
<pre class="cython line score-0">&#xA0;<span class="">215</span>: A weakref callback for when the greenlet</pre>
<pre class="cython line score-0">&#xA0;<span class="">216</span>: is deleted.</pre>
<pre class="cython line score-0">&#xA0;<span class="">217</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">218</span>: If the greenlet is a `gevent.greenlet.Greenlet` and</pre>
<pre class="cython line score-0">&#xA0;<span class="">219</span>: supplies ``rawlink``, that will be used instead of a</pre>
<pre class="cython line score-0">&#xA0;<span class="">220</span>: weakref.</pre>
<pre class="cython line score-0">&#xA0;<span class="">221</span>: """</pre>
<pre class="cython line score-15" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">222</span>: __slots__ = ('idt', 'wrdicts')</pre>
<pre class='cython code score-15 '> if (<span class='py_c_api'>PyDict_SetItem</span>((PyObject *)__pyx_ptype_6gevent_6_local__greenlet_deleted-&gt;tp_dict, __pyx_n_s_slots, __pyx_tuple__4) &lt; 0) <span class='error_goto'>__PYX_ERR(0, 222, __pyx_L1_error)</span>
<span class='py_c_api'>PyType_Modified</span>(__pyx_ptype_6gevent_6_local__greenlet_deleted);
/* … */
__pyx_tuple__4 = <span class='py_c_api'>PyTuple_Pack</span>(2, __pyx_n_s_idt, __pyx_n_s_wrdicts);<span class='error_goto'> if (unlikely(!__pyx_tuple__4)) __PYX_ERR(0, 222, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_tuple__4);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_tuple__4);
</pre><pre class="cython line score-0">&#xA0;<span class="">223</span>: </pre>
<pre class="cython line score-24" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">224</span>: def __init__(self, idt, wrdicts):</pre>
<pre class='cython code score-24 '>/* Python wrapper */
static int __pyx_pw_6gevent_6_local_17_greenlet_deleted_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_6gevent_6_local_17_greenlet_deleted_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
PyObject *__pyx_v_idt = 0;
PyObject *__pyx_v_wrdicts = 0;
int __pyx_r;
<span class='refnanny'>__Pyx_RefNannyDeclarations</span>
<span class='refnanny'>__Pyx_RefNannySetupContext</span>("__init__ (wrapper)", 0);
{
static PyObject **__pyx_pyargnames[] = {&amp;__pyx_n_s_idt,&amp;__pyx_n_s_wrdicts,0};
PyObject* values[2] = {0,0};
if (unlikely(__pyx_kwds)) {
Py_ssize_t kw_args;
const Py_ssize_t pos_args = <span class='py_macro_api'>PyTuple_GET_SIZE</span>(__pyx_args);
switch (pos_args) {
case 2: values[1] = <span class='py_macro_api'>PyTuple_GET_ITEM</span>(__pyx_args, 1);
CYTHON_FALLTHROUGH;
case 1: values[0] = <span class='py_macro_api'>PyTuple_GET_ITEM</span>(__pyx_args, 0);
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
kw_args = <span class='py_c_api'>PyDict_Size</span>(__pyx_kwds);
switch (pos_args) {
case 0:
if (likely((values[0] = <span class='pyx_c_api'>__Pyx_PyDict_GetItemStr</span>(__pyx_kwds, __pyx_n_s_idt)) != 0)) kw_args--;
else goto __pyx_L5_argtuple_error;
CYTHON_FALLTHROUGH;
case 1:
if (likely((values[1] = <span class='pyx_c_api'>__Pyx_PyDict_GetItemStr</span>(__pyx_kwds, __pyx_n_s_wrdicts)) != 0)) kw_args--;
else {
<span class='pyx_c_api'>__Pyx_RaiseArgtupleInvalid</span>("__init__", 1, 2, 2, 1); <span class='error_goto'>__PYX_ERR(0, 224, __pyx_L3_error)</span>
}
}
if (unlikely(kw_args &gt; 0)) {
if (unlikely(<span class='pyx_c_api'>__Pyx_ParseOptionalKeywords</span>(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") &lt; 0)) <span class='error_goto'>__PYX_ERR(0, 224, __pyx_L3_error)</span>
}
} else if (<span class='py_macro_api'>PyTuple_GET_SIZE</span>(__pyx_args) != 2) {
goto __pyx_L5_argtuple_error;
} else {
values[0] = <span class='py_macro_api'>PyTuple_GET_ITEM</span>(__pyx_args, 0);
values[1] = <span class='py_macro_api'>PyTuple_GET_ITEM</span>(__pyx_args, 1);
}
__pyx_v_idt = values[0];
__pyx_v_wrdicts = values[1];
}
goto __pyx_L4_argument_unpacking_done;
__pyx_L5_argtuple_error:;
<span class='pyx_c_api'>__Pyx_RaiseArgtupleInvalid</span>("__init__", 1, 2, 2, <span class='py_macro_api'>PyTuple_GET_SIZE</span>(__pyx_args)); <span class='error_goto'>__PYX_ERR(0, 224, __pyx_L3_error)</span>
__pyx_L3_error:;
<span class='pyx_c_api'>__Pyx_AddTraceback</span>("gevent._local._greenlet_deleted.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
<span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
return -1;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_6gevent_6_local_17_greenlet_deleted___init__(((struct __pyx_obj_6gevent_6_local__greenlet_deleted *)__pyx_v_self), __pyx_v_idt, __pyx_v_wrdicts);
/* function exit code */
<span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
return __pyx_r;
}
static int __pyx_pf_6gevent_6_local_17_greenlet_deleted___init__(struct __pyx_obj_6gevent_6_local__greenlet_deleted *__pyx_v_self, PyObject *__pyx_v_idt, PyObject *__pyx_v_wrdicts) {
int __pyx_r;
<span class='refnanny'>__Pyx_RefNannyDeclarations</span>
<span class='refnanny'>__Pyx_RefNannySetupContext</span>("__init__", 0);
/* … */
/* function exit code */
__pyx_r = 0;
<span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
return __pyx_r;
}
</pre><pre class="cython line score-2" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">225</span>: self.idt = idt</pre>
<pre class='cython code score-2 '> <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_idt);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_v_idt);
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_v_self-&gt;idt);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_v_self-&gt;idt);
__pyx_v_self-&gt;idt = __pyx_v_idt;
</pre><pre class="cython line score-2" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">226</span>: self.wrdicts = wrdicts</pre>
<pre class='cython code score-2 '> <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_wrdicts);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_v_wrdicts);
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_v_self-&gt;wrdicts);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_v_self-&gt;wrdicts);
__pyx_v_self-&gt;wrdicts = __pyx_v_wrdicts;
</pre><pre class="cython line score-0">&#xA0;<span class="">227</span>: </pre>
<pre class="cython line score-26" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">228</span>: def __call__(self, _unused):</pre>
<pre class='cython code score-26 '>/* Python wrapper */
static PyObject *__pyx_pw_6gevent_6_local_17_greenlet_deleted_3__call__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pw_6gevent_6_local_17_greenlet_deleted_3__call__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
CYTHON_UNUSED PyObject *__pyx_v__unused = 0;
PyObject *__pyx_r = 0;
<span class='refnanny'>__Pyx_RefNannyDeclarations</span>
<span class='refnanny'>__Pyx_RefNannySetupContext</span>("__call__ (wrapper)", 0);
{
static PyObject **__pyx_pyargnames[] = {&amp;__pyx_n_s_unused,0};
PyObject* values[1] = {0};
if (unlikely(__pyx_kwds)) {
Py_ssize_t kw_args;
const Py_ssize_t pos_args = <span class='py_macro_api'>PyTuple_GET_SIZE</span>(__pyx_args);
switch (pos_args) {
case 1: values[0] = <span class='py_macro_api'>PyTuple_GET_ITEM</span>(__pyx_args, 0);
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
kw_args = <span class='py_c_api'>PyDict_Size</span>(__pyx_kwds);
switch (pos_args) {
case 0:
if (likely((values[0] = <span class='pyx_c_api'>__Pyx_PyDict_GetItemStr</span>(__pyx_kwds, __pyx_n_s_unused)) != 0)) kw_args--;
else goto __pyx_L5_argtuple_error;
}
if (unlikely(kw_args &gt; 0)) {
if (unlikely(<span class='pyx_c_api'>__Pyx_ParseOptionalKeywords</span>(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__call__") &lt; 0)) <span class='error_goto'>__PYX_ERR(0, 228, __pyx_L3_error)</span>
}
} else if (<span class='py_macro_api'>PyTuple_GET_SIZE</span>(__pyx_args) != 1) {
goto __pyx_L5_argtuple_error;
} else {
values[0] = <span class='py_macro_api'>PyTuple_GET_ITEM</span>(__pyx_args, 0);
}
__pyx_v__unused = values[0];
}
goto __pyx_L4_argument_unpacking_done;
__pyx_L5_argtuple_error:;
<span class='pyx_c_api'>__Pyx_RaiseArgtupleInvalid</span>("__call__", 1, 1, 1, <span class='py_macro_api'>PyTuple_GET_SIZE</span>(__pyx_args)); <span class='error_goto'>__PYX_ERR(0, 228, __pyx_L3_error)</span>
__pyx_L3_error:;
<span class='pyx_c_api'>__Pyx_AddTraceback</span>("gevent._local._greenlet_deleted.__call__", __pyx_clineno, __pyx_lineno, __pyx_filename);
<span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
return NULL;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_6gevent_6_local_17_greenlet_deleted_2__call__(((struct __pyx_obj_6gevent_6_local__greenlet_deleted *)__pyx_v_self), __pyx_v__unused);
/* function exit code */
<span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
return __pyx_r;
}
static PyObject *__pyx_pf_6gevent_6_local_17_greenlet_deleted_2__call__(struct __pyx_obj_6gevent_6_local__greenlet_deleted *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v__unused) {
PyObject *__pyx_v_dicts = NULL;
PyObject *__pyx_r = NULL;
<span class='refnanny'>__Pyx_RefNannyDeclarations</span>
<span class='refnanny'>__Pyx_RefNannySetupContext</span>("__call__", 0);
/* … */
/* function exit code */
__pyx_r = Py_None; <span class='pyx_macro_api'>__Pyx_INCREF</span>(Py_None);
goto __pyx_L0;
__pyx_L1_error:;
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_1);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_2);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_3);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_6);
<span class='pyx_c_api'>__Pyx_AddTraceback</span>("gevent._local._greenlet_deleted.__call__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_dicts);
<span class='refnanny'>__Pyx_XGIVEREF</span>(__pyx_r);
<span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
return __pyx_r;
}
</pre><pre class="cython line score-17" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">229</span>: dicts = self.wrdicts()</pre>
<pre class='cython code score-17 '> <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_self-&gt;wrdicts);
__pyx_t_2 = __pyx_v_self-&gt;wrdicts; __pyx_t_3 = NULL;
if (CYTHON_UNPACK_METHODS &amp;&amp; likely(<span class='py_c_api'>PyMethod_Check</span>(__pyx_t_2))) {
__pyx_t_3 = <span class='py_macro_api'>PyMethod_GET_SELF</span>(__pyx_t_2);
if (likely(__pyx_t_3)) {
PyObject* function = <span class='py_macro_api'>PyMethod_GET_FUNCTION</span>(__pyx_t_2);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_3);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(function);
<span class='pyx_macro_api'>__Pyx_DECREF_SET</span>(__pyx_t_2, function);
}
}
__pyx_t_1 = (__pyx_t_3) ? <span class='pyx_c_api'>__Pyx_PyObject_CallOneArg</span>(__pyx_t_2, __pyx_t_3) : <span class='pyx_c_api'>__Pyx_PyObject_CallNoArg</span>(__pyx_t_2);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_1)) <span class='error_goto'>__PYX_ERR(0, 229, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
__pyx_v_dicts = __pyx_t_1;
__pyx_t_1 = 0;
</pre><pre class="cython line score-2" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">230</span>: if dicts:</pre>
<pre class='cython code score-2 '> __pyx_t_4 = <span class='pyx_c_api'>__Pyx_PyObject_IsTrue</span>(__pyx_v_dicts); if (unlikely(__pyx_t_4 &lt; 0)) <span class='error_goto'>__PYX_ERR(0, 230, __pyx_L1_error)</span>
if (__pyx_t_4) {
/* … */
}
</pre><pre class="cython line score-40" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">231</span>: dicts.pop(self.idt, None)</pre>
<pre class='cython code score-40 '> __pyx_t_2 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(__pyx_v_dicts, __pyx_n_s_pop);<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 231, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
__pyx_t_3 = NULL;
__pyx_t_5 = 0;
if (CYTHON_UNPACK_METHODS &amp;&amp; likely(<span class='py_c_api'>PyMethod_Check</span>(__pyx_t_2))) {
__pyx_t_3 = <span class='py_macro_api'>PyMethod_GET_SELF</span>(__pyx_t_2);
if (likely(__pyx_t_3)) {
PyObject* function = <span class='py_macro_api'>PyMethod_GET_FUNCTION</span>(__pyx_t_2);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_3);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(function);
<span class='pyx_macro_api'>__Pyx_DECREF_SET</span>(__pyx_t_2, function);
__pyx_t_5 = 1;
}
}
#if CYTHON_FAST_PYCALL
if (<span class='py_c_api'>PyFunction_Check</span>(__pyx_t_2)) {
PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_v_self-&gt;idt, Py_None};
__pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyFunction_FastCall</span>(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 231, __pyx_L1_error)</span>
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_3); __pyx_t_3 = 0;
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
} else
#endif
#if CYTHON_FAST_PYCCALL
if (<span class='pyx_c_api'>__Pyx_PyFastCFunction_Check</span>(__pyx_t_2)) {
PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_v_self-&gt;idt, Py_None};
__pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyCFunction_FastCall</span>(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 231, __pyx_L1_error)</span>
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_3); __pyx_t_3 = 0;
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
} else
#endif
{
__pyx_t_6 = <span class='py_c_api'>PyTuple_New</span>(2+__pyx_t_5);<span class='error_goto'> if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 231, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_6);
if (__pyx_t_3) {
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_3); <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_6, 0, __pyx_t_3); __pyx_t_3 = NULL;
}
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_self-&gt;idt);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_v_self-&gt;idt);
<span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_6, 0+__pyx_t_5, __pyx_v_self-&gt;idt);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(Py_None);
<span class='refnanny'>__Pyx_GIVEREF</span>(Py_None);
<span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_6, 1+__pyx_t_5, Py_None);
__pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyObject_Call</span>(__pyx_t_2, __pyx_t_6, NULL);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 231, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_6); __pyx_t_6 = 0;
}
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
</pre><pre class="cython line score-0">&#xA0;<span class="">232</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">233</span>: class _local_deleted(object):</pre>
<pre class="cython line score-15" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">234</span>: __slots__ = ('key', 'wrthread', 'greenlet_deleted')</pre>
<pre class='cython code score-15 '> if (<span class='py_c_api'>PyDict_SetItem</span>((PyObject *)__pyx_ptype_6gevent_6_local__local_deleted-&gt;tp_dict, __pyx_n_s_slots, __pyx_tuple__5) &lt; 0) <span class='error_goto'>__PYX_ERR(0, 234, __pyx_L1_error)</span>
<span class='py_c_api'>PyType_Modified</span>(__pyx_ptype_6gevent_6_local__local_deleted);
/* … */
__pyx_tuple__5 = <span class='py_c_api'>PyTuple_Pack</span>(3, __pyx_n_s_key, __pyx_n_s_wrthread, __pyx_n_s_greenlet_deleted);<span class='error_goto'> if (unlikely(!__pyx_tuple__5)) __PYX_ERR(0, 234, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_tuple__5);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_tuple__5);
</pre><pre class="cython line score-0">&#xA0;<span class="">235</span>: </pre>
<pre class="cython line score-33" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">236</span>: def __init__(self, key, wrthread, greenlet_deleted):</pre>
<pre class='cython code score-33 '>/* Python wrapper */
static int __pyx_pw_6gevent_6_local_14_local_deleted_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_6gevent_6_local_14_local_deleted_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
PyObject *__pyx_v_key = 0;
PyObject *__pyx_v_wrthread = 0;
PyObject *__pyx_v_greenlet_deleted = 0;
int __pyx_r;
<span class='refnanny'>__Pyx_RefNannyDeclarations</span>
<span class='refnanny'>__Pyx_RefNannySetupContext</span>("__init__ (wrapper)", 0);
{
static PyObject **__pyx_pyargnames[] = {&amp;__pyx_n_s_key,&amp;__pyx_n_s_wrthread,&amp;__pyx_n_s_greenlet_deleted,0};
PyObject* values[3] = {0,0,0};
if (unlikely(__pyx_kwds)) {
Py_ssize_t kw_args;
const Py_ssize_t pos_args = <span class='py_macro_api'>PyTuple_GET_SIZE</span>(__pyx_args);
switch (pos_args) {
case 3: values[2] = <span class='py_macro_api'>PyTuple_GET_ITEM</span>(__pyx_args, 2);
CYTHON_FALLTHROUGH;
case 2: values[1] = <span class='py_macro_api'>PyTuple_GET_ITEM</span>(__pyx_args, 1);
CYTHON_FALLTHROUGH;
case 1: values[0] = <span class='py_macro_api'>PyTuple_GET_ITEM</span>(__pyx_args, 0);
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
kw_args = <span class='py_c_api'>PyDict_Size</span>(__pyx_kwds);
switch (pos_args) {
case 0:
if (likely((values[0] = <span class='pyx_c_api'>__Pyx_PyDict_GetItemStr</span>(__pyx_kwds, __pyx_n_s_key)) != 0)) kw_args--;
else goto __pyx_L5_argtuple_error;
CYTHON_FALLTHROUGH;
case 1:
if (likely((values[1] = <span class='pyx_c_api'>__Pyx_PyDict_GetItemStr</span>(__pyx_kwds, __pyx_n_s_wrthread)) != 0)) kw_args--;
else {
<span class='pyx_c_api'>__Pyx_RaiseArgtupleInvalid</span>("__init__", 1, 3, 3, 1); <span class='error_goto'>__PYX_ERR(0, 236, __pyx_L3_error)</span>
}
CYTHON_FALLTHROUGH;
case 2:
if (likely((values[2] = <span class='pyx_c_api'>__Pyx_PyDict_GetItemStr</span>(__pyx_kwds, __pyx_n_s_greenlet_deleted)) != 0)) kw_args--;
else {
<span class='pyx_c_api'>__Pyx_RaiseArgtupleInvalid</span>("__init__", 1, 3, 3, 2); <span class='error_goto'>__PYX_ERR(0, 236, __pyx_L3_error)</span>
}
}
if (unlikely(kw_args &gt; 0)) {
if (unlikely(<span class='pyx_c_api'>__Pyx_ParseOptionalKeywords</span>(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") &lt; 0)) <span class='error_goto'>__PYX_ERR(0, 236, __pyx_L3_error)</span>
}
} else if (<span class='py_macro_api'>PyTuple_GET_SIZE</span>(__pyx_args) != 3) {
goto __pyx_L5_argtuple_error;
} else {
values[0] = <span class='py_macro_api'>PyTuple_GET_ITEM</span>(__pyx_args, 0);
values[1] = <span class='py_macro_api'>PyTuple_GET_ITEM</span>(__pyx_args, 1);
values[2] = <span class='py_macro_api'>PyTuple_GET_ITEM</span>(__pyx_args, 2);
}
__pyx_v_key = values[0];
__pyx_v_wrthread = values[1];
__pyx_v_greenlet_deleted = values[2];
}
goto __pyx_L4_argument_unpacking_done;
__pyx_L5_argtuple_error:;
<span class='pyx_c_api'>__Pyx_RaiseArgtupleInvalid</span>("__init__", 1, 3, 3, <span class='py_macro_api'>PyTuple_GET_SIZE</span>(__pyx_args)); <span class='error_goto'>__PYX_ERR(0, 236, __pyx_L3_error)</span>
__pyx_L3_error:;
<span class='pyx_c_api'>__Pyx_AddTraceback</span>("gevent._local._local_deleted.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
<span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
return -1;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_6gevent_6_local_14_local_deleted___init__(((struct __pyx_obj_6gevent_6_local__local_deleted *)__pyx_v_self), __pyx_v_key, __pyx_v_wrthread, __pyx_v_greenlet_deleted);
/* function exit code */
<span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
return __pyx_r;
}
static int __pyx_pf_6gevent_6_local_14_local_deleted___init__(struct __pyx_obj_6gevent_6_local__local_deleted *__pyx_v_self, PyObject *__pyx_v_key, PyObject *__pyx_v_wrthread, PyObject *__pyx_v_greenlet_deleted) {
int __pyx_r;
<span class='refnanny'>__Pyx_RefNannyDeclarations</span>
<span class='refnanny'>__Pyx_RefNannySetupContext</span>("__init__", 0);
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_1);
<span class='pyx_c_api'>__Pyx_AddTraceback</span>("gevent._local._local_deleted.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
<span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
return __pyx_r;
}
</pre><pre class="cython line score-12" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">237</span>: self.key = key</pre>
<pre class='cython code score-12 '> if (!(likely(<span class='py_c_api'>PyString_CheckExact</span>(__pyx_v_key))||((__pyx_v_key) == Py_None)||(<span class='py_c_api'>PyErr_Format</span>(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_v_key)-&gt;tp_name), 0))) <span class='error_goto'>__PYX_ERR(0, 237, __pyx_L1_error)</span>
__pyx_t_1 = __pyx_v_key;
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_1);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_1);
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_v_self-&gt;key);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_v_self-&gt;key);
__pyx_v_self-&gt;key = ((PyObject*)__pyx_t_1);
__pyx_t_1 = 0;
</pre><pre class="cython line score-2" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">238</span>: self.wrthread = wrthread</pre>
<pre class='cython code score-2 '> <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_wrthread);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_v_wrthread);
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_v_self-&gt;wrthread);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_v_self-&gt;wrthread);
__pyx_v_self-&gt;wrthread = __pyx_v_wrthread;
</pre><pre class="cython line score-4" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">239</span>: self.greenlet_deleted = greenlet_deleted</pre>
<pre class='cython code score-4 '> if (!(likely(((__pyx_v_greenlet_deleted) == Py_None) || likely(<span class='pyx_c_api'>__Pyx_TypeTest</span>(__pyx_v_greenlet_deleted, __pyx_ptype_6gevent_6_local__greenlet_deleted))))) <span class='error_goto'>__PYX_ERR(0, 239, __pyx_L1_error)</span>
__pyx_t_1 = __pyx_v_greenlet_deleted;
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_1);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_1);
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_v_self-&gt;greenlet_deleted);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(((PyObject *)__pyx_v_self-&gt;greenlet_deleted));
__pyx_v_self-&gt;greenlet_deleted = ((struct __pyx_obj_6gevent_6_local__greenlet_deleted *)__pyx_t_1);
__pyx_t_1 = 0;
</pre><pre class="cython line score-0">&#xA0;<span class="">240</span>: </pre>
<pre class="cython line score-26" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">241</span>: def __call__(self, _unused):</pre>
<pre class='cython code score-26 '>/* Python wrapper */
static PyObject *__pyx_pw_6gevent_6_local_14_local_deleted_3__call__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pw_6gevent_6_local_14_local_deleted_3__call__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
CYTHON_UNUSED PyObject *__pyx_v__unused = 0;
PyObject *__pyx_r = 0;
<span class='refnanny'>__Pyx_RefNannyDeclarations</span>
<span class='refnanny'>__Pyx_RefNannySetupContext</span>("__call__ (wrapper)", 0);
{
static PyObject **__pyx_pyargnames[] = {&amp;__pyx_n_s_unused,0};
PyObject* values[1] = {0};
if (unlikely(__pyx_kwds)) {
Py_ssize_t kw_args;
const Py_ssize_t pos_args = <span class='py_macro_api'>PyTuple_GET_SIZE</span>(__pyx_args);
switch (pos_args) {
case 1: values[0] = <span class='py_macro_api'>PyTuple_GET_ITEM</span>(__pyx_args, 0);
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
kw_args = <span class='py_c_api'>PyDict_Size</span>(__pyx_kwds);
switch (pos_args) {
case 0:
if (likely((values[0] = <span class='pyx_c_api'>__Pyx_PyDict_GetItemStr</span>(__pyx_kwds, __pyx_n_s_unused)) != 0)) kw_args--;
else goto __pyx_L5_argtuple_error;
}
if (unlikely(kw_args &gt; 0)) {
if (unlikely(<span class='pyx_c_api'>__Pyx_ParseOptionalKeywords</span>(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__call__") &lt; 0)) <span class='error_goto'>__PYX_ERR(0, 241, __pyx_L3_error)</span>
}
} else if (<span class='py_macro_api'>PyTuple_GET_SIZE</span>(__pyx_args) != 1) {
goto __pyx_L5_argtuple_error;
} else {
values[0] = <span class='py_macro_api'>PyTuple_GET_ITEM</span>(__pyx_args, 0);
}
__pyx_v__unused = values[0];
}
goto __pyx_L4_argument_unpacking_done;
__pyx_L5_argtuple_error:;
<span class='pyx_c_api'>__Pyx_RaiseArgtupleInvalid</span>("__call__", 1, 1, 1, <span class='py_macro_api'>PyTuple_GET_SIZE</span>(__pyx_args)); <span class='error_goto'>__PYX_ERR(0, 241, __pyx_L3_error)</span>
__pyx_L3_error:;
<span class='pyx_c_api'>__Pyx_AddTraceback</span>("gevent._local._local_deleted.__call__", __pyx_clineno, __pyx_lineno, __pyx_filename);
<span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
return NULL;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_6gevent_6_local_14_local_deleted_2__call__(((struct __pyx_obj_6gevent_6_local__local_deleted *)__pyx_v_self), __pyx_v__unused);
/* function exit code */
<span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
return __pyx_r;
}
static PyObject *__pyx_pf_6gevent_6_local_14_local_deleted_2__call__(struct __pyx_obj_6gevent_6_local__local_deleted *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v__unused) {
PyObject *__pyx_v_thread = NULL;
PyObject *__pyx_v_unlink = NULL;
PyObject *__pyx_r = NULL;
<span class='refnanny'>__Pyx_RefNannyDeclarations</span>
<span class='refnanny'>__Pyx_RefNannySetupContext</span>("__call__", 0);
/* … */
/* function exit code */
__pyx_r = Py_None; <span class='pyx_macro_api'>__Pyx_INCREF</span>(Py_None);
goto __pyx_L0;
__pyx_L1_error:;
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_1);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_2);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_3);
<span class='pyx_c_api'>__Pyx_AddTraceback</span>("gevent._local._local_deleted.__call__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_thread);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_unlink);
<span class='refnanny'>__Pyx_XGIVEREF</span>(__pyx_r);
<span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
return __pyx_r;
}
</pre><pre class="cython line score-17" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">242</span>: thread = self.wrthread()</pre>
<pre class='cython code score-17 '> <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_self-&gt;wrthread);
__pyx_t_2 = __pyx_v_self-&gt;wrthread; __pyx_t_3 = NULL;
if (CYTHON_UNPACK_METHODS &amp;&amp; likely(<span class='py_c_api'>PyMethod_Check</span>(__pyx_t_2))) {
__pyx_t_3 = <span class='py_macro_api'>PyMethod_GET_SELF</span>(__pyx_t_2);
if (likely(__pyx_t_3)) {
PyObject* function = <span class='py_macro_api'>PyMethod_GET_FUNCTION</span>(__pyx_t_2);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_3);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(function);
<span class='pyx_macro_api'>__Pyx_DECREF_SET</span>(__pyx_t_2, function);
}
}
__pyx_t_1 = (__pyx_t_3) ? <span class='pyx_c_api'>__Pyx_PyObject_CallOneArg</span>(__pyx_t_2, __pyx_t_3) : <span class='pyx_c_api'>__Pyx_PyObject_CallNoArg</span>(__pyx_t_2);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_1)) <span class='error_goto'>__PYX_ERR(0, 242, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
__pyx_v_thread = __pyx_t_1;
__pyx_t_1 = 0;
</pre><pre class="cython line score-0" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">243</span>: if thread is not None:</pre>
<pre class='cython code score-0 '> __pyx_t_4 = (__pyx_v_thread != Py_None);
__pyx_t_5 = (__pyx_t_4 != 0);
if (__pyx_t_5) {
/* … */
}
</pre><pre class="cython line score-4" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">244</span>: try:</pre>
<pre class='cython code score-4 '> {
/*try:*/ {
/* … */
}
/* … */
<span class='refnanny'>__Pyx_XGIVEREF</span>(__pyx_t_6);
<span class='refnanny'>__Pyx_XGIVEREF</span>(__pyx_t_7);
<span class='refnanny'>__Pyx_XGIVEREF</span>(__pyx_t_8);
<span class='pyx_c_api'>__Pyx_ExceptionReset</span>(__pyx_t_6, __pyx_t_7, __pyx_t_8);
goto __pyx_L1_error;
__pyx_L5_exception_handled:;
<span class='refnanny'>__Pyx_XGIVEREF</span>(__pyx_t_6);
<span class='refnanny'>__Pyx_XGIVEREF</span>(__pyx_t_7);
<span class='refnanny'>__Pyx_XGIVEREF</span>(__pyx_t_8);
<span class='pyx_c_api'>__Pyx_ExceptionReset</span>(__pyx_t_6, __pyx_t_7, __pyx_t_8);
__pyx_L9_try_end:;
}
</pre><pre class="cython line score-2" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">245</span>: unlink = thread.unlink</pre>
<pre class='cython code score-2 '> __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(__pyx_v_thread, __pyx_n_s_unlink);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 245, __pyx_L4_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
__pyx_v_unlink = __pyx_t_1;
__pyx_t_1 = 0;
</pre><pre class="cython line score-4" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">246</span>: except AttributeError:</pre>
<pre class='cython code score-4 '> __pyx_t_9 = <span class='pyx_c_api'>__Pyx_PyErr_ExceptionMatches</span>(__pyx_builtin_AttributeError);
if (__pyx_t_9) {
<span class='pyx_c_api'>__Pyx_ErrRestore</span>(0,0,0);
goto __pyx_L5_exception_handled;
}
goto __pyx_L6_except_error;
__pyx_L6_except_error:;
</pre><pre class="cython line score-0">&#xA0;<span class="">247</span>: pass</pre>
<pre class="cython line score-0">&#xA0;<span class="">248</span>: else:</pre>
<pre class="cython line score-22" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">249</span>: unlink(self.greenlet_deleted)</pre>
<pre class='cython code score-22 '> /*else:*/ {
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_unlink);
__pyx_t_2 = __pyx_v_unlink; __pyx_t_3 = NULL;
if (CYTHON_UNPACK_METHODS &amp;&amp; likely(<span class='py_c_api'>PyMethod_Check</span>(__pyx_t_2))) {
__pyx_t_3 = <span class='py_macro_api'>PyMethod_GET_SELF</span>(__pyx_t_2);
if (likely(__pyx_t_3)) {
PyObject* function = <span class='py_macro_api'>PyMethod_GET_FUNCTION</span>(__pyx_t_2);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_3);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(function);
<span class='pyx_macro_api'>__Pyx_DECREF_SET</span>(__pyx_t_2, function);
}
}
__pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, ((PyObject *)__pyx_v_self-&gt;greenlet_deleted)) : <span class='pyx_c_api'>__Pyx_PyObject_CallOneArg</span>(__pyx_t_2, ((PyObject *)__pyx_v_self-&gt;greenlet_deleted));
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_1)) <span class='error_goto'>__PYX_ERR(0, 249, __pyx_L6_except_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
}
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_6); __pyx_t_6 = 0;
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_7); __pyx_t_7 = 0;
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_8); __pyx_t_8 = 0;
goto __pyx_L9_try_end;
__pyx_L4_error:;
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_3); __pyx_t_3 = 0;
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
</pre><pre class="cython line score-8" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">250</span>: del thread.__dict__[self.key]</pre>
<pre class='cython code score-8 '> __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(__pyx_v_thread, __pyx_n_s_dict);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 250, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
if (unlikely(<span class='py_c_api'>PyObject_DelItem</span>(__pyx_t_1, __pyx_v_self-&gt;key) &lt; 0)) <span class='error_goto'>__PYX_ERR(0, 250, __pyx_L1_error)</span>
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
</pre><pre class="cython line score-0">&#xA0;<span class="">251</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">252</span>: class _localimpl(object):</pre>
<pre class="cython line score-0">&#xA0;<span class="">253</span>: """A class managing thread-local dicts"""</pre>
<pre class="cython line score-15" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">254</span>: __slots__ = ('key', 'dicts',</pre>
<pre class='cython code score-15 '> if (<span class='py_c_api'>PyDict_SetItem</span>((PyObject *)__pyx_ptype_6gevent_6_local__localimpl-&gt;tp_dict, __pyx_n_s_slots, __pyx_tuple__6) &lt; 0) <span class='error_goto'>__PYX_ERR(0, 254, __pyx_L1_error)</span>
<span class='py_c_api'>PyType_Modified</span>(__pyx_ptype_6gevent_6_local__localimpl);
/* … */
__pyx_tuple__6 = <span class='py_c_api'>PyTuple_Pack</span>(6, __pyx_n_s_key, __pyx_n_s_dicts, __pyx_n_s_localargs, __pyx_n_s_localkwargs, __pyx_n_s_localtypeid, __pyx_n_s_weakref_2);<span class='error_goto'> if (unlikely(!__pyx_tuple__6)) __PYX_ERR(0, 254, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_tuple__6);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_tuple__6);
</pre><pre class="cython line score-0">&#xA0;<span class="">255</span>: 'localargs', 'localkwargs',</pre>
<pre class="cython line score-0">&#xA0;<span class="">256</span>: 'localtypeid',</pre>
<pre class="cython line score-0">&#xA0;<span class="">257</span>: '__weakref__',)</pre>
<pre class="cython line score-0">&#xA0;<span class="">258</span>: </pre>
<pre class="cython line score-41" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">259</span>: def __init__(self, args, kwargs, local_type, id_local):</pre>
<pre class='cython code score-41 '>/* Python wrapper */
static int __pyx_pw_6gevent_6_local_10_localimpl_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_6gevent_6_local_10_localimpl_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
PyObject *__pyx_v_args = 0;
PyObject *__pyx_v_kwargs = 0;
PyObject *__pyx_v_local_type = 0;
PyObject *__pyx_v_id_local = 0;
int __pyx_r;
<span class='refnanny'>__Pyx_RefNannyDeclarations</span>
<span class='refnanny'>__Pyx_RefNannySetupContext</span>("__init__ (wrapper)", 0);
{
static PyObject **__pyx_pyargnames[] = {&amp;__pyx_n_s_args,&amp;__pyx_n_s_kwargs,&amp;__pyx_n_s_local_type,&amp;__pyx_n_s_id_local,0};
PyObject* values[4] = {0,0,0,0};
if (unlikely(__pyx_kwds)) {
Py_ssize_t kw_args;
const Py_ssize_t pos_args = <span class='py_macro_api'>PyTuple_GET_SIZE</span>(__pyx_args);
switch (pos_args) {
case 4: values[3] = <span class='py_macro_api'>PyTuple_GET_ITEM</span>(__pyx_args, 3);
CYTHON_FALLTHROUGH;
case 3: values[2] = <span class='py_macro_api'>PyTuple_GET_ITEM</span>(__pyx_args, 2);
CYTHON_FALLTHROUGH;
case 2: values[1] = <span class='py_macro_api'>PyTuple_GET_ITEM</span>(__pyx_args, 1);
CYTHON_FALLTHROUGH;
case 1: values[0] = <span class='py_macro_api'>PyTuple_GET_ITEM</span>(__pyx_args, 0);
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
kw_args = <span class='py_c_api'>PyDict_Size</span>(__pyx_kwds);
switch (pos_args) {
case 0:
if (likely((values[0] = <span class='pyx_c_api'>__Pyx_PyDict_GetItemStr</span>(__pyx_kwds, __pyx_n_s_args)) != 0)) kw_args--;
else goto __pyx_L5_argtuple_error;
CYTHON_FALLTHROUGH;
case 1:
if (likely((values[1] = <span class='pyx_c_api'>__Pyx_PyDict_GetItemStr</span>(__pyx_kwds, __pyx_n_s_kwargs)) != 0)) kw_args--;
else {
<span class='pyx_c_api'>__Pyx_RaiseArgtupleInvalid</span>("__init__", 1, 4, 4, 1); <span class='error_goto'>__PYX_ERR(0, 259, __pyx_L3_error)</span>
}
CYTHON_FALLTHROUGH;
case 2:
if (likely((values[2] = <span class='pyx_c_api'>__Pyx_PyDict_GetItemStr</span>(__pyx_kwds, __pyx_n_s_local_type)) != 0)) kw_args--;
else {
<span class='pyx_c_api'>__Pyx_RaiseArgtupleInvalid</span>("__init__", 1, 4, 4, 2); <span class='error_goto'>__PYX_ERR(0, 259, __pyx_L3_error)</span>
}
CYTHON_FALLTHROUGH;
case 3:
if (likely((values[3] = <span class='pyx_c_api'>__Pyx_PyDict_GetItemStr</span>(__pyx_kwds, __pyx_n_s_id_local)) != 0)) kw_args--;
else {
<span class='pyx_c_api'>__Pyx_RaiseArgtupleInvalid</span>("__init__", 1, 4, 4, 3); <span class='error_goto'>__PYX_ERR(0, 259, __pyx_L3_error)</span>
}
}
if (unlikely(kw_args &gt; 0)) {
if (unlikely(<span class='pyx_c_api'>__Pyx_ParseOptionalKeywords</span>(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") &lt; 0)) <span class='error_goto'>__PYX_ERR(0, 259, __pyx_L3_error)</span>
}
} else if (<span class='py_macro_api'>PyTuple_GET_SIZE</span>(__pyx_args) != 4) {
goto __pyx_L5_argtuple_error;
} else {
values[0] = <span class='py_macro_api'>PyTuple_GET_ITEM</span>(__pyx_args, 0);
values[1] = <span class='py_macro_api'>PyTuple_GET_ITEM</span>(__pyx_args, 1);
values[2] = <span class='py_macro_api'>PyTuple_GET_ITEM</span>(__pyx_args, 2);
values[3] = <span class='py_macro_api'>PyTuple_GET_ITEM</span>(__pyx_args, 3);
}
__pyx_v_args = values[0];
__pyx_v_kwargs = values[1];
__pyx_v_local_type = values[2];
__pyx_v_id_local = values[3];
}
goto __pyx_L4_argument_unpacking_done;
__pyx_L5_argtuple_error:;
<span class='pyx_c_api'>__Pyx_RaiseArgtupleInvalid</span>("__init__", 1, 4, 4, <span class='py_macro_api'>PyTuple_GET_SIZE</span>(__pyx_args)); <span class='error_goto'>__PYX_ERR(0, 259, __pyx_L3_error)</span>
__pyx_L3_error:;
<span class='pyx_c_api'>__Pyx_AddTraceback</span>("gevent._local._localimpl.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
<span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
return -1;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_6gevent_6_local_10_localimpl___init__(((struct __pyx_obj_6gevent_6_local__localimpl *)__pyx_v_self), __pyx_v_args, __pyx_v_kwargs, __pyx_v_local_type, __pyx_v_id_local);
/* function exit code */
<span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
return __pyx_r;
}
static int __pyx_pf_6gevent_6_local_10_localimpl___init__(struct __pyx_obj_6gevent_6_local__localimpl *__pyx_v_self, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs, PyObject *__pyx_v_local_type, PyObject *__pyx_v_id_local) {
PyGreenlet *__pyx_v_greenlet = NULL;
int __pyx_r;
<span class='refnanny'>__Pyx_RefNannyDeclarations</span>
<span class='refnanny'>__Pyx_RefNannySetupContext</span>("__init__", 0);
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_1);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_2);
<span class='pyx_c_api'>__Pyx_AddTraceback</span>("gevent._local._localimpl.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
<span class='pyx_macro_api'>__Pyx_XDECREF</span>((PyObject *)__pyx_v_greenlet);
<span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
return __pyx_r;
}
</pre><pre class="cython line score-22" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">260</span>: self.key = key_prefix + str(id(self))</pre>
<pre class='cython code score-22 '> __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyObject_CallOneArg</span>(__pyx_builtin_id, ((PyObject *)__pyx_v_self));<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 260, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
__pyx_t_2 = <span class='pyx_c_api'>__Pyx_PyObject_CallOneArg</span>(((PyObject *)(&amp;PyString_Type)), __pyx_t_1);<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 260, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
__pyx_t_1 = <span class='py_c_api'>PyNumber_Add</span>(__pyx_v_6gevent_6_local_key_prefix, __pyx_t_2);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 260, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
if (!(likely(<span class='py_c_api'>PyString_CheckExact</span>(__pyx_t_1))||((__pyx_t_1) == Py_None)||(<span class='py_c_api'>PyErr_Format</span>(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_1)-&gt;tp_name), 0))) <span class='error_goto'>__PYX_ERR(0, 260, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_1);
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_v_self-&gt;key);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_v_self-&gt;key);
__pyx_v_self-&gt;key = ((PyObject*)__pyx_t_1);
__pyx_t_1 = 0;
</pre><pre class="cython line score-0">&#xA0;<span class="">261</span>: # { id(greenlet) -&gt; _localimpl_dict_entry(ref(greenlet), greenlet-local dict) }</pre>
<pre class="cython line score-3" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">262</span>: self.dicts = _wrefdict()</pre>
<pre class='cython code score-3 '> __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyObject_CallNoArg</span>(((PyObject *)__pyx_ptype_6gevent_6_local__wrefdict));<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 262, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_1);
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_v_self-&gt;dicts);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_v_self-&gt;dicts);
__pyx_v_self-&gt;dicts = ((PyObject*)__pyx_t_1);
__pyx_t_1 = 0;
</pre><pre class="cython line score-12" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">263</span>: self.localargs = args</pre>
<pre class='cython code score-12 '> if (!(likely(<span class='py_c_api'>PyTuple_CheckExact</span>(__pyx_v_args))||((__pyx_v_args) == Py_None)||(<span class='py_c_api'>PyErr_Format</span>(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v_args)-&gt;tp_name), 0))) <span class='error_goto'>__PYX_ERR(0, 263, __pyx_L1_error)</span>
__pyx_t_1 = __pyx_v_args;
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_1);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_1);
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_v_self-&gt;localargs);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_v_self-&gt;localargs);
__pyx_v_self-&gt;localargs = ((PyObject*)__pyx_t_1);
__pyx_t_1 = 0;
</pre><pre class="cython line score-12" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">264</span>: self.localkwargs = kwargs</pre>
<pre class='cython code score-12 '> if (!(likely(<span class='py_c_api'>PyDict_CheckExact</span>(__pyx_v_kwargs))||((__pyx_v_kwargs) == Py_None)||(<span class='py_c_api'>PyErr_Format</span>(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_v_kwargs)-&gt;tp_name), 0))) <span class='error_goto'>__PYX_ERR(0, 264, __pyx_L1_error)</span>
__pyx_t_1 = __pyx_v_kwargs;
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_1);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_1);
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_v_self-&gt;localkwargs);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_v_self-&gt;localkwargs);
__pyx_v_self-&gt;localkwargs = ((PyObject*)__pyx_t_1);
__pyx_t_1 = 0;
</pre><pre class="cython line score-10" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">265</span>: self.localtypeid = local_type, id_local</pre>
<pre class='cython code score-10 '> __pyx_t_1 = <span class='py_c_api'>PyTuple_New</span>(2);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 265, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_local_type);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_v_local_type);
<span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_1, 0, __pyx_v_local_type);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_id_local);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_v_id_local);
<span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_1, 1, __pyx_v_id_local);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_1);
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_v_self-&gt;localtypeid);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_v_self-&gt;localtypeid);
__pyx_v_self-&gt;localtypeid = ((PyObject*)__pyx_t_1);
__pyx_t_1 = 0;
</pre><pre class="cython line score-0">&#xA0;<span class="">266</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">267</span>: # We need to create the thread dict in anticipation of</pre>
<pre class="cython line score-0">&#xA0;<span class="">268</span>: # __init__ being called, to make sure we don't call it</pre>
<pre class="cython line score-0">&#xA0;<span class="">269</span>: # again ourselves. MUST do this before setting any attributes.</pre>
<pre class="cython line score-0" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">270</span>: greenlet = getcurrent() # pylint:disable=undefined-variable</pre>
<pre class='cython code score-0 '> __pyx_t_1 = ((PyObject *)__pyx_f_6gevent_6_local_getcurrent());<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 270, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
__pyx_v_greenlet = ((PyGreenlet *)__pyx_t_1);
__pyx_t_1 = 0;
</pre><pre class="cython line score-4" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">271</span>: _localimpl_create_dict(self, greenlet, id(greenlet))</pre>
<pre class='cython code score-4 '> __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyObject_CallOneArg</span>(__pyx_builtin_id, ((PyObject *)__pyx_v_greenlet));<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 271, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
__pyx_t_2 = __pyx_f_6gevent_6_local__localimpl_create_dict(__pyx_v_self, __pyx_v_greenlet, __pyx_t_1);<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 271, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
</pre><pre class="cython line score-0">&#xA0;<span class="">272</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">273</span>: class _localimpl_dict_entry(object):</pre>
<pre class="cython line score-0">&#xA0;<span class="">274</span>: """</pre>
<pre class="cython line score-0">&#xA0;<span class="">275</span>: The object that goes in the ``dicts`` of ``_localimpl``</pre>
<pre class="cython line score-0">&#xA0;<span class="">276</span>: object for each thread.</pre>
<pre class="cython line score-0">&#xA0;<span class="">277</span>: """</pre>
<pre class="cython line score-0">&#xA0;<span class="">278</span>: # This is a class, not just a tuple, so that cython can optimize</pre>
<pre class="cython line score-0">&#xA0;<span class="">279</span>: # attribute access</pre>
<pre class="cython line score-15" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">280</span>: __slots__ = ('wrgreenlet', 'localdict')</pre>
<pre class='cython code score-15 '> if (<span class='py_c_api'>PyDict_SetItem</span>((PyObject *)__pyx_ptype_6gevent_6_local__localimpl_dict_entry-&gt;tp_dict, __pyx_n_s_slots, __pyx_tuple__7) &lt; 0) <span class='error_goto'>__PYX_ERR(0, 280, __pyx_L1_error)</span>
<span class='py_c_api'>PyType_Modified</span>(__pyx_ptype_6gevent_6_local__localimpl_dict_entry);
/* … */
__pyx_tuple__7 = <span class='py_c_api'>PyTuple_Pack</span>(2, __pyx_n_s_wrgreenlet, __pyx_n_s_localdict);<span class='error_goto'> if (unlikely(!__pyx_tuple__7)) __PYX_ERR(0, 280, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_tuple__7);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_tuple__7);
</pre><pre class="cython line score-0">&#xA0;<span class="">281</span>: </pre>
<pre class="cython line score-27" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">282</span>: def __init__(self, wrgreenlet, localdict):</pre>
<pre class='cython code score-27 '>/* Python wrapper */
static int __pyx_pw_6gevent_6_local_21_localimpl_dict_entry_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_6gevent_6_local_21_localimpl_dict_entry_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
PyObject *__pyx_v_wrgreenlet = 0;
PyObject *__pyx_v_localdict = 0;
int __pyx_r;
<span class='refnanny'>__Pyx_RefNannyDeclarations</span>
<span class='refnanny'>__Pyx_RefNannySetupContext</span>("__init__ (wrapper)", 0);
{
static PyObject **__pyx_pyargnames[] = {&amp;__pyx_n_s_wrgreenlet,&amp;__pyx_n_s_localdict,0};
PyObject* values[2] = {0,0};
if (unlikely(__pyx_kwds)) {
Py_ssize_t kw_args;
const Py_ssize_t pos_args = <span class='py_macro_api'>PyTuple_GET_SIZE</span>(__pyx_args);
switch (pos_args) {
case 2: values[1] = <span class='py_macro_api'>PyTuple_GET_ITEM</span>(__pyx_args, 1);
CYTHON_FALLTHROUGH;
case 1: values[0] = <span class='py_macro_api'>PyTuple_GET_ITEM</span>(__pyx_args, 0);
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
kw_args = <span class='py_c_api'>PyDict_Size</span>(__pyx_kwds);
switch (pos_args) {
case 0:
if (likely((values[0] = <span class='pyx_c_api'>__Pyx_PyDict_GetItemStr</span>(__pyx_kwds, __pyx_n_s_wrgreenlet)) != 0)) kw_args--;
else goto __pyx_L5_argtuple_error;
CYTHON_FALLTHROUGH;
case 1:
if (likely((values[1] = <span class='pyx_c_api'>__Pyx_PyDict_GetItemStr</span>(__pyx_kwds, __pyx_n_s_localdict)) != 0)) kw_args--;
else {
<span class='pyx_c_api'>__Pyx_RaiseArgtupleInvalid</span>("__init__", 1, 2, 2, 1); <span class='error_goto'>__PYX_ERR(0, 282, __pyx_L3_error)</span>
}
}
if (unlikely(kw_args &gt; 0)) {
if (unlikely(<span class='pyx_c_api'>__Pyx_ParseOptionalKeywords</span>(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") &lt; 0)) <span class='error_goto'>__PYX_ERR(0, 282, __pyx_L3_error)</span>
}
} else if (<span class='py_macro_api'>PyTuple_GET_SIZE</span>(__pyx_args) != 2) {
goto __pyx_L5_argtuple_error;
} else {
values[0] = <span class='py_macro_api'>PyTuple_GET_ITEM</span>(__pyx_args, 0);
values[1] = <span class='py_macro_api'>PyTuple_GET_ITEM</span>(__pyx_args, 1);
}
__pyx_v_wrgreenlet = values[0];
__pyx_v_localdict = values[1];
}
goto __pyx_L4_argument_unpacking_done;
__pyx_L5_argtuple_error:;
<span class='pyx_c_api'>__Pyx_RaiseArgtupleInvalid</span>("__init__", 1, 2, 2, <span class='py_macro_api'>PyTuple_GET_SIZE</span>(__pyx_args)); <span class='error_goto'>__PYX_ERR(0, 282, __pyx_L3_error)</span>
__pyx_L3_error:;
<span class='pyx_c_api'>__Pyx_AddTraceback</span>("gevent._local._localimpl_dict_entry.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
<span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
return -1;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_6gevent_6_local_21_localimpl_dict_entry___init__(((struct __pyx_obj_6gevent_6_local__localimpl_dict_entry *)__pyx_v_self), __pyx_v_wrgreenlet, __pyx_v_localdict);
/* function exit code */
<span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
return __pyx_r;
}
static int __pyx_pf_6gevent_6_local_21_localimpl_dict_entry___init__(struct __pyx_obj_6gevent_6_local__localimpl_dict_entry *__pyx_v_self, PyObject *__pyx_v_wrgreenlet, PyObject *__pyx_v_localdict) {
int __pyx_r;
<span class='refnanny'>__Pyx_RefNannyDeclarations</span>
<span class='refnanny'>__Pyx_RefNannySetupContext</span>("__init__", 0);
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_1);
<span class='pyx_c_api'>__Pyx_AddTraceback</span>("gevent._local._localimpl_dict_entry.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
<span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
return __pyx_r;
}
</pre><pre class="cython line score-2" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">283</span>: self.wrgreenlet = wrgreenlet</pre>
<pre class='cython code score-2 '> <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_wrgreenlet);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_v_wrgreenlet);
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_v_self-&gt;wrgreenlet);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_v_self-&gt;wrgreenlet);
__pyx_v_self-&gt;wrgreenlet = __pyx_v_wrgreenlet;
</pre><pre class="cython line score-12" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">284</span>: self.localdict = localdict</pre>
<pre class='cython code score-12 '> if (!(likely(<span class='py_c_api'>PyDict_CheckExact</span>(__pyx_v_localdict))||((__pyx_v_localdict) == Py_None)||(<span class='py_c_api'>PyErr_Format</span>(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_v_localdict)-&gt;tp_name), 0))) <span class='error_goto'>__PYX_ERR(0, 284, __pyx_L1_error)</span>
__pyx_t_1 = __pyx_v_localdict;
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_1);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_1);
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_v_self-&gt;localdict);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_v_self-&gt;localdict);
__pyx_v_self-&gt;localdict = ((PyObject*)__pyx_t_1);
__pyx_t_1 = 0;
</pre><pre class="cython line score-0">&#xA0;<span class="">285</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">286</span>: # We use functions instead of methods so that they can be cdef'd in</pre>
<pre class="cython line score-0">&#xA0;<span class="">287</span>: # local.pxd; if they were cdef'd as methods, they would cause</pre>
<pre class="cython line score-0">&#xA0;<span class="">288</span>: # the creation of a pointer and a vtable. This happens</pre>
<pre class="cython line score-0">&#xA0;<span class="">289</span>: # even if we declare the class @cython.final. functions thus save memory overhead</pre>
<pre class="cython line score-0">&#xA0;<span class="">290</span>: # (but not pointer chasing overhead; the vtable isn't used when we declare</pre>
<pre class="cython line score-0">&#xA0;<span class="">291</span>: # the class final).</pre>
<pre class="cython line score-0">&#xA0;<span class="">292</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">293</span>: </pre>
<pre class="cython line score-14" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">294</span>: def _localimpl_create_dict(self, greenlet, id_greenlet):</pre>
<pre class='cython code score-14 '>static PyObject *__pyx_f_6gevent_6_local__localimpl_create_dict(struct __pyx_obj_6gevent_6_local__localimpl *__pyx_v_self, PyGreenlet *__pyx_v_greenlet, PyObject *__pyx_v_id_greenlet) {
PyObject *__pyx_v_localdict = 0;
PyObject *__pyx_v_key = 0;
struct __pyx_obj_6gevent_6_local__greenlet_deleted *__pyx_v_greenlet_deleted = 0;
struct __pyx_obj_6gevent_6_local__local_deleted *__pyx_v_local_deleted = 0;
PyObject *__pyx_v_wrdicts = NULL;
PyObject *__pyx_v_rawlink = NULL;
PyObject *__pyx_v_wrthread = NULL;
PyObject *__pyx_v_wrlocal = NULL;
PyObject *__pyx_r = NULL;
<span class='refnanny'>__Pyx_RefNannyDeclarations</span>
<span class='refnanny'>__Pyx_RefNannySetupContext</span>("_localimpl_create_dict", 0);
/* … */
/* function exit code */
__pyx_L1_error:;
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_1);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_2);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_3);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_7);
<span class='pyx_c_api'>__Pyx_AddTraceback</span>("gevent._local._localimpl_create_dict", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_localdict);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_key);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>((PyObject *)__pyx_v_greenlet_deleted);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>((PyObject *)__pyx_v_local_deleted);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_wrdicts);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_rawlink);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_wrthread);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_wrlocal);
<span class='refnanny'>__Pyx_XGIVEREF</span>(__pyx_r);
<span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
return __pyx_r;
}
</pre><pre class="cython line score-0">&#xA0;<span class="">295</span>: """Create a new dict for the current thread, and return it."""</pre>
<pre class="cython line score-2" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">296</span>: localdict = {}</pre>
<pre class='cython code score-2 '> __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyDict_NewPresized</span>(0);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 296, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
__pyx_v_localdict = ((PyObject*)__pyx_t_1);
__pyx_t_1 = 0;
</pre><pre class="cython line score-1" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">297</span>: key = self.key</pre>
<pre class='cython code score-1 '> __pyx_t_1 = __pyx_v_self-&gt;key;
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_1);
__pyx_v_key = ((PyObject*)__pyx_t_1);
__pyx_t_1 = 0;
</pre><pre class="cython line score-0">&#xA0;<span class="">298</span>: </pre>
<pre class="cython line score-15" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">299</span>: wrdicts = ref(self.dicts)</pre>
<pre class='cython code score-15 '> <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_6gevent_6_local_ref);
__pyx_t_2 = __pyx_v_6gevent_6_local_ref; __pyx_t_3 = NULL;
if (CYTHON_UNPACK_METHODS &amp;&amp; unlikely(<span class='py_c_api'>PyMethod_Check</span>(__pyx_t_2))) {
__pyx_t_3 = <span class='py_macro_api'>PyMethod_GET_SELF</span>(__pyx_t_2);
if (likely(__pyx_t_3)) {
PyObject* function = <span class='py_macro_api'>PyMethod_GET_FUNCTION</span>(__pyx_t_2);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_3);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(function);
<span class='pyx_macro_api'>__Pyx_DECREF_SET</span>(__pyx_t_2, function);
}
}
__pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_v_self-&gt;dicts) : <span class='pyx_c_api'>__Pyx_PyObject_CallOneArg</span>(__pyx_t_2, __pyx_v_self-&gt;dicts);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_1)) <span class='error_goto'>__PYX_ERR(0, 299, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
__pyx_v_wrdicts = __pyx_t_1;
__pyx_t_1 = 0;
</pre><pre class="cython line score-0">&#xA0;<span class="">300</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">301</span>: # When the greenlet is deleted, remove the local dict.</pre>
<pre class="cython line score-0">&#xA0;<span class="">302</span>: # Note that this is suboptimal if the greenlet object gets</pre>
<pre class="cython line score-0">&#xA0;<span class="">303</span>: # caught in a reference loop. We would like to be called</pre>
<pre class="cython line score-0">&#xA0;<span class="">304</span>: # as soon as the OS-level greenlet ends instead.</pre>
<pre class="cython line score-0">&#xA0;<span class="">305</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">306</span>: # If we are working with a gevent.greenlet.Greenlet, we</pre>
<pre class="cython line score-0">&#xA0;<span class="">307</span>: # can pro-actively clear out with a link, avoiding the</pre>
<pre class="cython line score-0">&#xA0;<span class="">308</span>: # issue described above. Use rawlink to avoid spawning any</pre>
<pre class="cython line score-0">&#xA0;<span class="">309</span>: # more greenlets.</pre>
<pre class="cython line score-12" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">310</span>: greenlet_deleted = _greenlet_deleted(id_greenlet, wrdicts)</pre>
<pre class='cython code score-12 '> __pyx_t_1 = <span class='py_c_api'>PyTuple_New</span>(2);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 310, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_id_greenlet);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_v_id_greenlet);
<span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_1, 0, __pyx_v_id_greenlet);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_wrdicts);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_v_wrdicts);
<span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_1, 1, __pyx_v_wrdicts);
__pyx_t_2 = <span class='pyx_c_api'>__Pyx_PyObject_Call</span>(((PyObject *)__pyx_ptype_6gevent_6_local__greenlet_deleted), __pyx_t_1, NULL);<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 310, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
__pyx_v_greenlet_deleted = ((struct __pyx_obj_6gevent_6_local__greenlet_deleted *)__pyx_t_2);
__pyx_t_2 = 0;
</pre><pre class="cython line score-0">&#xA0;<span class="">311</span>: </pre>
<pre class="cython line score-0" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">312</span>: rawlink = getattr(greenlet, 'rawlink', None)</pre>
<pre class='cython code score-0 '> __pyx_t_2 = __Pyx_GetAttr3(((PyObject *)__pyx_v_greenlet), __pyx_n_s_rawlink, Py_None);<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 312, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
__pyx_v_rawlink = __pyx_t_2;
__pyx_t_2 = 0;
</pre><pre class="cython line score-0" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">313</span>: if rawlink is not None:</pre>
<pre class='cython code score-0 '> __pyx_t_4 = (__pyx_v_rawlink != Py_None);
__pyx_t_5 = (__pyx_t_4 != 0);
if (__pyx_t_5) {
/* … */
goto __pyx_L3;
}
</pre><pre class="cython line score-16" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">314</span>: rawlink(greenlet_deleted)</pre>
<pre class='cython code score-16 '> <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_rawlink);
__pyx_t_1 = __pyx_v_rawlink; __pyx_t_3 = NULL;
if (CYTHON_UNPACK_METHODS &amp;&amp; unlikely(<span class='py_c_api'>PyMethod_Check</span>(__pyx_t_1))) {
__pyx_t_3 = <span class='py_macro_api'>PyMethod_GET_SELF</span>(__pyx_t_1);
if (likely(__pyx_t_3)) {
PyObject* function = <span class='py_macro_api'>PyMethod_GET_FUNCTION</span>(__pyx_t_1);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_3);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(function);
<span class='pyx_macro_api'>__Pyx_DECREF_SET</span>(__pyx_t_1, function);
}
}
__pyx_t_2 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_3, ((PyObject *)__pyx_v_greenlet_deleted)) : <span class='pyx_c_api'>__Pyx_PyObject_CallOneArg</span>(__pyx_t_1, ((PyObject *)__pyx_v_greenlet_deleted));
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) <span class='error_goto'>__PYX_ERR(0, 314, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
</pre><pre class="cython line score-15" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">315</span>: wrthread = ref(greenlet)</pre>
<pre class='cython code score-15 '> <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_6gevent_6_local_ref);
__pyx_t_1 = __pyx_v_6gevent_6_local_ref; __pyx_t_3 = NULL;
if (CYTHON_UNPACK_METHODS &amp;&amp; unlikely(<span class='py_c_api'>PyMethod_Check</span>(__pyx_t_1))) {
__pyx_t_3 = <span class='py_macro_api'>PyMethod_GET_SELF</span>(__pyx_t_1);
if (likely(__pyx_t_3)) {
PyObject* function = <span class='py_macro_api'>PyMethod_GET_FUNCTION</span>(__pyx_t_1);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_3);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(function);
<span class='pyx_macro_api'>__Pyx_DECREF_SET</span>(__pyx_t_1, function);
}
}
__pyx_t_2 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_3, ((PyObject *)__pyx_v_greenlet)) : <span class='pyx_c_api'>__Pyx_PyObject_CallOneArg</span>(__pyx_t_1, ((PyObject *)__pyx_v_greenlet));
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_2)) <span class='error_goto'>__PYX_ERR(0, 315, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
__pyx_v_wrthread = __pyx_t_2;
__pyx_t_2 = 0;
</pre><pre class="cython line score-0">&#xA0;<span class="">316</span>: else:</pre>
<pre class="cython line score-38" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">317</span>: wrthread = ref(greenlet, greenlet_deleted)</pre>
<pre class='cython code score-38 '> /*else*/ {
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_6gevent_6_local_ref);
__pyx_t_1 = __pyx_v_6gevent_6_local_ref; __pyx_t_3 = NULL;
__pyx_t_6 = 0;
if (CYTHON_UNPACK_METHODS &amp;&amp; unlikely(<span class='py_c_api'>PyMethod_Check</span>(__pyx_t_1))) {
__pyx_t_3 = <span class='py_macro_api'>PyMethod_GET_SELF</span>(__pyx_t_1);
if (likely(__pyx_t_3)) {
PyObject* function = <span class='py_macro_api'>PyMethod_GET_FUNCTION</span>(__pyx_t_1);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_3);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(function);
<span class='pyx_macro_api'>__Pyx_DECREF_SET</span>(__pyx_t_1, function);
__pyx_t_6 = 1;
}
}
#if CYTHON_FAST_PYCALL
if (<span class='py_c_api'>PyFunction_Check</span>(__pyx_t_1)) {
PyObject *__pyx_temp[3] = {__pyx_t_3, ((PyObject *)__pyx_v_greenlet), ((PyObject *)__pyx_v_greenlet_deleted)};
__pyx_t_2 = <span class='pyx_c_api'>__Pyx_PyFunction_FastCall</span>(__pyx_t_1, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6);<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 317, __pyx_L1_error)</span>
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_3); __pyx_t_3 = 0;
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
} else
#endif
#if CYTHON_FAST_PYCCALL
if (<span class='pyx_c_api'>__Pyx_PyFastCFunction_Check</span>(__pyx_t_1)) {
PyObject *__pyx_temp[3] = {__pyx_t_3, ((PyObject *)__pyx_v_greenlet), ((PyObject *)__pyx_v_greenlet_deleted)};
__pyx_t_2 = <span class='pyx_c_api'>__Pyx_PyCFunction_FastCall</span>(__pyx_t_1, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6);<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 317, __pyx_L1_error)</span>
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_3); __pyx_t_3 = 0;
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
} else
#endif
{
__pyx_t_7 = <span class='py_c_api'>PyTuple_New</span>(2+__pyx_t_6);<span class='error_goto'> if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 317, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_7);
if (__pyx_t_3) {
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_3); <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_7, 0, __pyx_t_3); __pyx_t_3 = NULL;
}
<span class='pyx_macro_api'>__Pyx_INCREF</span>(((PyObject *)__pyx_v_greenlet));
<span class='refnanny'>__Pyx_GIVEREF</span>(((PyObject *)__pyx_v_greenlet));
<span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_7, 0+__pyx_t_6, ((PyObject *)__pyx_v_greenlet));
<span class='pyx_macro_api'>__Pyx_INCREF</span>(((PyObject *)__pyx_v_greenlet_deleted));
<span class='refnanny'>__Pyx_GIVEREF</span>(((PyObject *)__pyx_v_greenlet_deleted));
<span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_7, 1+__pyx_t_6, ((PyObject *)__pyx_v_greenlet_deleted));
__pyx_t_2 = <span class='pyx_c_api'>__Pyx_PyObject_Call</span>(__pyx_t_1, __pyx_t_7, NULL);<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 317, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_7); __pyx_t_7 = 0;
}
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
__pyx_v_wrthread = __pyx_t_2;
__pyx_t_2 = 0;
}
__pyx_L3:;
</pre><pre class="cython line score-0">&#xA0;<span class="">318</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">319</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">320</span>: # When the localimpl is deleted, remove the thread attribute.</pre>
<pre class="cython line score-14" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">321</span>: local_deleted = _local_deleted(key, wrthread, greenlet_deleted)</pre>
<pre class='cython code score-14 '> __pyx_t_2 = <span class='py_c_api'>PyTuple_New</span>(3);<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 321, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_key);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_v_key);
<span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_2, 0, __pyx_v_key);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_wrthread);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_v_wrthread);
<span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_2, 1, __pyx_v_wrthread);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(((PyObject *)__pyx_v_greenlet_deleted));
<span class='refnanny'>__Pyx_GIVEREF</span>(((PyObject *)__pyx_v_greenlet_deleted));
<span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_2, 2, ((PyObject *)__pyx_v_greenlet_deleted));
__pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyObject_Call</span>(((PyObject *)__pyx_ptype_6gevent_6_local__local_deleted), __pyx_t_2, NULL);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 321, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
__pyx_v_local_deleted = ((struct __pyx_obj_6gevent_6_local__local_deleted *)__pyx_t_1);
__pyx_t_1 = 0;
</pre><pre class="cython line score-0">&#xA0;<span class="">322</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">323</span>: </pre>
<pre class="cython line score-38" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">324</span>: wrlocal = ref(self, local_deleted)</pre>
<pre class='cython code score-38 '> <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_6gevent_6_local_ref);
__pyx_t_2 = __pyx_v_6gevent_6_local_ref; __pyx_t_7 = NULL;
__pyx_t_6 = 0;
if (CYTHON_UNPACK_METHODS &amp;&amp; unlikely(<span class='py_c_api'>PyMethod_Check</span>(__pyx_t_2))) {
__pyx_t_7 = <span class='py_macro_api'>PyMethod_GET_SELF</span>(__pyx_t_2);
if (likely(__pyx_t_7)) {
PyObject* function = <span class='py_macro_api'>PyMethod_GET_FUNCTION</span>(__pyx_t_2);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_7);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(function);
<span class='pyx_macro_api'>__Pyx_DECREF_SET</span>(__pyx_t_2, function);
__pyx_t_6 = 1;
}
}
#if CYTHON_FAST_PYCALL
if (<span class='py_c_api'>PyFunction_Check</span>(__pyx_t_2)) {
PyObject *__pyx_temp[3] = {__pyx_t_7, ((PyObject *)__pyx_v_self), ((PyObject *)__pyx_v_local_deleted)};
__pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyFunction_FastCall</span>(__pyx_t_2, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 324, __pyx_L1_error)</span>
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_7); __pyx_t_7 = 0;
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
} else
#endif
#if CYTHON_FAST_PYCCALL
if (<span class='pyx_c_api'>__Pyx_PyFastCFunction_Check</span>(__pyx_t_2)) {
PyObject *__pyx_temp[3] = {__pyx_t_7, ((PyObject *)__pyx_v_self), ((PyObject *)__pyx_v_local_deleted)};
__pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyCFunction_FastCall</span>(__pyx_t_2, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 324, __pyx_L1_error)</span>
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_7); __pyx_t_7 = 0;
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
} else
#endif
{
__pyx_t_3 = <span class='py_c_api'>PyTuple_New</span>(2+__pyx_t_6);<span class='error_goto'> if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 324, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_3);
if (__pyx_t_7) {
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_7); <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_3, 0, __pyx_t_7); __pyx_t_7 = NULL;
}
<span class='pyx_macro_api'>__Pyx_INCREF</span>(((PyObject *)__pyx_v_self));
<span class='refnanny'>__Pyx_GIVEREF</span>(((PyObject *)__pyx_v_self));
<span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_3, 0+__pyx_t_6, ((PyObject *)__pyx_v_self));
<span class='pyx_macro_api'>__Pyx_INCREF</span>(((PyObject *)__pyx_v_local_deleted));
<span class='refnanny'>__Pyx_GIVEREF</span>(((PyObject *)__pyx_v_local_deleted));
<span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_3, 1+__pyx_t_6, ((PyObject *)__pyx_v_local_deleted));
__pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyObject_Call</span>(__pyx_t_2, __pyx_t_3, NULL);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 324, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_3); __pyx_t_3 = 0;
}
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
__pyx_v_wrlocal = __pyx_t_1;
__pyx_t_1 = 0;
</pre><pre class="cython line score-8" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">325</span>: greenlet.__dict__[key] = wrlocal</pre>
<pre class='cython code score-8 '> __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(((PyObject *)__pyx_v_greenlet), __pyx_n_s_dict);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 325, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
if (unlikely(<span class='py_c_api'>PyObject_SetItem</span>(__pyx_t_1, __pyx_v_key, __pyx_v_wrlocal) &lt; 0)) <span class='error_goto'>__PYX_ERR(0, 325, __pyx_L1_error)</span>
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
</pre><pre class="cython line score-0">&#xA0;<span class="">326</span>: </pre>
<pre class="cython line score-23" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">327</span>: self.dicts[id_greenlet] = _localimpl_dict_entry(wrthread, localdict)</pre>
<pre class='cython code score-23 '> __pyx_t_1 = <span class='py_c_api'>PyTuple_New</span>(2);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 327, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_wrthread);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_v_wrthread);
<span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_1, 0, __pyx_v_wrthread);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_localdict);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_v_localdict);
<span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_1, 1, __pyx_v_localdict);
__pyx_t_2 = <span class='pyx_c_api'>__Pyx_PyObject_Call</span>(((PyObject *)__pyx_ptype_6gevent_6_local__localimpl_dict_entry), __pyx_t_1, NULL);<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 327, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(__pyx_v_self-&gt;dicts == Py_None)) {
<span class='py_c_api'>PyErr_SetString</span>(PyExc_TypeError, "'NoneType' object is not subscriptable");
<span class='error_goto'>__PYX_ERR(0, 327, __pyx_L1_error)</span>
}
if (unlikely(<span class='py_c_api'>PyDict_SetItem</span>(__pyx_v_self-&gt;dicts, __pyx_v_id_greenlet, __pyx_t_2) &lt; 0)) <span class='error_goto'>__PYX_ERR(0, 327, __pyx_L1_error)</span>
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
</pre><pre class="cython line score-2" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">328</span>: return localdict</pre>
<pre class='cython code score-2 '> <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_r);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_localdict);
__pyx_r = __pyx_v_localdict;
goto __pyx_L0;
</pre><pre class="cython line score-0">&#xA0;<span class="">329</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">330</span>: </pre>
<pre class="cython line score-3" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">331</span>: _marker = object()</pre>
<pre class='cython code score-3 '> __pyx_t_2 = <span class='pyx_c_api'>__Pyx_PyObject_CallNoArg</span>(__pyx_builtin_object);<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 331, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
<span class='refnanny'>__Pyx_XGOTREF</span>(__pyx_v_6gevent_6_local__marker);
<span class='pyx_macro_api'>__Pyx_DECREF_SET</span>(__pyx_v_6gevent_6_local__marker, __pyx_t_2);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_2);
__pyx_t_2 = 0;
</pre><pre class="cython line score-0">&#xA0;<span class="">332</span>: </pre>
<pre class="cython line score-12" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">333</span>: def _local_get_dict(self):</pre>
<pre class='cython code score-12 '>static CYTHON_INLINE PyObject *__pyx_f_6gevent_6_local__local_get_dict(struct __pyx_obj_6gevent_6_local_local *__pyx_v_self) {
struct __pyx_obj_6gevent_6_local__localimpl *__pyx_v_impl = 0;
PyObject *__pyx_v_dct = 0;
struct __pyx_obj_6gevent_6_local__localimpl_dict_entry *__pyx_v_entry = 0;
PyGreenlet *__pyx_v_greenlet = NULL;
PyObject *__pyx_v_idg = NULL;
PyObject *__pyx_r = NULL;
<span class='refnanny'>__Pyx_RefNannyDeclarations</span>
<span class='refnanny'>__Pyx_RefNannySetupContext</span>("_local_get_dict", 0);
/* … */
/* function exit code */
__pyx_L1_error:;
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_1);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_6);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_7);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_8);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_9);
<span class='pyx_c_api'>__Pyx_AddTraceback</span>("gevent._local._local_get_dict", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
<span class='pyx_macro_api'>__Pyx_XDECREF</span>((PyObject *)__pyx_v_impl);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_dct);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>((PyObject *)__pyx_v_entry);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>((PyObject *)__pyx_v_greenlet);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_idg);
<span class='refnanny'>__Pyx_XGIVEREF</span>(__pyx_r);
<span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
return __pyx_r;
}
</pre><pre class="cython line score-1" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">334</span>: impl = self._local__impl</pre>
<pre class='cython code score-1 '> __pyx_t_1 = ((PyObject *)__pyx_v_self-&gt;_local__impl);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_1);
__pyx_v_impl = ((struct __pyx_obj_6gevent_6_local__localimpl *)__pyx_t_1);
__pyx_t_1 = 0;
</pre><pre class="cython line score-0">&#xA0;<span class="">335</span>: # Cython can optimize dict[], but not dict.get()</pre>
<pre class="cython line score-0" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">336</span>: greenlet = getcurrent() # pylint:disable=undefined-variable</pre>
<pre class='cython code score-0 '> __pyx_t_1 = ((PyObject *)__pyx_f_6gevent_6_local_getcurrent());<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 336, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
__pyx_v_greenlet = ((PyGreenlet *)__pyx_t_1);
__pyx_t_1 = 0;
</pre><pre class="cython line score-2" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">337</span>: idg = id(greenlet)</pre>
<pre class='cython code score-2 '> __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyObject_CallOneArg</span>(__pyx_builtin_id, ((PyObject *)__pyx_v_greenlet));<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 337, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
__pyx_v_idg = __pyx_t_1;
__pyx_t_1 = 0;
</pre><pre class="cython line score-8" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">338</span>: try:</pre>
<pre class='cython code score-8 '> {
/*try:*/ {
/* … */
}
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_3); __pyx_t_3 = 0;
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_4); __pyx_t_4 = 0;
goto __pyx_L8_try_end;
__pyx_L3_error:;
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
/* … */
<span class='refnanny'>__Pyx_XGIVEREF</span>(__pyx_t_2);
<span class='refnanny'>__Pyx_XGIVEREF</span>(__pyx_t_3);
<span class='refnanny'>__Pyx_XGIVEREF</span>(__pyx_t_4);
<span class='pyx_c_api'>__Pyx_ExceptionReset</span>(__pyx_t_2, __pyx_t_3, __pyx_t_4);
goto __pyx_L1_error;
__pyx_L4_exception_handled:;
<span class='refnanny'>__Pyx_XGIVEREF</span>(__pyx_t_2);
<span class='refnanny'>__Pyx_XGIVEREF</span>(__pyx_t_3);
<span class='refnanny'>__Pyx_XGIVEREF</span>(__pyx_t_4);
<span class='pyx_c_api'>__Pyx_ExceptionReset</span>(__pyx_t_2, __pyx_t_3, __pyx_t_4);
__pyx_L8_try_end:;
}
</pre><pre class="cython line score-9" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">339</span>: entry = impl.dicts[idg]</pre>
<pre class='cython code score-9 '> if (unlikely(__pyx_v_impl-&gt;dicts == Py_None)) {
<span class='py_c_api'>PyErr_SetString</span>(PyExc_TypeError, "'NoneType' object is not subscriptable");
<span class='error_goto'>__PYX_ERR(0, 339, __pyx_L3_error)</span>
}
__pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyDict_GetItem</span>(__pyx_v_impl-&gt;dicts, __pyx_v_idg);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 339, __pyx_L3_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
if (!(likely(((__pyx_t_1) == Py_None) || likely(<span class='pyx_c_api'>__Pyx_TypeTest</span>(__pyx_t_1, __pyx_ptype_6gevent_6_local__localimpl_dict_entry))))) <span class='error_goto'>__PYX_ERR(0, 339, __pyx_L3_error)</span>
__pyx_v_entry = ((struct __pyx_obj_6gevent_6_local__localimpl_dict_entry *)__pyx_t_1);
__pyx_t_1 = 0;
</pre><pre class="cython line score-1" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">340</span>: dct = entry.localdict</pre>
<pre class='cython code score-1 '> __pyx_t_1 = __pyx_v_entry-&gt;localdict;
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_1);
__pyx_v_dct = ((PyObject*)__pyx_t_1);
__pyx_t_1 = 0;
</pre><pre class="cython line score-6" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">341</span>: except KeyError:</pre>
<pre class='cython code score-6 '> __pyx_t_5 = <span class='pyx_c_api'>__Pyx_PyErr_ExceptionMatches</span>(__pyx_builtin_KeyError);
if (__pyx_t_5) {
<span class='pyx_c_api'>__Pyx_AddTraceback</span>("gevent._local._local_get_dict", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (<span class='pyx_c_api'>__Pyx_GetException</span>(&amp;__pyx_t_1, &amp;__pyx_t_6, &amp;__pyx_t_7) &lt; 0) <span class='error_goto'>__PYX_ERR(0, 341, __pyx_L5_except_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_6);
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_7);
</pre><pre class="cython line score-1" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">342</span>: dct = _localimpl_create_dict(impl, greenlet, idg)</pre>
<pre class='cython code score-1 '> __pyx_t_8 = __pyx_f_6gevent_6_local__localimpl_create_dict(__pyx_v_impl, __pyx_v_greenlet, __pyx_v_idg);<span class='error_goto'> if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 342, __pyx_L5_except_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_8);
<span class='pyx_macro_api'>__Pyx_XDECREF_SET</span>(__pyx_v_dct, ((PyObject*)__pyx_t_8));
__pyx_t_8 = 0;
</pre><pre class="cython line score-19" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">343</span>: self.__init__(*impl.localargs, **impl.localkwargs)</pre>
<pre class='cython code score-19 '> __pyx_t_8 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(((PyObject *)__pyx_v_self), __pyx_n_s_init);<span class='error_goto'> if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 343, __pyx_L5_except_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_8);
if (unlikely(__pyx_v_impl-&gt;localargs == Py_None)) {
<span class='py_c_api'>PyErr_SetString</span>(PyExc_TypeError, "'NoneType' object is not iterable");
<span class='error_goto'>__PYX_ERR(0, 343, __pyx_L5_except_error)</span>
}
if (unlikely(__pyx_v_impl-&gt;localkwargs == Py_None)) {
<span class='py_c_api'>PyErr_SetString</span>(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
<span class='error_goto'>__PYX_ERR(0, 343, __pyx_L5_except_error)</span>
}
__pyx_t_9 = <span class='pyx_c_api'>__Pyx_PyObject_Call</span>(__pyx_t_8, __pyx_v_impl-&gt;localargs, __pyx_v_impl-&gt;localkwargs);<span class='error_goto'> if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 343, __pyx_L5_except_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_9);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_8); __pyx_t_8 = 0;
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_9); __pyx_t_9 = 0;
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_6); __pyx_t_6 = 0;
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_7); __pyx_t_7 = 0;
goto __pyx_L4_exception_handled;
}
goto __pyx_L5_except_error;
__pyx_L5_except_error:;
</pre><pre class="cython line score-2" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">344</span>: return dct</pre>
<pre class='cython code score-2 '> <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_r);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_dct);
__pyx_r = __pyx_v_dct;
goto __pyx_L0;
</pre><pre class="cython line score-0">&#xA0;<span class="">345</span>: </pre>
<pre class="cython line score-0" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">346</span>: def _init():</pre>
<pre class='cython code score-0 '>static void __pyx_f_6gevent_6_local__init(void) {
<span class='refnanny'>__Pyx_RefNannyDeclarations</span>
<span class='refnanny'>__Pyx_RefNannySetupContext</span>("_init", 0);
/* … */
/* function exit code */
<span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
}
</pre><pre class="cython line score-0" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">347</span>: greenlet_init() # pylint:disable=undefined-variable</pre>
<pre class='cython code score-0 '> __pyx_f_6gevent_6_local_greenlet_init();
</pre><pre class="cython line score-0">&#xA0;<span class="">348</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">349</span>: _local_attrs = {</pre>
<pre class="cython line score-51" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">350</span>: '_local__impl',</pre>
<pre class='cython code score-51 '> __pyx_t_2 = <span class='py_c_api'>PySet_New</span>(0);<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 350, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
if (<span class='py_c_api'>PySet_Add</span>(__pyx_t_2, __pyx_n_s_local__impl) &lt; 0) <span class='error_goto'>__PYX_ERR(0, 350, __pyx_L1_error)</span>
if (<span class='py_c_api'>PySet_Add</span>(__pyx_t_2, __pyx_n_s_local_type_get_descriptors) &lt; 0) <span class='error_goto'>__PYX_ERR(0, 350, __pyx_L1_error)</span>
if (<span class='py_c_api'>PySet_Add</span>(__pyx_t_2, __pyx_n_s_local_type_set_or_del_descripto) &lt; 0) <span class='error_goto'>__PYX_ERR(0, 350, __pyx_L1_error)</span>
if (<span class='py_c_api'>PySet_Add</span>(__pyx_t_2, __pyx_n_s_local_type_del_descriptors) &lt; 0) <span class='error_goto'>__PYX_ERR(0, 350, __pyx_L1_error)</span>
if (<span class='py_c_api'>PySet_Add</span>(__pyx_t_2, __pyx_n_s_local_type_set_descriptors) &lt; 0) <span class='error_goto'>__PYX_ERR(0, 350, __pyx_L1_error)</span>
if (<span class='py_c_api'>PySet_Add</span>(__pyx_t_2, __pyx_n_s_local_type_2) &lt; 0) <span class='error_goto'>__PYX_ERR(0, 350, __pyx_L1_error)</span>
if (<span class='py_c_api'>PySet_Add</span>(__pyx_t_2, __pyx_n_s_local_type_vars) &lt; 0) <span class='error_goto'>__PYX_ERR(0, 350, __pyx_L1_error)</span>
if (<span class='py_c_api'>PySet_Add</span>(__pyx_t_2, __pyx_n_s_class) &lt; 0) <span class='error_goto'>__PYX_ERR(0, 350, __pyx_L1_error)</span>
if (<span class='py_c_api'>PySet_Add</span>(__pyx_t_2, __pyx_n_s_cinit) &lt; 0) <span class='error_goto'>__PYX_ERR(0, 350, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_XGOTREF</span>(__pyx_v_6gevent_6_local__local_attrs);
<span class='pyx_macro_api'>__Pyx_DECREF_SET</span>(__pyx_v_6gevent_6_local__local_attrs, ((PyObject*)__pyx_t_2));
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_2);
__pyx_t_2 = 0;
</pre><pre class="cython line score-0">&#xA0;<span class="">351</span>: '_local_type_get_descriptors',</pre>
<pre class="cython line score-0">&#xA0;<span class="">352</span>: '_local_type_set_or_del_descriptors',</pre>
<pre class="cython line score-0">&#xA0;<span class="">353</span>: '_local_type_del_descriptors',</pre>
<pre class="cython line score-0">&#xA0;<span class="">354</span>: '_local_type_set_descriptors',</pre>
<pre class="cython line score-0">&#xA0;<span class="">355</span>: '_local_type',</pre>
<pre class="cython line score-0">&#xA0;<span class="">356</span>: '_local_type_vars',</pre>
<pre class="cython line score-0">&#xA0;<span class="">357</span>: '__class__',</pre>
<pre class="cython line score-0">&#xA0;<span class="">358</span>: '__cinit__',</pre>
<pre class="cython line score-0">&#xA0;<span class="">359</span>: }</pre>
<pre class="cython line score-0">&#xA0;<span class="">360</span>: </pre>
<pre class="cython line score-0" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">361</span>: class local(object):</pre>
<pre class='cython code score-0 '>struct __pyx_vtabstruct_6gevent_6_local_local {
struct __pyx_obj_6gevent_6_local_local *(*__pyx___copy__)(struct __pyx_obj_6gevent_6_local_local *, int __pyx_skip_dispatch);
};
static struct __pyx_vtabstruct_6gevent_6_local_local *__pyx_vtabptr_6gevent_6_local_local;
</pre><pre class="cython line score-0">&#xA0;<span class="">362</span>: """</pre>
<pre class="cython line score-0">&#xA0;<span class="">363</span>: An object whose attributes are greenlet-local.</pre>
<pre class="cython line score-0">&#xA0;<span class="">364</span>: """</pre>
<pre class="cython line score-35" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">365</span>: __slots__ = tuple(_local_attrs - {'__class__', '__cinit__'})</pre>
<pre class='cython code score-35 '> __pyx_t_2 = <span class='py_c_api'>PySet_New</span>(0);<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 365, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
if (<span class='py_c_api'>PySet_Add</span>(__pyx_t_2, __pyx_n_s_class) &lt; 0) <span class='error_goto'>__PYX_ERR(0, 365, __pyx_L1_error)</span>
if (<span class='py_c_api'>PySet_Add</span>(__pyx_t_2, __pyx_n_s_cinit) &lt; 0) <span class='error_goto'>__PYX_ERR(0, 365, __pyx_L1_error)</span>
__pyx_t_1 = <span class='py_c_api'>PyNumber_Subtract</span>(__pyx_v_6gevent_6_local__local_attrs, __pyx_t_2);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 365, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
__pyx_t_2 = <span class='pyx_c_api'>__Pyx_PySequence_Tuple</span>(__pyx_t_1);<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 365, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
if (<span class='py_c_api'>PyDict_SetItem</span>((PyObject *)__pyx_ptype_6gevent_6_local_local-&gt;tp_dict, __pyx_n_s_slots, __pyx_t_2) &lt; 0) <span class='error_goto'>__PYX_ERR(0, 365, __pyx_L1_error)</span>
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
<span class='py_c_api'>PyType_Modified</span>(__pyx_ptype_6gevent_6_local_local);
</pre><pre class="cython line score-0">&#xA0;<span class="">366</span>: </pre>
<pre class="cython line score-27" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">367</span>: def __cinit__(self, *args, **kw):</pre>
<pre class='cython code score-27 '>/* Python wrapper */
static int __pyx_pw_6gevent_6_local_5local_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_6gevent_6_local_5local_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
PyObject *__pyx_v_args = 0;
PyObject *__pyx_v_kw = 0;
int __pyx_r;
<span class='refnanny'>__Pyx_RefNannyDeclarations</span>
<span class='refnanny'>__Pyx_RefNannySetupContext</span>("__cinit__ (wrapper)", 0);
if (unlikely(__pyx_kwds) &amp;&amp; unlikely(!<span class='pyx_c_api'>__Pyx_CheckKeywordStrings</span>(__pyx_kwds, "__cinit__", 1))) return -1;
__pyx_v_kw = (__pyx_kwds) ? <span class='py_c_api'>PyDict_Copy</span>(__pyx_kwds) : <span class='py_c_api'>PyDict_New</span>(); if (unlikely(!__pyx_v_kw)) return -1;
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_v_kw);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_args);
__pyx_v_args = __pyx_args;
__pyx_r = __pyx_pf_6gevent_6_local_5local___cinit__(((struct __pyx_obj_6gevent_6_local_local *)__pyx_v_self), __pyx_v_args, __pyx_v_kw);
/* function exit code */
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_args);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_kw);
<span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
return __pyx_r;
}
static int __pyx_pf_6gevent_6_local_5local___cinit__(struct __pyx_obj_6gevent_6_local_local *__pyx_v_self, PyObject *__pyx_v_args, PyObject *__pyx_v_kw) {
struct __pyx_obj_6gevent_6_local__localimpl *__pyx_v_impl = NULL;
PyObject *__pyx_v_get = NULL;
PyObject *__pyx_v_dels = NULL;
PyObject *__pyx_v_sets_or_dels = NULL;
PyObject *__pyx_v_sets = NULL;
int __pyx_r;
<span class='refnanny'>__Pyx_RefNannyDeclarations</span>
<span class='refnanny'>__Pyx_RefNannySetupContext</span>("__cinit__", 0);
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_3);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_4);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_5);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_6);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_7);
<span class='pyx_c_api'>__Pyx_AddTraceback</span>("gevent._local.local.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
<span class='pyx_macro_api'>__Pyx_XDECREF</span>((PyObject *)__pyx_v_impl);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_get);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_dels);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_sets_or_dels);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_sets);
<span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
return __pyx_r;
}
</pre><pre class="cython line score-3" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">368</span>: if args or kw:</pre>
<pre class='cython code score-3 '> __pyx_t_2 = (<span class='py_macro_api'>PyTuple_GET_SIZE</span>(__pyx_v_args) != 0);
if (!__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L4_bool_binop_done;
}
__pyx_t_2 = <span class='pyx_c_api'>__Pyx_PyObject_IsTrue</span>(__pyx_v_kw); if (unlikely(__pyx_t_2 &lt; 0)) <span class='error_goto'>__PYX_ERR(0, 368, __pyx_L1_error)</span>
__pyx_t_1 = __pyx_t_2;
__pyx_L4_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
</pre><pre class="cython line score-14" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">369</span>: if type(self).__init__ == object.__init__:</pre>
<pre class='cython code score-14 '> __pyx_t_3 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))), __pyx_n_s_init);<span class='error_goto'> if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 369, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_3);
__pyx_t_4 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(__pyx_builtin_object, __pyx_n_s_init);<span class='error_goto'> if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 369, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_4);
__pyx_t_5 = <span class='py_c_api'>PyObject_RichCompare</span>(__pyx_t_3, __pyx_t_4, Py_EQ); <span class='refnanny'>__Pyx_XGOTREF</span>(__pyx_t_5);<span class='error_goto'> if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 369, __pyx_L1_error)</span>
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_3); __pyx_t_3 = 0;
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_4); __pyx_t_4 = 0;
__pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyObject_IsTrue</span>(__pyx_t_5); if (unlikely(__pyx_t_1 &lt; 0)) <span class='error_goto'>__PYX_ERR(0, 369, __pyx_L1_error)</span>
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(__pyx_t_1)) {
/* … */
}
</pre><pre class="cython line score-17" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">370</span>: raise TypeError("Initialization arguments are not supported", args, kw)</pre>
<pre class='cython code score-17 '> __pyx_t_5 = <span class='py_c_api'>PyTuple_New</span>(3);<span class='error_goto'> if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 370, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_kp_s_Initialization_arguments_are_not);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_kp_s_Initialization_arguments_are_not);
<span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_5, 0, __pyx_kp_s_Initialization_arguments_are_not);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_args);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_v_args);
<span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_5, 1, __pyx_v_args);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_kw);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_v_kw);
<span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_5, 2, __pyx_v_kw);
__pyx_t_4 = <span class='pyx_c_api'>__Pyx_PyObject_Call</span>(__pyx_builtin_TypeError, __pyx_t_5, NULL);<span class='error_goto'> if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 370, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_4);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_5); __pyx_t_5 = 0;
<span class='pyx_c_api'>__Pyx_Raise</span>(__pyx_t_4, 0, 0, 0);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_4); __pyx_t_4 = 0;
<span class='error_goto'>__PYX_ERR(0, 370, __pyx_L1_error)</span>
</pre><pre class="cython line score-17" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">371</span>: impl = _localimpl(args, kw, type(self), id(self))</pre>
<pre class='cython code score-17 '> __pyx_t_4 = <span class='pyx_c_api'>__Pyx_PyObject_CallOneArg</span>(__pyx_builtin_id, ((PyObject *)__pyx_v_self));<span class='error_goto'> if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 371, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_4);
__pyx_t_5 = <span class='py_c_api'>PyTuple_New</span>(4);<span class='error_goto'> if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 371, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_args);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_v_args);
<span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_5, 0, __pyx_v_args);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_kw);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_v_kw);
<span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_5, 1, __pyx_v_kw);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
<span class='refnanny'>__Pyx_GIVEREF</span>(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
<span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_5, 2, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_4);
<span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_5, 3, __pyx_t_4);
__pyx_t_4 = 0;
__pyx_t_4 = <span class='pyx_c_api'>__Pyx_PyObject_Call</span>(((PyObject *)__pyx_ptype_6gevent_6_local__localimpl), __pyx_t_5, NULL);<span class='error_goto'> if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 371, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_4);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_5); __pyx_t_5 = 0;
__pyx_v_impl = ((struct __pyx_obj_6gevent_6_local__localimpl *)__pyx_t_4);
__pyx_t_4 = 0;
</pre><pre class="cython line score-0">&#xA0;<span class="">372</span>: # pylint:disable=attribute-defined-outside-init</pre>
<pre class="cython line score-2" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">373</span>: self._local__impl = impl</pre>
<pre class='cython code score-2 '> <span class='pyx_macro_api'>__Pyx_INCREF</span>(((PyObject *)__pyx_v_impl));
<span class='refnanny'>__Pyx_GIVEREF</span>(((PyObject *)__pyx_v_impl));
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_v_self-&gt;_local__impl);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(((PyObject *)__pyx_v_self-&gt;_local__impl));
__pyx_v_self-&gt;_local__impl = __pyx_v_impl;
</pre><pre class="cython line score-18" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">374</span>: get, dels, sets_or_dels, sets = _local_find_descriptors(self)</pre>
<pre class='cython code score-18 '> __pyx_t_4 = __pyx_f_6gevent_6_local__local_find_descriptors(__pyx_v_self);<span class='error_goto'> if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 374, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_4);
if (likely(__pyx_t_4 != Py_None)) {
PyObject* sequence = __pyx_t_4;
Py_ssize_t size = <span class='pyx_c_api'>__Pyx_PySequence_SIZE</span>(sequence);
if (unlikely(size != 4)) {
if (size &gt; 4) <span class='pyx_c_api'>__Pyx_RaiseTooManyValuesError</span>(4);
else if (size &gt;= 0) <span class='pyx_c_api'>__Pyx_RaiseNeedMoreValuesError</span>(size);
<span class='error_goto'>__PYX_ERR(0, 374, __pyx_L1_error)</span>
}
#if CYTHON_ASSUME_SAFE_MACROS &amp;&amp; !CYTHON_AVOID_BORROWED_REFS
__pyx_t_5 = <span class='py_macro_api'>PyTuple_GET_ITEM</span>(sequence, 0);
__pyx_t_3 = <span class='py_macro_api'>PyTuple_GET_ITEM</span>(sequence, 1);
__pyx_t_6 = <span class='py_macro_api'>PyTuple_GET_ITEM</span>(sequence, 2);
__pyx_t_7 = <span class='py_macro_api'>PyTuple_GET_ITEM</span>(sequence, 3);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_5);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_3);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_6);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_7);
#else
{
Py_ssize_t i;
PyObject** temps[4] = {&amp;__pyx_t_5,&amp;__pyx_t_3,&amp;__pyx_t_6,&amp;__pyx_t_7};
for (i=0; i &lt; 4; i++) {
PyObject* item = <span class='py_macro_api'>PySequence_ITEM</span>(sequence, i);<span class='error_goto'> if (unlikely(!item)) __PYX_ERR(0, 374, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(item);
*(temps[i]) = item;
}
}
#endif
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_4); __pyx_t_4 = 0;
} else {
<span class='pyx_c_api'>__Pyx_RaiseNoneNotIterableError</span>(); <span class='error_goto'>__PYX_ERR(0, 374, __pyx_L1_error)</span>
}
__pyx_v_get = __pyx_t_5;
__pyx_t_5 = 0;
__pyx_v_dels = __pyx_t_3;
__pyx_t_3 = 0;
__pyx_v_sets_or_dels = __pyx_t_6;
__pyx_t_6 = 0;
__pyx_v_sets = __pyx_t_7;
__pyx_t_7 = 0;
</pre><pre class="cython line score-12" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">375</span>: self._local_type_get_descriptors = get</pre>
<pre class='cython code score-12 '> if (!(likely(<span class='py_c_api'>PySet_CheckExact</span>(__pyx_v_get))||((__pyx_v_get) == Py_None)||(<span class='py_c_api'>PyErr_Format</span>(PyExc_TypeError, "Expected %.16s, got %.200s", "set", Py_TYPE(__pyx_v_get)-&gt;tp_name), 0))) <span class='error_goto'>__PYX_ERR(0, 375, __pyx_L1_error)</span>
__pyx_t_4 = __pyx_v_get;
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_4);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_4);
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_v_self-&gt;_local_type_get_descriptors);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_v_self-&gt;_local_type_get_descriptors);
__pyx_v_self-&gt;_local_type_get_descriptors = ((PyObject*)__pyx_t_4);
__pyx_t_4 = 0;
</pre><pre class="cython line score-12" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">376</span>: self._local_type_set_or_del_descriptors = sets_or_dels</pre>
<pre class='cython code score-12 '> if (!(likely(<span class='py_c_api'>PySet_CheckExact</span>(__pyx_v_sets_or_dels))||((__pyx_v_sets_or_dels) == Py_None)||(<span class='py_c_api'>PyErr_Format</span>(PyExc_TypeError, "Expected %.16s, got %.200s", "set", Py_TYPE(__pyx_v_sets_or_dels)-&gt;tp_name), 0))) <span class='error_goto'>__PYX_ERR(0, 376, __pyx_L1_error)</span>
__pyx_t_4 = __pyx_v_sets_or_dels;
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_4);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_4);
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_v_self-&gt;_local_type_set_or_del_descriptors);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_v_self-&gt;_local_type_set_or_del_descriptors);
__pyx_v_self-&gt;_local_type_set_or_del_descriptors = ((PyObject*)__pyx_t_4);
__pyx_t_4 = 0;
</pre><pre class="cython line score-12" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">377</span>: self._local_type_del_descriptors = dels</pre>
<pre class='cython code score-12 '> if (!(likely(<span class='py_c_api'>PySet_CheckExact</span>(__pyx_v_dels))||((__pyx_v_dels) == Py_None)||(<span class='py_c_api'>PyErr_Format</span>(PyExc_TypeError, "Expected %.16s, got %.200s", "set", Py_TYPE(__pyx_v_dels)-&gt;tp_name), 0))) <span class='error_goto'>__PYX_ERR(0, 377, __pyx_L1_error)</span>
__pyx_t_4 = __pyx_v_dels;
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_4);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_4);
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_v_self-&gt;_local_type_del_descriptors);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_v_self-&gt;_local_type_del_descriptors);
__pyx_v_self-&gt;_local_type_del_descriptors = ((PyObject*)__pyx_t_4);
__pyx_t_4 = 0;
</pre><pre class="cython line score-12" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">378</span>: self._local_type_set_descriptors = sets</pre>
<pre class='cython code score-12 '> if (!(likely(<span class='py_c_api'>PySet_CheckExact</span>(__pyx_v_sets))||((__pyx_v_sets) == Py_None)||(<span class='py_c_api'>PyErr_Format</span>(PyExc_TypeError, "Expected %.16s, got %.200s", "set", Py_TYPE(__pyx_v_sets)-&gt;tp_name), 0))) <span class='error_goto'>__PYX_ERR(0, 378, __pyx_L1_error)</span>
__pyx_t_4 = __pyx_v_sets;
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_4);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_4);
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_v_self-&gt;_local_type_set_descriptors);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_v_self-&gt;_local_type_set_descriptors);
__pyx_v_self-&gt;_local_type_set_descriptors = ((PyObject*)__pyx_t_4);
__pyx_t_4 = 0;
</pre><pre class="cython line score-2" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">379</span>: self._local_type = type(self)</pre>
<pre class='cython code score-2 '> <span class='pyx_macro_api'>__Pyx_INCREF</span>(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
<span class='refnanny'>__Pyx_GIVEREF</span>(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_v_self-&gt;_local_type);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(((PyObject *)__pyx_v_self-&gt;_local_type));
__pyx_v_self-&gt;_local_type = ((PyTypeObject*)((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
</pre><pre class="cython line score-14" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">380</span>: self._local_type_vars = set(dir(self._local_type))</pre>
<pre class='cython code score-14 '> __pyx_t_4 = ((PyObject *)__pyx_v_self-&gt;_local_type);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_4);
__pyx_t_7 = <span class='py_c_api'>PyObject_Dir</span>(__pyx_t_4);<span class='error_goto'> if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 380, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_7);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_4); __pyx_t_4 = 0;
__pyx_t_4 = <span class='py_c_api'>PySet_New</span>(__pyx_t_7);<span class='error_goto'> if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 380, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_4);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_7); __pyx_t_7 = 0;
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_4);
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_v_self-&gt;_local_type_vars);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_v_self-&gt;_local_type_vars);
__pyx_v_self-&gt;_local_type_vars = ((PyObject*)__pyx_t_4);
__pyx_t_4 = 0;
</pre><pre class="cython line score-0">&#xA0;<span class="">381</span>: </pre>
<pre class="cython line score-13" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">382</span>: def __getattribute__(self, name): # pylint:disable=too-many-return-statements</pre>
<pre class='cython code score-13 '>/* Python wrapper */
static PyObject *__pyx_pw_6gevent_6_local_5local_3__getattribute__(PyObject *__pyx_v_self, PyObject *__pyx_v_name); /*proto*/
static PyObject *__pyx_pw_6gevent_6_local_5local_3__getattribute__(PyObject *__pyx_v_self, PyObject *__pyx_v_name) {
PyObject *__pyx_r = 0;
<span class='refnanny'>__Pyx_RefNannyDeclarations</span>
<span class='refnanny'>__Pyx_RefNannySetupContext</span>("__getattribute__ (wrapper)", 0);
__pyx_r = __pyx_pf_6gevent_6_local_5local_2__getattribute__(((struct __pyx_obj_6gevent_6_local_local *)__pyx_v_self), ((PyObject *)__pyx_v_name));
/* function exit code */
<span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
return __pyx_r;
}
static PyObject *__pyx_pf_6gevent_6_local_5local_2__getattribute__(struct __pyx_obj_6gevent_6_local_local *__pyx_v_self, PyObject *__pyx_v_name) {
PyObject *__pyx_v_dct = NULL;
PyObject *__pyx_v_type_attr = NULL;
PyObject *__pyx_v_base = NULL;
PyObject *__pyx_v_bd = NULL;
PyObject *__pyx_v_attr_on_type = NULL;
PyObject *__pyx_v_result = NULL;
PyObject *__pyx_r = NULL;
<span class='refnanny'>__Pyx_RefNannyDeclarations</span>
<span class='refnanny'>__Pyx_RefNannySetupContext</span>("__getattribute__", 0);
/* … */
/* function exit code */
__pyx_L1_error:;
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_3);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_4);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_5);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_7);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_8);
<span class='pyx_c_api'>__Pyx_AddTraceback</span>("gevent._local.local.__getattribute__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_dct);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_type_attr);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_base);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_bd);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_attr_on_type);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_result);
<span class='refnanny'>__Pyx_XGIVEREF</span>(__pyx_r);
<span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
return __pyx_r;
}
</pre><pre class="cython line score-7" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">383</span>: if name in _local_attrs:</pre>
<pre class='cython code score-7 '> if (unlikely(__pyx_v_6gevent_6_local__local_attrs == Py_None)) {
<span class='py_c_api'>PyErr_SetString</span>(PyExc_TypeError, "'NoneType' object is not iterable");
<span class='error_goto'>__PYX_ERR(0, 383, __pyx_L1_error)</span>
}
__pyx_t_1 = (<span class='pyx_c_api'>__Pyx_PySet_ContainsTF</span>(__pyx_v_name, __pyx_v_6gevent_6_local__local_attrs, Py_EQ)); if (unlikely(__pyx_t_1 &lt; 0)) <span class='error_goto'>__PYX_ERR(0, 383, __pyx_L1_error)</span>
__pyx_t_2 = (__pyx_t_1 != 0);
if (__pyx_t_2) {
/* … */
}
</pre><pre class="cython line score-0">&#xA0;<span class="">384</span>: # The _local__impl, __cinit__, etc, won't be hit by the</pre>
<pre class="cython line score-0">&#xA0;<span class="">385</span>: # Cython version, if we've done things right. If we haven't,</pre>
<pre class="cython line score-0">&#xA0;<span class="">386</span>: # they will be, and this will produce an error.</pre>
<pre class="cython line score-40" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">387</span>: return object.__getattribute__(self, name)</pre>
<pre class='cython code score-40 '> <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_r);
__pyx_t_4 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(__pyx_builtin_object, __pyx_n_s_getattribute);<span class='error_goto'> if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 387, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_4);
__pyx_t_5 = NULL;
__pyx_t_6 = 0;
if (CYTHON_UNPACK_METHODS &amp;&amp; likely(<span class='py_c_api'>PyMethod_Check</span>(__pyx_t_4))) {
__pyx_t_5 = <span class='py_macro_api'>PyMethod_GET_SELF</span>(__pyx_t_4);
if (likely(__pyx_t_5)) {
PyObject* function = <span class='py_macro_api'>PyMethod_GET_FUNCTION</span>(__pyx_t_4);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_5);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(function);
<span class='pyx_macro_api'>__Pyx_DECREF_SET</span>(__pyx_t_4, function);
__pyx_t_6 = 1;
}
}
#if CYTHON_FAST_PYCALL
if (<span class='py_c_api'>PyFunction_Check</span>(__pyx_t_4)) {
PyObject *__pyx_temp[3] = {__pyx_t_5, ((PyObject *)__pyx_v_self), __pyx_v_name};
__pyx_t_3 = <span class='pyx_c_api'>__Pyx_PyFunction_FastCall</span>(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6);<span class='error_goto'> if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 387, __pyx_L1_error)</span>
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_5); __pyx_t_5 = 0;
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_3);
} else
#endif
#if CYTHON_FAST_PYCCALL
if (<span class='pyx_c_api'>__Pyx_PyFastCFunction_Check</span>(__pyx_t_4)) {
PyObject *__pyx_temp[3] = {__pyx_t_5, ((PyObject *)__pyx_v_self), __pyx_v_name};
__pyx_t_3 = <span class='pyx_c_api'>__Pyx_PyCFunction_FastCall</span>(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6);<span class='error_goto'> if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 387, __pyx_L1_error)</span>
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_5); __pyx_t_5 = 0;
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_3);
} else
#endif
{
__pyx_t_7 = <span class='py_c_api'>PyTuple_New</span>(2+__pyx_t_6);<span class='error_goto'> if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 387, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_7);
if (__pyx_t_5) {
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_5); <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_7, 0, __pyx_t_5); __pyx_t_5 = NULL;
}
<span class='pyx_macro_api'>__Pyx_INCREF</span>(((PyObject *)__pyx_v_self));
<span class='refnanny'>__Pyx_GIVEREF</span>(((PyObject *)__pyx_v_self));
<span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_7, 0+__pyx_t_6, ((PyObject *)__pyx_v_self));
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_name);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_v_name);
<span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_7, 1+__pyx_t_6, __pyx_v_name);
__pyx_t_3 = <span class='pyx_c_api'>__Pyx_PyObject_Call</span>(__pyx_t_4, __pyx_t_7, NULL);<span class='error_goto'> if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 387, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_3);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_7); __pyx_t_7 = 0;
}
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_4); __pyx_t_4 = 0;
__pyx_r = __pyx_t_3;
__pyx_t_3 = 0;
goto __pyx_L0;
</pre><pre class="cython line score-0">&#xA0;<span class="">388</span>: </pre>
<pre class="cython line score-0" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">389</span>: dct = _local_get_dict(self)</pre>
<pre class='cython code score-0 '> __pyx_t_3 = __pyx_f_6gevent_6_local__local_get_dict(__pyx_v_self);<span class='error_goto'> if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 389, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_3);
__pyx_v_dct = ((PyObject*)__pyx_t_3);
__pyx_t_3 = 0;
</pre><pre class="cython line score-0">&#xA0;<span class="">390</span>: </pre>
<pre class="cython line score-2" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">391</span>: if name == '__dict__':</pre>
<pre class='cython code score-2 '> __pyx_t_2 = (<span class='pyx_c_api'>__Pyx_PyString_Equals</span>(__pyx_v_name, __pyx_n_s_dict, Py_EQ)); if (unlikely(__pyx_t_2 &lt; 0)) <span class='error_goto'>__PYX_ERR(0, 391, __pyx_L1_error)</span>
if (__pyx_t_2) {
/* … */
}
</pre><pre class="cython line score-2" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">392</span>: return dct</pre>
<pre class='cython code score-2 '> <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_r);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_dct);
__pyx_r = __pyx_v_dct;
goto __pyx_L0;
</pre><pre class="cython line score-0">&#xA0;<span class="">393</span>: # If there's no possible way we can switch, because this</pre>
<pre class="cython line score-0">&#xA0;<span class="">394</span>: # attribute is *not* found in the class where it might be a</pre>
<pre class="cython line score-0">&#xA0;<span class="">395</span>: # data descriptor (property), and it *is* in the dict</pre>
<pre class="cython line score-0">&#xA0;<span class="">396</span>: # then we don't need to swizzle the dict and take the lock.</pre>
<pre class="cython line score-0">&#xA0;<span class="">397</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">398</span>: # We don't have to worry about people overriding __getattribute__</pre>
<pre class="cython line score-0">&#xA0;<span class="">399</span>: # because if they did, the dict-swizzling would only last as</pre>
<pre class="cython line score-0">&#xA0;<span class="">400</span>: # long as we were in here anyway.</pre>
<pre class="cython line score-0">&#xA0;<span class="">401</span>: # Similarly, a __getattr__ will still be called by _oga() if needed</pre>
<pre class="cython line score-0">&#xA0;<span class="">402</span>: # if it's not in the dict.</pre>
<pre class="cython line score-0">&#xA0;<span class="">403</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">404</span>: # Optimization: If we're not subclassed, then</pre>
<pre class="cython line score-0">&#xA0;<span class="">405</span>: # there can be no descriptors except for methods, which will</pre>
<pre class="cython line score-0">&#xA0;<span class="">406</span>: # never need to use __dict__.</pre>
<pre class="cython line score-0" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">407</span>: if self._local_type is local:</pre>
<pre class='cython code score-0 '> __pyx_t_2 = (__pyx_v_self-&gt;_local_type == __pyx_ptype_6gevent_6_local_local);
__pyx_t_1 = (__pyx_t_2 != 0);
if (__pyx_t_1) {
/* … */
}
</pre><pre class="cython line score-54" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">408</span>: return dct[name] if name in dct else object.__getattribute__(self, name)</pre>
<pre class='cython code score-54 '> <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_r);
if (unlikely(__pyx_v_dct == Py_None)) {
<span class='py_c_api'>PyErr_SetString</span>(PyExc_TypeError, "'NoneType' object is not iterable");
<span class='error_goto'>__PYX_ERR(0, 408, __pyx_L1_error)</span>
}
__pyx_t_1 = (<span class='pyx_c_api'>__Pyx_PyDict_ContainsTF</span>(__pyx_v_name, __pyx_v_dct, Py_EQ)); if (unlikely(__pyx_t_1 &lt; 0)) <span class='error_goto'>__PYX_ERR(0, 408, __pyx_L1_error)</span>
if ((__pyx_t_1 != 0)) {
if (unlikely(__pyx_v_dct == Py_None)) {
<span class='py_c_api'>PyErr_SetString</span>(PyExc_TypeError, "'NoneType' object is not subscriptable");
<span class='error_goto'>__PYX_ERR(0, 408, __pyx_L1_error)</span>
}
__pyx_t_4 = <span class='pyx_c_api'>__Pyx_PyDict_GetItem</span>(__pyx_v_dct, __pyx_v_name);<span class='error_goto'> if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 408, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_4);
__pyx_t_3 = __pyx_t_4;
__pyx_t_4 = 0;
} else {
__pyx_t_7 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(__pyx_builtin_object, __pyx_n_s_getattribute);<span class='error_goto'> if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 408, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_7);
__pyx_t_5 = NULL;
__pyx_t_6 = 0;
if (CYTHON_UNPACK_METHODS &amp;&amp; likely(<span class='py_c_api'>PyMethod_Check</span>(__pyx_t_7))) {
__pyx_t_5 = <span class='py_macro_api'>PyMethod_GET_SELF</span>(__pyx_t_7);
if (likely(__pyx_t_5)) {
PyObject* function = <span class='py_macro_api'>PyMethod_GET_FUNCTION</span>(__pyx_t_7);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_5);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(function);
<span class='pyx_macro_api'>__Pyx_DECREF_SET</span>(__pyx_t_7, function);
__pyx_t_6 = 1;
}
}
#if CYTHON_FAST_PYCALL
if (<span class='py_c_api'>PyFunction_Check</span>(__pyx_t_7)) {
PyObject *__pyx_temp[3] = {__pyx_t_5, ((PyObject *)__pyx_v_self), __pyx_v_name};
__pyx_t_4 = <span class='pyx_c_api'>__Pyx_PyFunction_FastCall</span>(__pyx_t_7, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6);<span class='error_goto'> if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 408, __pyx_L1_error)</span>
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_5); __pyx_t_5 = 0;
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_4);
} else
#endif
#if CYTHON_FAST_PYCCALL
if (<span class='pyx_c_api'>__Pyx_PyFastCFunction_Check</span>(__pyx_t_7)) {
PyObject *__pyx_temp[3] = {__pyx_t_5, ((PyObject *)__pyx_v_self), __pyx_v_name};
__pyx_t_4 = <span class='pyx_c_api'>__Pyx_PyCFunction_FastCall</span>(__pyx_t_7, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6);<span class='error_goto'> if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 408, __pyx_L1_error)</span>
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_5); __pyx_t_5 = 0;
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_4);
} else
#endif
{
__pyx_t_8 = <span class='py_c_api'>PyTuple_New</span>(2+__pyx_t_6);<span class='error_goto'> if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 408, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_8);
if (__pyx_t_5) {
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_5); <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_8, 0, __pyx_t_5); __pyx_t_5 = NULL;
}
<span class='pyx_macro_api'>__Pyx_INCREF</span>(((PyObject *)__pyx_v_self));
<span class='refnanny'>__Pyx_GIVEREF</span>(((PyObject *)__pyx_v_self));
<span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_8, 0+__pyx_t_6, ((PyObject *)__pyx_v_self));
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_name);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_v_name);
<span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_8, 1+__pyx_t_6, __pyx_v_name);
__pyx_t_4 = <span class='pyx_c_api'>__Pyx_PyObject_Call</span>(__pyx_t_7, __pyx_t_8, NULL);<span class='error_goto'> if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 408, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_4);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_8); __pyx_t_8 = 0;
}
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_7); __pyx_t_7 = 0;
__pyx_t_3 = __pyx_t_4;
__pyx_t_4 = 0;
}
__pyx_r = __pyx_t_3;
__pyx_t_3 = 0;
goto __pyx_L0;
</pre><pre class="cython line score-0">&#xA0;<span class="">409</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">410</span>: # NOTE: If this is a descriptor, this will invoke its __get__.</pre>
<pre class="cython line score-0">&#xA0;<span class="">411</span>: # A broken descriptor that doesn't return itself when called with</pre>
<pre class="cython line score-0">&#xA0;<span class="">412</span>: # a None for the instance argument could mess us up here.</pre>
<pre class="cython line score-0">&#xA0;<span class="">413</span>: # But this is faster than a loop over mro() checking each class __dict__</pre>
<pre class="cython line score-0">&#xA0;<span class="">414</span>: # manually.</pre>
<pre class="cython line score-7" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">415</span>: if name in dct:</pre>
<pre class='cython code score-7 '> if (unlikely(__pyx_v_dct == Py_None)) {
<span class='py_c_api'>PyErr_SetString</span>(PyExc_TypeError, "'NoneType' object is not iterable");
<span class='error_goto'>__PYX_ERR(0, 415, __pyx_L1_error)</span>
}
__pyx_t_1 = (<span class='pyx_c_api'>__Pyx_PyDict_ContainsTF</span>(__pyx_v_name, __pyx_v_dct, Py_EQ)); if (unlikely(__pyx_t_1 &lt; 0)) <span class='error_goto'>__PYX_ERR(0, 415, __pyx_L1_error)</span>
__pyx_t_2 = (__pyx_t_1 != 0);
if (__pyx_t_2) {
/* … */
}
</pre><pre class="cython line score-7" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">416</span>: if name not in self._local_type_vars:</pre>
<pre class='cython code score-7 '> if (unlikely(__pyx_v_self-&gt;_local_type_vars == Py_None)) {
<span class='py_c_api'>PyErr_SetString</span>(PyExc_TypeError, "'NoneType' object is not iterable");
<span class='error_goto'>__PYX_ERR(0, 416, __pyx_L1_error)</span>
}
__pyx_t_2 = (<span class='pyx_c_api'>__Pyx_PySet_ContainsTF</span>(__pyx_v_name, __pyx_v_self-&gt;_local_type_vars, Py_NE)); if (unlikely(__pyx_t_2 &lt; 0)) <span class='error_goto'>__PYX_ERR(0, 416, __pyx_L1_error)</span>
__pyx_t_1 = (__pyx_t_2 != 0);
if (__pyx_t_1) {
/* … */
}
</pre><pre class="cython line score-0">&#xA0;<span class="">417</span>: # If there is a dict value, and nothing in the type,</pre>
<pre class="cython line score-0">&#xA0;<span class="">418</span>: # it can't possibly be a descriptor, so it is just returned.</pre>
<pre class="cython line score-8" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">419</span>: return dct[name]</pre>
<pre class='cython code score-8 '> <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_r);
if (unlikely(__pyx_v_dct == Py_None)) {
<span class='py_c_api'>PyErr_SetString</span>(PyExc_TypeError, "'NoneType' object is not subscriptable");
<span class='error_goto'>__PYX_ERR(0, 419, __pyx_L1_error)</span>
}
__pyx_t_3 = <span class='pyx_c_api'>__Pyx_PyDict_GetItem</span>(__pyx_v_dct, __pyx_v_name);<span class='error_goto'> if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 419, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_3);
__pyx_r = __pyx_t_3;
__pyx_t_3 = 0;
goto __pyx_L0;
</pre><pre class="cython line score-0">&#xA0;<span class="">420</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">421</span>: # It's in the type *and* in the dict. If the type value is</pre>
<pre class="cython line score-0">&#xA0;<span class="">422</span>: # a data descriptor (defines __get__ *and* either __set__ or</pre>
<pre class="cython line score-0">&#xA0;<span class="">423</span>: # __delete__), then the type wins. If it's a non-data descriptor</pre>
<pre class="cython line score-0">&#xA0;<span class="">424</span>: # (defines just __get__), then the instance wins. If it's not a</pre>
<pre class="cython line score-0">&#xA0;<span class="">425</span>: # descriptor at all (doesn't have __get__), the instance wins.</pre>
<pre class="cython line score-0">&#xA0;<span class="">426</span>: # NOTE that the docs for descriptors say that these methods must be</pre>
<pre class="cython line score-0">&#xA0;<span class="">427</span>: # defined on the *class* of the object in the type.</pre>
<pre class="cython line score-7" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">428</span>: if name not in self._local_type_get_descriptors:</pre>
<pre class='cython code score-7 '> if (unlikely(__pyx_v_self-&gt;_local_type_get_descriptors == Py_None)) {
<span class='py_c_api'>PyErr_SetString</span>(PyExc_TypeError, "'NoneType' object is not iterable");
<span class='error_goto'>__PYX_ERR(0, 428, __pyx_L1_error)</span>
}
__pyx_t_1 = (<span class='pyx_c_api'>__Pyx_PySet_ContainsTF</span>(__pyx_v_name, __pyx_v_self-&gt;_local_type_get_descriptors, Py_NE)); if (unlikely(__pyx_t_1 &lt; 0)) <span class='error_goto'>__PYX_ERR(0, 428, __pyx_L1_error)</span>
__pyx_t_2 = (__pyx_t_1 != 0);
if (__pyx_t_2) {
/* … */
}
</pre><pre class="cython line score-0">&#xA0;<span class="">429</span>: # Entirely not a descriptor. Instance wins.</pre>
<pre class="cython line score-8" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">430</span>: return dct[name]</pre>
<pre class='cython code score-8 '> <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_r);
if (unlikely(__pyx_v_dct == Py_None)) {
<span class='py_c_api'>PyErr_SetString</span>(PyExc_TypeError, "'NoneType' object is not subscriptable");
<span class='error_goto'>__PYX_ERR(0, 430, __pyx_L1_error)</span>
}
__pyx_t_3 = <span class='pyx_c_api'>__Pyx_PyDict_GetItem</span>(__pyx_v_dct, __pyx_v_name);<span class='error_goto'> if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 430, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_3);
__pyx_r = __pyx_t_3;
__pyx_t_3 = 0;
goto __pyx_L0;
</pre><pre class="cython line score-7" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">431</span>: if name in self._local_type_set_or_del_descriptors:</pre>
<pre class='cython code score-7 '> if (unlikely(__pyx_v_self-&gt;_local_type_set_or_del_descriptors == Py_None)) {
<span class='py_c_api'>PyErr_SetString</span>(PyExc_TypeError, "'NoneType' object is not iterable");
<span class='error_goto'>__PYX_ERR(0, 431, __pyx_L1_error)</span>
}
__pyx_t_2 = (<span class='pyx_c_api'>__Pyx_PySet_ContainsTF</span>(__pyx_v_name, __pyx_v_self-&gt;_local_type_set_or_del_descriptors, Py_EQ)); if (unlikely(__pyx_t_2 &lt; 0)) <span class='error_goto'>__PYX_ERR(0, 431, __pyx_L1_error)</span>
__pyx_t_1 = (__pyx_t_2 != 0);
if (__pyx_t_1) {
/* … */
}
</pre><pre class="cython line score-0">&#xA0;<span class="">432</span>: # A data descriptor.</pre>
<pre class="cython line score-0">&#xA0;<span class="">433</span>: # arbitrary code execution while these run. If they touch self again,</pre>
<pre class="cython line score-0">&#xA0;<span class="">434</span>: # they'll call back into us and we'll repeat the dance.</pre>
<pre class="cython line score-4" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">435</span>: type_attr = getattr(self._local_type, name)</pre>
<pre class='cython code score-4 '> __pyx_t_3 = ((PyObject *)__pyx_v_self-&gt;_local_type);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_3);
__pyx_t_4 = <span class='pyx_c_api'>__Pyx_GetAttr</span>(__pyx_t_3, __pyx_v_name);<span class='error_goto'> if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 435, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_4);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_3); __pyx_t_3 = 0;
__pyx_v_type_attr = __pyx_t_4;
__pyx_t_4 = 0;
</pre><pre class="cython line score-42" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">436</span>: return type(type_attr).__get__(type_attr, self, self._local_type)</pre>
<pre class='cython code score-42 '> <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_r);
__pyx_t_3 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(((PyObject *)Py_TYPE(__pyx_v_type_attr)), __pyx_n_s_get);<span class='error_goto'> if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 436, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_3);
__pyx_t_7 = NULL;
__pyx_t_6 = 0;
if (CYTHON_UNPACK_METHODS &amp;&amp; likely(<span class='py_c_api'>PyMethod_Check</span>(__pyx_t_3))) {
__pyx_t_7 = <span class='py_macro_api'>PyMethod_GET_SELF</span>(__pyx_t_3);
if (likely(__pyx_t_7)) {
PyObject* function = <span class='py_macro_api'>PyMethod_GET_FUNCTION</span>(__pyx_t_3);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_7);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(function);
<span class='pyx_macro_api'>__Pyx_DECREF_SET</span>(__pyx_t_3, function);
__pyx_t_6 = 1;
}
}
#if CYTHON_FAST_PYCALL
if (<span class='py_c_api'>PyFunction_Check</span>(__pyx_t_3)) {
PyObject *__pyx_temp[4] = {__pyx_t_7, __pyx_v_type_attr, ((PyObject *)__pyx_v_self), ((PyObject *)__pyx_v_self-&gt;_local_type)};
__pyx_t_4 = <span class='pyx_c_api'>__Pyx_PyFunction_FastCall</span>(__pyx_t_3, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6);<span class='error_goto'> if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 436, __pyx_L1_error)</span>
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_7); __pyx_t_7 = 0;
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_4);
} else
#endif
#if CYTHON_FAST_PYCCALL
if (<span class='pyx_c_api'>__Pyx_PyFastCFunction_Check</span>(__pyx_t_3)) {
PyObject *__pyx_temp[4] = {__pyx_t_7, __pyx_v_type_attr, ((PyObject *)__pyx_v_self), ((PyObject *)__pyx_v_self-&gt;_local_type)};
__pyx_t_4 = <span class='pyx_c_api'>__Pyx_PyCFunction_FastCall</span>(__pyx_t_3, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6);<span class='error_goto'> if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 436, __pyx_L1_error)</span>
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_7); __pyx_t_7 = 0;
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_4);
} else
#endif
{
__pyx_t_8 = <span class='py_c_api'>PyTuple_New</span>(3+__pyx_t_6);<span class='error_goto'> if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 436, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_8);
if (__pyx_t_7) {
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_7); <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_8, 0, __pyx_t_7); __pyx_t_7 = NULL;
}
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_type_attr);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_v_type_attr);
<span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_8, 0+__pyx_t_6, __pyx_v_type_attr);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(((PyObject *)__pyx_v_self));
<span class='refnanny'>__Pyx_GIVEREF</span>(((PyObject *)__pyx_v_self));
<span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_8, 1+__pyx_t_6, ((PyObject *)__pyx_v_self));
<span class='pyx_macro_api'>__Pyx_INCREF</span>(((PyObject *)__pyx_v_self-&gt;_local_type));
<span class='refnanny'>__Pyx_GIVEREF</span>(((PyObject *)__pyx_v_self-&gt;_local_type));
<span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_8, 2+__pyx_t_6, ((PyObject *)__pyx_v_self-&gt;_local_type));
__pyx_t_4 = <span class='pyx_c_api'>__Pyx_PyObject_Call</span>(__pyx_t_3, __pyx_t_8, NULL);<span class='error_goto'> if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 436, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_4);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_8); __pyx_t_8 = 0;
}
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_3); __pyx_t_3 = 0;
__pyx_r = __pyx_t_4;
__pyx_t_4 = 0;
goto __pyx_L0;
</pre><pre class="cython line score-0">&#xA0;<span class="">437</span>: # Last case is a non-data descriptor. Instance wins.</pre>
<pre class="cython line score-8" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">438</span>: return dct[name]</pre>
<pre class='cython code score-8 '> <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_r);
if (unlikely(__pyx_v_dct == Py_None)) {
<span class='py_c_api'>PyErr_SetString</span>(PyExc_TypeError, "'NoneType' object is not subscriptable");
<span class='error_goto'>__PYX_ERR(0, 438, __pyx_L1_error)</span>
}
__pyx_t_4 = <span class='pyx_c_api'>__Pyx_PyDict_GetItem</span>(__pyx_v_dct, __pyx_v_name);<span class='error_goto'> if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 438, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_4);
__pyx_r = __pyx_t_4;
__pyx_t_4 = 0;
goto __pyx_L0;
</pre><pre class="cython line score-0">&#xA0;<span class="">439</span>: </pre>
<pre class="cython line score-7" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">440</span>: if name in self._local_type_vars:</pre>
<pre class='cython code score-7 '> if (unlikely(__pyx_v_self-&gt;_local_type_vars == Py_None)) {
<span class='py_c_api'>PyErr_SetString</span>(PyExc_TypeError, "'NoneType' object is not iterable");
<span class='error_goto'>__PYX_ERR(0, 440, __pyx_L1_error)</span>
}
__pyx_t_1 = (<span class='pyx_c_api'>__Pyx_PySet_ContainsTF</span>(__pyx_v_name, __pyx_v_self-&gt;_local_type_vars, Py_EQ)); if (unlikely(__pyx_t_1 &lt; 0)) <span class='error_goto'>__PYX_ERR(0, 440, __pyx_L1_error)</span>
__pyx_t_2 = (__pyx_t_1 != 0);
if (__pyx_t_2) {
/* … */
}
</pre><pre class="cython line score-0">&#xA0;<span class="">441</span>: # Not in the dictionary, but is found in the type. It could be</pre>
<pre class="cython line score-0">&#xA0;<span class="">442</span>: # a non-data descriptor still. Some descriptors, like @staticmethod,</pre>
<pre class="cython line score-0">&#xA0;<span class="">443</span>: # return objects (functions, in this case), that are *themselves*</pre>
<pre class="cython line score-0">&#xA0;<span class="">444</span>: # descriptors, which when invoked, again, would do the wrong thing.</pre>
<pre class="cython line score-0">&#xA0;<span class="">445</span>: # So we can't rely on getattr() on the type for them, we have to</pre>
<pre class="cython line score-0">&#xA0;<span class="">446</span>: # look through the MRO dicts ourself.</pre>
<pre class="cython line score-7" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">447</span>: if name not in self._local_type_get_descriptors:</pre>
<pre class='cython code score-7 '> if (unlikely(__pyx_v_self-&gt;_local_type_get_descriptors == Py_None)) {
<span class='py_c_api'>PyErr_SetString</span>(PyExc_TypeError, "'NoneType' object is not iterable");
<span class='error_goto'>__PYX_ERR(0, 447, __pyx_L1_error)</span>
}
__pyx_t_2 = (<span class='pyx_c_api'>__Pyx_PySet_ContainsTF</span>(__pyx_v_name, __pyx_v_self-&gt;_local_type_get_descriptors, Py_NE)); if (unlikely(__pyx_t_2 &lt; 0)) <span class='error_goto'>__PYX_ERR(0, 447, __pyx_L1_error)</span>
__pyx_t_1 = (__pyx_t_2 != 0);
if (__pyx_t_1) {
/* … */
}
</pre><pre class="cython line score-0">&#xA0;<span class="">448</span>: # Not a descriptor, can't execute code. So all we need is</pre>
<pre class="cython line score-0">&#xA0;<span class="">449</span>: # the return value of getattr() on our type.</pre>
<pre class="cython line score-5" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">450</span>: return getattr(self._local_type, name)</pre>
<pre class='cython code score-5 '> <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_r);
__pyx_t_4 = ((PyObject *)__pyx_v_self-&gt;_local_type);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_4);
__pyx_t_3 = <span class='pyx_c_api'>__Pyx_GetAttr</span>(__pyx_t_4, __pyx_v_name);<span class='error_goto'> if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 450, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_3);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_4); __pyx_t_4 = 0;
__pyx_r = __pyx_t_3;
__pyx_t_3 = 0;
goto __pyx_L0;
</pre><pre class="cython line score-0">&#xA0;<span class="">451</span>: </pre>
<pre class="cython line score-62" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">452</span>: for base in self._local_type.mro():</pre>
<pre class='cython code score-62 '> __pyx_t_4 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(((PyObject *)__pyx_v_self-&gt;_local_type), __pyx_n_s_mro);<span class='error_goto'> if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 452, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_4);
__pyx_t_8 = NULL;
if (CYTHON_UNPACK_METHODS &amp;&amp; likely(<span class='py_c_api'>PyMethod_Check</span>(__pyx_t_4))) {
__pyx_t_8 = <span class='py_macro_api'>PyMethod_GET_SELF</span>(__pyx_t_4);
if (likely(__pyx_t_8)) {
PyObject* function = <span class='py_macro_api'>PyMethod_GET_FUNCTION</span>(__pyx_t_4);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_8);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(function);
<span class='pyx_macro_api'>__Pyx_DECREF_SET</span>(__pyx_t_4, function);
}
}
__pyx_t_3 = (__pyx_t_8) ? <span class='pyx_c_api'>__Pyx_PyObject_CallOneArg</span>(__pyx_t_4, __pyx_t_8) : <span class='pyx_c_api'>__Pyx_PyObject_CallNoArg</span>(__pyx_t_4);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_8); __pyx_t_8 = 0;
if (unlikely(!__pyx_t_3)) <span class='error_goto'>__PYX_ERR(0, 452, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_3);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_4); __pyx_t_4 = 0;
if (likely(<span class='py_c_api'>PyList_CheckExact</span>(__pyx_t_3)) || <span class='py_c_api'>PyTuple_CheckExact</span>(__pyx_t_3)) {
__pyx_t_4 = __pyx_t_3; <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_4); __pyx_t_9 = 0;
__pyx_t_10 = NULL;
} else {
__pyx_t_9 = -1; __pyx_t_4 = <span class='py_c_api'>PyObject_GetIter</span>(__pyx_t_3);<span class='error_goto'> if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 452, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_4);
__pyx_t_10 = Py_TYPE(__pyx_t_4)-&gt;tp_iternext;<span class='error_goto'> if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 452, __pyx_L1_error)</span>
}
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_3); __pyx_t_3 = 0;
for (;;) {
if (likely(!__pyx_t_10)) {
if (likely(<span class='py_c_api'>PyList_CheckExact</span>(__pyx_t_4))) {
if (__pyx_t_9 &gt;= <span class='py_macro_api'>PyList_GET_SIZE</span>(__pyx_t_4)) break;
#if CYTHON_ASSUME_SAFE_MACROS &amp;&amp; !CYTHON_AVOID_BORROWED_REFS
__pyx_t_3 = <span class='py_macro_api'>PyList_GET_ITEM</span>(__pyx_t_4, __pyx_t_9); <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_3); __pyx_t_9++; if (unlikely(0 &lt; 0)) <span class='error_goto'>__PYX_ERR(0, 452, __pyx_L1_error)</span>
#else
__pyx_t_3 = <span class='py_macro_api'>PySequence_ITEM</span>(__pyx_t_4, __pyx_t_9); __pyx_t_9++;<span class='error_goto'> if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 452, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_3);
#endif
} else {
if (__pyx_t_9 &gt;= <span class='py_macro_api'>PyTuple_GET_SIZE</span>(__pyx_t_4)) break;
#if CYTHON_ASSUME_SAFE_MACROS &amp;&amp; !CYTHON_AVOID_BORROWED_REFS
__pyx_t_3 = <span class='py_macro_api'>PyTuple_GET_ITEM</span>(__pyx_t_4, __pyx_t_9); <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_3); __pyx_t_9++; if (unlikely(0 &lt; 0)) <span class='error_goto'>__PYX_ERR(0, 452, __pyx_L1_error)</span>
#else
__pyx_t_3 = <span class='py_macro_api'>PySequence_ITEM</span>(__pyx_t_4, __pyx_t_9); __pyx_t_9++;<span class='error_goto'> if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 452, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_3);
#endif
}
} else {
__pyx_t_3 = __pyx_t_10(__pyx_t_4);
if (unlikely(!__pyx_t_3)) {
PyObject* exc_type = <span class='py_c_api'>PyErr_Occurred</span>();
if (exc_type) {
if (likely(<span class='pyx_c_api'>__Pyx_PyErr_GivenExceptionMatches</span>(exc_type, PyExc_StopIteration))) <span class='py_c_api'>PyErr_Clear</span>();
else <span class='error_goto'>__PYX_ERR(0, 452, __pyx_L1_error)</span>
}
break;
}
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_3);
}
<span class='pyx_macro_api'>__Pyx_XDECREF_SET</span>(__pyx_v_base, __pyx_t_3);
__pyx_t_3 = 0;
/* … */
}
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_4); __pyx_t_4 = 0;
</pre><pre class="cython line score-3" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">453</span>: bd = base.__dict__</pre>
<pre class='cython code score-3 '> __pyx_t_3 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(__pyx_v_base, __pyx_n_s_dict);<span class='error_goto'> if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 453, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_3);
<span class='pyx_macro_api'>__Pyx_XDECREF_SET</span>(__pyx_v_bd, __pyx_t_3);
__pyx_t_3 = 0;
</pre><pre class="cython line score-2" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">454</span>: if name in bd:</pre>
<pre class='cython code score-2 '> __pyx_t_1 = (<span class='pyx_c_api'>__Pyx_PySequence_ContainsTF</span>(__pyx_v_name, __pyx_v_bd, Py_EQ)); if (unlikely(__pyx_t_1 &lt; 0)) <span class='error_goto'>__PYX_ERR(0, 454, __pyx_L1_error)</span>
__pyx_t_2 = (__pyx_t_1 != 0);
if (__pyx_t_2) {
/* … */
}
</pre><pre class="cython line score-2" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">455</span>: attr_on_type = bd[name]</pre>
<pre class='cython code score-2 '> __pyx_t_3 = <span class='pyx_c_api'>__Pyx_PyObject_GetItem</span>(__pyx_v_bd, __pyx_v_name);<span class='error_goto'> if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 455, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_3);
__pyx_v_attr_on_type = __pyx_t_3;
__pyx_t_3 = 0;
</pre><pre class="cython line score-41" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">456</span>: result = type(attr_on_type).__get__(attr_on_type, self, self._local_type)</pre>
<pre class='cython code score-41 '> __pyx_t_8 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(((PyObject *)Py_TYPE(__pyx_v_attr_on_type)), __pyx_n_s_get);<span class='error_goto'> if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 456, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_8);
__pyx_t_7 = NULL;
__pyx_t_6 = 0;
if (CYTHON_UNPACK_METHODS &amp;&amp; likely(<span class='py_c_api'>PyMethod_Check</span>(__pyx_t_8))) {
__pyx_t_7 = <span class='py_macro_api'>PyMethod_GET_SELF</span>(__pyx_t_8);
if (likely(__pyx_t_7)) {
PyObject* function = <span class='py_macro_api'>PyMethod_GET_FUNCTION</span>(__pyx_t_8);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_7);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(function);
<span class='pyx_macro_api'>__Pyx_DECREF_SET</span>(__pyx_t_8, function);
__pyx_t_6 = 1;
}
}
#if CYTHON_FAST_PYCALL
if (<span class='py_c_api'>PyFunction_Check</span>(__pyx_t_8)) {
PyObject *__pyx_temp[4] = {__pyx_t_7, __pyx_v_attr_on_type, ((PyObject *)__pyx_v_self), ((PyObject *)__pyx_v_self-&gt;_local_type)};
__pyx_t_3 = <span class='pyx_c_api'>__Pyx_PyFunction_FastCall</span>(__pyx_t_8, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6);<span class='error_goto'> if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 456, __pyx_L1_error)</span>
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_7); __pyx_t_7 = 0;
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_3);
} else
#endif
#if CYTHON_FAST_PYCCALL
if (<span class='pyx_c_api'>__Pyx_PyFastCFunction_Check</span>(__pyx_t_8)) {
PyObject *__pyx_temp[4] = {__pyx_t_7, __pyx_v_attr_on_type, ((PyObject *)__pyx_v_self), ((PyObject *)__pyx_v_self-&gt;_local_type)};
__pyx_t_3 = <span class='pyx_c_api'>__Pyx_PyCFunction_FastCall</span>(__pyx_t_8, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6);<span class='error_goto'> if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 456, __pyx_L1_error)</span>
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_7); __pyx_t_7 = 0;
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_3);
} else
#endif
{
__pyx_t_5 = <span class='py_c_api'>PyTuple_New</span>(3+__pyx_t_6);<span class='error_goto'> if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 456, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);
if (__pyx_t_7) {
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_7); <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_5, 0, __pyx_t_7); __pyx_t_7 = NULL;
}
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_attr_on_type);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_v_attr_on_type);
<span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_5, 0+__pyx_t_6, __pyx_v_attr_on_type);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(((PyObject *)__pyx_v_self));
<span class='refnanny'>__Pyx_GIVEREF</span>(((PyObject *)__pyx_v_self));
<span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_5, 1+__pyx_t_6, ((PyObject *)__pyx_v_self));
<span class='pyx_macro_api'>__Pyx_INCREF</span>(((PyObject *)__pyx_v_self-&gt;_local_type));
<span class='refnanny'>__Pyx_GIVEREF</span>(((PyObject *)__pyx_v_self-&gt;_local_type));
<span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_5, 2+__pyx_t_6, ((PyObject *)__pyx_v_self-&gt;_local_type));
__pyx_t_3 = <span class='pyx_c_api'>__Pyx_PyObject_Call</span>(__pyx_t_8, __pyx_t_5, NULL);<span class='error_goto'> if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 456, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_3);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_5); __pyx_t_5 = 0;
}
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_8); __pyx_t_8 = 0;
__pyx_v_result = __pyx_t_3;
__pyx_t_3 = 0;
</pre><pre class="cython line score-3" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">457</span>: return result</pre>
<pre class='cython code score-3 '> <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_r);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_result);
__pyx_r = __pyx_v_result;
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_4); __pyx_t_4 = 0;
goto __pyx_L0;
</pre><pre class="cython line score-0">&#xA0;<span class="">458</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">459</span>: # It wasn't in the dict and it wasn't in the type.</pre>
<pre class="cython line score-0">&#xA0;<span class="">460</span>: # So the next step is to invoke type(self)__getattr__, if it</pre>
<pre class="cython line score-0">&#xA0;<span class="">461</span>: # exists, otherwise raise an AttributeError.</pre>
<pre class="cython line score-0">&#xA0;<span class="">462</span>: # we will invoke type(self).__getattr__ or raise an attribute error.</pre>
<pre class="cython line score-4" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">463</span>: if hasattr(self._local_type, '__getattr__'):</pre>
<pre class='cython code score-4 '> __pyx_t_4 = ((PyObject *)__pyx_v_self-&gt;_local_type);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_4);
__pyx_t_2 = <span class='pyx_c_api'>__Pyx_HasAttr</span>(__pyx_t_4, __pyx_n_s_getattr);<span class='error_goto'> if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 463, __pyx_L1_error)</span>
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_4); __pyx_t_4 = 0;
__pyx_t_1 = (__pyx_t_2 != 0);
if (__pyx_t_1) {
/* … */
}
</pre><pre class="cython line score-40" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">464</span>: return self._local_type.__getattr__(self, name)</pre>
<pre class='cython code score-40 '> <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_r);
__pyx_t_3 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(((PyObject *)__pyx_v_self-&gt;_local_type), __pyx_n_s_getattr);<span class='error_goto'> if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 464, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_3);
__pyx_t_8 = NULL;
__pyx_t_6 = 0;
if (CYTHON_UNPACK_METHODS &amp;&amp; likely(<span class='py_c_api'>PyMethod_Check</span>(__pyx_t_3))) {
__pyx_t_8 = <span class='py_macro_api'>PyMethod_GET_SELF</span>(__pyx_t_3);
if (likely(__pyx_t_8)) {
PyObject* function = <span class='py_macro_api'>PyMethod_GET_FUNCTION</span>(__pyx_t_3);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_8);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(function);
<span class='pyx_macro_api'>__Pyx_DECREF_SET</span>(__pyx_t_3, function);
__pyx_t_6 = 1;
}
}
#if CYTHON_FAST_PYCALL
if (<span class='py_c_api'>PyFunction_Check</span>(__pyx_t_3)) {
PyObject *__pyx_temp[3] = {__pyx_t_8, ((PyObject *)__pyx_v_self), __pyx_v_name};
__pyx_t_4 = <span class='pyx_c_api'>__Pyx_PyFunction_FastCall</span>(__pyx_t_3, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6);<span class='error_goto'> if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 464, __pyx_L1_error)</span>
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_8); __pyx_t_8 = 0;
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_4);
} else
#endif
#if CYTHON_FAST_PYCCALL
if (<span class='pyx_c_api'>__Pyx_PyFastCFunction_Check</span>(__pyx_t_3)) {
PyObject *__pyx_temp[3] = {__pyx_t_8, ((PyObject *)__pyx_v_self), __pyx_v_name};
__pyx_t_4 = <span class='pyx_c_api'>__Pyx_PyCFunction_FastCall</span>(__pyx_t_3, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6);<span class='error_goto'> if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 464, __pyx_L1_error)</span>
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_8); __pyx_t_8 = 0;
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_4);
} else
#endif
{
__pyx_t_5 = <span class='py_c_api'>PyTuple_New</span>(2+__pyx_t_6);<span class='error_goto'> if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 464, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);
if (__pyx_t_8) {
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_8); <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_5, 0, __pyx_t_8); __pyx_t_8 = NULL;
}
<span class='pyx_macro_api'>__Pyx_INCREF</span>(((PyObject *)__pyx_v_self));
<span class='refnanny'>__Pyx_GIVEREF</span>(((PyObject *)__pyx_v_self));
<span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_5, 0+__pyx_t_6, ((PyObject *)__pyx_v_self));
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_name);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_v_name);
<span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_5, 1+__pyx_t_6, __pyx_v_name);
__pyx_t_4 = <span class='pyx_c_api'>__Pyx_PyObject_Call</span>(__pyx_t_3, __pyx_t_5, NULL);<span class='error_goto'> if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 464, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_4);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_5); __pyx_t_5 = 0;
}
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_3); __pyx_t_3 = 0;
__pyx_r = __pyx_t_4;
__pyx_t_4 = 0;
goto __pyx_L0;
</pre><pre class="cython line score-6" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">465</span>: raise AttributeError("%r object has no attribute '%s'"</pre>
<pre class='cython code score-6 '> __pyx_t_3 = <span class='pyx_c_api'>__Pyx_PyObject_CallOneArg</span>(__pyx_builtin_AttributeError, __pyx_t_4);<span class='error_goto'> if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 465, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_3);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_4); __pyx_t_4 = 0;
<span class='pyx_c_api'>__Pyx_Raise</span>(__pyx_t_3, 0, 0, 0);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_3); __pyx_t_3 = 0;
<span class='error_goto'>__PYX_ERR(0, 465, __pyx_L1_error)</span>
</pre><pre class="cython line score-13" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">466</span>: % (self._local_type.__name__, name))</pre>
<pre class='cython code score-13 '> __pyx_t_4 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(((PyObject *)__pyx_v_self-&gt;_local_type), __pyx_n_s_name);<span class='error_goto'> if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 466, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_4);
__pyx_t_3 = <span class='py_c_api'>PyTuple_New</span>(2);<span class='error_goto'> if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 466, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_3);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_4);
<span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_3, 0, __pyx_t_4);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_name);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_v_name);
<span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_3, 1, __pyx_v_name);
__pyx_t_4 = 0;
__pyx_t_4 = <span class='pyx_c_api'>__Pyx_PyString_Format</span>(__pyx_kp_s_r_object_has_no_attribute_s, __pyx_t_3);<span class='error_goto'> if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 466, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_4);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_3); __pyx_t_3 = 0;
</pre><pre class="cython line score-0">&#xA0;<span class="">467</span>: </pre>
<pre class="cython line score-8" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">468</span>: def __setattr__(self, name, value):</pre>
<pre class='cython code score-8 '>/* Python wrapper */
static int __pyx_pw_6gevent_6_local_5local_5__setattr__(PyObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_6gevent_6_local_5local_5__setattr__(PyObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value) {
int __pyx_r;
<span class='refnanny'>__Pyx_RefNannyDeclarations</span>
<span class='refnanny'>__Pyx_RefNannySetupContext</span>("__setattr__ (wrapper)", 0);
__pyx_r = __pyx_pf_6gevent_6_local_5local_4__setattr__(((struct __pyx_obj_6gevent_6_local_local *)__pyx_v_self), ((PyObject *)__pyx_v_name), ((PyObject *)__pyx_v_value));
/* function exit code */
<span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
return __pyx_r;
}
static int __pyx_pf_6gevent_6_local_5local_4__setattr__(struct __pyx_obj_6gevent_6_local_local *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value) {
PyObject *__pyx_v_dct = NULL;
PyObject *__pyx_v_type_attr = NULL;
int __pyx_r;
<span class='refnanny'>__Pyx_RefNannyDeclarations</span>
<span class='refnanny'>__Pyx_RefNannySetupContext</span>("__setattr__", 0);
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_2);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_3);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_5);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_7);
<span class='pyx_c_api'>__Pyx_AddTraceback</span>("gevent._local.local.__setattr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_dct);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_type_attr);
<span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
return __pyx_r;
}
</pre><pre class="cython line score-2" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">469</span>: if name == '__dict__':</pre>
<pre class='cython code score-2 '> __pyx_t_1 = (<span class='pyx_c_api'>__Pyx_PyString_Equals</span>(__pyx_v_name, __pyx_n_s_dict, Py_EQ)); if (unlikely(__pyx_t_1 &lt; 0)) <span class='error_goto'>__PYX_ERR(0, 469, __pyx_L1_error)</span>
if (unlikely(__pyx_t_1)) {
/* … */
}
</pre><pre class="cython line score-6" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">470</span>: raise AttributeError(</pre>
<pre class='cython code score-6 '> __pyx_t_3 = <span class='pyx_c_api'>__Pyx_PyObject_CallOneArg</span>(__pyx_builtin_AttributeError, __pyx_t_2);<span class='error_goto'> if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 470, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_3);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
<span class='pyx_c_api'>__Pyx_Raise</span>(__pyx_t_3, 0, 0, 0);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_3); __pyx_t_3 = 0;
<span class='error_goto'>__PYX_ERR(0, 470, __pyx_L1_error)</span>
</pre><pre class="cython line score-0">&#xA0;<span class="">471</span>: "%r object attribute '__dict__' is read-only"</pre>
<pre class="cython line score-2" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">472</span>: % type(self))</pre>
<pre class='cython code score-2 '> __pyx_t_2 = <span class='pyx_c_api'>__Pyx_PyString_FormatSafe</span>(__pyx_kp_s_r_object_attribute___dict___is, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 472, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
</pre><pre class="cython line score-0">&#xA0;<span class="">473</span>: </pre>
<pre class="cython line score-7" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">474</span>: if name in _local_attrs:</pre>
<pre class='cython code score-7 '> if (unlikely(__pyx_v_6gevent_6_local__local_attrs == Py_None)) {
<span class='py_c_api'>PyErr_SetString</span>(PyExc_TypeError, "'NoneType' object is not iterable");
<span class='error_goto'>__PYX_ERR(0, 474, __pyx_L1_error)</span>
}
__pyx_t_1 = (<span class='pyx_c_api'>__Pyx_PySet_ContainsTF</span>(__pyx_v_name, __pyx_v_6gevent_6_local__local_attrs, Py_EQ)); if (unlikely(__pyx_t_1 &lt; 0)) <span class='error_goto'>__PYX_ERR(0, 474, __pyx_L1_error)</span>
__pyx_t_4 = (__pyx_t_1 != 0);
if (__pyx_t_4) {
/* … */
}
</pre><pre class="cython line score-42" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">475</span>: object.__setattr__(self, name, value)</pre>
<pre class='cython code score-42 '> __pyx_t_2 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(__pyx_builtin_object, __pyx_n_s_setattr);<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 475, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
__pyx_t_5 = NULL;
__pyx_t_6 = 0;
if (CYTHON_UNPACK_METHODS &amp;&amp; likely(<span class='py_c_api'>PyMethod_Check</span>(__pyx_t_2))) {
__pyx_t_5 = <span class='py_macro_api'>PyMethod_GET_SELF</span>(__pyx_t_2);
if (likely(__pyx_t_5)) {
PyObject* function = <span class='py_macro_api'>PyMethod_GET_FUNCTION</span>(__pyx_t_2);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_5);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(function);
<span class='pyx_macro_api'>__Pyx_DECREF_SET</span>(__pyx_t_2, function);
__pyx_t_6 = 1;
}
}
#if CYTHON_FAST_PYCALL
if (<span class='py_c_api'>PyFunction_Check</span>(__pyx_t_2)) {
PyObject *__pyx_temp[4] = {__pyx_t_5, ((PyObject *)__pyx_v_self), __pyx_v_name, __pyx_v_value};
__pyx_t_3 = <span class='pyx_c_api'>__Pyx_PyFunction_FastCall</span>(__pyx_t_2, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6);<span class='error_goto'> if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 475, __pyx_L1_error)</span>
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_5); __pyx_t_5 = 0;
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_3);
} else
#endif
#if CYTHON_FAST_PYCCALL
if (<span class='pyx_c_api'>__Pyx_PyFastCFunction_Check</span>(__pyx_t_2)) {
PyObject *__pyx_temp[4] = {__pyx_t_5, ((PyObject *)__pyx_v_self), __pyx_v_name, __pyx_v_value};
__pyx_t_3 = <span class='pyx_c_api'>__Pyx_PyCFunction_FastCall</span>(__pyx_t_2, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6);<span class='error_goto'> if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 475, __pyx_L1_error)</span>
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_5); __pyx_t_5 = 0;
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_3);
} else
#endif
{
__pyx_t_7 = <span class='py_c_api'>PyTuple_New</span>(3+__pyx_t_6);<span class='error_goto'> if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 475, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_7);
if (__pyx_t_5) {
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_5); <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_7, 0, __pyx_t_5); __pyx_t_5 = NULL;
}
<span class='pyx_macro_api'>__Pyx_INCREF</span>(((PyObject *)__pyx_v_self));
<span class='refnanny'>__Pyx_GIVEREF</span>(((PyObject *)__pyx_v_self));
<span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_7, 0+__pyx_t_6, ((PyObject *)__pyx_v_self));
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_name);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_v_name);
<span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_7, 1+__pyx_t_6, __pyx_v_name);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_value);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_v_value);
<span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_7, 2+__pyx_t_6, __pyx_v_value);
__pyx_t_3 = <span class='pyx_c_api'>__Pyx_PyObject_Call</span>(__pyx_t_2, __pyx_t_7, NULL);<span class='error_goto'> if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 475, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_3);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_7); __pyx_t_7 = 0;
}
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_3); __pyx_t_3 = 0;
</pre><pre class="cython line score-0" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">476</span>: return</pre>
<pre class='cython code score-0 '> __pyx_r = 0;
goto __pyx_L0;
</pre><pre class="cython line score-0">&#xA0;<span class="">477</span>: </pre>
<pre class="cython line score-0" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">478</span>: dct = _local_get_dict(self)</pre>
<pre class='cython code score-0 '> __pyx_t_3 = __pyx_f_6gevent_6_local__local_get_dict(__pyx_v_self);<span class='error_goto'> if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 478, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_3);
__pyx_v_dct = ((PyObject*)__pyx_t_3);
__pyx_t_3 = 0;
</pre><pre class="cython line score-0">&#xA0;<span class="">479</span>: </pre>
<pre class="cython line score-0" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">480</span>: if self._local_type is local:</pre>
<pre class='cython code score-0 '> __pyx_t_4 = (__pyx_v_self-&gt;_local_type == __pyx_ptype_6gevent_6_local_local);
__pyx_t_1 = (__pyx_t_4 != 0);
if (__pyx_t_1) {
/* … */
}
</pre><pre class="cython line score-0">&#xA0;<span class="">481</span>: # Optimization: If we're not subclassed, we can't</pre>
<pre class="cython line score-0">&#xA0;<span class="">482</span>: # have data descriptors, so this goes right in the dict.</pre>
<pre class="cython line score-10" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">483</span>: dct[name] = value</pre>
<pre class='cython code score-10 '> if (unlikely(__pyx_v_dct == Py_None)) {
<span class='py_c_api'>PyErr_SetString</span>(PyExc_TypeError, "'NoneType' object is not subscriptable");
<span class='error_goto'>__PYX_ERR(0, 483, __pyx_L1_error)</span>
}
if (unlikely(<span class='py_c_api'>PyDict_SetItem</span>(__pyx_v_dct, __pyx_v_name, __pyx_v_value) &lt; 0)) <span class='error_goto'>__PYX_ERR(0, 483, __pyx_L1_error)</span>
</pre><pre class="cython line score-0" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">484</span>: return</pre>
<pre class='cython code score-0 '> __pyx_r = 0;
goto __pyx_L0;
</pre><pre class="cython line score-0">&#xA0;<span class="">485</span>: </pre>
<pre class="cython line score-7" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">486</span>: if name in self._local_type_vars:</pre>
<pre class='cython code score-7 '> if (unlikely(__pyx_v_self-&gt;_local_type_vars == Py_None)) {
<span class='py_c_api'>PyErr_SetString</span>(PyExc_TypeError, "'NoneType' object is not iterable");
<span class='error_goto'>__PYX_ERR(0, 486, __pyx_L1_error)</span>
}
__pyx_t_1 = (<span class='pyx_c_api'>__Pyx_PySet_ContainsTF</span>(__pyx_v_name, __pyx_v_self-&gt;_local_type_vars, Py_EQ)); if (unlikely(__pyx_t_1 &lt; 0)) <span class='error_goto'>__PYX_ERR(0, 486, __pyx_L1_error)</span>
__pyx_t_4 = (__pyx_t_1 != 0);
if (__pyx_t_4) {
/* … */
}
</pre><pre class="cython line score-7" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">487</span>: if name in self._local_type_set_descriptors:</pre>
<pre class='cython code score-7 '> if (unlikely(__pyx_v_self-&gt;_local_type_set_descriptors == Py_None)) {
<span class='py_c_api'>PyErr_SetString</span>(PyExc_TypeError, "'NoneType' object is not iterable");
<span class='error_goto'>__PYX_ERR(0, 487, __pyx_L1_error)</span>
}
__pyx_t_4 = (<span class='pyx_c_api'>__Pyx_PySet_ContainsTF</span>(__pyx_v_name, __pyx_v_self-&gt;_local_type_set_descriptors, Py_EQ)); if (unlikely(__pyx_t_4 &lt; 0)) <span class='error_goto'>__PYX_ERR(0, 487, __pyx_L1_error)</span>
__pyx_t_1 = (__pyx_t_4 != 0);
if (__pyx_t_1) {
/* … */
}
</pre><pre class="cython line score-4" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">488</span>: type_attr = getattr(self._local_type, name, _marker)</pre>
<pre class='cython code score-4 '> __pyx_t_3 = ((PyObject *)__pyx_v_self-&gt;_local_type);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_3);
__pyx_t_2 = __pyx_v_6gevent_6_local__marker;
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_2);
__pyx_t_7 = __Pyx_GetAttr3(__pyx_t_3, __pyx_v_name, __pyx_t_2);<span class='error_goto'> if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 488, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_7);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_3); __pyx_t_3 = 0;
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
__pyx_v_type_attr = __pyx_t_7;
__pyx_t_7 = 0;
</pre><pre class="cython line score-0">&#xA0;<span class="">489</span>: # A data descriptor, like a property or a slot.</pre>
<pre class="cython line score-42" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">490</span>: type(type_attr).__set__(type_attr, self, value)</pre>
<pre class='cython code score-42 '> __pyx_t_2 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(((PyObject *)Py_TYPE(__pyx_v_type_attr)), __pyx_n_s_set);<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 490, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
__pyx_t_3 = NULL;
__pyx_t_6 = 0;
if (CYTHON_UNPACK_METHODS &amp;&amp; likely(<span class='py_c_api'>PyMethod_Check</span>(__pyx_t_2))) {
__pyx_t_3 = <span class='py_macro_api'>PyMethod_GET_SELF</span>(__pyx_t_2);
if (likely(__pyx_t_3)) {
PyObject* function = <span class='py_macro_api'>PyMethod_GET_FUNCTION</span>(__pyx_t_2);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_3);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(function);
<span class='pyx_macro_api'>__Pyx_DECREF_SET</span>(__pyx_t_2, function);
__pyx_t_6 = 1;
}
}
#if CYTHON_FAST_PYCALL
if (<span class='py_c_api'>PyFunction_Check</span>(__pyx_t_2)) {
PyObject *__pyx_temp[4] = {__pyx_t_3, __pyx_v_type_attr, ((PyObject *)__pyx_v_self), __pyx_v_value};
__pyx_t_7 = <span class='pyx_c_api'>__Pyx_PyFunction_FastCall</span>(__pyx_t_2, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6);<span class='error_goto'> if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 490, __pyx_L1_error)</span>
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_3); __pyx_t_3 = 0;
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_7);
} else
#endif
#if CYTHON_FAST_PYCCALL
if (<span class='pyx_c_api'>__Pyx_PyFastCFunction_Check</span>(__pyx_t_2)) {
PyObject *__pyx_temp[4] = {__pyx_t_3, __pyx_v_type_attr, ((PyObject *)__pyx_v_self), __pyx_v_value};
__pyx_t_7 = <span class='pyx_c_api'>__Pyx_PyCFunction_FastCall</span>(__pyx_t_2, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6);<span class='error_goto'> if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 490, __pyx_L1_error)</span>
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_3); __pyx_t_3 = 0;
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_7);
} else
#endif
{
__pyx_t_5 = <span class='py_c_api'>PyTuple_New</span>(3+__pyx_t_6);<span class='error_goto'> if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 490, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);
if (__pyx_t_3) {
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_3); <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL;
}
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_type_attr);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_v_type_attr);
<span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_5, 0+__pyx_t_6, __pyx_v_type_attr);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(((PyObject *)__pyx_v_self));
<span class='refnanny'>__Pyx_GIVEREF</span>(((PyObject *)__pyx_v_self));
<span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_5, 1+__pyx_t_6, ((PyObject *)__pyx_v_self));
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_value);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_v_value);
<span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_5, 2+__pyx_t_6, __pyx_v_value);
__pyx_t_7 = <span class='pyx_c_api'>__Pyx_PyObject_Call</span>(__pyx_t_2, __pyx_t_5, NULL);<span class='error_goto'> if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 490, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_7);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_5); __pyx_t_5 = 0;
}
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_7); __pyx_t_7 = 0;
</pre><pre class="cython line score-0" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">491</span>: return</pre>
<pre class='cython code score-0 '> __pyx_r = 0;
goto __pyx_L0;
</pre><pre class="cython line score-0">&#xA0;<span class="">492</span>: # Otherwise it goes directly in the dict</pre>
<pre class="cython line score-10" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">493</span>: dct[name] = value</pre>
<pre class='cython code score-10 '> if (unlikely(__pyx_v_dct == Py_None)) {
<span class='py_c_api'>PyErr_SetString</span>(PyExc_TypeError, "'NoneType' object is not subscriptable");
<span class='error_goto'>__PYX_ERR(0, 493, __pyx_L1_error)</span>
}
if (unlikely(<span class='py_c_api'>PyDict_SetItem</span>(__pyx_v_dct, __pyx_v_name, __pyx_v_value) &lt; 0)) <span class='error_goto'>__PYX_ERR(0, 493, __pyx_L1_error)</span>
</pre><pre class="cython line score-0">&#xA0;<span class="">494</span>: </pre>
<pre class="cython line score-8" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">495</span>: def __delattr__(self, name):</pre>
<pre class='cython code score-8 '>/* Python wrapper */
static int __pyx_pw_6gevent_6_local_5local_7__delattr__(PyObject *__pyx_v_self, PyObject *__pyx_v_name); /*proto*/
static int __pyx_pw_6gevent_6_local_5local_7__delattr__(PyObject *__pyx_v_self, PyObject *__pyx_v_name) {
int __pyx_r;
<span class='refnanny'>__Pyx_RefNannyDeclarations</span>
<span class='refnanny'>__Pyx_RefNannySetupContext</span>("__delattr__ (wrapper)", 0);
__pyx_r = __pyx_pf_6gevent_6_local_5local_6__delattr__(((struct __pyx_obj_6gevent_6_local_local *)__pyx_v_self), ((PyObject *)__pyx_v_name));
/* function exit code */
<span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
return __pyx_r;
}
static int __pyx_pf_6gevent_6_local_5local_6__delattr__(struct __pyx_obj_6gevent_6_local_local *__pyx_v_self, PyObject *__pyx_v_name) {
PyObject *__pyx_v_type_attr = NULL;
PyObject *__pyx_v_dct = NULL;
int __pyx_r;
<span class='refnanny'>__Pyx_RefNannyDeclarations</span>
<span class='refnanny'>__Pyx_RefNannySetupContext</span>("__delattr__", 0);
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_2);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_3);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_5);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_7);
<span class='pyx_c_api'>__Pyx_AddTraceback</span>("gevent._local.local.__delattr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_type_attr);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_dct);
<span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
return __pyx_r;
}
</pre><pre class="cython line score-2" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">496</span>: if name == '__dict__':</pre>
<pre class='cython code score-2 '> __pyx_t_1 = (<span class='pyx_c_api'>__Pyx_PyString_Equals</span>(__pyx_v_name, __pyx_n_s_dict, Py_EQ)); if (unlikely(__pyx_t_1 &lt; 0)) <span class='error_goto'>__PYX_ERR(0, 496, __pyx_L1_error)</span>
if (unlikely(__pyx_t_1)) {
/* … */
}
</pre><pre class="cython line score-6" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">497</span>: raise AttributeError(</pre>
<pre class='cython code score-6 '> __pyx_t_3 = <span class='pyx_c_api'>__Pyx_PyObject_CallOneArg</span>(__pyx_builtin_AttributeError, __pyx_t_2);<span class='error_goto'> if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 497, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_3);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
<span class='pyx_c_api'>__Pyx_Raise</span>(__pyx_t_3, 0, 0, 0);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_3); __pyx_t_3 = 0;
<span class='error_goto'>__PYX_ERR(0, 497, __pyx_L1_error)</span>
</pre><pre class="cython line score-0">&#xA0;<span class="">498</span>: "%r object attribute '__dict__' is read-only"</pre>
<pre class="cython line score-8" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">499</span>: % self.__class__.__name__)</pre>
<pre class='cython code score-8 '> __pyx_t_2 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(((PyObject *)__pyx_v_self), __pyx_n_s_class);<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 499, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
__pyx_t_3 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(__pyx_t_2, __pyx_n_s_name);<span class='error_goto'> if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 499, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_3);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
__pyx_t_2 = <span class='pyx_c_api'>__Pyx_PyString_FormatSafe</span>(__pyx_kp_s_r_object_attribute___dict___is, __pyx_t_3);<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 499, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_3); __pyx_t_3 = 0;
</pre><pre class="cython line score-0">&#xA0;<span class="">500</span>: </pre>
<pre class="cython line score-7" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">501</span>: if name in self._local_type_vars:</pre>
<pre class='cython code score-7 '> if (unlikely(__pyx_v_self-&gt;_local_type_vars == Py_None)) {
<span class='py_c_api'>PyErr_SetString</span>(PyExc_TypeError, "'NoneType' object is not iterable");
<span class='error_goto'>__PYX_ERR(0, 501, __pyx_L1_error)</span>
}
__pyx_t_1 = (<span class='pyx_c_api'>__Pyx_PySet_ContainsTF</span>(__pyx_v_name, __pyx_v_self-&gt;_local_type_vars, Py_EQ)); if (unlikely(__pyx_t_1 &lt; 0)) <span class='error_goto'>__PYX_ERR(0, 501, __pyx_L1_error)</span>
__pyx_t_4 = (__pyx_t_1 != 0);
if (__pyx_t_4) {
/* … */
}
</pre><pre class="cython line score-7" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">502</span>: if name in self._local_type_del_descriptors:</pre>
<pre class='cython code score-7 '> if (unlikely(__pyx_v_self-&gt;_local_type_del_descriptors == Py_None)) {
<span class='py_c_api'>PyErr_SetString</span>(PyExc_TypeError, "'NoneType' object is not iterable");
<span class='error_goto'>__PYX_ERR(0, 502, __pyx_L1_error)</span>
}
__pyx_t_4 = (<span class='pyx_c_api'>__Pyx_PySet_ContainsTF</span>(__pyx_v_name, __pyx_v_self-&gt;_local_type_del_descriptors, Py_EQ)); if (unlikely(__pyx_t_4 &lt; 0)) <span class='error_goto'>__PYX_ERR(0, 502, __pyx_L1_error)</span>
__pyx_t_1 = (__pyx_t_4 != 0);
if (__pyx_t_1) {
/* … */
}
</pre><pre class="cython line score-0">&#xA0;<span class="">503</span>: # A data descriptor, like a property or a slot.</pre>
<pre class="cython line score-4" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">504</span>: type_attr = getattr(self._local_type, name, _marker)</pre>
<pre class='cython code score-4 '> __pyx_t_3 = ((PyObject *)__pyx_v_self-&gt;_local_type);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_3);
__pyx_t_2 = __pyx_v_6gevent_6_local__marker;
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_2);
__pyx_t_5 = __Pyx_GetAttr3(__pyx_t_3, __pyx_v_name, __pyx_t_2);<span class='error_goto'> if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 504, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_3); __pyx_t_3 = 0;
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
__pyx_v_type_attr = __pyx_t_5;
__pyx_t_5 = 0;
</pre><pre class="cython line score-40" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">505</span>: type(type_attr).__delete__(type_attr, self)</pre>
<pre class='cython code score-40 '> __pyx_t_2 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(((PyObject *)Py_TYPE(__pyx_v_type_attr)), __pyx_n_s_delete);<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 505, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
__pyx_t_3 = NULL;
__pyx_t_6 = 0;
if (CYTHON_UNPACK_METHODS &amp;&amp; likely(<span class='py_c_api'>PyMethod_Check</span>(__pyx_t_2))) {
__pyx_t_3 = <span class='py_macro_api'>PyMethod_GET_SELF</span>(__pyx_t_2);
if (likely(__pyx_t_3)) {
PyObject* function = <span class='py_macro_api'>PyMethod_GET_FUNCTION</span>(__pyx_t_2);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_3);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(function);
<span class='pyx_macro_api'>__Pyx_DECREF_SET</span>(__pyx_t_2, function);
__pyx_t_6 = 1;
}
}
#if CYTHON_FAST_PYCALL
if (<span class='py_c_api'>PyFunction_Check</span>(__pyx_t_2)) {
PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_v_type_attr, ((PyObject *)__pyx_v_self)};
__pyx_t_5 = <span class='pyx_c_api'>__Pyx_PyFunction_FastCall</span>(__pyx_t_2, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6);<span class='error_goto'> if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 505, __pyx_L1_error)</span>
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_3); __pyx_t_3 = 0;
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);
} else
#endif
#if CYTHON_FAST_PYCCALL
if (<span class='pyx_c_api'>__Pyx_PyFastCFunction_Check</span>(__pyx_t_2)) {
PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_v_type_attr, ((PyObject *)__pyx_v_self)};
__pyx_t_5 = <span class='pyx_c_api'>__Pyx_PyCFunction_FastCall</span>(__pyx_t_2, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6);<span class='error_goto'> if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 505, __pyx_L1_error)</span>
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_3); __pyx_t_3 = 0;
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);
} else
#endif
{
__pyx_t_7 = <span class='py_c_api'>PyTuple_New</span>(2+__pyx_t_6);<span class='error_goto'> if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 505, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_7);
if (__pyx_t_3) {
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_3); <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_7, 0, __pyx_t_3); __pyx_t_3 = NULL;
}
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_type_attr);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_v_type_attr);
<span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_7, 0+__pyx_t_6, __pyx_v_type_attr);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(((PyObject *)__pyx_v_self));
<span class='refnanny'>__Pyx_GIVEREF</span>(((PyObject *)__pyx_v_self));
<span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_7, 1+__pyx_t_6, ((PyObject *)__pyx_v_self));
__pyx_t_5 = <span class='pyx_c_api'>__Pyx_PyObject_Call</span>(__pyx_t_2, __pyx_t_7, NULL);<span class='error_goto'> if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 505, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_7); __pyx_t_7 = 0;
}
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_5); __pyx_t_5 = 0;
</pre><pre class="cython line score-0" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">506</span>: return</pre>
<pre class='cython code score-0 '> __pyx_r = 0;
goto __pyx_L0;
</pre><pre class="cython line score-0">&#xA0;<span class="">507</span>: # Otherwise it goes directly in the dict</pre>
<pre class="cython line score-0">&#xA0;<span class="">508</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">509</span>: # Begin inlined function _get_dict()</pre>
<pre class="cython line score-0" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">510</span>: dct = _local_get_dict(self)</pre>
<pre class='cython code score-0 '> __pyx_t_5 = __pyx_f_6gevent_6_local__local_get_dict(__pyx_v_self);<span class='error_goto'> if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 510, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);
__pyx_v_dct = ((PyObject*)__pyx_t_5);
__pyx_t_5 = 0;
</pre><pre class="cython line score-0">&#xA0;<span class="">511</span>: </pre>
<pre class="cython line score-9" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">512</span>: try:</pre>
<pre class='cython code score-9 '> {
/*try:*/ {
/* … */
}
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_8); __pyx_t_8 = 0;
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_9); __pyx_t_9 = 0;
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_10); __pyx_t_10 = 0;
goto __pyx_L11_try_end;
__pyx_L6_error:;
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_3); __pyx_t_3 = 0;
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_7); __pyx_t_7 = 0;
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_5); __pyx_t_5 = 0;
/* … */
<span class='refnanny'>__Pyx_XGIVEREF</span>(__pyx_t_8);
<span class='refnanny'>__Pyx_XGIVEREF</span>(__pyx_t_9);
<span class='refnanny'>__Pyx_XGIVEREF</span>(__pyx_t_10);
<span class='pyx_c_api'>__Pyx_ExceptionReset</span>(__pyx_t_8, __pyx_t_9, __pyx_t_10);
goto __pyx_L1_error;
__pyx_L11_try_end:;
}
</pre><pre class="cython line score-10" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">513</span>: del dct[name]</pre>
<pre class='cython code score-10 '> if (unlikely(__pyx_v_dct == Py_None)) {
<span class='py_c_api'>PyErr_SetString</span>(PyExc_TypeError, "'NoneType' object is not subscriptable");
<span class='error_goto'>__PYX_ERR(0, 513, __pyx_L6_error)</span>
}
if (unlikely(<span class='py_c_api'>PyDict_DelItem</span>(__pyx_v_dct, __pyx_v_name) &lt; 0)) <span class='error_goto'>__PYX_ERR(0, 513, __pyx_L6_error)</span>
</pre><pre class="cython line score-6" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">514</span>: except KeyError:</pre>
<pre class='cython code score-6 '> __pyx_t_6 = <span class='pyx_c_api'>__Pyx_PyErr_ExceptionMatches</span>(__pyx_builtin_KeyError);
if (__pyx_t_6) {
<span class='pyx_c_api'>__Pyx_AddTraceback</span>("gevent._local.local.__delattr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
if (<span class='pyx_c_api'>__Pyx_GetException</span>(&amp;__pyx_t_5, &amp;__pyx_t_2, &amp;__pyx_t_7) &lt; 0) <span class='error_goto'>__PYX_ERR(0, 514, __pyx_L8_except_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_5);
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_7);
</pre><pre class="cython line score-5" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">515</span>: raise AttributeError(name)</pre>
<pre class='cython code score-5 '> __pyx_t_3 = <span class='pyx_c_api'>__Pyx_PyObject_CallOneArg</span>(__pyx_builtin_AttributeError, __pyx_v_name);<span class='error_goto'> if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 515, __pyx_L8_except_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_3);
<span class='pyx_c_api'>__Pyx_Raise</span>(__pyx_t_3, 0, 0, 0);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_3); __pyx_t_3 = 0;
<span class='error_goto'>__PYX_ERR(0, 515, __pyx_L8_except_error)</span>
}
goto __pyx_L8_except_error;
__pyx_L8_except_error:;
</pre><pre class="cython line score-0">&#xA0;<span class="">516</span>: </pre>
<pre class="cython line score-70" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">517</span>: def __copy__(self):</pre>
<pre class='cython code score-70 '>static PyObject *__pyx_pw_6gevent_6_local_5local_9__copy__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static struct __pyx_obj_6gevent_6_local_local *__pyx_f_6gevent_6_local_5local___copy__(struct __pyx_obj_6gevent_6_local_local *__pyx_v_self, int __pyx_skip_dispatch) {
struct __pyx_obj_6gevent_6_local__localimpl_dict_entry *__pyx_v_entry = 0;
PyObject *__pyx_v_dct = 0;
PyObject *__pyx_v_duplicate = 0;
struct __pyx_obj_6gevent_6_local_local *__pyx_v_instance = 0;
struct __pyx_obj_6gevent_6_local__localimpl *__pyx_v_impl = NULL;
PyTypeObject *__pyx_v_cls = NULL;
struct __pyx_obj_6gevent_6_local_local *__pyx_r = NULL;
<span class='refnanny'>__Pyx_RefNannyDeclarations</span>
<span class='refnanny'>__Pyx_RefNannySetupContext</span>("__copy__", 0);
/* Check if called by wrapper */
if (unlikely(__pyx_skip_dispatch)) ;
/* Check if overridden in Python */
else if (unlikely((Py_TYPE(((PyObject *)__pyx_v_self))-&gt;tp_dictoffset != 0) || (Py_TYPE(((PyObject *)__pyx_v_self))-&gt;tp_flags &amp; (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))) {
#if CYTHON_USE_DICT_VERSIONS &amp;&amp; CYTHON_USE_PYTYPE_LOOKUP
static PY_UINT64_T tp_dict_version = 0, obj_dict_version = 0;
if (likely(Py_TYPE(((PyObject *)__pyx_v_self))-&gt;tp_dict &amp;&amp; tp_dict_version == __PYX_GET_DICT_VERSION(Py_TYPE(((PyObject *)__pyx_v_self))-&gt;tp_dict) &amp;&amp; (!Py_TYPE(((PyObject *)__pyx_v_self))-&gt;tp_dictoffset || obj_dict_version == __PYX_GET_DICT_VERSION(_<span class='py_c_api'>PyObject_GetDictPtr</span>(((PyObject *)__pyx_v_self))))));
else {
PY_UINT64_T type_dict_guard = (likely(Py_TYPE(((PyObject *)__pyx_v_self))-&gt;tp_dict)) ? __PYX_GET_DICT_VERSION(Py_TYPE(((PyObject *)__pyx_v_self))-&gt;tp_dict) : 0;
#endif
__pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(((PyObject *)__pyx_v_self), __pyx_n_s_copy);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 517, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)(void*)__pyx_pw_6gevent_6_local_5local_9__copy__)) {
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(((PyObject *)__pyx_r));
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_1);
__pyx_t_3 = __pyx_t_1; __pyx_t_4 = NULL;
if (CYTHON_UNPACK_METHODS &amp;&amp; unlikely(<span class='py_c_api'>PyMethod_Check</span>(__pyx_t_3))) {
__pyx_t_4 = <span class='py_macro_api'>PyMethod_GET_SELF</span>(__pyx_t_3);
if (likely(__pyx_t_4)) {
PyObject* function = <span class='py_macro_api'>PyMethod_GET_FUNCTION</span>(__pyx_t_3);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_4);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(function);
<span class='pyx_macro_api'>__Pyx_DECREF_SET</span>(__pyx_t_3, function);
}
}
__pyx_t_2 = (__pyx_t_4) ? <span class='pyx_c_api'>__Pyx_PyObject_CallOneArg</span>(__pyx_t_3, __pyx_t_4) : <span class='pyx_c_api'>__Pyx_PyObject_CallNoArg</span>(__pyx_t_3);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_2)) <span class='error_goto'>__PYX_ERR(0, 517, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_3); __pyx_t_3 = 0;
if (!(likely(((__pyx_t_2) == Py_None) || likely(<span class='pyx_c_api'>__Pyx_TypeTest</span>(__pyx_t_2, __pyx_ptype_6gevent_6_local_local))))) <span class='error_goto'>__PYX_ERR(0, 517, __pyx_L1_error)</span>
__pyx_r = ((struct __pyx_obj_6gevent_6_local_local *)__pyx_t_2);
__pyx_t_2 = 0;
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
goto __pyx_L0;
}
#if CYTHON_USE_DICT_VERSIONS &amp;&amp; CYTHON_USE_PYTYPE_LOOKUP
tp_dict_version = likely(Py_TYPE(((PyObject *)__pyx_v_self))-&gt;tp_dict) ? __PYX_GET_DICT_VERSION(Py_TYPE(((PyObject *)__pyx_v_self))-&gt;tp_dict) : 0;
obj_dict_version = likely(Py_TYPE(((PyObject *)__pyx_v_self))-&gt;tp_dictoffset) ? __PYX_GET_DICT_VERSION(_<span class='py_c_api'>PyObject_GetDictPtr</span>(((PyObject *)__pyx_v_self))) : 0;
if (unlikely(type_dict_guard != tp_dict_version)) {
tp_dict_version = obj_dict_version = 0;
}
#endif
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
#if CYTHON_USE_DICT_VERSIONS &amp;&amp; CYTHON_USE_PYTYPE_LOOKUP
}
#endif
}
/* … */
/* function exit code */
__pyx_L1_error:;
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_1);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_2);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_3);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_4);
<span class='pyx_c_api'>__Pyx_AddTraceback</span>("gevent._local.local.__copy__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
<span class='pyx_macro_api'>__Pyx_XDECREF</span>((PyObject *)__pyx_v_entry);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_dct);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_duplicate);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>((PyObject *)__pyx_v_instance);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>((PyObject *)__pyx_v_impl);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_cls);
<span class='refnanny'>__Pyx_XGIVEREF</span>((PyObject *)__pyx_r);
<span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
return __pyx_r;
}
/* Python wrapper */
static PyObject *__pyx_pw_6gevent_6_local_5local_9__copy__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_6gevent_6_local_5local_8__copy__[] = "local.__copy__(self) -&gt; local";
static PyMethodDef __pyx_mdef_6gevent_6_local_5local_9__copy__ = {"__copy__", (PyCFunction)__pyx_pw_6gevent_6_local_5local_9__copy__, METH_NOARGS, __pyx_doc_6gevent_6_local_5local_8__copy__};
static PyObject *__pyx_pw_6gevent_6_local_5local_9__copy__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
PyObject *__pyx_r = 0;
<span class='refnanny'>__Pyx_RefNannyDeclarations</span>
<span class='refnanny'>__Pyx_RefNannySetupContext</span>("__copy__ (wrapper)", 0);
__pyx_r = __pyx_pf_6gevent_6_local_5local_8__copy__(((struct __pyx_obj_6gevent_6_local_local *)__pyx_v_self));
/* function exit code */
<span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
return __pyx_r;
}
static PyObject *__pyx_pf_6gevent_6_local_5local_8__copy__(struct __pyx_obj_6gevent_6_local_local *__pyx_v_self) {
PyObject *__pyx_r = NULL;
<span class='refnanny'>__Pyx_RefNannyDeclarations</span>
<span class='refnanny'>__Pyx_RefNannySetupContext</span>("__copy__", 0);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_r);
__pyx_t_1 = ((PyObject *)__pyx_f_6gevent_6_local_5local___copy__(__pyx_v_self, 1));<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 517, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
__pyx_r = __pyx_t_1;
__pyx_t_1 = 0;
goto __pyx_L0;
/* function exit code */
__pyx_L1_error:;
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_1);
<span class='pyx_c_api'>__Pyx_AddTraceback</span>("gevent._local.local.__copy__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
<span class='refnanny'>__Pyx_XGIVEREF</span>(__pyx_r);
<span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
return __pyx_r;
}
/* … */
__pyx_tuple__8 = <span class='py_c_api'>PyTuple_Pack</span>(1, __pyx_n_s_self);<span class='error_goto'> if (unlikely(!__pyx_tuple__8)) __PYX_ERR(0, 517, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_tuple__8);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_tuple__8);
/* … */
__pyx_t_2 = <span class='pyx_c_api'>__Pyx_CyFunction_NewEx</span>(&amp;__pyx_mdef_6gevent_6_local_5local_9__copy__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_local___copy, NULL, __pyx_n_s_gevent__local, __pyx_d, ((PyObject *)__pyx_codeobj__9));<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 517, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
if (<span class='py_c_api'>PyDict_SetItem</span>((PyObject *)__pyx_ptype_6gevent_6_local_local-&gt;tp_dict, __pyx_n_s_copy, __pyx_t_2) &lt; 0) <span class='error_goto'>__PYX_ERR(0, 517, __pyx_L1_error)</span>
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
<span class='py_c_api'>PyType_Modified</span>(__pyx_ptype_6gevent_6_local_local);
__pyx_codeobj__9 = (PyObject*)<span class='pyx_c_api'>__Pyx_PyCode_New</span>(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__8, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_gevent_local_py, __pyx_n_s_copy, 517, __pyx_empty_bytes);<span class='error_goto'> if (unlikely(!__pyx_codeobj__9)) __PYX_ERR(0, 517, __pyx_L1_error)</span>
</pre><pre class="cython line score-1" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">518</span>: impl = self._local__impl</pre>
<pre class='cython code score-1 '> __pyx_t_1 = ((PyObject *)__pyx_v_self-&gt;_local__impl);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_1);
__pyx_v_impl = ((struct __pyx_obj_6gevent_6_local__localimpl *)__pyx_t_1);
__pyx_t_1 = 0;
</pre><pre class="cython line score-13" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">519</span>: entry = impl.dicts[id(getcurrent())] # pylint:disable=undefined-variable</pre>
<pre class='cython code score-13 '> if (unlikely(__pyx_v_impl-&gt;dicts == Py_None)) {
<span class='py_c_api'>PyErr_SetString</span>(PyExc_TypeError, "'NoneType' object is not subscriptable");
<span class='error_goto'>__PYX_ERR(0, 519, __pyx_L1_error)</span>
}
__pyx_t_1 = ((PyObject *)__pyx_f_6gevent_6_local_getcurrent());<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 519, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
__pyx_t_2 = <span class='pyx_c_api'>__Pyx_PyObject_CallOneArg</span>(__pyx_builtin_id, __pyx_t_1);<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 519, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
__pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyDict_GetItem</span>(__pyx_v_impl-&gt;dicts, __pyx_t_2);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 519, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
if (!(likely(((__pyx_t_1) == Py_None) || likely(<span class='pyx_c_api'>__Pyx_TypeTest</span>(__pyx_t_1, __pyx_ptype_6gevent_6_local__localimpl_dict_entry))))) <span class='error_goto'>__PYX_ERR(0, 519, __pyx_L1_error)</span>
__pyx_v_entry = ((struct __pyx_obj_6gevent_6_local__localimpl_dict_entry *)__pyx_t_1);
__pyx_t_1 = 0;
</pre><pre class="cython line score-0">&#xA0;<span class="">520</span>: </pre>
<pre class="cython line score-1" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">521</span>: dct = entry.localdict</pre>
<pre class='cython code score-1 '> __pyx_t_1 = __pyx_v_entry-&gt;localdict;
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_1);
__pyx_v_dct = ((PyObject*)__pyx_t_1);
__pyx_t_1 = 0;
</pre><pre class="cython line score-25" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">522</span>: duplicate = copy(dct)</pre>
<pre class='cython code score-25 '> <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_6gevent_6_local_copy);
__pyx_t_2 = __pyx_v_6gevent_6_local_copy; __pyx_t_3 = NULL;
if (CYTHON_UNPACK_METHODS &amp;&amp; unlikely(<span class='py_c_api'>PyMethod_Check</span>(__pyx_t_2))) {
__pyx_t_3 = <span class='py_macro_api'>PyMethod_GET_SELF</span>(__pyx_t_2);
if (likely(__pyx_t_3)) {
PyObject* function = <span class='py_macro_api'>PyMethod_GET_FUNCTION</span>(__pyx_t_2);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_3);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(function);
<span class='pyx_macro_api'>__Pyx_DECREF_SET</span>(__pyx_t_2, function);
}
}
__pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_v_dct) : <span class='pyx_c_api'>__Pyx_PyObject_CallOneArg</span>(__pyx_t_2, __pyx_v_dct);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_1)) <span class='error_goto'>__PYX_ERR(0, 522, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
if (!(likely(<span class='py_c_api'>PyDict_CheckExact</span>(__pyx_t_1))||((__pyx_t_1) == Py_None)||(<span class='py_c_api'>PyErr_Format</span>(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_t_1)-&gt;tp_name), 0))) <span class='error_goto'>__PYX_ERR(0, 522, __pyx_L1_error)</span>
__pyx_v_duplicate = ((PyObject*)__pyx_t_1);
__pyx_t_1 = 0;
</pre><pre class="cython line score-0">&#xA0;<span class="">523</span>: </pre>
<pre class="cython line score-1" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">524</span>: cls = type(self)</pre>
<pre class='cython code score-1 '> <span class='pyx_macro_api'>__Pyx_INCREF</span>(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
__pyx_v_cls = ((PyTypeObject*)((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
</pre><pre class="cython line score-14" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">525</span>: instance = cls(*impl.localargs, **impl.localkwargs)</pre>
<pre class='cython code score-14 '> if (unlikely(__pyx_v_impl-&gt;localargs == Py_None)) {
<span class='py_c_api'>PyErr_SetString</span>(PyExc_TypeError, "'NoneType' object is not iterable");
<span class='error_goto'>__PYX_ERR(0, 525, __pyx_L1_error)</span>
}
if (unlikely(__pyx_v_impl-&gt;localkwargs == Py_None)) {
<span class='py_c_api'>PyErr_SetString</span>(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
<span class='error_goto'>__PYX_ERR(0, 525, __pyx_L1_error)</span>
}
__pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyObject_Call</span>(((PyObject *)__pyx_v_cls), __pyx_v_impl-&gt;localargs, __pyx_v_impl-&gt;localkwargs);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 525, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
if (!(likely(((__pyx_t_1) == Py_None) || likely(<span class='pyx_c_api'>__Pyx_TypeTest</span>(__pyx_t_1, __pyx_ptype_6gevent_6_local_local))))) <span class='error_goto'>__PYX_ERR(0, 525, __pyx_L1_error)</span>
__pyx_v_instance = ((struct __pyx_obj_6gevent_6_local_local *)__pyx_t_1);
__pyx_t_1 = 0;
</pre><pre class="cython line score-1" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">526</span>: _local__copy_dict_from(instance, impl, duplicate)</pre>
<pre class='cython code score-1 '> __pyx_t_1 = __pyx_f_6gevent_6_local__local__copy_dict_from(__pyx_v_instance, __pyx_v_impl, __pyx_v_duplicate);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 526, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
</pre><pre class="cython line score-2" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">527</span>: return instance</pre>
<pre class='cython code score-2 '> <span class='pyx_macro_api'>__Pyx_XDECREF</span>(((PyObject *)__pyx_r));
<span class='pyx_macro_api'>__Pyx_INCREF</span>(((PyObject *)__pyx_v_instance));
__pyx_r = __pyx_v_instance;
goto __pyx_L0;
</pre><pre class="cython line score-0">&#xA0;<span class="">528</span>: </pre>
<pre class="cython line score-9" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">529</span>: def _local__copy_dict_from(self, impl, duplicate):</pre>
<pre class='cython code score-9 '>static PyObject *__pyx_f_6gevent_6_local__local__copy_dict_from(struct __pyx_obj_6gevent_6_local_local *__pyx_v_self, struct __pyx_obj_6gevent_6_local__localimpl *__pyx_v_impl, PyObject *__pyx_v_duplicate) {
struct __pyx_obj_6gevent_6_local__localimpl_dict_entry *__pyx_v_entry = 0;
PyGreenlet *__pyx_v_current = NULL;
PyObject *__pyx_v_currentId = NULL;
struct __pyx_obj_6gevent_6_local__localimpl *__pyx_v_new_impl = NULL;
PyObject *__pyx_r = NULL;
<span class='refnanny'>__Pyx_RefNannyDeclarations</span>
<span class='refnanny'>__Pyx_RefNannySetupContext</span>("_local__copy_dict_from", 0);
/* … */
/* function exit code */
__pyx_r = Py_None; <span class='pyx_macro_api'>__Pyx_INCREF</span>(Py_None);
goto __pyx_L0;
__pyx_L1_error:;
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_1);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_3);
<span class='pyx_c_api'>__Pyx_AddTraceback</span>("gevent._local._local__copy_dict_from", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
<span class='pyx_macro_api'>__Pyx_XDECREF</span>((PyObject *)__pyx_v_entry);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>((PyObject *)__pyx_v_current);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_currentId);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>((PyObject *)__pyx_v_new_impl);
<span class='refnanny'>__Pyx_XGIVEREF</span>(__pyx_r);
<span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
return __pyx_r;
}
</pre><pre class="cython line score-0" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">530</span>: current = getcurrent() # pylint:disable=undefined-variable</pre>
<pre class='cython code score-0 '> __pyx_t_1 = ((PyObject *)__pyx_f_6gevent_6_local_getcurrent());<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 530, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
__pyx_v_current = ((PyGreenlet *)__pyx_t_1);
__pyx_t_1 = 0;
</pre><pre class="cython line score-2" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">531</span>: currentId = id(current)</pre>
<pre class='cython code score-2 '> __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyObject_CallOneArg</span>(__pyx_builtin_id, ((PyObject *)__pyx_v_current));<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 531, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
__pyx_v_currentId = __pyx_t_1;
__pyx_t_1 = 0;
</pre><pre class="cython line score-1" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">532</span>: new_impl = self._local__impl</pre>
<pre class='cython code score-1 '> __pyx_t_1 = ((PyObject *)__pyx_v_self-&gt;_local__impl);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_1);
__pyx_v_new_impl = ((struct __pyx_obj_6gevent_6_local__localimpl *)__pyx_t_1);
__pyx_t_1 = 0;
</pre><pre class="cython line score-5" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">533</span>: assert new_impl is not impl</pre>
<pre class='cython code score-5 '> #ifndef CYTHON_WITHOUT_ASSERTIONS
if (unlikely(!Py_OptimizeFlag)) {
__pyx_t_2 = (__pyx_v_new_impl != __pyx_v_impl);
if (unlikely(!(__pyx_t_2 != 0))) {
<span class='py_c_api'>PyErr_SetNone</span>(PyExc_AssertionError);
<span class='error_goto'>__PYX_ERR(0, 533, __pyx_L1_error)</span>
}
}
#endif
</pre><pre class="cython line score-9" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">534</span>: entry = new_impl.dicts[currentId]</pre>
<pre class='cython code score-9 '> if (unlikely(__pyx_v_new_impl-&gt;dicts == Py_None)) {
<span class='py_c_api'>PyErr_SetString</span>(PyExc_TypeError, "'NoneType' object is not subscriptable");
<span class='error_goto'>__PYX_ERR(0, 534, __pyx_L1_error)</span>
}
__pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyDict_GetItem</span>(__pyx_v_new_impl-&gt;dicts, __pyx_v_currentId);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 534, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
if (!(likely(((__pyx_t_1) == Py_None) || likely(<span class='pyx_c_api'>__Pyx_TypeTest</span>(__pyx_t_1, __pyx_ptype_6gevent_6_local__localimpl_dict_entry))))) <span class='error_goto'>__PYX_ERR(0, 534, __pyx_L1_error)</span>
__pyx_v_entry = ((struct __pyx_obj_6gevent_6_local__localimpl_dict_entry *)__pyx_t_1);
__pyx_t_1 = 0;
</pre><pre class="cython line score-23" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">535</span>: new_impl.dicts[currentId] = _localimpl_dict_entry(entry.wrgreenlet, duplicate)</pre>
<pre class='cython code score-23 '> __pyx_t_1 = <span class='py_c_api'>PyTuple_New</span>(2);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 535, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_entry-&gt;wrgreenlet);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_v_entry-&gt;wrgreenlet);
<span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_1, 0, __pyx_v_entry-&gt;wrgreenlet);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_duplicate);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_v_duplicate);
<span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_1, 1, __pyx_v_duplicate);
__pyx_t_3 = <span class='pyx_c_api'>__Pyx_PyObject_Call</span>(((PyObject *)__pyx_ptype_6gevent_6_local__localimpl_dict_entry), __pyx_t_1, NULL);<span class='error_goto'> if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 535, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_3);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(__pyx_v_new_impl-&gt;dicts == Py_None)) {
<span class='py_c_api'>PyErr_SetString</span>(PyExc_TypeError, "'NoneType' object is not subscriptable");
<span class='error_goto'>__PYX_ERR(0, 535, __pyx_L1_error)</span>
}
if (unlikely(<span class='py_c_api'>PyDict_SetItem</span>(__pyx_v_new_impl-&gt;dicts, __pyx_v_currentId, __pyx_t_3) &lt; 0)) <span class='error_goto'>__PYX_ERR(0, 535, __pyx_L1_error)</span>
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_3); __pyx_t_3 = 0;
</pre><pre class="cython line score-0">&#xA0;<span class="">536</span>: </pre>
<pre class="cython line score-16" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">537</span>: def _local_find_descriptors(self):</pre>
<pre class='cython code score-16 '>static PyObject *__pyx_f_6gevent_6_local__local_find_descriptors(struct __pyx_obj_6gevent_6_local_local *__pyx_v_self) {
PyObject *__pyx_v_mro = 0;
PyObject *__pyx_v_gets = 0;
PyObject *__pyx_v_dels = 0;
PyObject *__pyx_v_set_or_del = 0;
PyTypeObject *__pyx_v_type_self = 0;
PyTypeObject *__pyx_v_type_attr = 0;
PyObject *__pyx_v_sets = 0;
PyObject *__pyx_v_attr_name = NULL;
PyObject *__pyx_v_base = NULL;
PyObject *__pyx_v_bd = NULL;
PyObject *__pyx_v_attr = NULL;
PyObject *__pyx_r = NULL;
<span class='refnanny'>__Pyx_RefNannyDeclarations</span>
<span class='refnanny'>__Pyx_RefNannySetupContext</span>("_local_find_descriptors", 0);
/* … */
/* function exit code */
__pyx_L1_error:;
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_1);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_2);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_3);
<span class='pyx_c_api'>__Pyx_AddTraceback</span>("gevent._local._local_find_descriptors", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_mro);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_gets);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_dels);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_set_or_del);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_type_self);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_type_attr);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_sets);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_attr_name);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_base);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_bd);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_attr);
<span class='refnanny'>__Pyx_XGIVEREF</span>(__pyx_r);
<span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
return __pyx_r;
}
</pre><pre class="cython line score-1" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">538</span>: type_self = type(self)</pre>
<pre class='cython code score-1 '> <span class='pyx_macro_api'>__Pyx_INCREF</span>(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
__pyx_v_type_self = ((PyTypeObject*)((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
</pre><pre class="cython line score-5" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">539</span>: gets = set()</pre>
<pre class='cython code score-5 '> __pyx_t_1 = <span class='py_c_api'>PySet_New</span>(0);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 539, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
__pyx_v_gets = ((PyObject*)__pyx_t_1);
__pyx_t_1 = 0;
</pre><pre class="cython line score-5" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">540</span>: dels = set()</pre>
<pre class='cython code score-5 '> __pyx_t_1 = <span class='py_c_api'>PySet_New</span>(0);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 540, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
__pyx_v_dels = ((PyObject*)__pyx_t_1);
__pyx_t_1 = 0;
</pre><pre class="cython line score-5" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">541</span>: set_or_del = set()</pre>
<pre class='cython code score-5 '> __pyx_t_1 = <span class='py_c_api'>PySet_New</span>(0);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 541, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
__pyx_v_set_or_del = ((PyObject*)__pyx_t_1);
__pyx_t_1 = 0;
</pre><pre class="cython line score-5" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">542</span>: sets = set()</pre>
<pre class='cython code score-5 '> __pyx_t_1 = <span class='py_c_api'>PySet_New</span>(0);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 542, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
__pyx_v_sets = ((PyObject*)__pyx_t_1);
__pyx_t_1 = 0;
</pre><pre class="cython line score-24" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">543</span>: mro = list(type_self.mro())</pre>
<pre class='cython code score-24 '> __pyx_t_2 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(((PyObject *)__pyx_v_type_self), __pyx_n_s_mro);<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 543, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
__pyx_t_3 = NULL;
if (CYTHON_UNPACK_METHODS &amp;&amp; likely(<span class='py_c_api'>PyMethod_Check</span>(__pyx_t_2))) {
__pyx_t_3 = <span class='py_macro_api'>PyMethod_GET_SELF</span>(__pyx_t_2);
if (likely(__pyx_t_3)) {
PyObject* function = <span class='py_macro_api'>PyMethod_GET_FUNCTION</span>(__pyx_t_2);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_3);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(function);
<span class='pyx_macro_api'>__Pyx_DECREF_SET</span>(__pyx_t_2, function);
}
}
__pyx_t_1 = (__pyx_t_3) ? <span class='pyx_c_api'>__Pyx_PyObject_CallOneArg</span>(__pyx_t_2, __pyx_t_3) : <span class='pyx_c_api'>__Pyx_PyObject_CallNoArg</span>(__pyx_t_2);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_1)) <span class='error_goto'>__PYX_ERR(0, 543, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
__pyx_t_2 = <span class='py_c_api'>PySequence_List</span>(__pyx_t_1);<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 543, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
__pyx_v_mro = ((PyObject*)__pyx_t_2);
__pyx_t_2 = 0;
</pre><pre class="cython line score-0">&#xA0;<span class="">544</span>: </pre>
<pre class="cython line score-49" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">545</span>: for attr_name in dir(type_self):</pre>
<pre class='cython code score-49 '> __pyx_t_2 = <span class='py_c_api'>PyObject_Dir</span>(((PyObject *)__pyx_v_type_self));<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 545, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
if (likely(<span class='py_c_api'>PyList_CheckExact</span>(__pyx_t_2)) || <span class='py_c_api'>PyTuple_CheckExact</span>(__pyx_t_2)) {
__pyx_t_1 = __pyx_t_2; <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_1); __pyx_t_4 = 0;
__pyx_t_5 = NULL;
} else {
__pyx_t_4 = -1; __pyx_t_1 = <span class='py_c_api'>PyObject_GetIter</span>(__pyx_t_2);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 545, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
__pyx_t_5 = Py_TYPE(__pyx_t_1)-&gt;tp_iternext;<span class='error_goto'> if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 545, __pyx_L1_error)</span>
}
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
for (;;) {
if (likely(!__pyx_t_5)) {
if (likely(<span class='py_c_api'>PyList_CheckExact</span>(__pyx_t_1))) {
if (__pyx_t_4 &gt;= <span class='py_macro_api'>PyList_GET_SIZE</span>(__pyx_t_1)) break;
#if CYTHON_ASSUME_SAFE_MACROS &amp;&amp; !CYTHON_AVOID_BORROWED_REFS
__pyx_t_2 = <span class='py_macro_api'>PyList_GET_ITEM</span>(__pyx_t_1, __pyx_t_4); <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_2); __pyx_t_4++; if (unlikely(0 &lt; 0)) <span class='error_goto'>__PYX_ERR(0, 545, __pyx_L1_error)</span>
#else
__pyx_t_2 = <span class='py_macro_api'>PySequence_ITEM</span>(__pyx_t_1, __pyx_t_4); __pyx_t_4++;<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 545, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
#endif
} else {
if (__pyx_t_4 &gt;= <span class='py_macro_api'>PyTuple_GET_SIZE</span>(__pyx_t_1)) break;
#if CYTHON_ASSUME_SAFE_MACROS &amp;&amp; !CYTHON_AVOID_BORROWED_REFS
__pyx_t_2 = <span class='py_macro_api'>PyTuple_GET_ITEM</span>(__pyx_t_1, __pyx_t_4); <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_2); __pyx_t_4++; if (unlikely(0 &lt; 0)) <span class='error_goto'>__PYX_ERR(0, 545, __pyx_L1_error)</span>
#else
__pyx_t_2 = <span class='py_macro_api'>PySequence_ITEM</span>(__pyx_t_1, __pyx_t_4); __pyx_t_4++;<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 545, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
#endif
}
} else {
__pyx_t_2 = __pyx_t_5(__pyx_t_1);
if (unlikely(!__pyx_t_2)) {
PyObject* exc_type = <span class='py_c_api'>PyErr_Occurred</span>();
if (exc_type) {
if (likely(<span class='pyx_c_api'>__Pyx_PyErr_GivenExceptionMatches</span>(exc_type, PyExc_StopIteration))) <span class='py_c_api'>PyErr_Clear</span>();
else <span class='error_goto'>__PYX_ERR(0, 545, __pyx_L1_error)</span>
}
break;
}
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
}
<span class='pyx_macro_api'>__Pyx_XDECREF_SET</span>(__pyx_v_attr_name, __pyx_t_2);
__pyx_t_2 = 0;
/* … */
}
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
</pre><pre class="cython line score-0">&#xA0;<span class="">546</span>: # Conventionally, descriptors when called on a class</pre>
<pre class="cython line score-0">&#xA0;<span class="">547</span>: # return themself, but not all do. Notable exceptions are</pre>
<pre class="cython line score-0">&#xA0;<span class="">548</span>: # in the zope.interface package, where things like __provides__</pre>
<pre class="cython line score-0">&#xA0;<span class="">549</span>: # return other class attributes. So we can't use getattr, and instead</pre>
<pre class="cython line score-0">&#xA0;<span class="">550</span>: # walk up the dicts</pre>
<pre class="cython line score-7" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">551</span>: for base in mro:</pre>
<pre class='cython code score-7 '> __pyx_t_2 = __pyx_v_mro; <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_2); __pyx_t_6 = 0;
for (;;) {
if (__pyx_t_6 &gt;= <span class='py_macro_api'>PyList_GET_SIZE</span>(__pyx_t_2)) break;
#if CYTHON_ASSUME_SAFE_MACROS &amp;&amp; !CYTHON_AVOID_BORROWED_REFS
__pyx_t_3 = <span class='py_macro_api'>PyList_GET_ITEM</span>(__pyx_t_2, __pyx_t_6); <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_3); __pyx_t_6++; if (unlikely(0 &lt; 0)) <span class='error_goto'>__PYX_ERR(0, 551, __pyx_L1_error)</span>
#else
__pyx_t_3 = <span class='py_macro_api'>PySequence_ITEM</span>(__pyx_t_2, __pyx_t_6); __pyx_t_6++;<span class='error_goto'> if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 551, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_3);
#endif
<span class='pyx_macro_api'>__Pyx_XDECREF_SET</span>(__pyx_v_base, __pyx_t_3);
__pyx_t_3 = 0;
/* … */
}
/*else*/ {
/* … */
__pyx_L6_break:;
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
</pre><pre class="cython line score-3" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">552</span>: bd = base.__dict__</pre>
<pre class='cython code score-3 '> __pyx_t_3 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(__pyx_v_base, __pyx_n_s_dict);<span class='error_goto'> if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 552, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_3);
<span class='pyx_macro_api'>__Pyx_XDECREF_SET</span>(__pyx_v_bd, __pyx_t_3);
__pyx_t_3 = 0;
</pre><pre class="cython line score-2" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">553</span>: if attr_name in bd:</pre>
<pre class='cython code score-2 '> __pyx_t_7 = (<span class='pyx_c_api'>__Pyx_PySequence_ContainsTF</span>(__pyx_v_attr_name, __pyx_v_bd, Py_EQ)); if (unlikely(__pyx_t_7 &lt; 0)) <span class='error_goto'>__PYX_ERR(0, 553, __pyx_L1_error)</span>
__pyx_t_8 = (__pyx_t_7 != 0);
if (__pyx_t_8) {
/* … */
}
</pre><pre class="cython line score-3" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">554</span>: attr = bd[attr_name]</pre>
<pre class='cython code score-3 '> __pyx_t_3 = <span class='pyx_c_api'>__Pyx_PyObject_GetItem</span>(__pyx_v_bd, __pyx_v_attr_name);<span class='error_goto'> if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 554, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_3);
<span class='pyx_macro_api'>__Pyx_XDECREF_SET</span>(__pyx_v_attr, __pyx_t_3);
__pyx_t_3 = 0;
</pre><pre class="cython line score-0" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">555</span>: break</pre>
<pre class='cython code score-0 '> goto __pyx_L6_break;
</pre><pre class="cython line score-0">&#xA0;<span class="">556</span>: else:</pre>
<pre class="cython line score-5" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">557</span>: raise AttributeError(attr_name)</pre>
<pre class='cython code score-5 '> __pyx_t_3 = <span class='pyx_c_api'>__Pyx_PyObject_CallOneArg</span>(__pyx_builtin_AttributeError, __pyx_v_attr_name);<span class='error_goto'> if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 557, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_3);
<span class='pyx_c_api'>__Pyx_Raise</span>(__pyx_t_3, 0, 0, 0);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_3); __pyx_t_3 = 0;
<span class='error_goto'>__PYX_ERR(0, 557, __pyx_L1_error)</span>
}
</pre><pre class="cython line score-0">&#xA0;<span class="">558</span>: </pre>
<pre class="cython line score-2" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">559</span>: type_attr = type(attr)</pre>
<pre class='cython code score-2 '> <span class='pyx_macro_api'>__Pyx_INCREF</span>(((PyObject *)Py_TYPE(__pyx_v_attr)));
<span class='pyx_macro_api'>__Pyx_XDECREF_SET</span>(__pyx_v_type_attr, ((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_attr))));
</pre><pre class="cython line score-2" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">560</span>: if hasattr(type_attr, '__get__'):</pre>
<pre class='cython code score-2 '> __pyx_t_8 = <span class='pyx_c_api'>__Pyx_HasAttr</span>(((PyObject *)__pyx_v_type_attr), __pyx_n_s_get);<span class='error_goto'> if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 560, __pyx_L1_error)</span>
__pyx_t_7 = (__pyx_t_8 != 0);
if (__pyx_t_7) {
/* … */
}
</pre><pre class="cython line score-5" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">561</span>: gets.add(attr_name)</pre>
<pre class='cython code score-5 '> __pyx_t_9 = <span class='py_c_api'>PySet_Add</span>(__pyx_v_gets, __pyx_v_attr_name);<span class='error_goto'> if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(0, 561, __pyx_L1_error)</span>
</pre><pre class="cython line score-2" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">562</span>: if hasattr(type_attr, '__delete__'):</pre>
<pre class='cython code score-2 '> __pyx_t_7 = <span class='pyx_c_api'>__Pyx_HasAttr</span>(((PyObject *)__pyx_v_type_attr), __pyx_n_s_delete);<span class='error_goto'> if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 562, __pyx_L1_error)</span>
__pyx_t_8 = (__pyx_t_7 != 0);
if (__pyx_t_8) {
/* … */
}
</pre><pre class="cython line score-5" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">563</span>: dels.add(attr_name)</pre>
<pre class='cython code score-5 '> __pyx_t_9 = <span class='py_c_api'>PySet_Add</span>(__pyx_v_dels, __pyx_v_attr_name);<span class='error_goto'> if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(0, 563, __pyx_L1_error)</span>
</pre><pre class="cython line score-5" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">564</span>: set_or_del.add(attr_name)</pre>
<pre class='cython code score-5 '> __pyx_t_9 = <span class='py_c_api'>PySet_Add</span>(__pyx_v_set_or_del, __pyx_v_attr_name);<span class='error_goto'> if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(0, 564, __pyx_L1_error)</span>
</pre><pre class="cython line score-2" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">565</span>: if hasattr(type_attr, '__set__'):</pre>
<pre class='cython code score-2 '> __pyx_t_8 = <span class='pyx_c_api'>__Pyx_HasAttr</span>(((PyObject *)__pyx_v_type_attr), __pyx_n_s_set);<span class='error_goto'> if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 565, __pyx_L1_error)</span>
__pyx_t_7 = (__pyx_t_8 != 0);
if (__pyx_t_7) {
/* … */
}
</pre><pre class="cython line score-5" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">566</span>: sets.add(attr_name)</pre>
<pre class='cython code score-5 '> __pyx_t_9 = <span class='py_c_api'>PySet_Add</span>(__pyx_v_sets, __pyx_v_attr_name);<span class='error_goto'> if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(0, 566, __pyx_L1_error)</span>
</pre><pre class="cython line score-0">&#xA0;<span class="">567</span>: </pre>
<pre class="cython line score-14" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">568</span>: return (gets, dels, set_or_del, sets)</pre>
<pre class='cython code score-14 '> <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_r);
__pyx_t_1 = <span class='py_c_api'>PyTuple_New</span>(4);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 568, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_gets);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_v_gets);
<span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_1, 0, __pyx_v_gets);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_dels);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_v_dels);
<span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_1, 1, __pyx_v_dels);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_set_or_del);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_v_set_or_del);
<span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_1, 2, __pyx_v_set_or_del);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_sets);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_v_sets);
<span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_1, 3, __pyx_v_sets);
__pyx_r = ((PyObject*)__pyx_t_1);
__pyx_t_1 = 0;
goto __pyx_L0;
</pre><pre class="cython line score-0">&#xA0;<span class="">569</span>: </pre>
<pre class="cython line score-0">&#xA0;<span class="">570</span>: # Cython doesn't let us use __new__, it requires</pre>
<pre class="cython line score-0">&#xA0;<span class="">571</span>: # __cinit__. But we need __new__ if we're not compiled</pre>
<pre class="cython line score-0">&#xA0;<span class="">572</span>: # (e.g., on PyPy). So we set it at runtime. Cython</pre>
<pre class="cython line score-0">&#xA0;<span class="">573</span>: # will raise an error if we're compiled.</pre>
<pre class="cython line score-55" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">574</span>: def __new__(cls, *args, **kw):</pre>
<pre class='cython code score-55 '>/* Python wrapper */
static PyObject *__pyx_pw_6gevent_6_local_3__new__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6gevent_6_local_2__new__[] = "__new__(cls, *args, **kw)";
static PyMethodDef __pyx_mdef_6gevent_6_local_3__new__ = {"__new__", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6gevent_6_local_3__new__, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6gevent_6_local_2__new__};
static PyObject *__pyx_pw_6gevent_6_local_3__new__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
PyObject *__pyx_v_cls = 0;
PyObject *__pyx_v_args = 0;
PyObject *__pyx_v_kw = 0;
PyObject *__pyx_r = 0;
<span class='refnanny'>__Pyx_RefNannyDeclarations</span>
<span class='refnanny'>__Pyx_RefNannySetupContext</span>("__new__ (wrapper)", 0);
__pyx_v_kw = <span class='py_c_api'>PyDict_New</span>(); if (unlikely(!__pyx_v_kw)) return NULL;
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_v_kw);
if (<span class='py_macro_api'>PyTuple_GET_SIZE</span>(__pyx_args) &gt; 1) {
__pyx_v_args = <span class='py_c_api'>PyTuple_GetSlice</span>(__pyx_args, 1, <span class='py_macro_api'>PyTuple_GET_SIZE</span>(__pyx_args));
if (unlikely(!__pyx_v_args)) {
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_v_kw); __pyx_v_kw = 0;
<span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
return NULL;
}
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_v_args);
} else {
__pyx_v_args = __pyx_empty_tuple; <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_empty_tuple);
}
{
static PyObject **__pyx_pyargnames[] = {&amp;__pyx_n_s_cls,0};
PyObject* values[1] = {0};
if (unlikely(__pyx_kwds)) {
Py_ssize_t kw_args;
const Py_ssize_t pos_args = <span class='py_macro_api'>PyTuple_GET_SIZE</span>(__pyx_args);
switch (pos_args) {
default:
case 1: values[0] = <span class='py_macro_api'>PyTuple_GET_ITEM</span>(__pyx_args, 0);
CYTHON_FALLTHROUGH;
case 0: break;
}
kw_args = <span class='py_c_api'>PyDict_Size</span>(__pyx_kwds);
switch (pos_args) {
case 0:
if (likely((values[0] = <span class='pyx_c_api'>__Pyx_PyDict_GetItemStr</span>(__pyx_kwds, __pyx_n_s_cls)) != 0)) kw_args--;
else goto __pyx_L5_argtuple_error;
}
if (unlikely(kw_args &gt; 0)) {
const Py_ssize_t used_pos_args = (pos_args &lt; 1) ? pos_args : 1;
if (unlikely(<span class='pyx_c_api'>__Pyx_ParseOptionalKeywords</span>(__pyx_kwds, __pyx_pyargnames, __pyx_v_kw, values, used_pos_args, "__new__") &lt; 0)) <span class='error_goto'>__PYX_ERR(0, 574, __pyx_L3_error)</span>
}
} else if (<span class='py_macro_api'>PyTuple_GET_SIZE</span>(__pyx_args) &lt; 1) {
goto __pyx_L5_argtuple_error;
} else {
values[0] = <span class='py_macro_api'>PyTuple_GET_ITEM</span>(__pyx_args, 0);
}
__pyx_v_cls = values[0];
}
goto __pyx_L4_argument_unpacking_done;
__pyx_L5_argtuple_error:;
<span class='pyx_c_api'>__Pyx_RaiseArgtupleInvalid</span>("__new__", 0, 1, 1, <span class='py_macro_api'>PyTuple_GET_SIZE</span>(__pyx_args)); <span class='error_goto'>__PYX_ERR(0, 574, __pyx_L3_error)</span>
__pyx_L3_error:;
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_v_args); __pyx_v_args = 0;
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_v_kw); __pyx_v_kw = 0;
<span class='pyx_c_api'>__Pyx_AddTraceback</span>("gevent._local.__new__", __pyx_clineno, __pyx_lineno, __pyx_filename);
<span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
return NULL;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_6gevent_6_local_2__new__(__pyx_self, __pyx_v_cls, __pyx_v_args, __pyx_v_kw);
/* function exit code */
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_args);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_kw);
<span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
return __pyx_r;
}
static PyObject *__pyx_pf_6gevent_6_local_2__new__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_cls, PyObject *__pyx_v_args, PyObject *__pyx_v_kw) {
PyObject *__pyx_v_self = NULL;
PyObject *__pyx_r = NULL;
<span class='refnanny'>__Pyx_RefNannyDeclarations</span>
<span class='refnanny'>__Pyx_RefNannySetupContext</span>("__new__", 0);
/* … */
/* function exit code */
__pyx_L1_error:;
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_1);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_2);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_3);
<span class='pyx_c_api'>__Pyx_AddTraceback</span>("gevent._local.__new__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_self);
<span class='refnanny'>__Pyx_XGIVEREF</span>(__pyx_r);
<span class='refnanny'>__Pyx_RefNannyFinishContext</span>();
return __pyx_r;
}
/* … */
__pyx_tuple__10 = <span class='py_c_api'>PyTuple_Pack</span>(4, __pyx_n_s_cls, __pyx_n_s_args, __pyx_n_s_kw, __pyx_n_s_self);<span class='error_goto'> if (unlikely(!__pyx_tuple__10)) __PYX_ERR(0, 574, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_tuple__10);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_tuple__10);
/* … */
__pyx_t_2 = <span class='pyx_c_api'>__Pyx_CyFunction_NewEx</span>(&amp;__pyx_mdef_6gevent_6_local_3__new__, 0, __pyx_n_s_new, NULL, __pyx_n_s_gevent__local, __pyx_d, ((PyObject *)__pyx_codeobj__11));<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 574, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
if (<span class='py_c_api'>PyDict_SetItem</span>(__pyx_d, __pyx_n_s_new, __pyx_t_2) &lt; 0) <span class='error_goto'>__PYX_ERR(0, 574, __pyx_L1_error)</span>
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
</pre><pre class="cython line score-29" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">575</span>: self = super(local, cls).__new__(cls)</pre>
<pre class='cython code score-29 '> __pyx_t_2 = <span class='py_c_api'>PyTuple_New</span>(2);<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 575, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(((PyObject *)__pyx_ptype_6gevent_6_local_local));
<span class='refnanny'>__Pyx_GIVEREF</span>(((PyObject *)__pyx_ptype_6gevent_6_local_local));
<span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_2, 0, ((PyObject *)__pyx_ptype_6gevent_6_local_local));
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_cls);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_v_cls);
<span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_2, 1, __pyx_v_cls);
__pyx_t_3 = <span class='pyx_c_api'>__Pyx_PyObject_Call</span>(__pyx_builtin_super, __pyx_t_2, NULL);<span class='error_goto'> if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 575, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_3);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
__pyx_t_2 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(__pyx_t_3, __pyx_n_s_new);<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 575, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_3); __pyx_t_3 = 0;
__pyx_t_3 = NULL;
if (CYTHON_UNPACK_METHODS &amp;&amp; likely(<span class='py_c_api'>PyMethod_Check</span>(__pyx_t_2))) {
__pyx_t_3 = <span class='py_macro_api'>PyMethod_GET_SELF</span>(__pyx_t_2);
if (likely(__pyx_t_3)) {
PyObject* function = <span class='py_macro_api'>PyMethod_GET_FUNCTION</span>(__pyx_t_2);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_t_3);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(function);
<span class='pyx_macro_api'>__Pyx_DECREF_SET</span>(__pyx_t_2, function);
}
}
__pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_v_cls) : <span class='pyx_c_api'>__Pyx_PyObject_CallOneArg</span>(__pyx_t_2, __pyx_v_cls);
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_1)) <span class='error_goto'>__PYX_ERR(0, 575, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
__pyx_v_self = __pyx_t_1;
__pyx_t_1 = 0;
</pre><pre class="cython line score-0">&#xA0;<span class="">576</span>: # We get the cls in *args for some reason</pre>
<pre class="cython line score-0">&#xA0;<span class="">577</span>: # too when we do it this way....except on PyPy3, which does</pre>
<pre class="cython line score-0">&#xA0;<span class="">578</span>: # not *unless* it's wrapped in a classmethod (which it is)</pre>
<pre class="cython line score-9" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">579</span>: self.__cinit__(*args[1:], **kw)</pre>
<pre class='cython code score-9 '> __pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyObject_GetAttrStr</span>(__pyx_v_self, __pyx_n_s_cinit);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 579, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
__pyx_t_2 = <span class='pyx_c_api'>__Pyx_PyTuple_GetSlice</span>(__pyx_v_args, 1, PY_SSIZE_T_MAX);<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 579, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
__pyx_t_3 = <span class='pyx_c_api'>__Pyx_PyObject_Call</span>(__pyx_t_1, __pyx_t_2, __pyx_v_kw);<span class='error_goto'> if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 579, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_3);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_3); __pyx_t_3 = 0;
</pre><pre class="cython line score-2" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">580</span>: return self</pre>
<pre class='cython code score-2 '> <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_r);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_self);
__pyx_r = __pyx_v_self;
goto __pyx_L0;
</pre><pre class="cython line score-0">&#xA0;<span class="">581</span>: </pre>
<pre class="cython line score-4" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">582</span>: try:</pre>
<pre class='cython code score-4 '> {
/*try:*/ {
/* … */
}
/* … */
<span class='refnanny'>__Pyx_XGIVEREF</span>(__pyx_t_3);
<span class='refnanny'>__Pyx_XGIVEREF</span>(__pyx_t_4);
<span class='refnanny'>__Pyx_XGIVEREF</span>(__pyx_t_5);
<span class='pyx_c_api'>__Pyx_ExceptionReset</span>(__pyx_t_3, __pyx_t_4, __pyx_t_5);
goto __pyx_L1_error;
__pyx_L3_exception_handled:;
<span class='refnanny'>__Pyx_XGIVEREF</span>(__pyx_t_3);
<span class='refnanny'>__Pyx_XGIVEREF</span>(__pyx_t_4);
<span class='refnanny'>__Pyx_XGIVEREF</span>(__pyx_t_5);
<span class='pyx_c_api'>__Pyx_ExceptionReset</span>(__pyx_t_3, __pyx_t_4, __pyx_t_5);
__pyx_L7_try_end:;
}
</pre><pre class="cython line score-0">&#xA0;<span class="">583</span>: # PyPy2/3 and CPython handle adding a __new__ to the class</pre>
<pre class="cython line score-0">&#xA0;<span class="">584</span>: # in different ways. In CPython and PyPy3, it must be wrapped with classmethod;</pre>
<pre class="cython line score-0">&#xA0;<span class="">585</span>: # in PyPy2, it must not. In either case, the args that get passed to</pre>
<pre class="cython line score-0">&#xA0;<span class="">586</span>: # it are stil wrong.</pre>
<pre class="cython line score-2" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">587</span>: local.__new__ = 'None'</pre>
<pre class='cython code score-2 '> if (<span class='pyx_c_api'>__Pyx_PyObject_SetAttrStr</span>(((PyObject *)__pyx_ptype_6gevent_6_local_local), __pyx_n_s_new, __pyx_n_s_None) &lt; 0) <span class='error_goto'>__PYX_ERR(0, 587, __pyx_L2_error)</span>
</pre><pre class="cython line score-4" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">588</span>: except TypeError: # pragma: no cover</pre>
<pre class='cython code score-4 '> __pyx_t_8 = <span class='pyx_c_api'>__Pyx_PyErr_ExceptionMatches</span>(__pyx_builtin_TypeError);
if (__pyx_t_8) {
<span class='pyx_c_api'>__Pyx_ErrRestore</span>(0,0,0);
goto __pyx_L3_exception_handled;
}
goto __pyx_L4_except_error;
__pyx_L4_except_error:;
</pre><pre class="cython line score-0">&#xA0;<span class="">589</span>: # Must be compiled</pre>
<pre class="cython line score-0">&#xA0;<span class="">590</span>: pass</pre>
<pre class="cython line score-0">&#xA0;<span class="">591</span>: else:</pre>
<pre class="cython line score-19" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">592</span>: from gevent._compat import PYPY</pre>
<pre class='cython code score-19 '> /*else:*/ {
__pyx_t_2 = <span class='py_c_api'>PyList_New</span>(1);<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 592, __pyx_L4_except_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_n_s_PYPY_2);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_n_s_PYPY_2);
<span class='py_macro_api'>PyList_SET_ITEM</span>(__pyx_t_2, 0, __pyx_n_s_PYPY_2);
__pyx_t_1 = <span class='pyx_c_api'>__Pyx_Import</span>(__pyx_n_s_gevent__compat, __pyx_t_2, 0);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 592, __pyx_L4_except_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
__pyx_t_2 = <span class='pyx_c_api'>__Pyx_ImportFrom</span>(__pyx_t_1, __pyx_n_s_PYPY_2);<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 592, __pyx_L4_except_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
if (<span class='py_c_api'>PyDict_SetItem</span>(__pyx_d, __pyx_n_s_PYPY_2, __pyx_t_2) &lt; 0) <span class='error_goto'>__PYX_ERR(0, 592, __pyx_L4_except_error)</span>
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
</pre><pre class="cython line score-19" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">593</span>: from gevent._compat import PY2</pre>
<pre class='cython code score-19 '> __pyx_t_1 = <span class='py_c_api'>PyList_New</span>(1);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 593, __pyx_L4_except_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_n_s_PY2);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_n_s_PY2);
<span class='py_macro_api'>PyList_SET_ITEM</span>(__pyx_t_1, 0, __pyx_n_s_PY2);
__pyx_t_2 = <span class='pyx_c_api'>__Pyx_Import</span>(__pyx_n_s_gevent__compat, __pyx_t_1, 0);<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 593, __pyx_L4_except_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
__pyx_t_1 = <span class='pyx_c_api'>__Pyx_ImportFrom</span>(__pyx_t_2, __pyx_n_s_PY2);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 593, __pyx_L4_except_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
if (<span class='py_c_api'>PyDict_SetItem</span>(__pyx_d, __pyx_n_s_PY2, __pyx_t_1) &lt; 0) <span class='error_goto'>__PYX_ERR(0, 593, __pyx_L4_except_error)</span>
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
</pre><pre class="cython line score-10" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">594</span>: if PYPY and PY2:</pre>
<pre class='cython code score-10 '> <span class='pyx_c_api'>__Pyx_GetModuleGlobalName</span>(__pyx_t_2, __pyx_n_s_PYPY_2);<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 594, __pyx_L4_except_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
__pyx_t_7 = <span class='pyx_c_api'>__Pyx_PyObject_IsTrue</span>(__pyx_t_2); if (unlikely(__pyx_t_7 &lt; 0)) <span class='error_goto'>__PYX_ERR(0, 594, __pyx_L4_except_error)</span>
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
if (__pyx_t_7) {
} else {
__pyx_t_6 = __pyx_t_7;
goto __pyx_L9_bool_binop_done;
}
<span class='pyx_c_api'>__Pyx_GetModuleGlobalName</span>(__pyx_t_2, __pyx_n_s_PY2);<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 594, __pyx_L4_except_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
__pyx_t_7 = <span class='pyx_c_api'>__Pyx_PyObject_IsTrue</span>(__pyx_t_2); if (unlikely(__pyx_t_7 &lt; 0)) <span class='error_goto'>__PYX_ERR(0, 594, __pyx_L4_except_error)</span>
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
__pyx_t_6 = __pyx_t_7;
__pyx_L9_bool_binop_done:;
if (__pyx_t_6) {
/* … */
goto __pyx_L8;
}
</pre><pre class="cython line score-5" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">595</span>: local.__new__ = __new__</pre>
<pre class='cython code score-5 '> <span class='pyx_c_api'>__Pyx_GetModuleGlobalName</span>(__pyx_t_2, __pyx_n_s_new);<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 595, __pyx_L4_except_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
if (<span class='pyx_c_api'>__Pyx_PyObject_SetAttrStr</span>(((PyObject *)__pyx_ptype_6gevent_6_local_local), __pyx_n_s_new, __pyx_t_2) &lt; 0) <span class='error_goto'>__PYX_ERR(0, 595, __pyx_L4_except_error)</span>
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
</pre><pre class="cython line score-0">&#xA0;<span class="">596</span>: else:</pre>
<pre class="cython line score-8" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">597</span>: local.__new__ = classmethod(__new__)</pre>
<pre class='cython code score-8 '> /*else*/ {
<span class='pyx_c_api'>__Pyx_GetModuleGlobalName</span>(__pyx_t_2, __pyx_n_s_new);<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 597, __pyx_L4_except_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
__pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyObject_CallOneArg</span>(__pyx_builtin_classmethod, __pyx_t_2);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 597, __pyx_L4_except_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
if (<span class='pyx_c_api'>__Pyx_PyObject_SetAttrStr</span>(((PyObject *)__pyx_ptype_6gevent_6_local_local), __pyx_n_s_new, __pyx_t_1) &lt; 0) <span class='error_goto'>__PYX_ERR(0, 597, __pyx_L4_except_error)</span>
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
}
__pyx_L8:;
</pre><pre class="cython line score-0">&#xA0;<span class="">598</span>: </pre>
<pre class="cython line score-2" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">599</span>: del PYPY</pre>
<pre class='cython code score-2 '> if (<span class='pyx_c_api'>__Pyx_PyObject_DelAttrStr</span>(__pyx_m, __pyx_n_s_PYPY_2) &lt; 0) <span class='error_goto'>__PYX_ERR(0, 599, __pyx_L4_except_error)</span>
</pre><pre class="cython line score-7" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">600</span>: del PY2</pre>
<pre class='cython code score-7 '> if (<span class='pyx_c_api'>__Pyx_PyObject_DelAttrStr</span>(__pyx_m, __pyx_n_s_PY2) &lt; 0) <span class='error_goto'>__PYX_ERR(0, 600, __pyx_L4_except_error)</span>
}
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_3); __pyx_t_3 = 0;
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_4); __pyx_t_4 = 0;
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_5); __pyx_t_5 = 0;
goto __pyx_L7_try_end;
__pyx_L2_error:;
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
<span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
</pre><pre class="cython line score-0">&#xA0;<span class="">601</span>: </pre>
<pre class="cython line score-0" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">602</span>: _init()</pre>
<pre class='cython code score-0 '> __pyx_f_6gevent_6_local__init();
</pre><pre class="cython line score-0">&#xA0;<span class="">603</span>: </pre>
<pre class="cython line score-19" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">604</span>: from gevent._util import import_c_accel</pre>
<pre class='cython code score-19 '> __pyx_t_1 = <span class='py_c_api'>PyList_New</span>(1);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 604, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_n_s_import_c_accel);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_n_s_import_c_accel);
<span class='py_macro_api'>PyList_SET_ITEM</span>(__pyx_t_1, 0, __pyx_n_s_import_c_accel);
__pyx_t_2 = <span class='pyx_c_api'>__Pyx_Import</span>(__pyx_n_s_gevent__util, __pyx_t_1, 0);<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 604, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
__pyx_t_1 = <span class='pyx_c_api'>__Pyx_ImportFrom</span>(__pyx_t_2, __pyx_n_s_import_c_accel);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 604, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
if (<span class='py_c_api'>PyDict_SetItem</span>(__pyx_d, __pyx_n_s_import_c_accel, __pyx_t_1) &lt; 0) <span class='error_goto'>__PYX_ERR(0, 604, __pyx_L1_error)</span>
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
</pre><pre class="cython line score-17" onclick="(function(s){s.display=s.display==='block'?'none':'block'})(this.nextElementSibling.style)">+<span class="">605</span>: import_c_accel(globals(), 'gevent._local')</pre>
<pre class='cython code score-17 '> <span class='pyx_c_api'>__Pyx_GetModuleGlobalName</span>(__pyx_t_2, __pyx_n_s_import_c_accel);<span class='error_goto'> if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 605, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_2);
__pyx_t_1 = <span class='pyx_c_api'>__Pyx_Globals</span>();<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 605, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
__pyx_t_9 = <span class='py_c_api'>PyTuple_New</span>(2);<span class='error_goto'> if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 605, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_9);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_t_1);
<span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_9, 0, __pyx_t_1);
<span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_n_s_gevent__local);
<span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_n_s_gevent__local);
<span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_9, 1, __pyx_n_s_gevent__local);
__pyx_t_1 = 0;
__pyx_t_1 = <span class='pyx_c_api'>__Pyx_PyObject_Call</span>(__pyx_t_2, __pyx_t_9, NULL);<span class='error_goto'> if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 605, __pyx_L1_error)</span>
<span class='refnanny'>__Pyx_GOTREF</span>(__pyx_t_1);
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_2); __pyx_t_2 = 0;
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_9); __pyx_t_9 = 0;
<span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_t_1); __pyx_t_1 = 0;
</pre></div></body></html>