interpreter: Support to_string method for int values

Although some other base types like boolean objects can be expresed
as strings, this is not possible with int objects.

This patch adds support to express int values as strings as hex,
decimal or octal values.
pull/2691/head
Iñigo Martínez 7 years ago committed by Jussi Pakkanen
parent 2dab7c37df
commit 30f2c4857c
  1. 10
      mesonbuild/interpreterbase.py
  2. 15
      test cases/common/165 int formatting/meson.build

@ -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)

@ -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
Loading…
Cancel
Save