interpreter: Fix list contains for Holders (fixes #9020 #9047)

pull/9082/head
Daniel Mensinger 3 years ago committed by Xavier Claessens
parent f2fe271198
commit 5c87167a34
  1. 4
      mesonbuild/interpreterbase/interpreterbase.py
  2. 0
      test cases/common/56 array methods/a.txt
  3. 0
      test cases/common/56 array methods/b.txt
  4. 0
      test cases/common/56 array methods/c.txt
  5. 24
      test cases/common/56 array methods/meson.build

@ -783,7 +783,7 @@ The result of this is undefined and will become a hard error in a future Meson r
posargs: T.List[TYPE_var],
kwargs: TYPE_kwargs) -> T.Union[TYPE_var, InterpreterObject]:
if method_name == 'contains':
def check_contains(el: list) -> bool:
def check_contains(el: T.List[TYPE_var]) -> bool:
if len(posargs) != 1:
raise InterpreterException('Contains method takes exactly one argument.')
item = posargs[0]
@ -795,7 +795,7 @@ The result of this is undefined and will become a hard error in a future Meson r
if element == item:
return True
return False
return check_contains(obj)
return check_contains([_unholder(x) for x in obj])
elif method_name == 'length':
return len(obj)
elif method_name == 'get':

@ -5,6 +5,22 @@ one = ['abc']
two = ['def', 'ghi']
combined = [empty, one, two]
file_list = files('a.txt', 'b.txt')
file_a = files('a.txt')
file_c = files('c.txt')
if file_a[0] != file_list[0]
error('Files are not equal')
endif
if not file_list.contains(file_a[0])
error('Contains with ObjectHolder lists does not work')
endif
if file_list.contains(file_c[0])
error('Contains with ObjectHolder lists found non existant object')
endif
if empty.contains('abc')
error('Empty is not empty.')
endif
@ -41,6 +57,14 @@ if not combined.contains('abc')
error('Combined claims not to contain abc.')
endif
if not combined.contains(one)
error('Combined claims not to contain [abc].')
endif
if not combined.contains(two)
error('Combined claims not to contain [def, ghi].')
endif
if not combined.contains('ghi')
error('Combined claims not to contain ghi.')
endif

Loading…
Cancel
Save