From c13346fe54780ef38c4dbf359524cf07821442ce Mon Sep 17 00:00:00 2001 From: Chandler Carruth Date: Mon, 2 Jul 2012 13:10:15 +0000 Subject: [PATCH] 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. llvm-svn: 159528 --- utils/lit/lit/ShUtil.py | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/utils/lit/lit/ShUtil.py b/utils/lit/lit/ShUtil.py index dda622a48a8..0c5bdac408a 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):