summaryrefslogtreecommitdiffstats
path: root/Lib/shlex.py
diff options
context:
space:
mode:
authorPetri Lehtinen <petri@digip.org>2013-02-23 21:09:51 (GMT)
committerPetri Lehtinen <petri@digip.org>2013-02-23 21:09:51 (GMT)
commit6d61eaa0d0d89b0e035ce75d810280515befc17a (patch)
tree56e10b05f3fc2465b1dfb6a6b5ac4fc3b93b2f1c /Lib/shlex.py
parent7de72ad8a02760e0aa385e9024d6c20d7b1fb3de (diff)
parent7a05113ccf76b077b138d40794e52f6881a57c4c (diff)
downloadcpython-6d61eaa0d0d89b0e035ce75d810280515befc17a.zip
cpython-6d61eaa0d0d89b0e035ce75d810280515befc17a.tar.gz
cpython-6d61eaa0d0d89b0e035ce75d810280515befc17a.tar.bz2
Issue #16121: Fix line number accounting in shlex
Diffstat (limited to 'Lib/shlex.py')
-rw-r--r--Lib/shlex.py16
1 files changed, 15 insertions, 1 deletions
diff --git a/Lib/shlex.py b/Lib/shlex.py
index 69f3b45..05e3fbd 100644
--- a/Lib/shlex.py
+++ b/Lib/shlex.py
@@ -45,6 +45,7 @@ class shlex:
self.state = ' '
self.pushback = deque()
self.lineno = 1
+ self._lines_found = 0
self.debug = 0
self.token = ''
self.filestack = deque()
@@ -115,12 +116,23 @@ class shlex:
return raw
def read_token(self):
+ if self._lines_found:
+ self.lineno += self._lines_found
+ self._lines_found = 0
+
+ i = 0
quoted = False
escapedstate = ' '
while True:
+ i += 1
nextchar = self.instream.read(1)
if nextchar == '\n':
- self.lineno = self.lineno + 1
+ # In case newline is the first character increment lineno
+ if i == 1:
+ self.lineno += 1
+ else:
+ self._lines_found += 1
+
if self.debug >= 3:
print("shlex: in state", repr(self.state), \
"I see character:", repr(nextchar))
@@ -140,6 +152,7 @@ class shlex:
continue
elif nextchar in self.commenters:
self.instream.readline()
+ # Not considered a token so incrementing lineno directly
self.lineno = self.lineno + 1
elif self.posix and nextchar in self.escape:
escapedstate = 'a'
@@ -207,6 +220,7 @@ class shlex:
continue
elif nextchar in self.commenters:
self.instream.readline()
+ # Not considered a token so incrementing lineno directly
self.lineno = self.lineno + 1
if self.posix:
self.state = ' '