def parse_statement(self):
"""Parse a single statement."""
token = self.stream.current
- if token.type is not 'name':
+ if token.type != 'name':
self.fail('tag name expected', token.lineno)
if token.value in _statement_keywords:
return getattr(self, 'parse_' + self.stream.current.value)()
while 1:
if node.names:
self.stream.expect('comma')
- if self.stream.current.type is 'name':
+ if self.stream.current.type == 'name':
if parse_context():
break
target = self.parse_assign_target(name_only=True)
node.names.append((target.name, alias.name))
else:
node.names.append(target.name)
- if parse_context() or self.stream.current.type is not 'comma':
+ if parse_context() or self.stream.current.type != 'comma':
break
else:
break
node.args = args = []
node.defaults = defaults = []
self.stream.expect('lparen')
- while self.stream.current.type is not 'rparen':
+ while self.stream.current.type != 'rparen':
if args:
self.stream.expect('comma')
arg = self.parse_assign_target(name_only=True)
def parse_call_block(self):
node = nodes.CallBlock(lineno=self.stream.next().lineno)
- if self.stream.current.type is 'lparen':
+ if self.stream.current.type == 'lparen':
self.parse_signature(node)
else:
node.args = []
def parse_print(self):
node = nodes.Output(lineno=self.stream.next().lineno)
node.nodes = []
- while self.stream.current.type is not 'block_end':
+ while self.stream.current.type != 'block_end':
if node.nodes:
self.stream.expect('comma')
node.nodes.append(self.parse_expression())
def parse_add(self):
lineno = self.stream.current.lineno
left = self.parse_sub()
- while self.stream.current.type is 'add':
+ while self.stream.current.type == 'add':
self.stream.next()
right = self.parse_sub()
left = nodes.Add(left, right, lineno=lineno)
def parse_sub(self):
lineno = self.stream.current.lineno
left = self.parse_concat()
- while self.stream.current.type is 'sub':
+ while self.stream.current.type == 'sub':
self.stream.next()
right = self.parse_concat()
left = nodes.Sub(left, right, lineno=lineno)
def parse_concat(self):
lineno = self.stream.current.lineno
args = [self.parse_mul()]
- while self.stream.current.type is 'tilde':
+ while self.stream.current.type == 'tilde':
self.stream.next()
args.append(self.parse_mul())
if len(args) == 1:
def parse_mul(self):
lineno = self.stream.current.lineno
left = self.parse_div()
- while self.stream.current.type is 'mul':
+ while self.stream.current.type == 'mul':
self.stream.next()
right = self.parse_div()
left = nodes.Mul(left, right, lineno=lineno)
def parse_div(self):
lineno = self.stream.current.lineno
left = self.parse_floordiv()
- while self.stream.current.type is 'div':
+ while self.stream.current.type == 'div':
self.stream.next()
right = self.parse_floordiv()
left = nodes.Div(left, right, lineno=lineno)
def parse_floordiv(self):
lineno = self.stream.current.lineno
left = self.parse_mod()
- while self.stream.current.type is 'floordiv':
+ while self.stream.current.type == 'floordiv':
self.stream.next()
right = self.parse_mod()
left = nodes.FloorDiv(left, right, lineno=lineno)
def parse_mod(self):
lineno = self.stream.current.lineno
left = self.parse_pow()
- while self.stream.current.type is 'mod':
+ while self.stream.current.type == 'mod':
self.stream.next()
right = self.parse_pow()
left = nodes.Mod(left, right, lineno=lineno)
def parse_pow(self):
lineno = self.stream.current.lineno
left = self.parse_unary()
- while self.stream.current.type is 'pow':
+ while self.stream.current.type == 'pow':
self.stream.next()
right = self.parse_unary()
left = nodes.Pow(left, right, lineno=lineno)
def parse_unary(self):
token_type = self.stream.current.type
lineno = self.stream.current.lineno
- if token_type is 'name' and self.stream.current.value == 'not':
+ if token_type == 'name' and self.stream.current.value == 'not':
self.stream.next()
node = self.parse_unary()
return nodes.Not(node, lineno=lineno)
- if token_type is 'sub':
+ if token_type == 'sub':
self.stream.next()
node = self.parse_unary()
return nodes.Neg(node, lineno=lineno)
- if token_type is 'add':
+ if token_type == 'add':
self.stream.next()
node = self.parse_unary()
return nodes.Pos(node, lineno=lineno)
def parse_primary(self, with_postfix=True):
token = self.stream.current
- if token.type is 'name':
+ if token.type == 'name':
if token.value in ('true', 'false', 'True', 'False'):
node = nodes.Const(token.value in ('true', 'True'),
lineno=token.lineno)
else:
node = nodes.Name(token.value, 'load', lineno=token.lineno)
self.stream.next()
- elif token.type is 'string':
+ elif token.type == 'string':
self.stream.next()
buf = [token.value]
lineno = token.lineno
- while self.stream.current.type is 'string':
+ while self.stream.current.type == 'string':
buf.append(self.stream.current.value)
self.stream.next()
node = nodes.Const(''.join(buf), lineno=lineno)
elif token.type in ('integer', 'float'):
self.stream.next()
node = nodes.Const(token.value, lineno=token.lineno)
- elif token.type is 'lparen':
+ elif token.type == 'lparen':
self.stream.next()
node = self.parse_tuple()
self.stream.expect('rparen')
- elif token.type is 'lbracket':
+ elif token.type == 'lbracket':
node = self.parse_list()
- elif token.type is 'lbrace':
+ elif token.type == 'lbrace':
node = self.parse_dict()
else:
self.fail("unexpected token '%s'" % (token,), token.lineno)
if self.is_tuple_end(extra_end_rules):
break
args.append(parse())
- if self.stream.current.type is 'comma':
+ if self.stream.current.type == 'comma':
is_tuple = True
else:
break
def parse_list(self):
token = self.stream.expect('lbracket')
items = []
- while self.stream.current.type is not 'rbracket':
+ while self.stream.current.type != 'rbracket':
if items:
self.stream.expect('comma')
if self.stream.current.type == 'rbracket':
def parse_dict(self):
token = self.stream.expect('lbrace')
items = []
- while self.stream.current.type is not 'rbrace':
+ while self.stream.current.type != 'rbrace':
if items:
self.stream.expect('comma')
if self.stream.current.type == 'rbrace':
def parse_postfix(self, node):
while 1:
token_type = self.stream.current.type
- if token_type is 'dot' or token_type is 'lbracket':
+ if token_type == 'dot' or token_type == 'lbracket':
node = self.parse_subscript(node)
- elif token_type is 'lparen':
+ elif token_type == 'lparen':
node = self.parse_call(node)
- elif token_type is 'pipe':
+ elif token_type == 'pipe':
node = self.parse_filter(node)
- elif token_type is 'name' and self.stream.current.value == 'is':
+ elif token_type == 'name' and self.stream.current.value == 'is':
node = self.parse_test(node)
else:
break
def parse_subscript(self, node):
token = self.stream.next()
- if token.type is 'dot':
+ if token.type == 'dot':
attr_token = self.stream.current
self.stream.next()
- if attr_token.type is 'name':
+ if attr_token.type == 'name':
return nodes.Getattr(node, attr_token.value, 'load',
lineno=token.lineno)
- elif attr_token.type is not 'integer':
+ elif attr_token.type != 'integer':
self.fail('expected name or number', attr_token.lineno)
arg = nodes.Const(attr_token.value, lineno=attr_token.lineno)
return nodes.Getitem(node, arg, 'load', lineno=token.lineno)
- if token.type is 'lbracket':
+ if token.type == 'lbracket':
priority_on_attribute = False
args = []
- while self.stream.current.type is not 'rbracket':
+ while self.stream.current.type != 'rbracket':
if args:
self.stream.expect('comma')
args.append(self.parse_subscribed())
def parse_subscribed(self):
lineno = self.stream.current.lineno
- if self.stream.current.type is 'colon':
+ if self.stream.current.type == 'colon':
self.stream.next()
args = [None]
else:
node = self.parse_expression()
- if self.stream.current.type is not 'colon':
+ if self.stream.current.type != 'colon':
return node
self.stream.next()
args = [node]
- if self.stream.current.type is 'colon':
+ if self.stream.current.type == 'colon':
args.append(None)
elif self.stream.current.type not in ('rbracket', 'comma'):
args.append(self.parse_expression())
else:
args.append(None)
- if self.stream.current.type is 'colon':
+ if self.stream.current.type == 'colon':
self.stream.next()
if self.stream.current.type not in ('rbracket', 'comma'):
args.append(self.parse_expression())
self.fail('invalid syntax for function call expression',
token.lineno)
- while self.stream.current.type is not 'rparen':
+ while self.stream.current.type != 'rparen':
if require_comma:
self.stream.expect('comma')
# support for trailing comma
- if self.stream.current.type is 'rparen':
+ if self.stream.current.type == 'rparen':
break
- if self.stream.current.type is 'mul':
+ if self.stream.current.type == 'mul':
ensure(dyn_args is None and dyn_kwargs is None)
self.stream.next()
dyn_args = self.parse_expression()
- elif self.stream.current.type is 'pow':
+ elif self.stream.current.type == 'pow':
ensure(dyn_kwargs is None)
self.stream.next()
dyn_kwargs = self.parse_expression()
else:
ensure(dyn_args is None and dyn_kwargs is None)
- if self.stream.current.type is 'name' and \
- self.stream.look().type is 'assign':
+ if self.stream.current.type == 'name' and \
+ self.stream.look().type == 'assign':
key = self.stream.current.value
self.stream.skip(2)
value = self.parse_expression()
self.stream.next()
token = self.stream.expect('name')
name = token.value
- while self.stream.current.type is 'dot':
+ while self.stream.current.type == 'dot':
self.stream.next()
name += '.' + self.stream.expect('name').value
- if self.stream.current.type is 'lparen':
+ if self.stream.current.type == 'lparen':
args, kwargs, dyn_args, dyn_kwargs = self.parse_call(None)
else:
args = []
else:
negated = False
name = self.stream.expect('name').value
- while self.stream.current.type is 'dot':
+ while self.stream.current.type == 'dot':
self.stream.next()
name += '.' + self.stream.expect('name').value
dyn_args = dyn_kwargs = None
kwargs = []
- if self.stream.current.type is 'lparen':
+ if self.stream.current.type == 'lparen':
args, kwargs, dyn_args, dyn_kwargs = self.parse_call(None)
elif self.stream.current.type in ('name', 'string', 'integer',
'float', 'lparen', 'lbracket',
while self.stream:
token = self.stream.current
- if token.type is 'data':
+ if token.type == 'data':
if token.value:
add_data(nodes.TemplateData(token.value,
lineno=token.lineno))
self.stream.next()
- elif token.type is 'variable_begin':
+ elif token.type == 'variable_begin':
self.stream.next()
add_data(self.parse_tuple(with_condexpr=True))
self.stream.expect('variable_end')
- elif token.type is 'block_begin':
+ elif token.type == 'block_begin':
flush_data()
self.stream.next()
if end_tokens is not None and \