diff options
Diffstat (limited to 'src/engine/SCons/cpp.py')
| -rw-r--r-- | src/engine/SCons/cpp.py | 45 | 
1 files changed, 24 insertions, 21 deletions
diff --git a/src/engine/SCons/cpp.py b/src/engine/SCons/cpp.py index ff750c2..7c4ac92 100644 --- a/src/engine/SCons/cpp.py +++ b/src/engine/SCons/cpp.py @@ -1,5 +1,5 @@  # -# Copyright (c) 2001 - 2017 The SCons Foundation +# Copyright (c) 2001 - 2019 The SCons Foundation  #  # Permission is hereby granted, free of charge, to any person obtaining  # a copy of this software and associated documentation files (the @@ -21,7 +21,7 @@  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.  # -__revision__ = "src/engine/SCons/cpp.py rel_3.0.0:4395:8972f6a2f699 2017/09/18 12:59:24 bdbaddog" +__revision__ = "src/engine/SCons/cpp.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"  __doc__ = """  SCons C Pre-Processor module @@ -43,15 +43,18 @@ import re  # that we want to fetch, using the regular expressions to which the lists  # of preprocessor directives map.  cpp_lines_dict = { -    # Fetch the rest of a #if/#elif/#ifdef/#ifndef as one argument, +    # Fetch the rest of a #if/#elif as one argument, +    # with white space optional. +    ('if', 'elif')      : r'\s*(.+)', + +    # Fetch the rest of a #ifdef/#ifndef as one argument,      # separated from the keyword by white space. -    ('if', 'elif', 'ifdef', 'ifndef',) -                        : '\s+(.+)', +    ('ifdef', 'ifndef',): r'\s+(.+)',      # Fetch the rest of a #import/#include/#include_next line as one      # argument, with white space optional.      ('import', 'include', 'include_next',) -                        : '\s*(.+)', +                        : r'\s*(.+)',      # We don't care what comes after a #else or #endif line.      ('else', 'endif',)  : '', @@ -61,10 +64,10 @@ cpp_lines_dict = {      #   2) The optional parentheses and arguments (if it's a function-like      #      macro, '' if it's not).      #   3) The expansion value. -    ('define',)         : '\s+([_A-Za-z][_A-Za-z0-9_]*)(\([^)]*\))?\s*(.*)', +    ('define',)         : r'\s+([_A-Za-z][_A-Za-z0-9_]*)(\([^)]*\))?\s*(.*)',      # Fetch the #undefed keyword from a #undef line. -    ('undef',)          : '\s+([_A-Za-z][A-Za-z0-9_]*)', +    ('undef',)          : r'\s+([_A-Za-z][A-Za-z0-9_]*)',  }  # Create a table that maps each individual C preprocessor directive to @@ -82,9 +85,9 @@ del op_list  # Create a list of the expressions we'll use to match all of the  # preprocessor directives.  These are the same as the directives  # themselves *except* that we must use a negative lookahead assertion -# when matching "if" so it doesn't match the "if" in "ifdef." +# when matching "if" so it doesn't match the "if" in "ifdef" or "ifndef".  override = { -    'if'                        : 'if(?!def)', +    'if'                        : 'if(?!n?def)',  }  l = [override.get(x, x) for x in list(Table.keys())] @@ -94,7 +97,7 @@ l = [override.get(x, x) for x in list(Table.keys())]  # a list of tuples, one for each preprocessor line.  The preprocessor  # directive will be the first element in each tuple, and the rest of  # the line will be the second element. -e = '^\s*#\s*(' + '|'.join(l) + ')(.*)$' +e = r'^\s*#\s*(' + '|'.join(l) + ')(.*)$'  # And last but not least, compile the expression.  CPP_Expression = re.compile(e, re.M) @@ -141,12 +144,12 @@ CPP_to_Python_Ops_Expression = re.compile(expr)  # A separate list of expressions to be evaluated and substituted  # sequentially, not all at once.  CPP_to_Python_Eval_List = [ -    ['defined\s+(\w+)',         '"\\1" in __dict__'], -    ['defined\s*\((\w+)\)',     '"\\1" in __dict__'], -    ['/\*.*\*/',                ''], -    ['/\*.*',                   ''], -    ['//.*',                    ''], -    ['(0x[0-9A-Fa-f]*)[UL]+',   '\\1'], +    [r'defined\s+(\w+)',         '"\\1" in __dict__'], +    [r'defined\s*\((\w+)\)',     '"\\1" in __dict__'], +    [r'/\*.*\*/',                ''], +    [r'/\*.*',                   ''], +    [r'//.*',                    ''], +    [r'(0x[0-9A-Fa-f]*)[UL]+',   '\\1'],  ]  # Replace the string representations of the regular expressions in the @@ -162,7 +165,7 @@ def CPP_to_Python(s):      """      s = CPP_to_Python_Ops_Expression.sub(CPP_to_Python_Ops_Sub, s)      for expr, repl in CPP_to_Python_Eval_List: -        s = expr.sub(repl, s) +        s = re.sub(expr, repl, s)      return s @@ -207,7 +210,7 @@ class FunctionEvaluator(object):          parts = []          for s in self.expansion: -            if not s in self.args: +            if s not in self.args:                  s = repr(s)              parts.append(s)          statement = ' + '.join(parts) @@ -222,11 +225,11 @@ line_continuations = re.compile('\\\\\r?\n')  # Search for a "function call" macro on an expansion.  Returns the  # two-tuple of the "function" name itself, and a string containing the  # arguments within the call parentheses. -function_name = re.compile('(\S+)\(([^)]*)\)') +function_name = re.compile(r'(\S+)\(([^)]*)\)')  # Split a string containing comma-separated function call arguments into  # the separate arguments. -function_arg_separator = re.compile(',\s*') +function_arg_separator = re.compile(r',\s*')  | 
