*
;c       s     d  Z     h  d d <d d <d d <d d <d	 d
 <d d <d d <d d <Z 1 y 2 e d i d  d Z Wn 3 4 d Z n X9 d k Z : d k Z ? d k l Z @ d k TG d f  d     YZ	 Q d e e	 f d     YZ
 d S(   s;   Gather information about a function or method definition.

s   $RCSfile: functioninfo.py,v $s   module_namesA   $Id: functioninfo.py,v 1.1 2001/11/11 18:51:37 doughellmann Exp $s   rcs_ids    Doug Hellmann <doug@hellfly.net>s   creators   UNSPECIFIEDs   projects   Sun, 11-Nov-2001 10:54:53 ESTs   createds   $Author: doughellmann $s   authors   $Revision: 1.1 $s   versions   $Date: 2001/11/11 18:51:37 $s   dates    i   s   0.0N(   s   SuiteInfoBase(   s   *s   SuiteFuncInfoc      s   G J d   Z  M d   Z RS(   Nc    s   J K |  i i   Sd  S(   N(   s   selfs   _function_infos   keys(   s   self(    (    s`   /home/dhellmann/Personal/Devel/HappyDoc/dist/HappyDoc-r2_0/happydoclib/parseinfo/functioninfo.pys   getFunctionNamesJ s   c    s   M N |  i | Sd  S(   N(   s   selfs   _function_infos   name(   s   selfs   name(    (    s`   /home/dhellmann/Personal/Devel/HappyDoc/dist/HappyDoc-r2_0/happydoclib/parseinfo/functioninfo.pys   getFunctionInfoM s   (   s   getFunctionNamess   getFunctionInfo(    (    (    s`   /home/dhellmann/Personal/Devel/HappyDoc/dist/HappyDoc-r2_0/happydoclib/parseinfo/functioninfo.pys   SuiteFuncInfoG s   s   FunctionInfoc      s  Q d  Z  R T e e h  d  Z m d   Z r d   Z z e i d g f Z ~ e i e i e i	 e
 i d g f f f f Z  d   Z  d   Z  d   Z  e i e i e i e i e i e i e i e i e i d g d	 g d
 g f f f f f f f f f Z  e i e i e i e i e i e i e i e i e i e i e i e i d g f f f f f f f f f f f f Z  e i e i e i e i e i e i e i e i e i e i e i e i d g d	 g d
 g f f f f f f f f f f f f Z e i e i e i e i e i e i e i e i e i d g d	 g d
 g f f f f f f f f f Z d   Z Bd   Z Gd   Z  \d   Z! g  d  Z" RS(   s9   Gather information about a function or method definition.c    s   T ` a t  i |  | d d | | i   b | o	 | d p t c d | d |  i |  } e |  i
 |  f |  i |  |  _ j d Sd S(   s2  Initialize the info extractor.

        Parameters:

            parent -- parent object for this object (e.g. Module or Function)

            tree -- parse tree from which to extract information

            commentInfo -- comments extracted from the source file holding
            this module

        i   i   s   commentInfoN(   s   SuiteInfoBases   __init__s   selfs   trees   parents   getFilenames   Nones   commentInfos   _extractFunctionParameterss   parameter_datas   _constructParameterInfos   _extractThrownExceptionss   _exception_info(   s   selfs   parents   trees   commentInfos   parameter_data(    (    s`   /home/dhellmann/Personal/Devel/HappyDoc/dist/HappyDoc-r2_0/happydoclib/parseinfo/functioninfo.pys   __init__T s   #c    s2   m n o | i |  |  i   | i  } p | Sd S(   s4   Return a reference to this function from sourceNode.N(   s	   formatters   getNamedReferences   selfs   getNames
   sourceNodes   names   ref(   s   selfs	   formatters
   sourceNodes   ref(    (    s`   /home/dhellmann/Personal/Devel/HappyDoc/dist/HappyDoc-r2_0/happydoclib/parseinfo/functioninfo.pys   getReferencem s   !c    s   r s t |  i   i   Sd S(   s9   Return a complete, unique, name representing this object.N(   s   selfs	   getParents   getFullyQualifiedName(   s   self(    (    s`   /home/dhellmann/Personal/Devel/HappyDoc/dist/HappyDoc-r2_0/happydoclib/parseinfo/functioninfo.pys   getFullyQualifiedNamer s   s	   exceptionc    s      |  i i   Sd S(   sD   Return a list of the names of any exceptions raised by the function.N(   s   selfs   _exception_infos   keys(   s   self(    (    s`   /home/dhellmann/Personal/Devel/HappyDoc/dist/HappyDoc-r2_0/happydoclib/parseinfo/functioninfo.pys   getExceptionNames s   c    s      |  i | Sd S(   s   Returns a type value for an exception.

        The return value will be one of (token.NAME, token.STRING)
        indicating whether the exception was thrown as a string
        or a named object.
        N(   s   selfs   _exception_infos   exceptionName(   s   selfs   exceptionName(    (    s`   /home/dhellmann/Personal/Devel/HappyDoc/dist/HappyDoc-r2_0/happydoclib/parseinfo/functioninfo.pys   getExceptionInfo s   c    s      h  }  | o  | Sn  t |  t i t i f j o t | t i  }  x| d  r}  y  t
 | d d  } Wn  t j
 o  | } n X t }  t }  | oY  t |  i  |  \ }	 }  |	 o | i d  o  | d }  t i } n n  | o_  t |  i  |  \ }	 }  |	 o | i d  o#  t | d  }  t i } n n  | oW  t |  d j o=  | d }  | o  t |  } n  t |  }
 n n  | o  | | | <n qh Wn  | Sd S(   s8   Return a dictionary of exception->exception_type values.i    i   i
   s	   exceptioni   N(   s   thrown_exceptionss   trees   types   typess   ListTypes	   TupleTypes   findNodes   symbols
   raise_stmts   raise_tree_lists   drills   subtrees
   IndexErrors   Nones   exception_names   exception_types   lenientMatchs   selfs   EXCEPTION_STRING_PATTERNs   founds   varss   has_keys   tokens   STRINGs   EXCEPTION_BY_NAME_PATTERNs   parseTreeToStrings   NAMEs   lens   slices   execption_name(   s   selfs   trees   raise_tree_lists   subtrees   exception_names   slices   thrown_exceptionss   exception_types   varss   founds   execption_name(    (    s`   /home/dhellmann/Personal/Devel/HappyDoc/dist/HappyDoc-r2_0/happydoclib/parseinfo/functioninfo.pys   _extractThrownExceptions sF   	" 				

s   terms   trailers   trailer_bitss   atoms
   expressionc    s   45h  } 6g  } 7xE | d 7r8 \ } } } } 9| i |  :| | | f | | <q$ W>t |  |  _
 ?| |  _ @d Sd S(   s@  Construct storable parameter data from a parameter list.
        
        Given the sequence of tuples extracted as a parameter list,
        store the names (in order) in self._parameter_names and the
        information about the parameter in self._parameter_info where
        the keys are the parameter name and the info is a tuple containing:

        (default_specified, default_value, default_value_type)

        Where:

            default_specified -- boolean indicating whether a default value
                                 was specified

            default_value -- the default value given, if any

            default_value_type -- the type of the default value (token.STRING,
                                  token.NAME, None). A type of None means
                                  unknown.
            
        i    N(   s   parameter_infos   parameter_namess   parameterDatas   params   default_specifieds   default_values   default_value_types   appends   tuples   selfs   _parameter_namess   _parameter_info(   s   selfs   parameterDatas   parameter_namess   params   default_values   parameter_infos   default_value_types   default_specified(    (    s`   /home/dhellmann/Personal/Devel/HappyDoc/dist/HappyDoc-r2_0/happydoclib/parseinfo/functioninfo.pys   _constructParameterInfos   		 c    s   BDE|  i Sd S(   sP   Returns a list of the names of all
        parameters to the function, in order.N(   s   selfs   _parameter_names(   s   self(    (    s`   /home/dhellmann/Personal/Devel/HappyDoc/dist/HappyDoc-r2_0/happydoclib/parseinfo/functioninfo.pys   getParameterNamesBs   c    s   GYZ|  i | Sd S(   sL  Returns the info record for a parameter.

        The returned tuple consists of:

        (default_specified, default_value, default_value_type)

        Where:

            default_specified -- boolean indicating whether a default value
                                 was specified

            default_value -- the default value given, if any

            default_value_type -- the type of the default value (token.STRING,
                                  token.NAME, None). A type of None means
                                  unknown.
                                  
        N(   s   selfs   _parameter_infos	   paramName(   s   selfs	   paramName(    (    s`   /home/dhellmann/Personal/Devel/HappyDoc/dist/HappyDoc-r2_0/happydoclib/parseinfo/functioninfo.pys   getParameterInfoGs   c    s  \]^d } ag  } b| d } d| d d t i j o ed | d | f  n g| d d t i j o i| Sn j| d d t i j o kd | d | f  n p| d } rd } sd }
 tt } ut }	 vt } wt } yxK| d d yr:} || d t i j o
 }q
n | d t i j o d } n | d t i j o d }
 n | d t i t i f j o | o? | i | |	 | | f  t } }	 t } t } n | d t i j oM | d } | o d | } n |
 o d | } n q
n | d t i j o | d d } q
n | d t i j o d }	 q
n | d t i j o t |  i |  \ } } | oK | i d  o4 |  i | d | d	 | d
 g  \ } } n n d Gt  i  |  n q
W| o  | i | |	 | | f  n | Sd S(   s2   Extract information about a function's parameters.i    i   i   s"   Unrecognized parse result %s in %si   s   *%ss   **%ss   terms   trailers   trailer_bitss   UNRECOGNIZED:N(!   s   dbgs   function_parameterss   trees
   parameterss   tokens   LPARs   RPARs   symbols   varargslists   found_varargss   found_kwargss   Nones   names   found_default_values   default_values   default_value_types	   parameters   COMMAs   STARs
   DOUBLESTARs   NAMEs   fpdefs   appends   EQUALs   tests   lenientMatchs   selfs   PARAMETER_DEFAULT_PATTERNs   founds   varss   has_keys   _reconstructValueFromAtoms   pprint(   s   selfs   trees   default_value_types	   parameters   varss   founds   found_varargss   default_values   dbgs   found_default_values   found_kwargss   names
   parameterss   function_parameters(    (    s`   /home/dhellmann/Personal/Devel/HappyDoc/dist/HappyDoc-r2_0/happydoclib/parseinfo/functioninfo.pys   _extractFunctionParameters\sn   								 	
'	



	

(
 c 	   s  d } t |  d j o| d d t i j o2 | d d } | d d !} t i } n:| d d t i j o0 | d d } t |  } t i } n| d d t i	 j o | d d }  t i	 } | d j o t |  } n | o t d   |  o 	d } 
xR | d 
rE } | o
 qJn t |  } t | | d  } qJWt | | d  } t } n n | d d t i j o t |  } t } | o t d   |  o d } xR | d rE } | o
 q!n t |  } t |  | !d  } q!W"t | | d  } #t } n n 't |  } (t } n_ )| d d t i t i t i f j o /t |  } 1t } n 5t |  } 6t } 8| | f Sd	 S(
   sy   Convert an atom portion of a parse tree into the value.

        If the atom represents a string, number or name
        i    i   i   s   Nonec    s   |  S(   N(   s   x(   s   x(    (    s`   /home/dhellmann/Personal/Devel/HappyDoc/dist/HappyDoc-r2_0/happydoclib/parseinfo/functioninfo.pys   <lambda>s    s    s    c    s   |  S(   N(   s   x(   s   x(    (    s`   /home/dhellmann/Personal/Devel/HappyDoc/dist/HappyDoc-r2_0/happydoclib/parseinfo/functioninfo.pys   <lambda>s    N(   s   dbgs   lens   atoms   tokens   STRINGs   values
   value_types   NUMBERs   evals   NAMEs   trailers   filters   trailer_strings   trailer_parts   parseTreeToStrings   part_strings   joinCodeSnippetss   Nones   symbols   factors   LPARs   LSQBs   LBRACE(	   s   selfs   atoms   trailers
   value_types   trailer_strings   trailer_parts   dbgs   values   part_string(    (    s`   /home/dhellmann/Personal/Devel/HappyDoc/dist/HappyDoc-r2_0/happydoclib/parseinfo/functioninfo.pys   _reconstructValueFromAtomsf   		 	 
			 	 
	*	(#   s   __doc__s   Nones   __init__s   getReferences   getFullyQualifiedNames   symbols   factors   EXCEPTION_BY_NAME_PATTERNs   powers   atoms   tokens   STRINGs   EXCEPTION_STRING_PATTERNs   getExceptionNamess   getExceptionInfos   _extractThrownExceptionss   tests   and_tests   not_tests
   comparisons   exprs   xor_exprs   and_exprs
   shift_exprs
   arith_exprs   PARAMETER_DEFAULT_PATTERNs   terms   oldPARAMETER_DEFAULT_PATTERNs&   PARAMETER_DEFAULT_WITH_TRAILER_PATTERNs,   PARAMETER_ARITH_DEFAULT_WITH_TRAILER_PATTERNs   _constructParameterInfos   getParameterNamess   getParameterInfos   _extractFunctionParameterss   _reconstructValueFromAtom(    (    (    s`   /home/dhellmann/Personal/Devel/HappyDoc/dist/HappyDoc-r2_0/happydoclib/parseinfo/functioninfo.pys   FunctionInfoQ s$   	0	Qixi#(   s   __doc__s   __rcs_info__s   splits   __version__s   symbols   tokens   happydoclib.parseinfo.suites   SuiteInfoBases   happydoclib.parseinfo.utilss   SuiteFuncInfos   FunctionInfo(   s   __rcs_info__s   __version__s   SuiteInfoBases   symbols   SuiteFuncInfos   tokens   FunctionInfo(    (    s`   /home/dhellmann/Personal/Devel/HappyDoc/dist/HappyDoc-r2_0/happydoclib/parseinfo/functioninfo.pys   ? s   Q

