add ++i and --j syntax

This commit is contained in:
BLUELOVETH 2023-05-28 22:18:22 +08:00
parent 6f28e44f22
commit 1ff6f92b94
3 changed files with 24 additions and 10 deletions

View File

@ -38,7 +38,7 @@ def enumerate(iterable, start=0):
n = start n = start
for elem in iterable: for elem in iterable:
yield n, elem yield n, elem
n += 1 ++n
def sum(iterable): def sum(iterable):
res = 0 res = 0
@ -87,7 +87,7 @@ def str@split(self, sep):
self = self[i+len(sep):] self = self[i+len(sep):]
i = 0 i = 0
else: else:
i += 1 ++i
res.append(self) res.append(self)
return res return res
@ -104,10 +104,10 @@ def str@strip(self, chars=None):
chars = chars or ' \t\n\r' chars = chars or ' \t\n\r'
i = 0 i = 0
while i < len(self) and self[i] in chars: while i < len(self) and self[i] in chars:
i += 1 ++i
j = len(self) - 1 j = len(self) - 1
while j >= 0 and self[j] in chars: while j >= 0 and self[j] in chars:
j -= 1 --j
return self[i:j+1] return self[i:j+1]
##### list ##### ##### list #####
@ -122,12 +122,11 @@ def __qsort(a: list, L: int, R: int, key):
mid = key(mid) mid = key(mid)
i, j = L, R i, j = L, R
while i<=j: while i<=j:
while key(a[i])<mid: i+=1 while key(a[i])<mid: ++i;
while key(a[j])>mid: j-=1 while key(a[j])>mid: --j;
if i<=j: if i<=j:
a[i], a[j] = a[j], a[i] a[i], a[j] = a[j], a[i]
i+=1 ++i; --j;
j-=1
__qsort(a, L, j, key) __qsort(a, L, j, key)
__qsort(a, i, R, key) __qsort(a, i, R, key)

View File

@ -934,10 +934,10 @@ inline std::string _opcode_argstr(VM* vm, Bytecode byte, const CodeObject* co){
case OP_LOAD_NAME: case OP_LOAD_GLOBAL: case OP_LOAD_NONLOCAL: case OP_STORE_GLOBAL: case OP_LOAD_NAME: case OP_LOAD_GLOBAL: case OP_LOAD_NONLOCAL: case OP_STORE_GLOBAL:
case OP_LOAD_ATTR: case OP_LOAD_METHOD: case OP_STORE_ATTR: case OP_DELETE_ATTR: case OP_LOAD_ATTR: case OP_LOAD_METHOD: case OP_STORE_ATTR: case OP_DELETE_ATTR:
case OP_IMPORT_NAME: case OP_BEGIN_CLASS: case OP_IMPORT_NAME: case OP_BEGIN_CLASS:
case OP_DELETE_GLOBAL: case OP_DELETE_GLOBAL: case OP_INC_GLOBAL: case OP_DEC_GLOBAL:
argStr += fmt(" (", StrName(byte.arg).sv(), ")"); argStr += fmt(" (", StrName(byte.arg).sv(), ")");
break; break;
case OP_LOAD_FAST: case OP_STORE_FAST: case OP_DELETE_FAST: case OP_LOAD_FAST: case OP_STORE_FAST: case OP_DELETE_FAST: case OP_INC_FAST: case OP_DEC_FAST:
argStr += fmt(" (", co->varnames[byte.arg].sv(), ")"); argStr += fmt(" (", co->varnames[byte.arg].sv(), ")");
break; break;
case OP_LOAD_FUNCTION: case OP_LOAD_FUNCTION:

15
tests/29_incdec.py Normal file
View File

@ -0,0 +1,15 @@
a = 1
++a
assert a == 2
++a; ++a; --a;
assert a == 3
def f(a):
++a
++a
--a
return a
assert f(3) == 4
assert f(-2) == -1