aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mesonbuild/interpreterbase.py10
-rw-r--r--test cases/common/165 int formatting/meson.build15
2 files changed, 25 insertions, 0 deletions
diff --git a/mesonbuild/interpreterbase.py b/mesonbuild/interpreterbase.py
index cb82e56..9bb311f 100644
--- a/mesonbuild/interpreterbase.py
+++ b/mesonbuild/interpreterbase.py
@@ -449,6 +449,16 @@ class InterpreterBase:
return obj % 2 != 0
else:
raise InterpreterException('int.is_odd() must have no arguments.')
+ elif method_name == 'to_string':
+ if not posargs:
+ return str(obj)
+ elif len(posargs) == 1 and isinstance(posargs[0], str):
+ f = 'd' if len(posargs[0].strip()) == 0 else posargs[0]
+ if re.match('^[bcdoxX]$', f) is None:
+ raise InvalidCode('Invalid format for int to string conversion "%s"' % f)
+ return str(('{:' + f + '}').format(obj))
+ else:
+ raise InterpreterException('int.to_string() must have either no arguments or exactly one string arguments that signify what format to use.')
else:
raise InterpreterException('Unknown method "%s" for an integer.' % method_name)
diff --git a/test cases/common/165 int formatting/meson.build b/test cases/common/165 int formatting/meson.build
new file mode 100644
index 0000000..ea9923b
--- /dev/null
+++ b/test cases/common/165 int formatting/meson.build
@@ -0,0 +1,15 @@
+project('int formatting', 'c')
+
+values = [
+ ['', '74'],
+ ['c', 'J'],
+ ['b', '1001010'],
+ ['d', '74'],
+ ['o', '112'],
+ ['x', '4a'],
+ ['X', '4A']
+]
+
+foreach value: values
+ assert(74.to_string(value[0]) == value[1], 'conversion is broken')
+endforeach