a
    V$c                     @   st   d dl mZmZmZmZmZ d dlmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZ d dlZd dlZdadd ZdS )    )divisionabsolute_importwith_statementprint_functionunicode_literals)PY2
basestringbchrbordchropenpystrrangeroundstrtobytesunicodeNc               	      s  t } da | du rdS d| vr$td| dd\ ttjjsLtd ds^d   i ttj	j
j }fdd}|D ]:}t|tjjr|jrqt|tjjr|jD ]"}|d	 dur|||d	 d
  qt|tjjr|js|jtj	j
jv r||tj	j
j|j  qt|tjjr:|||jd
  t|tjjrd}|jD ]&\}}|||d
  |dkrTd}qT|rqt|tjjr|||  qt|dddur|||j q fdd|D }|std| |jt !d
d |d d }	g }
|	}"|d}|r6|
#| nq6q|
$  |
tjj% d }
dtj_&|
D ]2}|' r\z|(  W n ty   Y n0 q\dtj_&dtj	_)tj*+  tj	, -|	j. tj	, /|	j.d tj	0 dS )zp
    Given a filename and line number, this attempts to warp the user
    to that filename and line number.
    N:zNo : found in warp location.   z$Can't warp, developer mode disabled.zgame/c                    sz    vr < d S   fdd}d }|p@| fdd}|pT| fdd}|pd|dd }|pl}| < d S )Nc                    s    |  r S |  rS d S N )fn)nodeoldr   renpy/warp.pypreferQ   s
    

z!warp.<locals>.add.<locals>.preferc                    s   | j  j ko|j  j kS r   )filenameabnextr   r   <lambda>[       z#warp.<locals>.add.<locals>.<lambda>c                    s   | j  j ko|j  j kS r   
linenumberr   r    r   r   r"   \   r#   c                 S   s   | j |j kS r   r$   r   r   r   r   r"   ]   r#   r   )r   r!   r   n)prev)r!   r   r   r   addG   s    	zwarp.<locals>.add   r   FTrueTr!   c                    s*   g | ]"}|j  kr|jkr|j|fqS r   )r   r%   ).0r&   )r   liner   r   
<listcomp>   s   zwarp.<locals>.<listcomp>z+Could not find a statement to warp to. ({}))keyfast_after_warp)1	warp_spec	Exceptionsplitintrenpyconfig	developer
startswithsetgamescriptnamemapvalues
isinstanceast	TranslatelanguageMenuitemsJump
expressiontargetWhileblockIfentriesUserStatementget_nextgetattrr!   formatsortoperator
itemgetterpopappendreverse
warp_limitskippingcan_warpexecuteafter_rollbackexportsblock_rollbackcontext
goto_labelname	come_fromRestartContext)specseensetr(   r&   i	seen_true	conditionrI   
candidatesr   runr   )r   r,   r'   r   warp%   s    






ri   )
__future__r   r   r   r   r   renpy.compatr   r   r	   r
   r   r   r   r   r   r   r   r   r6   rQ   r2   ri   r   r   r   r   <module>   s
   8