|
|
@@ -27,18 +27,20 @@ |
|
|
|
|
|
|
|
|
def _ValueToPartValue(val, quoted):
|
|
|
"""Helper for VarSub evaluation."""
|
|
|
"""Helper for VarSub evaluation.
|
|
|
|
|
|
Called by _EvalBracedVarSub and _EvalWordPart for SimpleVarSub.
|
|
|
"""
|
|
|
assert isinstance(val, runtime.value), val
|
|
|
if val.tag == value_e.Undef:
|
|
|
return runtime.UndefPartValue()
|
|
|
|
|
|
elif val.tag == value_e.Str:
|
|
|
if val.tag == value_e.Str:
|
|
|
return runtime.StringPartValue(val.s, not quoted)
|
|
|
|
|
|
elif val.tag == value_e.StrArray:
|
|
|
return runtime.ArrayPartValue(val.strs)
|
|
|
|
|
|
else:
|
|
|
# Undef should be caught by _EmptyStrOrError().
|
|
|
raise AssertionError
|
|
|
|
|
|
|
|
|
@@ -484,7 +486,7 @@ def _EvalDoubleQuotedPart(self, part, part_vals): |
|
|
return
|
|
|
|
|
|
for p in part.parts:
|
|
|
self._EvalWordPart(p, part_vals, quoted=True)
|
|
|
self.EvalWordPart(p, part_vals, quoted=True)
|
|
|
|
|
|
def _DecayArray(self, val):
|
|
|
sep = _GetJoinChar(self.mem)
|
|
|
@@ -711,10 +713,12 @@ def _EvalBracedVarSub(self, part, part_vals, quoted): |
|
|
# No prefix or suffix ops
|
|
|
val = self._EmptyStrOrError(val)
|
|
|
|
|
|
# For example, ${a} evaluates to value_t.Str(), but we want a
|
|
|
# part_value.StringPartValue.
|
|
|
part_val = _ValueToPartValue(val, quoted)
|
|
|
part_vals.append(part_val)
|
|
|
|
|
|
def _EvalWordPart(self, part, part_vals, quoted=False):
|
|
|
def EvalWordPart(self, part, part_vals, quoted=False):
|
|
|
"""Evaluate a word part.
|
|
|
|
|
|
Args:
|
|
|
@@ -798,14 +802,6 @@ def _EvalWordPart(self, part, part_vals, quoted=False): |
|
|
raise AssertionError(part.__class__.__name__)
|
|
|
|
|
|
|
|
|
def _FlattenPartValues(part_vals, out):
|
|
|
for pval in part_vals:
|
|
|
if pval.tag == part_value_e.CompoundPartValue:
|
|
|
_FlattenPartValues(pval.children, out)
|
|
|
else:
|
|
|
out.append(pval)
|
|
|
|
|
|
|
|
|
class _WordEvaluator:
|
|
|
"""Abstract base class for word evaluators.
|
|
|
|
|
|
@@ -834,7 +830,7 @@ def _EvalWordToParts(self, word, quoted, part_vals): |
|
|
"Expected CompoundWord, got %s" % word
|
|
|
|
|
|
for p in word.parts:
|
|
|
v = self.part_ev._EvalWordPart(p, part_vals, quoted=quoted)
|
|
|
v = self.part_ev.EvalWordPart(p, part_vals, quoted=quoted)
|
|
|
|
|
|
def EvalWordToString(self, word, do_fnmatch=False, decay=False):
|
|
|
"""
|
|
|
@@ -850,7 +846,7 @@ def EvalWordToString(self, word, do_fnmatch=False, decay=False): |
|
|
"""
|
|
|
part_vals = []
|
|
|
for part in word.parts:
|
|
|
self.part_ev._EvalWordPart(part, part_vals, quoted=False)
|
|
|
self.part_ev.EvalWordPart(part, part_vals, quoted=False)
|
|
|
|
|
|
strs = []
|
|
|
for part_val in part_vals:
|
|
|
|
0 comments on commit
7dc753e