³ò ”,9Mc @s¿dZdZddkZddkZddkZddkZhdddddf<d d d d f<d ddf<ddf<ddf^ss ^\s*#\s*(t|s)(.*)$s not t!s != s!=s and s&&s or s||t?t:s cCs||idƒS(i(tgroup(tmtd((s.install/lib/scons-1.2.0.d20100117/SCons/cpp.pyRscCstt|ƒt|ƒƒS((tcmptlen(tatb((s.install/lib/scons-1.2.0.d20100117/SCons/cpp.pyRŠssdefined\s+(\w+)s__dict__.has_key("\1")sdefined\s*\((\w+)\)s/\*.*\*/s/\*.*s//.*s(0x[0-9A-Fa-f]*)[UL]+s\1LicCs?tit|ƒ}x&tD]\}}|i||ƒ}qW|S(so Converts a C pre-processor expression into an equivalent Python expression that can be evaluated. (tCPP_to_Python_Ops_ExpressiontsubtCPP_to_Python_Ops_SubtCPP_to_Python_Eval_List(tstexprtrepl((s.install/lib/scons-1.2.0.d20100117/SCons/cpp.pyt CPP_to_Python¤s  tFunctionEvaluatorcBs eZdZd„Zd„ZRS(s@ Handles delayed evaluation of a #define function call. cCsZ||_ti|ƒ|_yti|dƒ}Wnttfj onX||_dS(s¶ Squirrels away the arguments and expansion value of a #define macro function for later evaluation when we must actually expand a value that uses it. s##N(tnametfunction_arg_separatortsplittargststringtAttributeErrort TypeErrort expansion(tselfR$R'R+((s.install/lib/scons-1.2.0.d20100117/SCons/cpp.pyt__init__ºs cGsÏt|iƒt|ƒjotd|i‚nh}x*t|i|ƒD]\}}||||iD]3}||ijot|ƒ}n|i|ƒqsWti |dƒ}t |t ƒ|ƒS(so Evaluates the expansion of a #define macro function called with the specified values. s%Incorrect number of arguments to `%s's + ( RR't ValueErrorR$tzipR+treprtappendR(tjointevaltglobals(R,tvaluestlocalstktvtpartsRt statement((s.install/lib/scons-1.2.0.d20100117/SCons/cpp.pyt__call__És  (t__name__t __module__t__doc__R-R;(((s.install/lib/scons-1.2.0.d20100117/SCons/cpp.pyR#¶s s\\ ? s(\S+)\(([^)]*)\)s,\s*t PreProcessorcBs(eZdZeidhdd„Zd„Zd„Zdd„Z d„Z d„Z d„Z d „Z d „Zd „Zd „Zd „Zd„Zdd„Zdd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„ZeZ d„Z!d„Z"RS( sA The main workhorse class for handling C pre-processing. icCs¸t|ƒ}h|f|d<||fd<|_|iƒ|_|i|id<|o|i|_nh|id<}x+tiƒD]}t |d|ƒ|| surrounding the name until an initial " or < is found, to handle #include FILE where FILE is a #define somewhere else. iis<"iiÿÿÿÿN( RHR‰t function_nametsearchRtcallableR%R&tapplyRt(R,RVRRR'((s.install/lib/scons-1.2.0.d20100117/SCons/cpp.pyR‹$s   cCs|ii|i|ƒƒdS(s N(RoR1R‹(R,RV((s.install/lib/scons-1.2.0.d20100117/SCons/cpp.pyRI;s(N(#R<R=R>RpRqR-R]R;RtR_RiRkRlRCRnReRgRvR`RzR{R~R€RR‚R|RƒR„RˆRŠRyRJtdo_include_nextR‹RI(((s.install/lib/scons-1.2.0.d20100117/SCons/cpp.pyR?ñs<%                      tDumbPreProcessorcBseZdZd„ZRS(s“A preprocessor that ignores all #if/#elif/#else/#endif directives and just reports back *all* of the #include files (like the classic SCons scanner did). This is functionally equivalent to using a regular expression to find all of the #include lines, only slower. It exists mainly as an example of how the main PreProcessor class can be sub-classed to tailor its behavior. cOs_tti|f||ƒ|i}x5ddddddgD]}|i||<||R-(((s.install/lib/scons-1.2.0.d20100117/SCons/cpp.pyR“@s ("t __revision__R>tSConsRptreR(tcpp_lines_dictRKtitemstop_listR tcompileteRStoverrideRZRLtlR2tMRXtCPP_to_Python_Ops_DictRtsorttescapeRRR"R#RWRŽR%R?R“(((s.install/lib/scons-1.2.0.d20100117/SCons/cpp.pyssx                      .ÿP