MCPcopy Index your code
hub / github.com/nodejs/node / subparse

Method subparse

deps/v8/third_party/jinja2/parser.py:979–1026  ·  view source on GitHub ↗
(
        self, end_tokens: t.Optional[t.Tuple[str, ...]] = None
    )

Source from the content-addressed store, hash-verified

977 return node
978
979 def subparse(
980 self, end_tokens: t.Optional[t.Tuple[str, ...]] = None
981 ) -> t.List[nodes.Node]:
982 body: t.List[nodes.Node] = []
983 data_buffer: t.List[nodes.Node] = []
984 add_data = data_buffer.append
985
986 if end_tokens is not None:
987 self._end_token_stack.append(end_tokens)
988
989 def flush_data() -> None:
990 if data_buffer:
991 lineno = data_buffer[0].lineno
992 body.append(nodes.Output(data_buffer[:], lineno=lineno))
993 del data_buffer[:]
994
995 try:
996 while self.stream:
997 token = self.stream.current
998 if token.type == "data":
999 if token.value:
1000 add_data(nodes.TemplateData(token.value, lineno=token.lineno))
1001 next(self.stream)
1002 elif token.type == "variable_begin":
1003 next(self.stream)
1004 add_data(self.parse_tuple(with_condexpr=True))
1005 self.stream.expect("variable_end")
1006 elif token.type == "block_begin":
1007 flush_data()
1008 next(self.stream)
1009 if end_tokens is not None and self.stream.current.test_any(
1010 *end_tokens
1011 ):
1012 return body
1013 rv = self.parse_statement()
1014 if isinstance(rv, list):
1015 body.extend(rv)
1016 else:
1017 body.append(rv)
1018 self.stream.expect("block_end")
1019 else:
1020 raise AssertionError("internal parsing error")
1021
1022 flush_data()
1023 finally:
1024 if end_tokens is not None:
1025 self._end_token_stack.pop()
1026 return body
1027
1028 def parse(self) -> nodes.Template:
1029 """Parse the whole template into a `Template` node."""

Callers 2

parse_statementsMethod · 0.95
parseMethod · 0.95

Calls 9

parse_tupleMethod · 0.95
parse_statementMethod · 0.95
popMethod · 0.80
nextFunction · 0.50
AssertionErrorFunction · 0.50
appendMethod · 0.45
expectMethod · 0.45
test_anyMethod · 0.45
extendMethod · 0.45

Tested by

no test coverage detected