o
     JAf0                  	   @   s  	 d dl Z d dlmZ zd dlmZ W n ey   dZY nw ddgZe je j	B e j
B ZedZedZedZG d	d deZeeed
Ze deZdddddddddZdd ZdeejfddZepgeZe deZdZdejefddZejefddZG d d deZdS )!    N)scanner)
scanstringJSONDecoderJSONDecodeErrornaninfz-infc                   @   s   e Zd Z	 dd Zdd ZdS )r   c                 C   sb   | dd|d }||dd| }d||||f }t| | || _|| _|| _|| _|| _d S )N
r      z%s: line %d column %d (char %d))	countrfind
ValueError__init__msgdocposlinenocolno)selfr   r   r   r   r   errmsg r   #/usr/lib/python3.10/json/decoder.pyr      s   
zJSONDecodeError.__init__c                 C   s   | j | j| j| jffS N)	__class__r   r   r   )r   r   r   r   
__reduce__*   s   zJSONDecodeError.__reduce__N)__name__
__module____qualname__r   r   r   r   r   r   r      s    
)z	-InfinityZInfinityNaNz(.*?)(["\\\x00-\x1f])"\/r   	)r   r   r    bfnrtc                 C   s\   | |d |d  }t |dkr&|d dvr&zt|dW S  ty%   Y nw d}t|| |)Nr	         ZxX   zInvalid \uXXXX escape)lenintr   r   )sr   escr   r   r   r   _decode_uXXXX;   s   r1   Tc                 C   s  	 g }|j }|d }	 || |}|d u rtd| || }| \}	}
|	r*||	 |
dkr/n|
dkrE|r@d|
}t|| |||
 q
z| | }W n tyY   td| |d w |dkr|z|| }W n tyv   d|}t|| |w |d7 }nFt| |}|d7 }d	|  krd
krn n-| ||d  dkrt| |d }d|  krdkrn nd|d	 d> |d B  }|d7 }t|}|| qd	||fS )Nr	   zUnterminated string starting atr   r   z"Invalid control character {0!r} atuzInvalid \escape: {0!r}r*   i   i     z\ui   i  i   
       )
appendr   endgroupsformat
IndexErrorKeyErrorr1   chrjoin)r/   r8   strictZ_b_mchunks_appendZbeginchunkZcontent
terminatorr   r0   charZuniZuni2r   r   r   py_scanstringE   s`   




,,rF   z
[ \t\n\r]*z 	
c              
   C   s  | \}}	g }
|
j }|d u ri }|j}||	|	d  }|dkr]||v r1|||	 }	||	|	d  }|dkrS|d urC||
}||	d fS i }
|d urM||
}
|
|	d fS |dkr]td||	|	d7 }		 t||	|\}}	|||}||	|	d  dkr|||	 }	||	|	d  dkrtd||	|	d7 }	z||	 |v r|	d7 }	||	 |v r|||	d  }	W n	 ty   Y nw z	|||	\}}	W n ty } ztd||jd d }~ww |||f z||	 }||v r|||	d  }	||	 }W n ty   d	}Y nw |	d7 }	|dkr
n.|d
krtd||	d |||	 }	||	|	d  }|	d7 }	|dkr7td||	d qb|d urE||
}||	fS t|
}
|d urR||
}
|
|	fS )Nr	   r   }z1Expecting property name enclosed in double quotesT:zExpecting ':' delimiterExpecting valuer6   ,Expecting ',' delimiter)	r7   
setdefaultr8   r   r   r;   StopIterationvaluedict)	s_and_endr?   	scan_onceobject_hookobject_pairs_hookmemo_w_wsr/   r8   pairsZpairs_appendZmemo_getnextcharresultkeyrN   errr   r   r   
JSONObject   s   





+
r\   c              
   C   s^  | \}}g }|||d  }||v r#|||d   }|||d  }|dkr-||d fS |j}	 z	|||\}	}W n tyN }
 ztd||
jd d }
~
ww ||	 |||d  }||v rp|||d   }|||d  }|d7 }|dkr}	 ||fS |dkrtd||d z|| |v r|d7 }|| |v r|||d   }W n	 ty   Y nw q1)Nr	   ]TrI   rJ   rK   )r8   r7   rM   r   rN   r;   )rP   rQ   rU   rV   r/   r8   valuesrX   rB   rN   r[   r   r   r   	JSONArray   sJ   r_   c                   @   s>   e Zd Z	 dddddddddZejfddZdd	d
ZdS )r   NT)rR   parse_float	parse_intparse_constantr?   rS   c                C   s\   	 || _ |pt| _|pt| _|ptj| _|| _|| _	t
| _t| _t| _i | _t| | _d S r   )rR   floatr`   r.   ra   
_CONSTANTS__getitem__rb   r?   rS   r\   Zparse_objectr_   Zparse_arrayr   Zparse_stringrT   r   Zmake_scannerrQ   )r   rR   r`   ra   rb   r?   rS   r   r   r   r     s    

zJSONDecoder.__init__c                 C   sH   	 | j |||d d\}}||| }|t|kr"td|||S )Nr   )idxz
Extra data)
raw_decoder8   r-   r   )r   r/   rU   objr8   r   r   r   decodeL  s   zJSONDecoder.decoder   c              
   C   sF   	 z|  ||\}}W ||fS  ty" } ztd||jd d }~ww )NrI   )rQ   rM   r   rN   )r   r/   rf   rh   r8   r[   r   r   r   rg   W  s   zJSONDecoder.raw_decode)r   )r   r   r   r   
WHITESPACEmatchri   rg   r   r   r   r   r      s    0)reZjsonr   Z_jsonr   Zc_scanstringImportError__all__VERBOSE	MULTILINEDOTALLFLAGSrc   r   ZPosInfZNegInfr   r   rd   compileZSTRINGCHUNKZ	BACKSLASHr1   rk   rF   rj   ZWHITESPACE_STRr\   r_   objectr   r   r   r   r   <module>   sB    


=
Q%