mirror of
https://github.com/pocketpy/pocketpy
synced 2025-10-21 12:00:18 +00:00
fix **
associativity
This commit is contained in:
parent
cbae815d37
commit
6266161118
@ -1652,7 +1652,12 @@ static Error* exprBinaryOp(Compiler* self) {
|
|||||||
Error* err;
|
Error* err;
|
||||||
int line = prev()->line;
|
int line = prev()->line;
|
||||||
TokenIndex op = prev()->type;
|
TokenIndex op = prev()->type;
|
||||||
check(parse_expression(self, rules[op].precedence + 1, false));
|
int precedence = rules[op].precedence;
|
||||||
|
if(op != TK_POW) {
|
||||||
|
// if not right associative, increase precedence
|
||||||
|
precedence += 1;
|
||||||
|
}
|
||||||
|
check(parse_expression(self, precedence, false));
|
||||||
BinaryExpr* e = BinaryExpr__new(line, op, false);
|
BinaryExpr* e = BinaryExpr__new(line, op, false);
|
||||||
if(op == TK_IN || op == TK_NOT_IN) {
|
if(op == TK_IN || op == TK_NOT_IN) {
|
||||||
e->lhs = Ctx__s_popx(ctx());
|
e->lhs = Ctx__s_popx(ctx());
|
||||||
|
@ -47,3 +47,7 @@ assert A()[::, :] == (slice(None, None, None), slice(None, None, None))
|
|||||||
assert A()[::, :2] == (slice(None, None, None), slice(None, 2, None))
|
assert A()[::, :2] == (slice(None, None, None), slice(None, 2, None))
|
||||||
assert A()['b':'c':1, :] == (slice('b', 'c', 1), slice(None, None, None))
|
assert A()['b':'c':1, :] == (slice('b', 'c', 1), slice(None, None, None))
|
||||||
assert A()[1:2, :A()[3:4, ::-1]] == (slice(1, 2, None), slice(None, (slice(3, 4, None), slice(None, None, -1)), None))
|
assert A()[1:2, :A()[3:4, ::-1]] == (slice(1, 2, None), slice(None, (slice(3, 4, None), slice(None, None, -1)), None))
|
||||||
|
|
||||||
|
# test right associative
|
||||||
|
assert 2**2**3 == 256
|
||||||
|
assert (2**2**3)**2 == 65536
|
||||||
|
Loading…
x
Reference in New Issue
Block a user