Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def p_or_test(self, p):
"""or_test : and_test or_and_test_list_opt"""
p1, p2 = p[1], p[2]
if p2 is None:
p0 = p1
elif len(p2) == 2:
lineno, col = lopen_loc(p1)
p0 = ast.BoolOp(op=p2[0], values=[p1, p2[1]], lineno=lineno, col_offset=col)
else:
lineno, col = lopen_loc(p1)
p0 = ast.BoolOp(
op=p2[0], values=[p[1]] + p2[1::2], lineno=lineno, col_offset=col
)
p[0] = p0
"""op_factor : times_tok factor
| at_tok factor
| divide_tok factor
| mod_tok factor
| doublediv_tok factor
"""
p1 = p[1]
op = self._term_binops[p1.value]
if op is None:
self._parse_error(
"operation {0!r} not supported".format(p1),
self.currloc(lineno=p.lineno, column=p.lexpos),
)
p[0] = [op(lineno=p1.lineno, col_offset=p1.lexpos), p[2]]
_factor_ops = {"+": ast.UAdd, "-": ast.USub, "~": ast.Invert}
def p_factor_power(self, p):
"""factor : power"""
p[0] = p[1]
def p_factor_unary(self, p):
"""factor : PLUS factor
| MINUS factor
| TILDE factor
"""
op = self._factor_ops[p[1]]()
p[0] = ast.UnaryOp(op=op, operand=p[2], lineno=self.lineno, col_offset=self.col)
def p_power_atom(self, p):
"""power : atom_expr"""
p[0] = p[1]
def p_assert_stmt(self, p):
"""assert_stmt : assert_tok test comma_test_opt"""
p1, p2, p3 = p[1], p[2], p[3]
if p3 is not None:
if len(p3) != 1:
assert False
p3 = p3[0]
p[0] = ast.Assert(test=p2, msg=p3, lineno=p1.lineno, col_offset=p1.lexpos)
def _subproc_cliargs(self, args, lineno=None, col=None):
"""Creates an expression for subprocess CLI arguments."""
cliargs = currlist = empty_list(lineno=lineno, col=col)
for arg in args:
action = arg._cliarg_action
if action == "append":
if currlist is None:
currlist = empty_list(lineno=lineno, col=col)
cliargs = binop(
cliargs, ast.Add(), currlist, lineno=lineno, col=col
)
currlist.elts.append(arg)
elif action == "extend":
cliargs = binop(cliargs, ast.Add(), arg, lineno=lineno, col=col)
currlist = None
elif action == "splitlines":
sl = call_split_lines(arg, lineno=lineno, col=col)
cliargs = binop(cliargs, ast.Add(), sl, lineno=lineno, col=col)
currlist = None
elif action == "ensure_list":
x = ensure_list_from_str_or_list(arg, lineno=lineno, col=col)
cliargs = binop(cliargs, ast.Add(), x, lineno=lineno, col=col)
currlist = None
else:
raise ValueError("action not understood: " + action)
del arg._cliarg_action
def p_return_stmt(self, p):
"""return_stmt : return_tok testlist_opt"""
p1 = p[1]
p[0] = ast.Return(value=p[2], lineno=p1.lineno, col_offset=p1.lexpos)
def p_power(self, p):
"""power : atom_expr POW factor"""
p1 = p[1]
p[0] = ast.BinOp(
left=p1,
op=ast.Pow(),
right=p[3],
lineno=p1.lineno,
col_offset=p1.col_offset,
)
def p_subscript_tok(self, p):
"""subscript : test_opt colon_tok test_opt sliceop_opt"""
p1 = p[1]
if p1 is None:
p2 = p[2]
lineno, col = p2.lineno, p2.lexpos
else:
lineno, col = p1.lineno, p1.col_offset
p[0] = ast.Slice(lower=p1, upper=p[3], step=p[4], lineno=lineno, col_offset=col)
def _set_arg(self, args, arg, ensure_kw=False):
if isinstance(arg, ast.keyword):
args["keywords"].append(arg)
elif ensure_kw:
args["kwargs"] = arg
else:
args["args"].append(arg)
def p_nonlocal_stmt(self, p):
"""nonlocal_stmt : nonlocal_tok NAME comma_name_list_opt"""
p1, p2, p3 = p[1], p[2], p[3]
names = [p2]
if p3 is not None:
names += p3
p[0] = ast.Nonlocal(names=names, lineno=p1.lineno, col_offset=p1.lexpos)
value_without_p = prefix.replace("p", "") + p1.value[len(prefix) :]
s = ast.Str(
s=ast.literal_eval(value_without_p),
lineno=p1.lineno,
col_offset=p1.lexpos,
)
p[0] = xonsh_call(
"__xonsh__.path_literal", [s], lineno=p1.lineno, col=p1.lexpos
)
elif "f" in prefix:
s = eval_fstr_fields(p1.value, prefix, filename=self.lexer.fname)
s = pyparse(s).body[0].value
s = ast.increment_lineno(s, p1.lineno - 1)
p[0] = s
else:
s = ast.literal_eval(p1.value)
is_bytes = "b" in prefix
is_raw = "r" in prefix
cls = ast.Bytes if is_bytes else ast.Str
p[0] = cls(s=s, lineno=p1.lineno, col_offset=p1.lexpos, is_raw=is_raw)