diff options
author | Daniel Dunbar <daniel@zuster.org> | 2013-01-31 20:51:17 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2013-01-31 20:51:17 +0000 |
commit | 63a08e09ae301241d0bdd0618bb0533a1d303cf5 (patch) | |
tree | f9daf0f4050660a96bc3d8d57ea5f982c59d0528 /utils | |
parent | a9da5c50e246966c04784756e2083dbfe606c448 (diff) | |
download | external_llvm-63a08e09ae301241d0bdd0618bb0533a1d303cf5.zip external_llvm-63a08e09ae301241d0bdd0618bb0533a1d303cf5.tar.gz external_llvm-63a08e09ae301241d0bdd0618bb0533a1d303cf5.tar.bz2 |
[lit] Fix a shell parsing bug with ';' not separated by whitespace.
- Testing finds bugs, who knew.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@174087 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'utils')
-rw-r--r-- | utils/lit/lit/ShUtil.py | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/utils/lit/lit/ShUtil.py b/utils/lit/lit/ShUtil.py index 5d65dc0..50f7910 100644 --- a/utils/lit/lit/ShUtil.py +++ b/utils/lit/lit/ShUtil.py @@ -35,7 +35,7 @@ class ShLexer: if ('|' in chunk or '&' in chunk or '<' in chunk or '>' in chunk or "'" in chunk or '"' in chunk or - '\\' in chunk): + ';' in chunk or '\\' in chunk): return None self.pos = self.pos - 1 + len(chunk) @@ -48,7 +48,7 @@ class ShLexer: str = c while self.pos != self.end: c = self.look() - if c.isspace() or c in "|&": + if c.isspace() or c in "|&;": break elif c in '><': # This is an annoying case; we treat '2>' as a single token so @@ -250,9 +250,9 @@ class TestShLexer(unittest.TestCase): return list(ShLexer(str, *args, **kwargs).lex()) def test_basic(self): - self.assertEqual(self.lex('a|b>c&d<e'), + self.assertEqual(self.lex('a|b>c&d<e;f'), ['a', ('|',), 'b', ('>',), 'c', ('&',), 'd', - ('<',), 'e']) + ('<',), 'e', (';',), 'f']) def test_redirection_tokens(self): self.assertEqual(self.lex('a2>c'), @@ -342,5 +342,10 @@ class TestShParse(unittest.TestCase): '||', Pipeline([Command(['c'], [])], False))) + self.assertEqual(self.parse('a; b'), + Seq(Pipeline([Command(['a'], [])], False), + ';', + Pipeline([Command(['b'], [])], False))) + if __name__ == '__main__': unittest.main() |