aboutsummaryrefslogtreecommitdiffstats
path: root/utils/lit/lit/ShUtil.py
diff options
context:
space:
mode:
authorStephen Hines <srhines@google.com>2013-08-07 15:07:10 -0700
committerStephen Hines <srhines@google.com>2013-08-07 15:07:10 -0700
commitfab2daa4a1127ecb217abe2b07c1769122b6fee1 (patch)
tree268ebfd1963fd98ba412e76819afdf95a7d4267b /utils/lit/lit/ShUtil.py
parent8197ac1c1a0a91baa70c4dea8cb488f254ef974c (diff)
parent10251753b6897adcd22cc981c0cc42f348c109de (diff)
downloadexternal_llvm-fab2daa4a1127ecb217abe2b07c1769122b6fee1.zip
external_llvm-fab2daa4a1127ecb217abe2b07c1769122b6fee1.tar.gz
external_llvm-fab2daa4a1127ecb217abe2b07c1769122b6fee1.tar.bz2
Merge commit '10251753b6897adcd22cc981c0cc42f348c109de' into merge-20130807
Conflicts: lib/Archive/ArchiveReader.cpp lib/Support/Unix/PathV2.inc Change-Id: I29d8c1e321a4a380b6013f00bac6a8e4b593cc4e
Diffstat (limited to 'utils/lit/lit/ShUtil.py')
-rw-r--r--utils/lit/lit/ShUtil.py50
1 files changed, 27 insertions, 23 deletions
diff --git a/utils/lit/lit/ShUtil.py b/utils/lit/lit/ShUtil.py
index 50f7910..fb0689b 100644
--- a/utils/lit/lit/ShUtil.py
+++ b/utils/lit/lit/ShUtil.py
@@ -1,7 +1,8 @@
+from __future__ import absolute_import
import itertools
-import Util
-from ShCommands import Command, Pipeline, Seq
+import lit.Util
+from lit.ShCommands import Command, Pipeline, Seq
class ShLexer:
def __init__(self, data, win32Escapes = False):
@@ -74,8 +75,8 @@ class ShLexer:
# Outside of a string, '\\' escapes everything.
self.eat()
if self.pos == self.end:
- Util.warning("escape at end of quoted argument in: %r" %
- self.data)
+ lit.Util.warning(
+ "escape at end of quoted argument in: %r" % self.data)
return str
str += self.eat()
else:
@@ -92,8 +93,8 @@ class ShLexer:
# Inside a '"' quoted string, '\\' only escapes the quote
# character and backslash, otherwise it is preserved.
if self.pos == self.end:
- Util.warning("escape at end of quoted argument in: %r" %
- self.data)
+ lit.Util.warning(
+ "escape at end of quoted argument in: %r" % self.data)
return str
c = self.eat()
if c == '"': #
@@ -104,7 +105,7 @@ class ShLexer:
str += '\\' + c
else:
str += c
- Util.warning("missing quote character in %r" % self.data)
+ lit.Util.warning("missing quote character in %r" % self.data)
return str
def lex_arg_checked(self, c):
@@ -116,9 +117,11 @@ class ShLexer:
reference = self.lex_arg_slow(c)
if res is not None:
if res != reference:
- raise ValueError,"Fast path failure: %r != %r" % (res, reference)
+ raise ValueError("Fast path failure: %r != %r" % (
+ res, reference))
if self.pos != end:
- raise ValueError,"Fast path failure: %r != %r" % (self.pos, end)
+ raise ValueError("Fast path failure: %r != %r" % (
+ self.pos, end))
return reference
def lex_arg(self, c):
@@ -166,28 +169,28 @@ class ShLexer:
###
class ShParser:
- def __init__(self, data, win32Escapes = False):
+ def __init__(self, data, win32Escapes = False, pipefail = False):
self.data = data
+ self.pipefail = pipefail
self.tokens = ShLexer(data, win32Escapes = win32Escapes).lex()
def lex(self):
- try:
- return self.tokens.next()
- except StopIteration:
- return None
+ for item in self.tokens:
+ return item
+ return None
def look(self):
- next = self.lex()
- if next is not None:
- self.tokens = itertools.chain([next], self.tokens)
- return next
+ token = self.lex()
+ if token is not None:
+ self.tokens = itertools.chain([token], self.tokens)
+ return token
def parse_command(self):
tok = self.lex()
if not tok:
- raise ValueError,"empty command!"
+ raise ValueError("empty command!")
if isinstance(tok, tuple):
- raise ValueError,"syntax error near unexpected token %r" % tok[0]
+ raise ValueError("syntax error near unexpected token %r" % tok[0])
args = [tok]
redirects = []
@@ -212,7 +215,7 @@ class ShParser:
op = self.lex()
arg = self.lex()
if not arg:
- raise ValueError,"syntax error near token %r" % op[0]
+ raise ValueError("syntax error near token %r" % op[0])
redirects.append((op, arg))
return Command(args, redirects)
@@ -224,7 +227,7 @@ class ShParser:
while self.look() == ('|',):
self.lex()
commands.append(self.parse_command())
- return Pipeline(commands, negate)
+ return Pipeline(commands, negate, self.pipefail)
def parse(self):
lhs = self.parse_pipeline()
@@ -234,7 +237,8 @@ class ShParser:
assert isinstance(operator, tuple) and len(operator) == 1
if not self.look():
- raise ValueError, "missing argument to operator %r" % operator[0]
+ raise ValueError(
+ "missing argument to operator %r" % operator[0])
# FIXME: Operator precedence!!
lhs = Seq(lhs, operator[0], self.parse_pipeline())