Warn for future keyword (#3908)

pull/3955/head
Xavier Claessens 6 years ago committed by Jussi Pakkanen
parent c7360dd426
commit e7dcf5cf16
  1. 5
      mesonbuild/mparser.py
  2. 4
      test cases/common/170 custom target template substitution/meson.build

@ -14,6 +14,7 @@
import re import re
import codecs import codecs
import types
from .mesonlib import MesonException from .mesonlib import MesonException
from . import mlog from . import mlog
@ -90,6 +91,7 @@ class Lexer:
self.code = code self.code = code
self.keywords = {'true', 'false', 'if', 'else', 'elif', self.keywords = {'true', 'false', 'if', 'else', 'elif',
'endif', 'and', 'or', 'not', 'foreach', 'endforeach'} 'endif', 'and', 'or', 'not', 'foreach', 'endforeach'}
self.future_keywords = {'continue', 'break', 'in', 'return'}
self.token_specification = [ self.token_specification = [
# Need to be sorted longest to shortest. # Need to be sorted longest to shortest.
('ignore', re.compile(r'[ \t]')), ('ignore', re.compile(r'[ \t]')),
@ -196,6 +198,9 @@ This will become a hard error in a future Meson release.""", self.getline(line_s
if match_text in self.keywords: if match_text in self.keywords:
tid = match_text tid = match_text
else: else:
if match_text in self.future_keywords:
mlog.warning("Identifier '{}' will become a reserved keyword in a future release. Please rename it.".format(match_text),
location=types.SimpleNamespace(subdir=subdir, lineno=lineno))
value = match_text value = match_text
yield Token(tid, subdir, curline_start, curline, col, bytespan, value) yield Token(tid, subdir, curline_start, curline, col, bytespan, value)
break break

@ -4,12 +4,12 @@ check = find_program('checkcopy.py')
config = configuration_data() config = configuration_data()
in = configure_file(configuration : config, output : 'x@IN') config_file = configure_file(configuration : config, output : 'x@IN')
# Check that substitution does not find @FOO@ and then misses @INPUT0@. # Check that substitution does not find @FOO@ and then misses @INPUT0@.
# Check the resulting x@INPUT1@ is not replaced. # Check the resulting x@INPUT1@ is not replaced.
foo = custom_target('runcheck', foo = custom_target('runcheck',
input : [in, 'foo.c.in'], input : [config_file, 'foo.c.in'],
output : 'foo.c', output : 'foo.c',
command : [check, '-D@FOO@INPUT0@PUT1@', '@INPUT1@', '@OUTPUT@'] command : [check, '-D@FOO@INPUT0@PUT1@', '@INPUT1@', '@OUTPUT@']
) )

Loading…
Cancel
Save