-
<c       s)  d  Z  d k Z d k Z d k Z d k Z d k Z d k l Z d k l	 Z	 l
 Z
 l Z l Z d   Z d f  d     YZ d   Z d f  d	     YZ d
 Z d Z d Z d Z d e f d     YZ d   Z d f  d     YZ d   Z d   Z d f  d     YZ d f  d     YZ e   i Z d S(   s/   A flow graph representation for Python bytecodeN(   s   misc(   s   CO_OPTIMIZEDs   CO_NEWLOCALSs
   CO_VARARGSs   CO_VARKEYWORDSc    s%   |  }  d   } |  i |  |  Sd  S(   Nc    s   t  |  i | i  Sd  S(   N(   s   cmps   as   bids   b(   s   as   b(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   sorter s    (   s   ls   sorters   sort(   s   ls   sorter(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   xxx_sort s    	s	   FlowGraphc      s   t  Z d   Z d   Z e d  Z d   Z d   Z d Z d   Z	 d   Z
 d	   Z d
   Z d   Z d   Z d   Z d   Z d   Z d   Z RS(   Nc    s[   t    |  _ |  _ t  d  |  _ t i   |  _ |  i i |  i  |  i i |  i  d  S(   Ns   exit(	   s   Blocks   selfs   currents   entrys   exits   miscs   Sets   blockss   add(   s   self(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   __init__ s
    c    sg   |  i oP |  i o7 d Gt |  i  GHd G|  i i GHd G|  i i   GHn t |  GHn | |  _ d  S(   Ns   ends       nexts      (   s   selfs   _debugs   currents   reprs   nexts   get_childrens   block(   s   selfs   block(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys
   startBlock s    

c    s>   | t j o |  i   } n |  i i |  |  i |  d  S(   N(   s   blocks   Nones   selfs   newBlocks   currents   addNexts
   startBlock(   s   selfs   block(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys	   nextBlock% s    	c    s!   t    } |  i i |  | Sd  S(   N(   s   Blocks   bs   selfs   blockss   add(   s   selfs   b(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   newBlock> s    	c    s   |  i |  i  d  S(   N(   s   selfs
   startBlocks   exit(   s   self(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   startExitBlockC s    i    c    s   d |  _ d  S(   Ni   (   s   selfs   _debug(   s   self(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   _enable_debugH s    c    s   d |  _ d  S(   Ni    (   s   selfs   _debug(   s   self(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   _disable_debugK s    c    s   |  i o d G| GHn | d d j o |  i i |  i  n t |  d j o t | d t  o |  i i | d  n |  i i	 |  d  S(   Ns   	i    s   RETURN_VALUEi   i   (
   s   selfs   _debugs   insts   currents
   addOutEdges   exits   lens
   isinstances   Blocks   emit(   s   selfs   inst(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   emitN s    
'c    s   xM |  i i   D]< } | |  i j o q n | i o | i |  i  n q Wt |  i h   } | i
   |  i | |  i  |  i | j o | i |  i  n | Sd S(   sl   Return the blocks in reverse postorder

        i.e. each node appears before all of its successors
        N(   s   selfs   blockss   elementss   bs   exits   nexts   addNexts   dfs_postorders   entrys   orders   reverses
   fixupOrders   append(   s   selfs   bs   order(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   getBlocksInOrderW s      
c    s$   |  i | |  |  i | |  d S(   s"   Fixup bad order introduced by DFS.N(   s   selfs   fixupOrderHonorNexts   blockss   default_nexts   fixupOrderForward(   s   selfs   blockss   default_next(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys
   fixupOrderl s     c    s  h  } x( t t |   D] } | | | | <q Wxst d t |  d  D]X} | | } | | d }	 | i p% | i d | j p | i d |	 j o qK n | } g  } | }
 xD |
 i o |
 i d | j o% | i |
 i d  |
 i d }
 q Wg  } x% | D] } | i | | | f  q	W| i   | i   x | D] \ } } | | | =qEW| g | | | | d +x( t t |   D] } | | | | <qWqK Wd S(   s  Fix one problem with DFS.

        The DFS uses child block, but doesn't know about the special
        "next" block.  As a result, the DFS can order blocks so that a
        block isn't next to the right block for implicit control
        transfers.
        i    i   N(   s   indexs   ranges   lens   blockss   is   bs   ns   nexts   default_nexts   curs   chains   elts   appends   ls   sorts   reverses   j(   s   selfs   blockss   default_nexts   indexs   bs   chains   is   js   ls   ns   elts   cur(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   fixupOrderHonorNextu s@       
3   

  c    s  h  } g  } g  } x` | D]X } t |  | | <| i |  | i o | i d | j o | i |  g  } n q W| i |  x*d o"g  } x t
 t |   D] } | | } x | D] } x | i   D] } | | | j  ot d } xA | i D]6 }	 |	 d d j o |	 d | j o
 d } n n q W| o q n | i | | | f  n q Wq Wq W| o Pn | d \ }
 } | | } | i |  | i |
 |  q W| 2x, | D]$ } x | D] } | i |  qWqWd S(   s(   Make sure all JUMP_FORWARDs jump forwardi    i   s   JUMP_FORWARDN(   s   indexs   chainss   curs   blockss   bs   lens   appends   nexts   default_nexts   constraintss   ranges   is   ls   get_childrens   cs	   forward_ps   instss   insts   goes_befores   a_chains   removes   insert(   s   selfs   blockss   default_nexts   indexs   cs   bs   is   curs   ls   insts   goes_befores   a_chains	   forward_ps   chainss   constraints(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   fixupOrderForward sZ        
  
 ' 
  c    s   |  i i   Sd  S(   N(   s   selfs   blockss   elements(   s   self(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys	   getBlocks s    c    s   |  i Sd S(   s/   Return nodes appropriate for use with dominatorN(   s   selfs   entry(   s   self(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   getRoot s     c    s8   g  } x' |  i   D] } | i | i    q W| Sd  S(   N(   s   ls   selfs	   getBlockss   bs   extends   getContainedGraphs(   s   selfs   bs   l(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   getContainedGraphs s
     (   s   __name__s
   __module__s   __init__s
   startBlocks   Nones	   nextBlocks   newBlocks   startExitBlocks   _debugs   _enable_debugs   _disable_debugs   emits   getBlocksInOrders
   fixupOrders   fixupOrderHonorNexts   fixupOrderForwards	   getBlockss   getRoots   getContainedGraphs(    (    (    s&   /usr/lib/python2.2/compiler/pyassem.pys	   FlowGraph s    													)	.		c    sf   g  } |  | |  <x> |  i   D]0 } | i |  o q n | t | |  } q W| i |   | Sd S(   s;   Depth-first search of tree rooted at b, return in postorderN(   s   orders   bs   seens   get_childrens   cs   has_keys   dfs_postorders   append(   s   bs   seens   cs   order(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   dfs_postorder s     
 s   Blockc      s   t  Z d Z d d  Z d   Z d   Z d   Z d   Z d   Z d	   Z	 d
   Z
 d d d d d f Z d   Z d   Z d   Z RS(   Ni    s    c    sY   g  |  _ t i   |  _ t i   |  _ | |  _ t i |  _	 g  |  _
 t i d t _ d  S(   Ni   (   s   selfs   instss   miscs   Sets   inEdgess   outEdgess   labels   Blocks   _counts   bids   next(   s   selfs   label(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   __init__ s    			c    s1   |  i o d |  i |  i f Sn d |  i Sd  S(   Ns   <block %s id=%d>s   <block id=%d>(   s   selfs   labels   bid(   s   self(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   __repr__ s    
c    s9   t  t |  i  } d |  i |  i t i | d  f Sd  S(   Ns   <block %s %d:
%s>s   
(   s   maps   strs   selfs   instss   labels   bids   strings   join(   s   selfs   insts(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   __str__ s    c    sG   | d } | d  d j o |  i i | d  n |  i i |  d  S(   Ni    i   s   JUMPi   (   s   insts   ops   selfs   outEdgess   adds   instss   append(   s   selfs   insts   op(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   emit s    
c    s   |  i Sd  S(   N(   s   selfs   insts(   s   self(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   getInstructionss    c    s   |  i i |  d  S(   N(   s   selfs   inEdgess   adds   block(   s   selfs   block(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys	   addInEdges    c    s   |  i i |  d  S(   N(   s   selfs   outEdgess   adds   block(   s   selfs   block(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys
   addOutEdges    c    s   |  i i |  d  S(   N(   s   selfs   nexts   appends   block(   s   selfs   block(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   addNext
s    s   RETURN_VALUEs   RAISE_VARARGSs   JUMP_ABSOLUTEs   JUMP_FORWARDs   CONTINUE_LOOPc    sX   y |  i d \ } } Wn t t f j
 o d Sn X| |  i j o g  |  _ n d S(   sL  Remove bogus edge for unconditional transfers

        Each block has a next edge that accounts for implicit control
        transfers, e.g. from a JUMP_IF_FALSE to the block that will be
        executed if the test is true.

        These edges must remain for the current assembler code to
        work. If they are removed, the dfs_postorder gets things in
        weird orders.  However, they shouldn't be there for other
        purposes, e.g. conversion to SSA form.  This method will
        remove the next edge when it follows an unconditional control
        transfer.
        iN(   s   selfs   instss   ops   args
   IndexErrors
   ValueErrors   _uncond_transfers   next(   s   selfs   args   op(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys	   pruneNexts     	c    sT   |  i o |  i d |  i j o |  i i |  i d  n |  i i   |  i Sd  S(   Ni    (   s   selfs   nexts   outEdgess   removes   elements(   s   self(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   get_children&s    !c    sj   g  } xY |  i D]N } t |  d j o q n | d } t | d  o | i | i  n q W| Sd S(   s   Return all graphs contained within this block.

        For example, a MAKE_FUNCTION block will contain a reference to
        the graph for the function body.
        i   s   graphN(	   s	   containeds   selfs   instss   insts   lens   ops   hasattrs   appends   graph(   s   selfs	   containeds   insts   op(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   getContainedGraphs+s     
 
(   s   __name__s
   __module__s   _counts   __init__s   __repr__s   __str__s   emits   getInstructionss	   addInEdges
   addOutEdges   addNexts   _uncond_transfers	   pruneNexts   get_childrens   getContainedGraphs(    (    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   Block s   										s   RAWs   FLATs   CONVs   DONEs   PyFlowGraphc      sI  t  Z e i Z f  d e d  Z d   Z d   Z d   Z d   Z	 d   Z
 d   Z e d	  Z d
   Z d   Z e i   Z x% e i D] Z e i e i e  q We i   Z x% e i D] Z e i e i e  q Wd   Z d   Z d   Z h  Z d   Z d   Z e Z e Z d   Z d   Z  e  Z! e  Z" e  Z# e  Z$ e  Z% e  Z& e  Z' e  Z( e  Z) e  Z* d   Z+ e+ Z, e+ Z- d   Z. e/ e i0  Z1 d   Z2 xF e3   i4   D]5 \ Z5 Z6 e5 d  d j o e5 d Z e6 e e <n qW[5 [6 [ d   Z7 h  Z8 x. e9 e: e i   D] Z; e; e8 e i e; <qW[; d   Z< d   Z= RS(   Ni    c    s  |  i   | |  _ | |  _ t |  _ | |  _ t |  |  _ | |  _	 | o t t B|  _ n
 d |  _ g  |  _ g  |  _ g  |  _ g  |  _ g  |  _ t |  p g  |  _ xQ t t |  i   D]: } |  i | } t | t  o | i   |  i | <n q Wt |  _ d  S(   Ni    (   s   selfs
   super_inits   names   filenames   Nones	   docstrings   argss   getArgCounts   argcounts   klasss	   optimizeds   CO_OPTIMIZEDs   CO_NEWLOCALSs   flagss   constss   namess   freevarss   cellvarss   closures   lists   varnamess   ranges   lens   is   vars
   isinstances   TupleArgs   getNames   RAWs   stage(   s   selfs   names   filenames   argss	   optimizeds   klasss   is   var(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   __init__Es,    
											 c    s   | |  _ d  S(   N(   s   docs   selfs	   docstring(   s   selfs   doc(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   setDocstringcs    c    s5   |  i | B|  _ | t j o |  i d |  _ n d  S(   Ni   (   s   selfs   flagss   flags
   CO_VARARGSs   argcount(   s   selfs   flag(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   setFlagfs    c    s   |  i | @o d Sn d  S(   Ni   (   s   selfs   flagss   flag(   s   selfs   flag(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys	   checkFlagks    c    s   t  |  |  _ d  S(   N(   s   lists   namess   selfs   freevars(   s   selfs   names(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   setFreeVarsos    c    s   | |  _ d  S(   N(   s   namess   selfs   cellvars(   s   selfs   names(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   setCellVarsrs    c    s   |  i t j o |  i   |  i   n |  i t j o |  i   n |  i t j o |  i   n |  i t	 j o |  i
   Sn t d  d S(   s   Get a Python code objects   inconsistent PyFlowGraph stateN(   s   selfs   stages   RAWs   computeStackDepths   flattenGraphs   FLATs   convertArgss   CONVs   makeByteCodes   DONEs   newCodeObjects   RuntimeError(   s   self(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   getCodeus     
c    s   | o t i } | t _ n d } x |  i D]w } | d } | d j o Hn t	 |  d j o d Gd | G| GH| d } n$ d Gd | G| G| d GH| d } q- W| o | t _ n d  S(   Ni    s
   SET_LINENOi   s   	s   %3di   (
   s   ios   syss   stdouts   saves   pcs   selfs   instss   ts   opnames   len(   s   selfs   ios   pcs   ts   saves   opname(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   dumps     	
 
c    sm   h   t } x*   i   D] } t | i     | <q Wh        d       i
 d    _ d S(   s   Compute the max stack depth.

        Approach is to compute the stack effect of each basic block.
        Then find the path through the code with the largest total
        effect.
        c    s    i |   o | Sn d  |  <|   |  } |  i   } | o8 t g  i } | D] } |  | |   qT ~  Sn* |  i d j o   i |  Sn | Sd  S(   Ni   s   exit(   s   seens   has_keys   bs   ds   depths   get_childrens   childrens   maxs   appends   _[1]s   cs	   max_depths   labels   selfs   exit(   s   bs   ds   _[1]s   cs   children(   s   depths   seens   selfs	   max_depth(    s&   /usr/lib/python2.2/compiler/pyassem.pys	   max_depths    
 'i    N(   s   depths   Nones   exits   selfs	   getBlockss   bs	   findDepths   getInstructionss   seens	   max_depths   entrys	   stacksize(   s   selfs   bs   exits   seens   depths	   max_depth(    (   s   selfs   seens   depths	   max_depths&   /usr/lib/python2.2/compiler/pyassem.pys   computeStackDepths      c    sv  g  |  _ } d } h  } h  } xw |  i   D]i } | | | <xL | i   D]> } | i	 |  t
 |  d j o | d } n | d } qI W| | | <q, Wd } x t t
 |   D] } | | } t
 |  d j o | d } n | d } | d }
 |  i i |
  o, | d } | | | }	 |
 |	 f | | <n0 |  i i |
  o |
 | | d f | | <n q Wt |  _ d S(   s-   Arrange the blocks in order and resolve jumpsi    i   i   N(   s   selfs   instss   pcs   begins   ends   getBlocksInOrders   bs   getInstructionss   insts   appends   lens   ranges   is   opnames   hasjrels   has_elts   opargs   offsets   hasjabss   FLATs   stage(   s   selfs   begins   bs   ends   instss   is   opargs   pcs   insts   offsets   opname(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   flattenGraphs>       
  



 c    s   |  i i d |  i  |  i   x t t |  i   D]r } |  i | } t |  d j oL | \ } } |  i i | t  } | o  | | |  |  f |  i | <n n q6 Wt |  _ d S(   s0   Convert arguments from symbolic to concrete formi    i   N(   s   selfs   constss   inserts	   docstrings   sort_cellvarss   ranges   lens   instss   is   ts   opnames   opargs   _converterss   gets   Nones   convs   CONVs   stage(   s   selfs   ts   convs   opargs   is   opname(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   convertArgss      
 (c    s   h  } x |  i D] } d | | <q Wg  i } |  i D]$ } | i |  o | |  n q5 ~ |  _ x |  i D] } | | =qo W|  i | i   |  _ |  i |  i	 |  _
 d S(   sH   Sort cellvars in the order of varnames and prune from freevars.
        i   N(   s   cellss   selfs   cellvarss   names   appends   _[1]s   varnamess   has_keys   keyss   freevarss   closure(   s   selfs   _[1]s   cellss   name(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   sort_cellvarss     
  *
 c    sz   t  |  } xJ t t |   D]6 } | t  | |  j o | | | j o | Sn q Wt |  } | i |  | Sd S(   s  Return index of name in list, appending if necessary

        This routine uses a list instead of a dictionary, because a
        dictionary can't store two different keys if the keys have the
        same value but different types, e.g. 2 and 2L.  The compiler
        must treat these two separately, so it does an explicit type
        comparison before comparing the values.
        N(	   s   types   names   ts   ranges   lens   lists   is   ends   append(   s   selfs   names   lists   ends   is   t(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   _lookupNames      (c    s7   t  | d  o | i   } n |  i | |  i  Sd  S(   Ns   getCode(   s   hasattrs   args   getCodes   selfs   _lookupNames   consts(   s   selfs   arg(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   _convert_LOAD_CONSTs    c    s*   |  i | |  i  |  i | |  i  Sd  S(   N(   s   selfs   _lookupNames   args   namess   varnames(   s   selfs   arg(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   _convert_LOAD_FASTs    c    s>   |  i t j o |  i | |  i  n |  i | |  i  Sd  S(   N(   s   selfs   klasss   Nones   _lookupNames   args   varnamess   names(   s   selfs   arg(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   _convert_LOAD_NAMEs    c    s>   |  i t j o |  i | |  i  n |  i | |  i  Sd  S(   N(   s   selfs   klasss   Nones   _lookupNames   args   varnamess   names(   s   selfs   arg(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   _convert_NAMEs    c    s=   |  i | |  i  |  i | |  i  |  i | |  i  Sd  S(   N(   s   selfs   _lookupNames   args   namess   varnamess   closure(   s   selfs   arg(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   _convert_DEREF&s    c    s*   |  i | |  i  |  i | |  i  Sd  S(   N(   s   selfs   _lookupNames   args   varnamess   closure(   s   selfs   arg(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   _convert_LOAD_CLOSURE-s    c    s   |  i i |  Sd  S(   N(   s   selfs   _cmps   indexs   arg(   s   selfs   arg(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   _convert_COMPARE_OP2s    i	   s	   _convert_c    s   t    |  _ } x |  i D] } | d } t |  d j o | i |  i |  n | d } | d j o | i
 |  n t |  \ } } y | i |  i | | |  Wn3 t j
 o' | G| GH|  i | G| G| GH  n Xq Wt |  _ d  S(   Ni    i   s
   SET_LINENO(   s   LineAddrTables   selfs   lnotabs   instss   ts   opnames   lens   addCodes   opnums   opargs   nextLines   twobytes   his   los
   ValueErrors   DONEs   stage(   s   selfs   los   opargs   his   ts   lnotabs   opname(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   makeByteCode=s$     
 

	c    s   |  i t @d j o
 d } n t |  i  } |  i } |  i t @o | d } n t i	 | | |  i
 |  i |  i i   |  i   t |  i  t |  i  |  i |  i |  i i |  i i   t |  i  t |  i   Sd  S(   Ni    i   (   s   selfs   flagss   CO_NEWLOCALSs   nlocalss   lens   varnamess   argcounts   CO_VARKEYWORDSs   news   codes	   stacksizes   lnotabs   getCodes	   getConstss   tuples   namess   filenames   names	   firstlines   getTables   freevarss   cellvars(   s   selfs   nlocalss   argcount(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   newCodeObjectVs     
	c    sU   g  } x> |  i D]3 } t | t  o | i   } n | i |  q Wt |  Sd S(   s   Return a tuple for the const slot of the code object

        Must convert references to code (MAKE_FUNCTION) to code
        objects recursively.
        N(	   s   ls   selfs   constss   elts
   isinstances   PyFlowGraphs   getCodes   appends   tuple(   s   selfs   ls   elt(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys	   getConstsfs     
 (>   s   __name__s
   __module__s	   FlowGraphs   __init__s
   super_inits   Nones   setDocstrings   setFlags	   checkFlags   setFreeVarss   setCellVarss   getCodes   dumps   computeStackDepths   flattenGraphs   miscs   Sets   hasjrels   diss   is   adds   opnames   hasjabss   convertArgss   sort_cellvarss   _lookupNames   _converterss   _convert_LOAD_CONSTs   _convert_LOAD_FASTs   _convert_STORE_FASTs   _convert_DELETE_FASTs   _convert_LOAD_NAMEs   _convert_NAMEs   _convert_STORE_NAMEs   _convert_DELETE_NAMEs   _convert_IMPORT_NAMEs   _convert_IMPORT_FROMs   _convert_STORE_ATTRs   _convert_LOAD_ATTRs   _convert_DELETE_ATTRs   _convert_LOAD_GLOBALs   _convert_STORE_GLOBALs   _convert_DELETE_GLOBALs   _convert_DEREFs   _convert_LOAD_DEREFs   _convert_STORE_DEREFs   _convert_LOAD_CLOSUREs   lists   cmp_ops   _cmps   _convert_COMPARE_OPs   localss   itemss   names   objs   makeByteCodes   opnums   ranges   lens   nums   newCodeObjects	   getConsts(    (    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   PyFlowGraphBsv   									!
 
 										 
		 	c    s   |  d  d j o d Sn d  S(   Ni   s   JUMPi   (   s   opname(   s   opname(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   isJumpss    s   TupleArgc      s)   t  Z d  Z d   Z d   Z d   Z RS(   s:   Helper for marking func defs with nested tuples in arglistc    s   | |  _  | |  _ d  S(   N(   s   counts   selfs   names(   s   selfs   counts   names(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   __init__ys    	c    s   d |  i |  i f Sd  S(   Ns   TupleArg(%s, %s)(   s   selfs   counts   names(   s   self(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   __repr__|s    c    s   d |  i Sd  S(   Ns   .%d(   s   selfs   count(   s   self(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   getName~s    (   s   __name__s
   __module__s   __doc__s   __init__s   __repr__s   getName(    (    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   TupleArgws    		c    sf   t  |   } |  oK xD |  D]< } t | t  o& t  t i | i   } | | } n q Wn | Sd  S(   N(
   s   lens   argss   argcounts   args
   isinstances   TupleArgs   miscs   flattens   namess   numNames(   s   argss   args   numNamess   argcount(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   getArgCounts     c    s   t  |  d  Sd S(   s/   Convert an int argument into high and low bytesi   N(   s   divmods   val(   s   val(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   twobytes      s   LineAddrTablec      s;   t  Z d  Z d   Z d   Z d   Z d   Z d   Z RS(   s(  lnotab

    This class builds the lnotab, which is documented in compile.c.
    Here's a brief recap:

    For each SET_LINENO instruction after the first one, two bytes are
    added to lnotab.  (In some cases, multiple two-byte entries are
    added.)  The first byte is the distance in bytes between the
    instruction for the last SET_LINENO and the current SET_LINENO.
    The second byte is offset in line numbers.  If either offset is
    greater than 255, multiple two-byte entries are added -- see
    compile.c for the delicate details.
    c    s:   g  |  _ d |  _ d |  _ d |  _ d |  _ g  |  _ d  S(   Ni    (   s   selfs   codes
   codeOffsets	   firstlines   lastlines   lastoffs   lnotab(   s   self(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   __init__s    					c    sA   x$ | D] } |  i i t |   q W|  i t |  |  _ d  S(   N(   s   argss   args   selfs   codes   appends   chrs
   codeOffsets   len(   s   selfs   argss   arg(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   addCodes     c    s  |  i d j o | |  _ | |  _ n |  i |  i } | |  i } | d j o |  i i	 } x0 | d j o" | d  | d  | d 8} q_ Wx6 | d j o( | |  | d  | d 8} d } q W| d j p
 | d j o | |  | |  n | |  _ |  i |  _ n d  S(   Ni    i   (   s   selfs	   firstlines   linenos   lastlines
   codeOffsets   lastoffs   addrs   lines   lnotabs   appends   push(   s   selfs   linenos   pushs   lines   addr(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   nextLines(    	  
	c    s   t  i |  i d  Sd  S(   Ns    (   s   strings   joins   selfs   code(   s   self(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   getCodes    c    s    t  i t t |  i  d  Sd  S(   Ns    (   s   strings   joins   maps   chrs   selfs   lnotab(   s   self(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   getTables    (   s   __name__s
   __module__s   __doc__s   __init__s   addCodes   nextLines   getCodes   getTable(    (    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   LineAddrTables    			 	s   StackDepthTrackerc      s  t  Z d d  Z h  d d <d d <d d <d d <d	 d
 <d d <d	 d <d	 d <d d <d d <d	 d <d	 d <d d <d d <d	 d <d d <d d <d d <d	 d <d d <d	 d <d d <d d <d d <d d <d d  <d d! <d d" <d d# <d d$ <d% d& <d% d' <d d( <Z d) d f d* d f g Z d+   Z d,   Z d-   Z d.   Z d/   Z	 d0   Z
 d1   Z d2   Z d3   Z d4   Z d5   Z RS(6   Ni    c    s'  d } d } x| D]} | d }	 | o | Gn |  i i |	 t	  } | t	 j	 o | | } n xC |  i D]8 \ } } |	 t |   | j o | } | | } Pn ql W| t	 j o; t |  |	 t	  }
 |
 t	 j	 o | |
 | d  } n n | | j o
 | } n | o | G| GHn q W| Sd  S(   Ni    i   (   s   depths   maxDepths   instss   is   opnames   debugs   selfs   effects   gets   Nones   deltas   patternss   pats	   pat_deltas   lens   getattrs   meth(   s   selfs   instss   debugs   pats   is	   pat_deltas   depths   maxDepths   deltas   opnames   meth(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys	   findDepths2     

 
	
is   POP_TOPi   s   DUP_TOPs   SLICE+1s   SLICE+2is   SLICE+3s   STORE_SLICE+0s   STORE_SLICE+1s   STORE_SLICE+2is   STORE_SLICE+3s   DELETE_SLICE+0s   DELETE_SLICE+1s   DELETE_SLICE+2s   DELETE_SLICE+3s   STORE_SUBSCRs   DELETE_SUBSCRs
   PRINT_ITEMs   RETURN_VALUEs	   EXEC_STMTs   BUILD_CLASSs
   STORE_NAMEs
   STORE_ATTRs   DELETE_ATTRs   STORE_GLOBALs	   BUILD_MAPs
   COMPARE_OPs
   STORE_FASTs   IMPORT_STARs   IMPORT_NAMEs   IMPORT_FROMs	   LOAD_ATTRi   s   SETUP_EXCEPTs   SETUP_FINALLYs   FOR_ITERs   BINARY_s   LOAD_c    s   | d Sd  S(   Ni   (   s   count(   s   selfs   count(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   UNPACK_SEQUENCEs    c    s   | d Sd  S(   Ni   (   s   count(   s   selfs   count(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   BUILD_TUPLEs    c    s   | d Sd  S(   Ni   (   s   count(   s   selfs   count(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys
   BUILD_LIST s    c    s&   t  | d  \ } } | | d Sd  S(   Ni   i   (   s   divmods   argcs   his   lo(   s   selfs   argcs   his   lo(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   CALL_FUNCTION"s    c    s   |  i |  d Sd  S(   Ni   (   s   selfs   CALL_FUNCTIONs   argc(   s   selfs   argc(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   CALL_FUNCTION_VAR%s    c    s   |  i |  d Sd  S(   Ni   (   s   selfs   CALL_FUNCTIONs   argc(   s   selfs   argc(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   CALL_FUNCTION_KW's    c    s   |  i |  d Sd  S(   Ni   (   s   selfs   CALL_FUNCTIONs   argc(   s   selfs   argc(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   CALL_FUNCTION_VAR_KW)s    c    s	   | Sd  S(   N(   s   argc(   s   selfs   argc(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   MAKE_FUNCTION+s    c    s	   | Sd  S(   N(   s   argc(   s   selfs   argc(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   MAKE_CLOSURE-s    c    s.   | d j o d Sn | d j o d Sn d  S(   Ni   ii   i(   s   argc(   s   selfs   argc(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   BUILD_SLICE0s    c    s   | Sd  S(   N(   s   argc(   s   selfs   argc(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   DUP_TOPX5s    (   s   __name__s
   __module__s	   findDepths   effects   patternss   UNPACK_SEQUENCEs   BUILD_TUPLEs
   BUILD_LISTs   CALL_FUNCTIONs   CALL_FUNCTION_VARs   CALL_FUNCTION_KWs   CALL_FUNCTION_VAR_KWs   MAKE_FUNCTIONs   MAKE_CLOSUREs   BUILD_SLICEs   DUP_TOPX(    (    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   StackDepthTrackers    0&										(   s   __doc__s   diss   news   strings   syss   typess   compilers   miscs   compiler.constss   CO_OPTIMIZEDs   CO_NEWLOCALSs
   CO_VARARGSs   CO_VARKEYWORDSs   xxx_sorts	   FlowGraphs   dfs_postorders   Blocks   RAWs   FLATs   CONVs   DONEs   PyFlowGraphs   isJumps   TupleArgs   getArgCounts   twobytes   LineAddrTables   StackDepthTrackers	   findDepth(   s   FLATs   strings   CONVs   twobytes   LineAddrTables   miscs   syss   xxx_sorts   DONEs   CO_NEWLOCALSs   isJumps   PyFlowGraphs   Blocks	   findDepths   CO_OPTIMIZEDs   StackDepthTrackers   getArgCounts
   CO_VARARGSs   CO_VARKEYWORDSs   RAWs   dfs_postorders   typess   news   TupleArgs	   FlowGraphs   dis(    (    s&   /usr/lib/python2.2/compiler/pyassem.pys   ? s0   							Y 2	
			Bg