diff options
author | Daniel Dunbar <daniel@zuster.org> | 2009-08-03 05:29:22 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2009-08-03 05:29:22 +0000 |
commit | e9201f5ced4ba3b19d4e548deb8e8d3b461f77ab (patch) | |
tree | 1f05f30b7cc12a6ccfaf1e11593100dd28524a6c | |
parent | d7640905de2f8c81c818785e8e869ed7b75ae849 (diff) |
lit: Don't treat '\' as an escape in unquoted strings, on Win32. This turns out
to not be a very good idea.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@77957 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | utils/test/ShUtil.py | 20 | ||||
-rwxr-xr-x | utils/test/TestRunner.py | 3 |
2 files changed, 12 insertions, 11 deletions
diff --git a/utils/test/ShUtil.py b/utils/test/ShUtil.py index bf56a11413..dd4b584ac0 100644 --- a/utils/test/ShUtil.py +++ b/utils/test/ShUtil.py @@ -2,14 +2,12 @@ import itertools import Util -# FIXME: It would be nice to at least match a few other things like `...`, $( -# ... ), $VAR, etc., if only so we can nicely say "we don't support this". - class ShLexer: - def __init__(self, data): + def __init__(self, data, win32Escapes = False): self.data = data self.pos = 0 self.end = len(data) + self.win32Escapes = win32Escapes def eat(self): c = self.data[self.pos] @@ -67,8 +65,8 @@ class ShLexer: return (tok[0], num) elif c == '"': self.eat() - str += self.lex_arg_quoted('"') - elif c == '\\': + str += self.lex_arg_quoted('"')
+ elif not self.win32Escapes and c == '\\': # Outside of a string, '\\' escapes everything. self.eat() if self.pos == self.end: @@ -211,9 +209,9 @@ class Seq: (other.lhs, other.op, other.rhs)) class ShParser: - def __init__(self, data): + def __init__(self, data, win32Escapes = False): self.data = data - self.tokens = ShLexer(data).lex() + self.tokens = ShLexer(data, win32Escapes = win32Escapes).lex() def lex(self): try: @@ -294,8 +292,8 @@ class ShParser: import unittest class TestShLexer(unittest.TestCase): - def lex(self, str): - return list(ShLexer(str).lex()) + def lex(self, str, *args, **kwargs): + return list(ShLexer(str, *args, **kwargs).lex()) def test_basic(self): self.assertEqual(self.lex('a|b>c&d<e'), @@ -323,6 +321,8 @@ class TestShLexer(unittest.TestCase): ["a b", "a\\b"]) self.assertEqual(self.lex(""" "" "" """), ["", ""]) + self.assertEqual(self.lex(""" a\\ b """, win32Escapes = True), + ['a\\', 'b']) class TestShParse(unittest.TestCase): def parse(self, str): diff --git a/utils/test/TestRunner.py b/utils/test/TestRunner.py index 42799093d1..3c0c8072c2 100755 --- a/utils/test/TestRunner.py +++ b/utils/test/TestRunner.py @@ -110,7 +110,8 @@ def executeShCmd(cmd, cfg, cwd, results): return exitCode def executeScriptInternal(cfg, commands, cwd): - cmd = ShUtil.ShParser(' &&\n'.join(commands)).parse() + cmd = ShUtil.ShParser(' &&\n'.join(commands), + kSystemName == 'Windows').parse() results = [] try: |