Give more meaningful errors when break/continue parameter is wrong.

Adds a new EParseInvalidBrkContArg exception. Previously it raised EParseInvalidBreak or EParseInvalidCont, whose text was misleading for this type of error.
This commit is contained in:
Sei Lisa 2017-04-29 03:33:45 +02:00
parent 84e4543300
commit f1b05dd2ff

View file

@ -157,8 +157,7 @@ class EParseInvalidBreak(EParse):
super(EParseInvalidBreak, self).__init__(parser, super(EParseInvalidBreak, self).__init__(parser,
u"'break' used outside a loop or switch" u"'break' used outside a loop or switch"
if parser.enableswitch and parser.breakcont if parser.enableswitch and parser.breakcont
else u"'break' used outside a switch" else u"'break' used outside a switch" if parser.enableswitch
if parser.enableswitch
else u"'break' used outside a loop") else u"'break' used outside a loop")
class EParseInvalidCont(EParse): class EParseInvalidCont(EParse):
@ -166,6 +165,12 @@ class EParseInvalidCont(EParse):
super(EParseInvalidCont, self).__init__(parser, super(EParseInvalidCont, self).__init__(parser,
u"'continue' used outside a loop") u"'continue' used outside a loop")
class EParseInvalidBrkContArg(EParse):
def __init__(self, parser):
super(EParseInvalidBrkContArg, self).__init__(parser,
u"Invalid argument to 'break' or 'continue'" if parser.breakcont
else u"Invalid argument to 'break'")
class EParseInvalidBackslash(EParse): class EParseInvalidBackslash(EParse):
def __init__(self, parser): def __init__(self, parser):
super(EParseInvalidBackslash, self).__init__(parser, super(EParseInvalidBackslash, self).__init__(parser,
@ -1925,7 +1930,7 @@ list lazy_list_set(list L, integer i, list v)
n = -1 n = -1
if self.tok[0] == 'INTEGER_VALUE': if self.tok[0] == 'INTEGER_VALUE':
if self.tok[1] <= 0: if self.tok[1] <= 0:
raise EParseInvalidBreak(self) raise EParseInvalidBrkContArg(self)
n = -self.tok[1] n = -self.tok[1]
self.NextToken() self.NextToken()
self.expect(';') self.expect(';')
@ -1933,7 +1938,7 @@ list lazy_list_set(list L, integer i, list v)
try: try:
self.breakstack[n][2] = True self.breakstack[n][2] = True
except IndexError: except IndexError:
raise EParseInvalidBreak(self) raise EParseInvalidBrkContArg(self)
return {'nt':'JUMP', 't':None, 'name':self.breakstack[n][0], return {'nt':'JUMP', 't':None, 'name':self.breakstack[n][0],
'scope':self.breakstack[n][1]} 'scope':self.breakstack[n][1]}
@ -1944,7 +1949,7 @@ list lazy_list_set(list L, integer i, list v)
n = -1 n = -1
if self.tok[0] == 'INTEGER_VALUE': if self.tok[0] == 'INTEGER_VALUE':
if self.tok[1] <= 0: if self.tok[1] <= 0:
raise EParseInvalidCont(self) raise EParseInvalidBrkContArg(self)
n = -self.tok[1] n = -self.tok[1]
self.NextToken() self.NextToken()
self.expect(';') self.expect(';')
@ -1964,7 +1969,7 @@ list lazy_list_set(list L, integer i, list v)
return {'nt':'JUMP', 't':None, 'name':self.breakstack[n][0], return {'nt':'JUMP', 't':None, 'name':self.breakstack[n][0],
'scope':self.breakstack[n][1]} 'scope':self.breakstack[n][1]}
except IndexError: except IndexError:
raise EParseInvalidCont(self) raise EParseInvalidBrkContArg(self)
self.continuestack[n][2] = True self.continuestack[n][2] = True
return {'nt':'JUMP', 't':None, 'name':self.continuestack[n][0], return {'nt':'JUMP', 't':None, 'name':self.continuestack[n][0],
'scope':self.continuestack[n][1]} 'scope':self.continuestack[n][1]}