diff options
author | Tim-Philipp Müller <tim@centricular.com> | 2016-03-19 17:11:28 +0000 |
---|---|---|
committer | Tim-Philipp Müller <tim@centricular.com> | 2016-03-19 17:11:53 +0000 |
commit | fcbd60c29117129ab8dd78c7f2af78a2e3d007e6 (patch) | |
tree | 7abcba54ce55440193a47ad33fee6291279dba1d | |
parent | dc049660e7d5e7c4b4a9ded4acb02fe90860adfb (diff) | |
download | meson-fcbd60c29117129ab8dd78c7f2af78a2e3d007e6.zip meson-fcbd60c29117129ab8dd78c7f2af78a2e3d007e6.tar.gz meson-fcbd60c29117129ab8dd78c7f2af78a2e3d007e6.tar.bz2 |
Add += support for strings and integers
-rw-r--r-- | mesonbuild/interpreter.py | 12 | ||||
-rw-r--r-- | test cases/common/91 plusassign/meson.build | 25 |
2 files changed, 35 insertions, 2 deletions
diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py index 35cbc3e..e20641d 100644 --- a/mesonbuild/interpreter.py +++ b/mesonbuild/interpreter.py @@ -2169,8 +2169,16 @@ class Interpreter(): # Remember that all variables are immutable. We must always create a # full new variable and then assign it. old_variable = self.get_variable(varname) - if not isinstance(old_variable, list): - raise InvalidArguments('The += operator currently only works with arrays.') + if isinstance(old_variable, str): + if not isinstance(addition, str): + raise InvalidArguments('The += operator requires a string on the right hand side if the variable on the left is a string') + new_value = old_variable + addition + elif isinstance(old_variable, int): + if not isinstance(addition, int): + raise InvalidArguments('The += operator requires an int on the right hand side if the variable on the left is an int') + new_value = old_variable + addition + elif not isinstance(old_variable, list): + raise InvalidArguments('The += operator currently only works with arrays, strings or ints ') # Add other data types here. else: if isinstance(addition, list): diff --git a/test cases/common/91 plusassign/meson.build b/test cases/common/91 plusassign/meson.build index c1e47e0..ac477e7 100644 --- a/test cases/common/91 plusassign/meson.build +++ b/test cases/common/91 plusassign/meson.build @@ -43,3 +43,28 @@ x += x if x.length() != 4 error('Incorrect selfappend.') endif + +# += on strings + +bra = 'bra' +foo = 'A' +foo += bra +foo += 'cada' +foo += bra +assert (foo == 'Abracadabra', 'string += failure [@0@]'.format(foo)) +assert (bra == 'bra', 'string += modified right argument!') +foo += ' ' + foo +assert (foo == 'Abracadabra Abracadabra', 'string += failure [@0@]'.format(foo)) + +# += on ints + +foo = 5 +foo += 6 +assert (foo == 11, 'int += failure [@0@]'.format(foo)) +bar = 99 +foo += bar +assert (foo == 110, 'int += failure [@0@]'.format(foo)) +assert (bar == 99, 'int += modified right argument"') +bar += foo + 1 +assert (bar == 210, 'int += failure [@0@]'.format(bar)) +assert (foo == 110, 'int += modified right argument"') |