B
    ›³ëb‹  ã               @   s~   d dl Z e  d¡Ze  d¡Ze  d¡ZdZe  de ¡Ze  de ¡Ze  d¡ZG d	d
„ d
ƒZ	G dd„ dƒZ
G dd„ dƒZdS )é    Nz[_a-zA-Z]\w*$z\$[()]z\$\([^$]*(\$[^)][^$]*)*\$\)z'\$[\$\(\)]|\$[_a-zA-Z][\.\w]*|\${[^}]*}z(%s)z(%s|\s+|[^\s$]+|\$)z[\t ]+(?![^{]*})c               @   s    e Zd ZdZdZdZdZdZdS )Ú
ValueTypesz>
    Enum to store what type of value the variable holds.
    r   é   é   é   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚUNKNOWNÚSTRINGÚCALLABLEZVARIABLE© r   r   ú6lib/python3.7/site-packages/SCons/EnvironmentValues.pyr   <   s
   r   c               @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	ÚEnvironmentValuez 
    Hold a single value. We're going to cache parsed version of the file
    We're going to keep track of variables which feed into this values evaluation
    c             C   s.   || _ tj| _t| j ƒr"tj| _n|  ¡  d S )N)Úvaluer   r
   Úvar_typeÚcallabler   Úparse_value)Úselfr   r   r   r   Ú__init__K   s
    

zEnvironmentValue.__init__c             C   sV   y4d| j kr| j | _tj| _nt tt¡}t	|ƒ W n t
k
rP   | j | _Y nX dS )zA
        Scan the string and break into component values
        ú$N)r   Z_parsedr   r   r   Ú_dollar_expsÚsubZ	sub_matchÚargsÚprintÚ	TypeError)r   Úresultr   r   r   r   U   s    

zEnvironmentValue.parse_valuec             C   s   g }x| j D ]}qW dS )zA
        Try alternate parsing methods.
        :return:
        N)r   )r   ÚpartsÚcr   r   r   Úparse_trialf   s    zEnvironmentValue.parse_trialN)r   r   r   r	   r   r   r   r   r   r   r   r   F   s   
r   c               @   s   e Zd ZdZdd„ ZdS )ÚEnvironmentValuesz7
    A class to hold all the environment variables
    c             K   s*   i | _ x|D ]}t|| ƒ| j |< qW d S )N)Z_dictr   )r   ÚkwÚkr   r   r   r   t   s    
zEnvironmentValues.__init__N)r   r   r   r	   r   r   r   r   r   r    p   s   r    )ÚreÚcompileZ_is_valid_varZ_rmÚ_removeZ_dollar_exps_strr   Z_separate_argsZ
_space_sepr   r   r    r   r   r   r   Ú<module>   s   




*