[pypy-svn] r49207 - in pypy/dist/pypy/interpreter/pyparser: . test
arigo at codespeak.net
arigo at codespeak.net
Thu Nov 29 16:09:23 CET 2007
Author: arigo
Date: Thu Nov 29 16:09:22 2007
New Revision: 49207
Modified:
pypy/dist/pypy/interpreter/pyparser/future.py
pypy/dist/pypy/interpreter/pyparser/test/test_futureautomaton.py
Log:
RPython fix: IndexErrors are implicit and not checked in RPython unless
explicitly requested.
Modified: pypy/dist/pypy/interpreter/pyparser/future.py
==============================================================================
--- pypy/dist/pypy/interpreter/pyparser/future.py (original)
+++ pypy/dist/pypy/interpreter/pyparser/future.py Thu Nov 29 16:09:22 2007
@@ -31,7 +31,7 @@
futures = FutureAutomaton(futureFlags, source)
try:
futures.start()
- except (IndexError, DoneException), e:
+ except DoneException, e:
pass
return futures.flags
@@ -68,9 +68,15 @@
self.pos = 0
self.docstringConsumed = False
self.flags = 0
-
+
+ def getc(self, offset=0):
+ try:
+ return self.s[self.pos + offset]
+ except IndexError:
+ raise DoneException
+
def start(self):
- c = self.s[self.pos]
+ c = self.getc()
if c in ["'", '"'] and not self.docstringConsumed:
self.consumeDocstring()
elif c in whitespace:
@@ -84,19 +90,19 @@
def consumeDocstring(self):
self.docstringConsumed = True
- endchar = self.s[self.pos]
- if (self.s[self.pos] == self.s[self.pos+1] and
- self.s[self.pos] == self.s[self.pos+2]):
+ endchar = self.getc()
+ if (self.getc() == self.getc(+1) and
+ self.getc() == self.getc(+2)):
self.pos += 3
while 1: # Deal with a triple quoted docstring
- if self.s[self.pos] == '\\':
+ if self.getc() == '\\':
self.pos += 2
- elif self.s[self.pos] != endchar:
+ elif self.getc() != endchar:
self.pos += 1
else:
self.pos += 1
- if (self.s[self.pos] == endchar and
- self.s[self.pos+1] == endchar):
+ if (self.getc() == endchar and
+ self.getc(+1) == endchar):
self.pos += 2
self.consumeEmptyLine()
break
@@ -104,18 +110,18 @@
else: # Deal with a single quoted docstring
self.pos += 1
while 1:
- c = self.s[self.pos]
+ c = self.getc()
self.pos += 1
if c == endchar:
self.consumeEmptyLine()
return
elif c == '\\':
# Deal with linefeeds
- if self.s[self.pos] != '\r':
+ if self.getc() != '\r':
self.pos += 1
else:
self.pos += 1
- if self.s[self.pos] == '\n':
+ if self.getc() == '\n':
self.pos += 1
elif c in '\r\n':
# Syntax error
@@ -126,31 +132,29 @@
Called when the remainder of the line can only contain whitespace
and comments.
"""
- while self.s[self.pos] in whitespace:
+ while self.getc() in whitespace:
self.pos += 1
- if self.s[self.pos] == '#':
+ if self.getc() == '#':
self.consumeComment()
- elif self.s[self.pos] == ';':
+ elif self.getc() == ';':
self.pos += 1
self.consumeWhitespace()
self.start()
- elif self.s[self.pos] in '\r\n':
+ elif self.getc() in '\r\n':
self.pos += 1
- if self.s[self.pos] == '\n':
+ if self.getc() == '\n':
self.pos += 1
self.start()
def consumeComment(self):
self.pos += 1
- while self.s[self.pos] not in '\r\n':
+ while self.getc() not in '\r\n':
self.pos += 1
self.consumeEmptyLine()
def consumeFrom(self):
self.pos += 1
- p = self.pos
- s = self.s
- if s[p] == 'r' and s[p+1] == 'o' and s[p+2] == 'm':
+ if self.getc() == 'r' and self.getc(+1) == 'o' and self.getc(+2) == 'm':
self.docstringConsumed = True
self.pos += 3
self.consumeMandatoryWhitespace()
@@ -162,7 +166,7 @@
raise DoneException
self.pos += 6
self.consumeWhitespace()
- if self.s[self.pos] == '(':
+ if self.getc() == '(':
self.pos += 1
self.consumeWhitespace()
self.setFlag(self.getName())
@@ -176,25 +180,25 @@
return
def consumeMandatoryWhitespace(self):
- if self.s[self.pos] not in whitespace + '\\':
+ if self.getc() not in whitespace + '\\':
raise DoneException
self.consumeWhitespace()
def consumeWhitespace(self):
while 1:
- c = self.s[self.pos]
+ c = self.getc()
if c in whitespace:
self.pos += 1
continue
elif c == '\\':
self.pos += 1
- c = self.s[self.pos]
+ c = self.getc()
if c == '\n':
self.pos += 1
continue
elif c == '\r':
self.pos += 1
- if self.s[self.pos] == '\n':
+ if self.getc() == '\n':
self.pos += 1
else:
raise DoneException
@@ -202,35 +206,35 @@
return
def getName(self):
- if self.s[self.pos] not in letters:
+ if self.getc() not in letters:
raise DoneException
p = self.pos
while 1:
self.pos += 1
- if self.s[self.pos] not in alphanumerics:
+ if self.getc() not in alphanumerics:
break
name = self.s[p:self.pos]
self.consumeWhitespace()
return name
def getMore(self, parenList=False):
- if parenList and self.s[self.pos] == ')':
+ if parenList and self.getc() == ')':
self.pos += 1
return
- if (self.s[self.pos] == 'a' and
- self.s[self.pos+1] == 's' and
- self.s[self.pos+2] in whitespace):
+ if (self.getc() == 'a' and
+ self.getc(+1) == 's' and
+ self.getc(+2) in whitespace):
self.getName()
self.getName()
self.getMore(parenList=parenList)
return
- elif self.s[self.pos] != ',':
+ elif self.getc() != ',':
return
else:
self.pos += 1
self.consumeWhitespace()
- if parenList and self.s[self.pos] == ')':
+ if parenList and self.getc() == ')':
self.pos += 1
return # Handles trailing comma inside parenthesis
self.setFlag(self.getName())
Modified: pypy/dist/pypy/interpreter/pyparser/test/test_futureautomaton.py
==============================================================================
--- pypy/dist/pypy/interpreter/pyparser/test/test_futureautomaton.py (original)
+++ pypy/dist/pypy/interpreter/pyparser/test/test_futureautomaton.py Thu Nov 29 16:09:22 2007
@@ -6,7 +6,7 @@
f = future.FutureAutomaton(future.futureFlags_2_5, s)
try:
f.start()
- except IndexError, future.DoneException:
+ except future.DoneException:
pass
return f
More information about the Pypy-commit
mailing list