summaryrefslogtreecommitdiff
path: root/pyparsing/helpers.py
diff options
context:
space:
mode:
authorptmcg <ptmcg@austin.rr.com>2021-09-24 08:44:30 -0500
committerptmcg <ptmcg@austin.rr.com>2021-09-24 08:44:30 -0500
commit9adaf2e261f4b10b60f16bd553fcae88e541c471 (patch)
tree10fb72c587fa686a06331c2fe1e258329dac24a0 /pyparsing/helpers.py
parent8d1083f7db349d00c25993a7bd4dab415af0582e (diff)
downloadpyparsing-git-9adaf2e261f4b10b60f16bd553fcae88e541c471.tar.gz
Allow multiplying an expr by 0 or (0,0)
Diffstat (limited to 'pyparsing/helpers.py')
-rw-r--r--pyparsing/helpers.py11
1 files changed, 6 insertions, 5 deletions
diff --git a/pyparsing/helpers.py b/pyparsing/helpers.py
index 42510b8..251092a 100644
--- a/pyparsing/helpers.py
+++ b/pyparsing/helpers.py
@@ -92,11 +92,12 @@ def counted_array(
# - type: 'bool'
"""
intExpr = intExpr or int_expr
- arrayExpr = Forward()
+ array_expr = Forward()
- def countFieldParseAction(s, l, t):
+ def count_field_parse_action(s, l, t):
+ nonlocal array_expr
n = t[0]
- arrayExpr << (And([expr] * n) if n else empty)
+ array_expr <<= (expr * n) if n else Empty()
# clear list contents, but keep any named results
del t[:]
@@ -105,8 +106,8 @@ def counted_array(
else:
intExpr = intExpr.copy()
intExpr.set_name("arrayLen")
- intExpr.add_parse_action(countFieldParseAction, callDuringTry=True)
- return (intExpr + arrayExpr).set_name("(len) " + str(expr) + "...")
+ intExpr.add_parse_action(count_field_parse_action, call_during_try=True)
+ return (intExpr + array_expr).set_name("(len) " + str(expr) + "...")
def match_previous_literal(expr: ParserElement) -> ParserElement: