From cab8e1ed55772df9faece067795f2e1e78e565b0 Mon Sep 17 00:00:00 2001 From: Chandler Carruth Date: Mon, 2 Jul 2012 13:10:15 +0000 Subject: Teach the built-in shell test runner in lit to handle '|&'-style pipes. This is directly cloned from the logic in the TCL test bits of lit. Hopefully will fix most of the windows build bot fallout. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@159528 91177308-0d34-0410-b5e6-96231b3b80d8 --- utils/lit/lit/ShUtil.py | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) (limited to 'utils') diff --git a/utils/lit/lit/ShUtil.py b/utils/lit/lit/ShUtil.py index dda622a..0c5bdac 100644 --- a/utils/lit/lit/ShUtil.py +++ b/utils/lit/lit/ShUtil.py @@ -134,6 +134,8 @@ class ShLexer: if c == '|': if self.maybe_eat('|'): return ('||',) + if self.maybe_eat('&'): + return ('|&',) return (c,) if c == '&': if self.maybe_eat('&'): @@ -205,7 +207,7 @@ class ShParser: # Otherwise see if it is a terminator. assert isinstance(tok, tuple) - if tok[0] in ('|',';','&','||','&&'): + if tok[0] in ('|','|&',';','&','||','&&'): break # Otherwise it must be a redirection. @@ -224,9 +226,18 @@ class ShParser: negate = True commands = [self.parse_command()] - while self.look() == ('|',): - self.lex() - commands.append(self.parse_command()) + while 1: + tok = self.look() + if tok == ('|',): + self.lex() + commands.append(self.parse_command()) + continue + if tok == ('|&',): + self.lex() + commands[-1].redirects.insert(0, (('>&',2),'1')) + commands.append(self.parse_command()) + continue + break return Pipeline(commands, negate) def parse(self): -- cgit v1.1