Mercurial > cpython-lru_cache-weakref
annotate Python/memmove.c @ 44931:742a264cce4f 2.5
#1920: when considering a block starting by "while 0", the compiler optimized the
whole construct away, even when an 'else' clause is present::
while 0:
print("no")
else:
print("yes")
did not generate any code at all.
Now the compiler emits the 'else' block, like it already does for 'if' statements.
Backport of r60265.
| author | Amaury Forgeot d'Arc <amauryfa@gmail.com> |
|---|---|
| date | Thu, 24 Jan 2008 23:42:08 +0000 |
| parents | 6f6f965c5e2d |
| children |
| rev | line source |
|---|---|
| 1449 | 1 |
| 2 /* A perhaps slow but I hope correct implementation of memmove */ | |
| 3 | |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13256
diff
changeset
|
4 extern char *memcpy(char *, char *, int); |
| 1449 | 5 |
| 6 char * | |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13256
diff
changeset
|
7 memmove(char *dst, char *src, int n) |
| 1449 | 8 { |
| 9 char *realdst = dst; | |
| 10 if (n <= 0) | |
| 11 return dst; | |
| 12 if (src >= dst+n || dst >= src+n) | |
| 13 return memcpy(dst, src, n); | |
| 14 if (src > dst) { | |
| 15 while (--n >= 0) | |
| 16 *dst++ = *src++; | |
| 17 } | |
| 18 else if (src < dst) { | |
| 19 src += n; | |
| 20 dst += n; | |
| 21 while (--n >= 0) | |
| 22 *--dst = *--src; | |
| 23 } | |
| 24 return realdst; | |
| 25 } |
