File: //usr/local/lib/python3.7/test/__pycache__/test_code.cpython-37.pyc
B
��g�) � @ s� d Z ddlZddlZddlZddlZddlZyddlZW n ek
rP dZY nX ddlm Z m
Z
mZmZ dd� Z
dd� Zdd � ZG d
d� dej�Zdd
� ZG dd� dej�ZG dd� dej�Zedd��rtedk �rtejZe�dej�ZejZefe_eje_ejZ ej!ejejfe _ej"e _ej#Z$ej!eje�%ej�fe$_ej"e$_da&dd� Z'ee'�Z(ee(�Z)G dd� dej�Z*ddd�Z+e,dk�r�e+� dS )a7 This module includes tests of the code object representation.
>>> def f(x):
... def g(y):
... return x + y
... return g
...
>>> dump(f.__code__)
name: f
argcount: 1
kwonlyargcount: 0
names: ()
varnames: ('x', 'g')
cellvars: ('x',)
freevars: ()
nlocals: 2
flags: 3
consts: ('None', '<code object g>', "'f.<locals>.g'")
>>> dump(f(4).__code__)
name: g
argcount: 1
kwonlyargcount: 0
names: ()
varnames: ('y',)
cellvars: ()
freevars: ('x',)
nlocals: 1
flags: 19
consts: ('None',)
>>> def h(x, y):
... a = x + y
... b = x - y
... c = a * b
... return c
...
>>> dump(h.__code__)
name: h
argcount: 2
kwonlyargcount: 0
names: ()
varnames: ('x', 'y', 'a', 'b', 'c')
cellvars: ()
freevars: ()
nlocals: 5
flags: 67
consts: ('None',)
>>> def attrs(obj):
... print(obj.attr1)
... print(obj.attr2)
... print(obj.attr3)
>>> dump(attrs.__code__)
name: attrs
argcount: 1
kwonlyargcount: 0
names: ('print', 'attr1', 'attr2', 'attr3')
varnames: ('obj',)
cellvars: ()
freevars: ()
nlocals: 1
flags: 67
consts: ('None',)
>>> def optimize_away():
... 'doc string'
... 'not a docstring'
... 53
... 0x53
>>> dump(optimize_away.__code__)
name: optimize_away
argcount: 0
kwonlyargcount: 0
names: ()
varnames: ()
cellvars: ()
freevars: ()
nlocals: 0
flags: 67
consts: ("'doc string'", 'None')
>>> def keywordonly_args(a,b,*,k1):
... return a,b,k1
...
>>> dump(keywordonly_args.__code__)
name: keywordonly_args
argcount: 2
kwonlyargcount: 1
names: ()
varnames: ('a', 'b', 'k1')
cellvars: ()
freevars: ()
nlocals: 3
flags: 67
consts: ('None',)
� N)�run_doctest�run_unittest�cpython_only�check_impl_detailc c s8 x2| D ]*}t |�}|�d�r*d|j V q|V qW dS )z.Yield a doctest-safe sequence of object reprs.z<code objectz<code object %s>N)�repr�
startswith�co_name)�tZelt�r� r �*/usr/local/lib/python3.7/test/test_code.py�constsv s
r
c C s@ x&dD ]}t d|t| d| �f � qW t dtt| j��� dS )z1Print out a text representation of a code object.) �nameZargcountZkwonlyargcount�namesZvarnamesZcellvarsZfreevarsZnlocals�flagsz%s: %sZco_zconsts:N)�print�getattr�tupler
� co_consts)�co�attrr r r �dump s
r c C s dt � �|�� �S )NzForeign getitem: )�super�__getitem__)�self�ir r r �external_getitem� s r c @ s$ e Zd Zedd� �Zedd� �ZdS )�CodeTestc C sD dd l }|�ddd�}| �|jd� | �|jd� | �|jd� d S )Nr �filename�funcname� )� _testcapiZ
code_newempty�assertEqual�co_filenamer �co_firstlineno)r r! r r r r �
test_newempty� s
zCodeTest.test_newemptyc s� ddl m�m� dd� �� fdd�����fdd�}G d d
� d
t�}||dt� |j}|jd j}| �||� | � |j
jtj
@ t|j
j�� |dd
dg�}| �|d d� d S )Nr )�FunctionType�CodeTypec s � fdd�j S )Nc s � S )Nr r )� __class__r r �<lambda>� � zICodeTest.test_closure_injection.<locals>.create_closure.<locals>.<lambda>)�__closure__)r( r )r( r �create_closure� s z7CodeTest.test_closure_injection.<locals>.create_closurec sF � | j | j| j| j| j| j| j| j| j| j | j
| j| j| j
d | j�S )z9A new code object with a __class__ cell added to freevars)r( )�co_argcount�co_kwonlyargcount�
co_nlocals�co_stacksize�co_flags�co_coder �co_names�co_varnamesr# r r$ � co_lnotab�co_freevars�co_cellvars)�c)r'