diff options
author | binji@chromium.org <binji@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-04-28 19:28:20 +0000 |
---|---|---|
committer | binji@chromium.org <binji@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-04-28 19:28:20 +0000 |
commit | 254e209e90d221d654050237f2d1061c56f3f973 (patch) | |
tree | b8d68a0eb06cf94732278686db9831c279e785f6 | |
parent | c23219664465d1fa295132ab4eede472b38ef6e9 (diff) | |
download | chromium_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-x | native_client_sdk/src/build_tools/easy_template.py | 15 | ||||
-rwxr-xr-x | native_client_sdk/src/build_tools/tests/easy_template_test.py | 7 |
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() |