summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbinji@chromium.org <binji@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-04-28 19:28:20 +0000
committerbinji@chromium.org <binji@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-04-28 19:28:20 +0000
commit254e209e90d221d654050237f2d1061c56f3f973 (patch)
treeb8d68a0eb06cf94732278686db9831c279e785f6
parentc23219664465d1fa295132ab4eede472b38ef6e9 (diff)
downloadchromium_src-254e209e90d221d654050237f2d1061c56f3f973.zip
chromium_src-254e209e90d221d654050237f2d1061c56f3f973.tar.gz
chromium_src-254e209e90d221d654050237f2d1061c56f3f973.tar.bz2
[NaCl SDK] easy_template: fix bug when using % in an expression template.
BUG=none R=bradnelson@google.com, bradnelson@chromium.org Review URL: https://codereview.chromium.org/250773010 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@266627 0039d316-1c4b-4281-b951-d872f2087c98
-rwxr-xr-xnative_client_sdk/src/build_tools/easy_template.py15
-rwxr-xr-xnative_client_sdk/src/build_tools/tests/easy_template_test.py7
2 files changed, 19 insertions, 3 deletions
diff --git a/native_client_sdk/src/build_tools/easy_template.py b/native_client_sdk/src/build_tools/easy_template.py
index d439ea0..999bdb1 100755
--- a/native_client_sdk/src/build_tools/easy_template.py
+++ b/native_client_sdk/src/build_tools/easy_template.py
@@ -32,9 +32,18 @@ def TemplateToPython(template, statement_re, expr_re):
line_ending = line[-1] + line_ending
line = line[:-1]
- m = expr_re.search(line)
- if m:
- line = line.replace('%', '%%')
+ ms = list(expr_re.finditer(line))
+ if ms:
+ # Only replace % with %% outside of the expr matches.
+ new_line = ''
+ start = 0
+ for m in ms:
+ new_line += line[start:m.start()].replace('%', '%%')
+ new_line += line[m.start():m.end()]
+ start = m.end()
+ new_line += line[start:].replace('%', '%%')
+ line = new_line
+
subst_line = r'r"""%s""" %% (%s,)' % (
re.sub(expr_re, '%s', line),
', '.join(re.findall(expr_re, line)))
diff --git a/native_client_sdk/src/build_tools/tests/easy_template_test.py b/native_client_sdk/src/build_tools/tests/easy_template_test.py
index 3576208..5601704 100755
--- a/native_client_sdk/src/build_tools/tests/easy_template_test.py
+++ b/native_client_sdk/src/build_tools/tests/easy_template_test.py
@@ -109,6 +109,13 @@ struct Foo {
{'name': 'name', 'type': 'std::string'},
{'name': 'problems', 'type': 'array', 'basetype': 'int', 'size': 99}]})
+ def testModulo(self):
+ self._RunTest('No expression %', 'No expression %', {})
+ self._RunTest('% before {{3 + 4}}', '% before 7', {})
+ self._RunTest('{{2**8}} % after', '256 % after', {})
+ self._RunTest('inside {{8 % 3}}', 'inside 2', {})
+ self._RunTest('Everywhere % {{8 % 3}} %', 'Everywhere % 2 %', {})
+
if __name__ == '__main__':
unittest.main()