Server IP : 85.214.239.14 / Your IP : 3.141.201.46 Web Server : Apache/2.4.62 (Debian) System : Linux h2886529.stratoserver.net 4.9.0 #1 SMP Tue Jan 9 19:45:01 MSK 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.18 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, MySQL : OFF | cURL : OFF | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : OFF Directory : /proc/3/task/3/cwd/srv/modoboa/env/lib64/python3.5/site-packages/gevent/ |
Upload File : |
<!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) < 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"> <span class="">002</span>: """</pre> <pre class="cython line score-0"> <span class="">003</span>: Greenlet-local objects.</pre> <pre class="cython line score-0"> <span class="">004</span>: </pre> <pre class="cython line score-0"> <span class="">005</span>: This module is based on `_threading_local.py`__ from the standard</pre> <pre class="cython line score-0"> <span class="">006</span>: library of Python 3.4.</pre> <pre class="cython line score-0"> <span class="">007</span>: </pre> <pre class="cython line score-0"> <span class="">008</span>: __ https://github.com/python/cpython/blob/3.4/Lib/_threading_local.py</pre> <pre class="cython line score-0"> <span class="">009</span>: </pre> <pre class="cython line score-0"> <span class="">010</span>: Greenlet-local objects support the management of greenlet-local data.</pre> <pre class="cython line score-0"> <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"> <span class="">012</span>: a greenlet-local object and use its attributes:</pre> <pre class="cython line score-0"> <span class="">013</span>: </pre> <pre class="cython line score-0"> <span class="">014</span>: >>> mydata = local()</pre> <pre class="cython line score-0"> <span class="">015</span>: >>> mydata.number = 42</pre> <pre class="cython line score-0"> <span class="">016</span>: >>> mydata.number</pre> <pre class="cython line score-0"> <span class="">017</span>: 42</pre> <pre class="cython line score-0"> <span class="">018</span>: </pre> <pre class="cython line score-0"> <span class="">019</span>: You can also access the local-object's dictionary:</pre> <pre class="cython line score-0"> <span class="">020</span>: </pre> <pre class="cython line score-0"> <span class="">021</span>: >>> mydata.__dict__</pre> <pre class="cython line score-0"> <span class="">022</span>: {'number': 42}</pre> <pre class="cython line score-0"> <span class="">023</span>: >>> mydata.__dict__.setdefault('widgets', [])</pre> <pre class="cython line score-0"> <span class="">024</span>: []</pre> <pre class="cython line score-0"> <span class="">025</span>: >>> mydata.widgets</pre> <pre class="cython line score-0"> <span class="">026</span>: []</pre> <pre class="cython line score-0"> <span class="">027</span>: </pre> <pre class="cython line score-0"> <span class="">028</span>: What's important about greenlet-local objects is that their data are</pre> <pre class="cython line score-0"> <span class="">029</span>: local to a greenlet. If we access the data in a different greenlet:</pre> <pre class="cython line score-0"> <span class="">030</span>: </pre> <pre class="cython line score-0"> <span class="">031</span>: >>> log = []</pre> <pre class="cython line score-0"> <span class="">032</span>: >>> def f():</pre> <pre class="cython line score-0"> <span class="">033</span>: ... items = list(mydata.__dict__.items())</pre> <pre class="cython line score-0"> <span class="">034</span>: ... items.sort()</pre> <pre class="cython line score-0"> <span class="">035</span>: ... log.append(items)</pre> <pre class="cython line score-0"> <span class="">036</span>: ... mydata.number = 11</pre> <pre class="cython line score-0"> <span class="">037</span>: ... log.append(mydata.number)</pre> <pre class="cython line score-0"> <span class="">038</span>: >>> greenlet = gevent.spawn(f)</pre> <pre class="cython line score-0"> <span class="">039</span>: >>> greenlet.join()</pre> <pre class="cython line score-0"> <span class="">040</span>: >>> log</pre> <pre class="cython line score-0"> <span class="">041</span>: [[], 11]</pre> <pre class="cython line score-0"> <span class="">042</span>: </pre> <pre class="cython line score-0"> <span class="">043</span>: we get different data. Furthermore, changes made in the other greenlet</pre> <pre class="cython line score-0"> <span class="">044</span>: don't affect data seen in this greenlet:</pre> <pre class="cython line score-0"> <span class="">045</span>: </pre> <pre class="cython line score-0"> <span class="">046</span>: >>> mydata.number</pre> <pre class="cython line score-0"> <span class="">047</span>: 42</pre> <pre class="cython line score-0"> <span class="">048</span>: </pre> <pre class="cython line score-0"> <span class="">049</span>: Of course, values you get from a local object, including a __dict__</pre> <pre class="cython line score-0"> <span class="">050</span>: attribute, are for whatever greenlet was current at the time the</pre> <pre class="cython line score-0"> <span class="">051</span>: attribute was read. For that reason, you generally don't want to save</pre> <pre class="cython line score-0"> <span class="">052</span>: these values across greenlets, as they apply only to the greenlet they</pre> <pre class="cython line score-0"> <span class="">053</span>: came from.</pre> <pre class="cython line score-0"> <span class="">054</span>: </pre> <pre class="cython line score-0"> <span class="">055</span>: You can create custom local objects by subclassing the local class:</pre> <pre class="cython line score-0"> <span class="">056</span>: </pre> <pre class="cython line score-0"> <span class="">057</span>: >>> class MyLocal(local):</pre> <pre class="cython line score-0"> <span class="">058</span>: ... number = 2</pre> <pre class="cython line score-0"> <span class="">059</span>: ... initialized = False</pre> <pre class="cython line score-0"> <span class="">060</span>: ... def __init__(self, **kw):</pre> <pre class="cython line score-0"> <span class="">061</span>: ... if self.initialized:</pre> <pre class="cython line score-0"> <span class="">062</span>: ... raise SystemError('__init__ called too many times')</pre> <pre class="cython line score-0"> <span class="">063</span>: ... self.initialized = True</pre> <pre class="cython line score-0"> <span class="">064</span>: ... self.__dict__.update(kw)</pre> <pre class="cython line score-0"> <span class="">065</span>: ... def squared(self):</pre> <pre class="cython line score-0"> <span class="">066</span>: ... return self.number ** 2</pre> <pre class="cython line score-0"> <span class="">067</span>: </pre> <pre class="cython line score-0"> <span class="">068</span>: This can be useful to support default values, methods and</pre> <pre class="cython line score-0"> <span class="">069</span>: initialization. Note that if you define an __init__ method, it will be</pre> <pre class="cython line score-0"> <span class="">070</span>: called each time the local object is used in a separate greenlet. This</pre> <pre class="cython line score-0"> <span class="">071</span>: is necessary to initialize each greenlet's dictionary.</pre> <pre class="cython line score-0"> <span class="">072</span>: </pre> <pre class="cython line score-0"> <span class="">073</span>: Now if we create a local object:</pre> <pre class="cython line score-0"> <span class="">074</span>: </pre> <pre class="cython line score-0"> <span class="">075</span>: >>> mydata = MyLocal(color='red')</pre> <pre class="cython line score-0"> <span class="">076</span>: </pre> <pre class="cython line score-0"> <span class="">077</span>: Now we have a default number:</pre> <pre class="cython line score-0"> <span class="">078</span>: </pre> <pre class="cython line score-0"> <span class="">079</span>: >>> mydata.number</pre> <pre class="cython line score-0"> <span class="">080</span>: 2</pre> <pre class="cython line score-0"> <span class="">081</span>: </pre> <pre class="cython line score-0"> <span class="">082</span>: an initial color:</pre> <pre class="cython line score-0"> <span class="">083</span>: </pre> <pre class="cython line score-0"> <span class="">084</span>: >>> mydata.color</pre> <pre class="cython line score-0"> <span class="">085</span>: 'red'</pre> <pre class="cython line score-0"> <span class="">086</span>: >>> del mydata.color</pre> <pre class="cython line score-0"> <span class="">087</span>: </pre> <pre class="cython line score-0"> <span class="">088</span>: And a method that operates on the data:</pre> <pre class="cython line score-0"> <span class="">089</span>: </pre> <pre class="cython line score-0"> <span class="">090</span>: >>> mydata.squared()</pre> <pre class="cython line score-0"> <span class="">091</span>: 4</pre> <pre class="cython line score-0"> <span class="">092</span>: </pre> <pre class="cython line score-0"> <span class="">093</span>: As before, we can access the data in a separate greenlet:</pre> <pre class="cython line score-0"> <span class="">094</span>: </pre> <pre class="cython line score-0"> <span class="">095</span>: >>> log = []</pre> <pre class="cython line score-0"> <span class="">096</span>: >>> greenlet = gevent.spawn(f)</pre> <pre class="cython line score-0"> <span class="">097</span>: >>> greenlet.join()</pre> <pre class="cython line score-0"> <span class="">098</span>: >>> log</pre> <pre class="cython line score-0"> <span class="">099</span>: [[('color', 'red'), ('initialized', True)], 11]</pre> <pre class="cython line score-0"> <span class="">100</span>: </pre> <pre class="cython line score-0"> <span class="">101</span>: without affecting this greenlet's data:</pre> <pre class="cython line score-0"> <span class="">102</span>: </pre> <pre class="cython line score-0"> <span class="">103</span>: >>> mydata.number</pre> <pre class="cython line score-0"> <span class="">104</span>: 2</pre> <pre class="cython line score-0"> <span class="">105</span>: >>> mydata.color</pre> <pre class="cython line score-0"> <span class="">106</span>: Traceback (most recent call last):</pre> <pre class="cython line score-0"> <span class="">107</span>: ...</pre> <pre class="cython line score-0"> <span class="">108</span>: AttributeError: 'MyLocal' object has no attribute 'color'</pre> <pre class="cython line score-0"> <span class="">109</span>: </pre> <pre class="cython line score-0"> <span class="">110</span>: Note that subclasses can define slots, but they are not greenlet</pre> <pre class="cython line score-0"> <span class="">111</span>: local. They are shared across greenlets::</pre> <pre class="cython line score-0"> <span class="">112</span>: </pre> <pre class="cython line score-0"> <span class="">113</span>: >>> class MyLocal(local):</pre> <pre class="cython line score-0"> <span class="">114</span>: ... __slots__ = 'number'</pre> <pre class="cython line score-0"> <span class="">115</span>: </pre> <pre class="cython line score-0"> <span class="">116</span>: >>> mydata = MyLocal()</pre> <pre class="cython line score-0"> <span class="">117</span>: >>> mydata.number = 42</pre> <pre class="cython line score-0"> <span class="">118</span>: >>> mydata.color = 'red'</pre> <pre class="cython line score-0"> <span class="">119</span>: </pre> <pre class="cython line score-0"> <span class="">120</span>: So, the separate greenlet:</pre> <pre class="cython line score-0"> <span class="">121</span>: </pre> <pre class="cython line score-0"> <span class="">122</span>: >>> greenlet = gevent.spawn(f)</pre> <pre class="cython line score-0"> <span class="">123</span>: >>> greenlet.join()</pre> <pre class="cython line score-0"> <span class="">124</span>: </pre> <pre class="cython line score-0"> <span class="">125</span>: affects what we see:</pre> <pre class="cython line score-0"> <span class="">126</span>: </pre> <pre class="cython line score-0"> <span class="">127</span>: >>> mydata.number</pre> <pre class="cython line score-0"> <span class="">128</span>: 11</pre> <pre class="cython line score-0"> <span class="">129</span>: </pre> <pre class="cython line score-0"> <span class="">130</span>: >>> del mydata</pre> <pre class="cython line score-0"> <span class="">131</span>: </pre> <pre class="cython line score-0"> <span class="">132</span>: .. versionchanged:: 1.1a2</pre> <pre class="cython line score-0"> <span class="">133</span>: Update the implementation to match Python 3.4 instead of Python 2.5.</pre> <pre class="cython line score-0"> <span class="">134</span>: This results in locals being eligible for garbage collection as soon</pre> <pre class="cython line score-0"> <span class="">135</span>: as their greenlet exits.</pre> <pre class="cython line score-0"> <span class="">136</span>: </pre> <pre class="cython line score-0"> <span class="">137</span>: .. versionchanged:: 1.2.3</pre> <pre class="cython line score-0"> <span class="">138</span>: Use a weak-reference to clear the greenlet link we establish in case</pre> <pre class="cython line score-0"> <span class="">139</span>: the local object dies before the greenlet does.</pre> <pre class="cython line score-0"> <span class="">140</span>: </pre> <pre class="cython line score-0"> <span class="">141</span>: .. versionchanged:: 1.3a1</pre> <pre class="cython line score-0"> <span class="">142</span>: Implement the methods for attribute access directly, handling</pre> <pre class="cython line score-0"> <span class="">143</span>: descriptors directly here. This allows removing the use of a lock</pre> <pre class="cython line score-0"> <span class="">144</span>: and facilitates greatly improved performance.</pre> <pre class="cython line score-0"> <span class="">145</span>: </pre> <pre class="cython line score-0"> <span class="">146</span>: .. versionchanged:: 1.3a1</pre> <pre class="cython line score-0"> <span class="">147</span>: The ``__init__`` method of subclasses of ``local`` is no longer</pre> <pre class="cython line score-0"> <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"> <span class="">149</span>: native implementation. This could potentially show as a difference</pre> <pre class="cython line score-0"> <span class="">150</span>: if code that uses multiple dependent attributes in ``__slots__``</pre> <pre class="cython line score-0"> <span class="">151</span>: (which are shared across all greenlets) switches during ``__init__``.</pre> <pre class="cython line score-0"> <span class="">152</span>: </pre> <pre class="cython line score-0"> <span class="">153</span>: """</pre> <pre class="cython line score-0"> <span class="">154</span>: from __future__ import print_function</pre> <pre class="cython line score-0"> <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"> <span class="">158</span>: </pre> <pre class="cython line score-0"> <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) < 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>(&__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) < 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"> <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) < 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"> <span class="">164</span>: "local",</pre> <pre class="cython line score-0"> <span class="">165</span>: ]</pre> <pre class="cython line score-0"> <span class="">166</span>: </pre> <pre class="cython line score-0"> <span class="">167</span>: # The key used in the Thread objects' attribute dicts.</pre> <pre class="cython line score-0"> <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"> <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"> <span class="">171</span>: </pre> <pre class="cython line score-0"> <span class="">172</span>: # The overall structure is as follows:</pre> <pre class="cython line score-0"> <span class="">173</span>: # For each local() object:</pre> <pre class="cython line score-0"> <span class="">174</span>: # greenlet.__dict__[key_prefix + str(id(local))]</pre> <pre class="cython line score-0"> <span class="">175</span>: # => _localimpl.dicts[id(greenlet)] => (ref(greenlet), {})</pre> <pre class="cython line score-0"> <span class="">176</span>: </pre> <pre class="cython line score-0"> <span class="">177</span>: # That final tuple is actually a localimpl_dict_entry object.</pre> <pre class="cython line score-0"> <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_k = 0; PyObject *__pyx_v_greenlet_dict = 0; struct __pyx_obj_6gevent_6_local__localimpl *__pyx_v_local_impl = 0; PyObject *__pyx_v_result = 0; struct __pyx_obj_6gevent_6_local__localimpl_dict_entry *__pyx_v_entry = 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_k); <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_greenlet_dict); <span class='pyx_macro_api'>__Pyx_XDECREF</span>((PyObject *)__pyx_v_local_impl); <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_result); <span class='pyx_macro_api'>__Pyx_XDECREF</span>((PyObject *)__pyx_v_entry); <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>(&__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) < 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"> <span class="">180</span>: """</pre> <pre class="cython line score-0"> <span class="">181</span>: Internal debug helper for getting the local values associated</pre> <pre class="cython line score-0"> <span class="">182</span>: with a greenlet. This is subject to change or removal at any time.</pre> <pre class="cython line score-0"> <span class="">183</span>: </pre> <pre class="cython line score-0"> <span class="">184</span>: :return: A list of ((type, id), {}) pairs, where the first element</pre> <pre class="cython line score-0"> <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"> <span class="">186</span>: instance dictionary, as seen from this greenlet.</pre> <pre class="cython line score-0"> <span class="">187</span>: </pre> <pre class="cython line score-0"> <span class="">188</span>: .. versionadded:: 1.3a2</pre> <pre class="cython line score-0"> <span class="">189</span>: """</pre> <pre class="cython line score-0"> <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)->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, (&__pyx_t_3), (&__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, &__pyx_t_2, &__pyx_t_5, &__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)->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 && 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->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->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"> <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->wrgreenlet); __pyx_t_5 = __pyx_v_entry->wrgreenlet; __pyx_t_10 = NULL; if (CYTHON_UNPACK_METHODS && 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->localtypeid); <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_v_local_impl->localtypeid); <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_6, 0, __pyx_v_local_impl->localtypeid); <span class='pyx_macro_api'>__Pyx_INCREF</span>(__pyx_v_entry->localdict); <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_v_entry->localdict); <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_6, 1, __pyx_v_entry->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"> <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"> <span class="">208</span>: </pre> <pre class="cython line score-0"> <span class="">209</span>: </pre> <pre class="cython line score-0"> <span class="">210</span>: class _wrefdict(dict):</pre> <pre class="cython line score-0"> <span class="">211</span>: """A dict that can be weak referenced"""</pre> <pre class="cython line score-0"> <span class="">212</span>: </pre> <pre class="cython line score-0"> <span class="">213</span>: class _greenlet_deleted(object):</pre> <pre class="cython line score-0"> <span class="">214</span>: """</pre> <pre class="cython line score-0"> <span class="">215</span>: A weakref callback for when the greenlet</pre> <pre class="cython line score-0"> <span class="">216</span>: is deleted.</pre> <pre class="cython line score-0"> <span class="">217</span>: </pre> <pre class="cython line score-0"> <span class="">218</span>: If the greenlet is a `gevent.greenlet.Greenlet` and</pre> <pre class="cython line score-0"> <span class="">219</span>: supplies ``rawlink``, that will be used instead of a</pre> <pre class="cython line score-0"> <span class="">220</span>: weakref.</pre> <pre class="cython line score-0"> <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->tp_dict, __pyx_n_s_slots, __pyx_tuple__4) < 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"> <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[] = {&__pyx_n_s_idt,&__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 > 0)) { if (unlikely(<span class='pyx_c_api'>__Pyx_ParseOptionalKeywords</span>(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 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->idt); <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_v_self->idt); __pyx_v_self->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->wrdicts); <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_v_self->wrdicts); __pyx_v_self->wrdicts = __pyx_v_wrdicts; </pre><pre class="cython line score-0"> <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[] = {&__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 > 0)) { if (unlikely(<span class='pyx_c_api'>__Pyx_ParseOptionalKeywords</span>(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__call__") < 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->wrdicts); __pyx_t_2 = __pyx_v_self->wrdicts; __pyx_t_3 = NULL; if (CYTHON_UNPACK_METHODS && 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 < 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 && 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->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->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->idt); <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_v_self->idt); <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_6, 0+__pyx_t_5, __pyx_v_self->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"> <span class="">232</span>: </pre> <pre class="cython line score-0"> <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->tp_dict, __pyx_n_s_slots, __pyx_tuple__5) < 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"> <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[] = {&__pyx_n_s_key,&__pyx_n_s_wrthread,&__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 > 0)) { if (unlikely(<span class='pyx_c_api'>__Pyx_ParseOptionalKeywords</span>(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 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)->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->key); <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_v_self->key); __pyx_v_self->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->wrthread); <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_v_self->wrthread); __pyx_v_self->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->greenlet_deleted); <span class='pyx_macro_api'>__Pyx_DECREF</span>(((PyObject *)__pyx_v_self->greenlet_deleted)); __pyx_v_self->greenlet_deleted = ((struct __pyx_obj_6gevent_6_local__greenlet_deleted *)__pyx_t_1); __pyx_t_1 = 0; </pre><pre class="cython line score-0"> <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[] = {&__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 > 0)) { if (unlikely(<span class='pyx_c_api'>__Pyx_ParseOptionalKeywords</span>(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__call__") < 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->wrthread); __pyx_t_2 = __pyx_v_self->wrthread; __pyx_t_3 = NULL; if (CYTHON_UNPACK_METHODS && 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"> <span class="">247</span>: pass</pre> <pre class="cython line score-0"> <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 && 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->greenlet_deleted)) : <span class='pyx_c_api'>__Pyx_PyObject_CallOneArg</span>(__pyx_t_2, ((PyObject *)__pyx_v_self->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->key) < 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"> <span class="">251</span>: </pre> <pre class="cython line score-0"> <span class="">252</span>: class _localimpl(object):</pre> <pre class="cython line score-0"> <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->tp_dict, __pyx_n_s_slots, __pyx_tuple__6) < 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"> <span class="">255</span>: 'localargs', 'localkwargs',</pre> <pre class="cython line score-0"> <span class="">256</span>: 'localtypeid',</pre> <pre class="cython line score-0"> <span class="">257</span>: '__weakref__',)</pre> <pre class="cython line score-0"> <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[] = {&__pyx_n_s_args,&__pyx_n_s_kwargs,&__pyx_n_s_local_type,&__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 > 0)) { if (unlikely(<span class='pyx_c_api'>__Pyx_ParseOptionalKeywords</span>(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 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 *)(&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)->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->key); <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_v_self->key); __pyx_v_self->key = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0; </pre><pre class="cython line score-0"> <span class="">261</span>: # { id(greenlet) -> _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->dicts); <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_v_self->dicts); __pyx_v_self->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)->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->localargs); <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_v_self->localargs); __pyx_v_self->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)->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->localkwargs); <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_v_self->localkwargs); __pyx_v_self->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->localtypeid); <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_v_self->localtypeid); __pyx_v_self->localtypeid = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0; </pre><pre class="cython line score-0"> <span class="">266</span>: </pre> <pre class="cython line score-0"> <span class="">267</span>: # We need to create the thread dict in anticipation of</pre> <pre class="cython line score-0"> <span class="">268</span>: # __init__ being called, to make sure we don't call it</pre> <pre class="cython line score-0"> <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"> <span class="">272</span>: </pre> <pre class="cython line score-0"> <span class="">273</span>: class _localimpl_dict_entry(object):</pre> <pre class="cython line score-0"> <span class="">274</span>: """</pre> <pre class="cython line score-0"> <span class="">275</span>: The object that goes in the ``dicts`` of ``_localimpl``</pre> <pre class="cython line score-0"> <span class="">276</span>: object for each thread.</pre> <pre class="cython line score-0"> <span class="">277</span>: """</pre> <pre class="cython line score-0"> <span class="">278</span>: # This is a class, not just a tuple, so that cython can optimize</pre> <pre class="cython line score-0"> <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->tp_dict, __pyx_n_s_slots, __pyx_tuple__7) < 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"> <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[] = {&__pyx_n_s_wrgreenlet,&__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 > 0)) { if (unlikely(<span class='pyx_c_api'>__Pyx_ParseOptionalKeywords</span>(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 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->wrgreenlet); <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_v_self->wrgreenlet); __pyx_v_self->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)->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->localdict); <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_v_self->localdict); __pyx_v_self->localdict = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0; </pre><pre class="cython line score-0"> <span class="">285</span>: </pre> <pre class="cython line score-0"> <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"> <span class="">287</span>: # local.pxd; if they were cdef'd as methods, they would cause</pre> <pre class="cython line score-0"> <span class="">288</span>: # the creation of a pointer and a vtable. This happens</pre> <pre class="cython line score-0"> <span class="">289</span>: # even if we declare the class @cython.final. functions thus save memory overhead</pre> <pre class="cython line score-0"> <span class="">290</span>: # (but not pointer chasing overhead; the vtable isn't used when we declare</pre> <pre class="cython line score-0"> <span class="">291</span>: # the class final).</pre> <pre class="cython line score-0"> <span class="">292</span>: </pre> <pre class="cython line score-0"> <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) { struct __pyx_obj_6gevent_6_local__greenlet_deleted *__pyx_v_greenlet_deleted = 0; PyObject *__pyx_v_key = 0; PyObject *__pyx_v_localdict = 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>((PyObject *)__pyx_v_greenlet_deleted); <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_key); <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_localdict); <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"> <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->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"> <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 && 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->dicts) : <span class='pyx_c_api'>__Pyx_PyObject_CallOneArg</span>(__pyx_t_2, __pyx_v_self->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"> <span class="">300</span>: </pre> <pre class="cython line score-0"> <span class="">301</span>: # When the greenlet is deleted, remove the local dict.</pre> <pre class="cython line score-0"> <span class="">302</span>: # Note that this is suboptimal if the greenlet object gets</pre> <pre class="cython line score-0"> <span class="">303</span>: # caught in a reference loop. We would like to be called</pre> <pre class="cython line score-0"> <span class="">304</span>: # as soon as the OS-level greenlet ends instead.</pre> <pre class="cython line score-0"> <span class="">305</span>: </pre> <pre class="cython line score-0"> <span class="">306</span>: # If we are working with a gevent.greenlet.Greenlet, we</pre> <pre class="cython line score-0"> <span class="">307</span>: # can pro-actively clear out with a link, avoiding the</pre> <pre class="cython line score-0"> <span class="">308</span>: # issue described above. Use rawlink to avoid spawning any</pre> <pre class="cython line score-0"> <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"> <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 && 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 && 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"> <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 && 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"> <span class="">318</span>: </pre> <pre class="cython line score-0"> <span class="">319</span>: </pre> <pre class="cython line score-0"> <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"> <span class="">322</span>: </pre> <pre class="cython line score-0"> <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 && 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) < 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"> <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->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->dicts, __pyx_v_id_greenlet, __pyx_t_2) < 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"> <span class="">329</span>: </pre> <pre class="cython line score-0"> <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"> <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) { PyObject *__pyx_v_dct = 0; struct __pyx_obj_6gevent_6_local__localimpl *__pyx_v_impl = 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>(__pyx_v_dct); <span class='pyx_macro_api'>__Pyx_XDECREF</span>((PyObject *)__pyx_v_impl); <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->_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"> <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->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->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->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>(&__pyx_t_1, &__pyx_t_6, &__pyx_t_7) < 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->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->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->localargs, __pyx_v_impl->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"> <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"> <span class="">348</span>: </pre> <pre class="cython line score-0"> <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) < 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) < 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) < 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) < 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) < 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) < 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) < 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) < 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) < 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"> <span class="">351</span>: '_local_type_get_descriptors',</pre> <pre class="cython line score-0"> <span class="">352</span>: '_local_type_set_or_del_descriptors',</pre> <pre class="cython line score-0"> <span class="">353</span>: '_local_type_del_descriptors',</pre> <pre class="cython line score-0"> <span class="">354</span>: '_local_type_set_descriptors',</pre> <pre class="cython line score-0"> <span class="">355</span>: '_local_type',</pre> <pre class="cython line score-0"> <span class="">356</span>: '_local_type_vars',</pre> <pre class="cython line score-0"> <span class="">357</span>: '__class__',</pre> <pre class="cython line score-0"> <span class="">358</span>: '__cinit__',</pre> <pre class="cython line score-0"> <span class="">359</span>: }</pre> <pre class="cython line score-0"> <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"> <span class="">362</span>: """</pre> <pre class="cython line score-0"> <span class="">363</span>: An object whose attributes are greenlet-local.</pre> <pre class="cython line score-0"> <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) < 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) < 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->tp_dict, __pyx_n_s_slots, __pyx_t_2) < 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"> <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) && 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 < 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 < 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"> <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->_local__impl); <span class='pyx_macro_api'>__Pyx_DECREF</span>(((PyObject *)__pyx_v_self->_local__impl)); __pyx_v_self->_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 > 4) <span class='pyx_c_api'>__Pyx_RaiseTooManyValuesError</span>(4); else if (size >= 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 && !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] = {&__pyx_t_5,&__pyx_t_3,&__pyx_t_6,&__pyx_t_7}; for (i=0; i < 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)->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->_local_type_get_descriptors); <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_v_self->_local_type_get_descriptors); __pyx_v_self->_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)->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->_local_type_set_or_del_descriptors); <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_v_self->_local_type_set_or_del_descriptors); __pyx_v_self->_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)->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->_local_type_del_descriptors); <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_v_self->_local_type_del_descriptors); __pyx_v_self->_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)->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->_local_type_set_descriptors); <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_v_self->_local_type_set_descriptors); __pyx_v_self->_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->_local_type); <span class='pyx_macro_api'>__Pyx_DECREF</span>(((PyObject *)__pyx_v_self->_local_type)); __pyx_v_self->_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->_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->_local_type_vars); <span class='pyx_macro_api'>__Pyx_DECREF</span>(__pyx_v_self->_local_type_vars); __pyx_v_self->_local_type_vars = ((PyObject*)__pyx_t_4); __pyx_t_4 = 0; </pre><pre class="cython line score-0"> <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 < 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"> <span class="">384</span>: # The _local__impl, __cinit__, etc, won't be hit by the</pre> <pre class="cython line score-0"> <span class="">385</span>: # Cython version, if we've done things right. If we haven't,</pre> <pre class="cython line score-0"> <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 && 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"> <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"> <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 < 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"> <span class="">393</span>: # If there's no possible way we can switch, because this</pre> <pre class="cython line score-0"> <span class="">394</span>: # attribute is *not* found in the class where it might be a</pre> <pre class="cython line score-0"> <span class="">395</span>: # data descriptor (property), and it *is* in the dict</pre> <pre class="cython line score-0"> <span class="">396</span>: # then we don't need to swizzle the dict and take the lock.</pre> <pre class="cython line score-0"> <span class="">397</span>: </pre> <pre class="cython line score-0"> <span class="">398</span>: # We don't have to worry about people overriding __getattribute__</pre> <pre class="cython line score-0"> <span class="">399</span>: # because if they did, the dict-swizzling would only last as</pre> <pre class="cython line score-0"> <span class="">400</span>: # long as we were in here anyway.</pre> <pre class="cython line score-0"> <span class="">401</span>: # Similarly, a __getattr__ will still be called by _oga() if needed</pre> <pre class="cython line score-0"> <span class="">402</span>: # if it's not in the dict.</pre> <pre class="cython line score-0"> <span class="">403</span>: </pre> <pre class="cython line score-0"> <span class="">404</span>: # Optimization: If we're not subclassed, then</pre> <pre class="cython line score-0"> <span class="">405</span>: # there can be no descriptors except for methods, which will</pre> <pre class="cython line score-0"> <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->_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 < 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 && 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"> <span class="">409</span>: </pre> <pre class="cython line score-0"> <span class="">410</span>: # NOTE: If this is a descriptor, this will invoke its __get__.</pre> <pre class="cython line score-0"> <span class="">411</span>: # A broken descriptor that doesn't return itself when called with</pre> <pre class="cython line score-0"> <span class="">412</span>: # a None for the instance argument could mess us up here.</pre> <pre class="cython line score-0"> <span class="">413</span>: # But this is faster than a loop over mro() checking each class __dict__</pre> <pre class="cython line score-0"> <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 < 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->_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->_local_type_vars, Py_NE)); if (unlikely(__pyx_t_2 < 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"> <span class="">417</span>: # If there is a dict value, and nothing in the type,</pre> <pre class="cython line score-0"> <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"> <span class="">420</span>: </pre> <pre class="cython line score-0"> <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"> <span class="">422</span>: # a data descriptor (defines __get__ *and* either __set__ or</pre> <pre class="cython line score-0"> <span class="">423</span>: # __delete__), then the type wins. If it's a non-data descriptor</pre> <pre class="cython line score-0"> <span class="">424</span>: # (defines just __get__), then the instance wins. If it's not a</pre> <pre class="cython line score-0"> <span class="">425</span>: # descriptor at all (doesn't have __get__), the instance wins.</pre> <pre class="cython line score-0"> <span class="">426</span>: # NOTE that the docs for descriptors say that these methods must be</pre> <pre class="cython line score-0"> <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->_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->_local_type_get_descriptors, Py_NE)); if (unlikely(__pyx_t_1 < 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"> <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->_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->_local_type_set_or_del_descriptors, Py_EQ)); if (unlikely(__pyx_t_2 < 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"> <span class="">432</span>: # A data descriptor.</pre> <pre class="cython line score-0"> <span class="">433</span>: # arbitrary code execution while these run. If they touch self again,</pre> <pre class="cython line score-0"> <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->_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 && 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->_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->_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->_local_type)); <span class='refnanny'>__Pyx_GIVEREF</span>(((PyObject *)__pyx_v_self->_local_type)); <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_8, 2+__pyx_t_6, ((PyObject *)__pyx_v_self->_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"> <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"> <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->_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->_local_type_vars, Py_EQ)); if (unlikely(__pyx_t_1 < 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"> <span class="">441</span>: # Not in the dictionary, but is found in the type. It could be</pre> <pre class="cython line score-0"> <span class="">442</span>: # a non-data descriptor still. Some descriptors, like @staticmethod,</pre> <pre class="cython line score-0"> <span class="">443</span>: # return objects (functions, in this case), that are *themselves*</pre> <pre class="cython line score-0"> <span class="">444</span>: # descriptors, which when invoked, again, would do the wrong thing.</pre> <pre class="cython line score-0"> <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"> <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->_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->_local_type_get_descriptors, Py_NE)); if (unlikely(__pyx_t_2 < 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"> <span class="">448</span>: # Not a descriptor, can't execute code. So all we need is</pre> <pre class="cython line score-0"> <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->_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"> <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->_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 && 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)->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 >= <span class='py_macro_api'>PyList_GET_SIZE</span>(__pyx_t_4)) break; #if CYTHON_ASSUME_SAFE_MACROS && !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 < 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 >= <span class='py_macro_api'>PyTuple_GET_SIZE</span>(__pyx_t_4)) break; #if CYTHON_ASSUME_SAFE_MACROS && !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 < 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 < 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 && 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->_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->_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->_local_type)); <span class='refnanny'>__Pyx_GIVEREF</span>(((PyObject *)__pyx_v_self->_local_type)); <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_5, 2+__pyx_t_6, ((PyObject *)__pyx_v_self->_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"> <span class="">458</span>: </pre> <pre class="cython line score-0"> <span class="">459</span>: # It wasn't in the dict and it wasn't in the type.</pre> <pre class="cython line score-0"> <span class="">460</span>: # So the next step is to invoke type(self)__getattr__, if it</pre> <pre class="cython line score-0"> <span class="">461</span>: # exists, otherwise raise an AttributeError.</pre> <pre class="cython line score-0"> <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->_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->_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 && 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->_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"> <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 < 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"> <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"> <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 < 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 && 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"> <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"> <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->_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"> <span class="">481</span>: # Optimization: If we're not subclassed, we can't</pre> <pre class="cython line score-0"> <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) < 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"> <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->_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->_local_type_vars, Py_EQ)); if (unlikely(__pyx_t_1 < 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->_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->_local_type_set_descriptors, Py_EQ)); if (unlikely(__pyx_t_4 < 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->_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"> <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 && 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"> <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) < 0)) <span class='error_goto'>__PYX_ERR(0, 493, __pyx_L1_error)</span> </pre><pre class="cython line score-0"> <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 < 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"> <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"> <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->_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->_local_type_vars, Py_EQ)); if (unlikely(__pyx_t_1 < 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->_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->_local_type_del_descriptors, Py_EQ)); if (unlikely(__pyx_t_4 < 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"> <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->_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 && 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"> <span class="">507</span>: # Otherwise it goes directly in the dict</pre> <pre class="cython line score-0"> <span class="">508</span>: </pre> <pre class="cython line score-0"> <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"> <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) < 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>(&__pyx_t_5, &__pyx_t_2, &__pyx_t_7) < 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"> <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_local *__pyx_v_instance = 0; PyObject *__pyx_v_duplicate = 0; PyObject *__pyx_v_dct = 0; struct __pyx_obj_6gevent_6_local__localimpl_dict_entry *__pyx_v_entry = 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))->tp_dictoffset != 0) || (Py_TYPE(((PyObject *)__pyx_v_self))->tp_flags & (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))) { #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP static PY_UINT64_T tp_dict_version = 0, obj_dict_version = 0; if (likely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dict && tp_dict_version == __PYX_GET_DICT_VERSION(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dict) && (!Py_TYPE(((PyObject *)__pyx_v_self))->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))->tp_dict)) ? __PYX_GET_DICT_VERSION(Py_TYPE(((PyObject *)__pyx_v_self))->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 && 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 && CYTHON_USE_PYTYPE_LOOKUP tp_dict_version = likely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dict) ? __PYX_GET_DICT_VERSION(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dict) : 0; obj_dict_version = likely(Py_TYPE(((PyObject *)__pyx_v_self))->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 && 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_instance); <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_duplicate); <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_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) -> 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>(&__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->tp_dict, __pyx_n_s_copy, __pyx_t_2) < 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->_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->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->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"> <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->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 && 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)->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"> <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->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->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->localargs, __pyx_v_impl->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"> <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->_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->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->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->wrgreenlet); <span class='refnanny'>__Pyx_GIVEREF</span>(__pyx_v_entry->wrgreenlet); <span class='py_macro_api'>PyTuple_SET_ITEM</span>(__pyx_t_1, 0, __pyx_v_entry->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->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->dicts, __pyx_v_currentId, __pyx_t_3) < 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"> <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_dels = 0; PyObject *__pyx_v_sets = 0; PyTypeObject *__pyx_v_type_attr = 0; PyObject *__pyx_v_mro = 0; PyObject *__pyx_v_gets = 0; PyObject *__pyx_v_set_or_del = 0; PyTypeObject *__pyx_v_type_self = 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_dels); <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_sets); <span class='pyx_macro_api'>__Pyx_XDECREF</span>(__pyx_v_type_attr); <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_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_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 && 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"> <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)->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 >= <span class='py_macro_api'>PyList_GET_SIZE</span>(__pyx_t_1)) break; #if CYTHON_ASSUME_SAFE_MACROS && !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 < 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 >= <span class='py_macro_api'>PyTuple_GET_SIZE</span>(__pyx_t_1)) break; #if CYTHON_ASSUME_SAFE_MACROS && !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 < 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"> <span class="">546</span>: # Conventionally, descriptors when called on a class</pre> <pre class="cython line score-0"> <span class="">547</span>: # return themself, but not all do. Notable exceptions are</pre> <pre class="cython line score-0"> <span class="">548</span>: # in the zope.interface package, where things like __provides__</pre> <pre class="cython line score-0"> <span class="">549</span>: # return other class attributes. So we can't use getattr, and instead</pre> <pre class="cython line score-0"> <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 >= <span class='py_macro_api'>PyList_GET_SIZE</span>(__pyx_t_2)) break; #if CYTHON_ASSUME_SAFE_MACROS && !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 < 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 < 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"> <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"> <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"> <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"> <span class="">569</span>: </pre> <pre class="cython line score-0"> <span class="">570</span>: # Cython doesn't let us use __new__, it requires</pre> <pre class="cython line score-0"> <span class="">571</span>: # __cinit__. But we need __new__ if we're not compiled</pre> <pre class="cython line score-0"> <span class="">572</span>: # (e.g., on PyPy). So we set it at runtime. Cython</pre> <pre class="cython line score-0"> <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) > 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[] = {&__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 > 0)) { const Py_ssize_t used_pos_args = (pos_args < 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__") < 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) < 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>(&__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) < 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 && 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"> <span class="">576</span>: # We get the cls in *args for some reason</pre> <pre class="cython line score-0"> <span class="">577</span>: # too when we do it this way....except on PyPy3, which does</pre> <pre class="cython line score-0"> <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"> <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"> <span class="">583</span>: # PyPy2/3 and CPython handle adding a __new__ to the class</pre> <pre class="cython line score-0"> <span class="">584</span>: # in different ways. In CPython and PyPy3, it must be wrapped with classmethod;</pre> <pre class="cython line score-0"> <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"> <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) < 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"> <span class="">589</span>: # Must be compiled</pre> <pre class="cython line score-0"> <span class="">590</span>: pass</pre> <pre class="cython line score-0"> <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) < 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) < 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 < 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 < 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) < 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"> <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) < 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"> <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) < 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) < 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"> <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"> <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) < 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>