mirror of
https://github.com/Sei-Lisa/LSL-PyOptimizer
synced 2025-07-01 23:58:20 +00:00
Report EParseReturnIsEmpty at return, EParseReturnShouldBeEmpty at expression.
Also change idpos to savepos, for consistency, and add note on why EParseReturnShouldBeEmpty is named like that.
This commit is contained in:
parent
3214c553b2
commit
4ba0518353
1 changed files with 9 additions and 4 deletions
|
@ -85,6 +85,7 @@ class EParseTypeMismatch(EParse):
|
||||||
|
|
||||||
class EParseReturnShouldBeEmpty(EParse):
|
class EParseReturnShouldBeEmpty(EParse):
|
||||||
def __init__(self, parser):
|
def __init__(self, parser):
|
||||||
|
# When the types don't match, the error es EParseTypeMismatch instead.
|
||||||
super(EParseReturnShouldBeEmpty, self).__init__(parser,
|
super(EParseReturnShouldBeEmpty, self).__init__(parser,
|
||||||
u"Return statement type doesn't match function return type")
|
u"Return statement type doesn't match function return type")
|
||||||
|
|
||||||
|
@ -893,7 +894,7 @@ class parser(object):
|
||||||
raise EParseUEOF(self)
|
raise EParseUEOF(self)
|
||||||
raise EParseSyntax(self)
|
raise EParseSyntax(self)
|
||||||
name = val
|
name = val
|
||||||
idpos = self.errorpos
|
savepos = self.errorpos
|
||||||
self.NextToken()
|
self.NextToken()
|
||||||
|
|
||||||
# Course of action decided here.
|
# Course of action decided here.
|
||||||
|
@ -905,11 +906,11 @@ class parser(object):
|
||||||
# Functions are looked up in the global scope only.
|
# Functions are looked up in the global scope only.
|
||||||
sym = self.FindSymbolFull(val, 0)
|
sym = self.FindSymbolFull(val, 0)
|
||||||
if sym is None:
|
if sym is None:
|
||||||
self.errorpos = idpos
|
self.errorpos = savepos
|
||||||
raise EParseUndefined(self)
|
raise EParseUndefined(self)
|
||||||
|
|
||||||
if sym['Kind'] != 'f':
|
if sym['Kind'] != 'f':
|
||||||
self.errorpos = idpos
|
self.errorpos = savepos
|
||||||
raise EParseUndefined(self)
|
raise EParseUndefined(self)
|
||||||
args = self.Parse_optional_expression_list(sym['ParamTypes'])
|
args = self.Parse_optional_expression_list(sym['ParamTypes'])
|
||||||
self.expect(')')
|
self.expect(')')
|
||||||
|
@ -918,7 +919,7 @@ class parser(object):
|
||||||
|
|
||||||
sym = self.FindSymbolFull(val)
|
sym = self.FindSymbolFull(val)
|
||||||
if sym is None or sym['Kind'] != 'v':
|
if sym is None or sym['Kind'] != 'v':
|
||||||
self.errorpos = idpos
|
self.errorpos = savepos
|
||||||
raise EParseUndefined(self)
|
raise EParseUndefined(self)
|
||||||
|
|
||||||
typ = sym['Type']
|
typ = sym['Type']
|
||||||
|
@ -1612,16 +1613,20 @@ list lazy_list_set(list L, integer i, list v)
|
||||||
return {'nt':'STSW', 't':None, 'name':name, 'scope':0}
|
return {'nt':'STSW', 't':None, 'name':name, 'scope':0}
|
||||||
|
|
||||||
if tok0 == 'RETURN':
|
if tok0 == 'RETURN':
|
||||||
|
savepos = self.errorpos
|
||||||
self.NextToken()
|
self.NextToken()
|
||||||
if self.tok[0] == ';':
|
if self.tok[0] == ';':
|
||||||
value = None
|
value = None
|
||||||
else:
|
else:
|
||||||
|
savepos = self.errorpos
|
||||||
value = self.Parse_expression()
|
value = self.Parse_expression()
|
||||||
self.expect(';')
|
self.expect(';')
|
||||||
self.NextToken()
|
self.NextToken()
|
||||||
if ReturnType is None and value is not None:
|
if ReturnType is None and value is not None:
|
||||||
|
self.errorpos = savepos
|
||||||
raise EParseReturnShouldBeEmpty(self)
|
raise EParseReturnShouldBeEmpty(self)
|
||||||
if ReturnType is not None and value is None:
|
if ReturnType is not None and value is None:
|
||||||
|
self.errorpos = savepos
|
||||||
raise EParseReturnIsEmpty(self)
|
raise EParseReturnIsEmpty(self)
|
||||||
if value is None:
|
if value is None:
|
||||||
return {'nt':'RETURN', 't':None}
|
return {'nt':'RETURN', 't':None}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue