Fixed issue that the key's value type wasn't checked correctly.
Added two new failing tests.
This commit is contained in:
parent
adb4e071e6
commit
4e460f04f3
|
@ -735,7 +735,7 @@ The result of this is undefined and will become a hard error in a future Meson r
|
|||
for (key, value) in addition.items():
|
||||
if isinstance(key, str):
|
||||
new_addition[key] = value
|
||||
elif isinstance(key, mparser.IdNode):
|
||||
elif isinstance(key, mparser.IdNode) and isinstance(self.get_variable(key.value), str):
|
||||
FeatureNew('Adding dictionary entry using string variable as key', '0.53.0').use(self.subproject)
|
||||
new_addition[self.get_variable(key.value)] = value
|
||||
else:
|
||||
|
|
|
@ -676,16 +676,17 @@ class Parser:
|
|||
while not isinstance(s, EmptyNode):
|
||||
potential = self.current
|
||||
if self.accept('colon'):
|
||||
key_value = self.statement()
|
||||
if isinstance(s, StringNode):
|
||||
if s.value in a.kwargs:
|
||||
# + 1 to colno to point to the actual string, not the opening quote
|
||||
raise ParseException('Duplicate dictionary key: {}'.format(s.value), self.getline(), s.lineno, s.colno + 1)
|
||||
a.set_kwarg(s.value, self.statement())
|
||||
elif isinstance(s, IdNode) and isinstance(s.value, str):
|
||||
a.set_kwarg(s.value, key_value)
|
||||
elif isinstance(s, IdNode) and isinstance(key_value, StringNode):
|
||||
for key in a.kwargs:
|
||||
if s.value == key.value:
|
||||
raise ParseException('Duplicate dictionary variable key: {}'.format(s.value), self.getline(), s.lineno, s.colno)
|
||||
a.set_kwarg(s, self.statement())
|
||||
a.set_kwarg(s, key_value)
|
||||
else:
|
||||
raise ParseException('Key must be a string or string variable', self.getline(), s.lineno, s.colno)
|
||||
potential = self.current
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
project('add dictionary entry using non-string key')
|
||||
|
||||
dict = {}
|
||||
|
||||
# An integer variable to be used as a key
|
||||
key = 1
|
||||
|
||||
# Add new entry using integer variable as key should fail
|
||||
dict += {key : 'myValue'}
|
|
@ -0,0 +1,9 @@
|
|||
project('add dictionary entries with duplicate keys')
|
||||
|
||||
dict = {}
|
||||
|
||||
# A variable to be used as a key
|
||||
key = 'myKey'
|
||||
|
||||
# Add two entries with duplicate keys should fail
|
||||
dict += {key : 'myValue1', key : 'myValue2'}
|
Loading…
Reference in New Issue