mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
parent
d4d0ea68fe
commit
b55526f4e8
@ -4086,44 +4086,6 @@ class DefinitionParser(object):
|
||||
# TODO: actually parse the second production
|
||||
return self._parse_assignment_expression(inTemplate=inTemplate)
|
||||
|
||||
def _parse_expression_fallback(self, end, parser):
|
||||
# type: (List[unicode]) -> unicode
|
||||
# Stupidly "parse" an expression.
|
||||
# 'end' should be a list of characters which ends the expression.
|
||||
|
||||
# first try to use the provided parser
|
||||
prevPos = self.pos
|
||||
try:
|
||||
return parser()
|
||||
except DefinitionError as e:
|
||||
raise
|
||||
self.warn("Parsing of expression failed. Using fallback parser."
|
||||
" Error was:\n%s" % e.description)
|
||||
self.pos = prevPos
|
||||
# and then the fallback scanning
|
||||
assert end is not None
|
||||
self.skip_ws()
|
||||
startPos = self.pos
|
||||
if self.match(_string_re):
|
||||
value = self.matched_text
|
||||
else:
|
||||
# TODO: add handling of more bracket-like things, and quote handling
|
||||
brackets = {'(': ')', '[': ']', '<': '>'} # type: Dict[unicode, unicode]
|
||||
symbols = [] # type: List[unicode]
|
||||
while not self.eof:
|
||||
if (len(symbols) == 0 and self.current_char in end):
|
||||
break
|
||||
if self.current_char in brackets.keys():
|
||||
symbols.append(brackets[self.current_char])
|
||||
elif len(symbols) > 0 and self.current_char == symbols[-1]:
|
||||
symbols.pop()
|
||||
self.pos += 1
|
||||
if len(end) > 0 and self.eof:
|
||||
self.fail("Could not find end of expression starting at %d."
|
||||
% startPos)
|
||||
value = self.definition[startPos:self.pos].strip()
|
||||
return value.strip()
|
||||
|
||||
def _parse_operator(self):
|
||||
# type: () -> Any
|
||||
self.skip_ws()
|
||||
@ -4182,9 +4144,7 @@ class DefinitionParser(object):
|
||||
prevErrors.append((e, "If type argument"))
|
||||
self.pos = pos
|
||||
try:
|
||||
def parser():
|
||||
return self._parse_constant_expression(inTemplate=True)
|
||||
value = self._parse_expression_fallback([',', '>'], parser)
|
||||
value = self._parse_constant_expression(inTemplate=True)
|
||||
self.skip_ws()
|
||||
if self.skip_string('>'):
|
||||
parsedEnd = True
|
||||
@ -4526,10 +4486,7 @@ class DefinitionParser(object):
|
||||
if self.skip_string(']'):
|
||||
arrayOps.append(ASTArray(None))
|
||||
continue
|
||||
|
||||
def parser():
|
||||
return self._parse_expression(inTemplate=False)
|
||||
value = self._parse_expression_fallback([']'], parser)
|
||||
value = self._parse_expression(inTemplate=False)
|
||||
if not self.skip_string(']'):
|
||||
self.fail("Expected ']' in end of array operator.")
|
||||
arrayOps.append(ASTArray(value))
|
||||
@ -4649,17 +4606,11 @@ class DefinitionParser(object):
|
||||
return None
|
||||
else:
|
||||
if outer == 'member':
|
||||
def parser():
|
||||
return self._parse_assignment_expression(inTemplate=False)
|
||||
value = self._parse_expression_fallback([], parser)
|
||||
value = self._parse_assignment_expression(inTemplate=False)
|
||||
elif outer == 'templateParam':
|
||||
def parser():
|
||||
return self._parse_assignment_expression(inTemplate=True)
|
||||
value = self._parse_expression_fallback([',', '>'], parser)
|
||||
value = self._parse_assignment_expression(inTemplate=True)
|
||||
elif outer is None: # function parameter
|
||||
def parser():
|
||||
return self._parse_assignment_expression(inTemplate=False)
|
||||
value = self._parse_expression_fallback([',', ')'], parser)
|
||||
value = self._parse_assignment_expression(inTemplate=False)
|
||||
else:
|
||||
self.fail("Internal error, initializer for outer '%s' not "
|
||||
"implemented." % outer)
|
||||
@ -4833,10 +4784,8 @@ class DefinitionParser(object):
|
||||
init = None
|
||||
if self.skip_string('='):
|
||||
self.skip_ws()
|
||||
|
||||
def parser():
|
||||
return self._parse_constant_expression(inTemplate=False)
|
||||
init = ASTInitializer(self._parse_expression_fallback([], parser))
|
||||
initVal = self._parse_constant_expression(inTemplate=False)
|
||||
init = ASTInitializer(initVal)
|
||||
return ASTEnumerator(name, init)
|
||||
|
||||
def _parse_template_parameter_list(self):
|
||||
|
Loading…
Reference in New Issue
Block a user