o
    _fb                     @   s&   	 G d d de ZG dd de ZdS )c                   @   s    e Zd Z	 dddZdd ZdS )FieldNFc	           	      C   s:   || _ || _|| _|| _|| _|| _|| _|| _d | _d S N)	type
field_type
field_nameenumvisiblewireautoisfdparent)	selfr   r   r   r   r   r	   r   r
    r   b/home/ych/rk3568/buildroot/output/rockchip_rk3568/host/lib/python3.10/site-packages/xcbgen/expr.py__init__   s   
zField.__init__c                 C   s^   d}| j d u r| jd ur|dt| j 7 }n	|d| j  d 7 }| jd ur-|dt| j 7 }|S )Nr   z with type z ""z in )r   r   strr   r   )r   Zfield_stringr   r   r   __str__   s   


zField.__str__)NF)__name__
__module____qualname__r   r   r   r   r   r   r      s    
r   c                   @   s>   e Zd Z	 dd Zdd Zdd Zdd Zd	d
 Zdd ZdS )
Expressionc                 C   s&  || _ d | _d | _d | _d | _d | _d| _d| _d | _d | _	d | _
d| _|jdkr6|dd | _d| _d S |jdkrA|j| _d S |jdkrR|j| _|d| _d S |jd	kr|d	| _tt|d
 || _	tt|d || _
| j	j| _| jd kr| j
j| _d S d S |jdkr|d	| _tt|d
 || _
| j
j| _d S |jdkrt|jd
| _d S |jdkrd| _tt|d
 || _
| j
j| _d S |jdkrd| _|d|jf| _d S |jdkrd| _|d| _t|}t|d
krt|d
 || _
d S d S |jdkrd| _d| _d S td|j )NFlistname_lenZCARD32ZfieldrefZparamrefr   op       ZunopvalueZpopcountenumrefrefsumofzlistelement-refTzundefined tag '%s')r   nmemblenfield_namelenfield_typelenfield_parentlenfieldZlenwireZbitfieldr   lhsrhscontains_listelement_reftaggettextr   r   intlen	Exception)r   eltr   Zsubexpressionsr   r   r   r   3   sh   












zExpression.__init__c                 C   s
   | j d kS r   r!   r   r   r   r   
fixed_size   s   
zExpression.fixed_sizec                 C   s   | j S r   r0   r1   r   r   r   	get_value   s   zExpression.get_valuec                 C   sB   d}| j dkr| j r|| j 9 }| j r|| j 9 }|S )Nr   *)r   r&   r2   r3   r'   )r   Zmultipler   r   r   get_multiple   s   


zExpression.get_multiplec                 C   s:   | j | jfD ]}|d kr||| |  j|jO  _qd S r   )r&   r'   recursive_resolve_tasksr(   )r   moduleparentsZsubexprr   r   r   r6      s   z"Expression.recursive_resolve_tasksc                 C   s   | j dkr|| jd | _| jd | _n9| j dkrNt|D ]/}tdd |jD }| j| v rM|jr;|j	d | _
n|| _
|| j j| _|| j | _ nq| || d S )Nr   r   r   r    c                 S   s   g | ]}|j |fqS r   )r   ).0fr   r   r   
<listcomp>   s    z&Expression.resolve.<locals>.<listcomp>)r   Zget_typer"   r#   reverseddictfieldskeysZis_case_or_bitcaser8   r$   r   r%   r6   )r   r7   r8   pr?   r   r   r   resolve   s   


zExpression.resolveN)	r   r   r   r   r2   r3   r5   r6   rB   r   r   r   r   r   '   s    R
r   N)objectr   r   r   r   r   r   <module>   s    #