diff options
Diffstat (limited to 'lisp/progmodes/python.el')
| -rw-r--r-- | lisp/progmodes/python.el | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el index 228a4484616..2697f1a3107 100644 --- a/lisp/progmodes/python.el +++ b/lisp/progmodes/python.el | |||
| @@ -1491,10 +1491,18 @@ Optional argument NOEND is internal and makes the logic to not | |||
| 1491 | jump to the end of line when moving forward searching for the end | 1491 | jump to the end of line when moving forward searching for the end |
| 1492 | of the statement." | 1492 | of the statement." |
| 1493 | (interactive "^") | 1493 | (interactive "^") |
| 1494 | (let (string-start bs-pos) | 1494 | (let (string-start bs-pos (last-string-end 0)) |
| 1495 | (while (and (or noend (goto-char (line-end-position))) | 1495 | (while (and (or noend (goto-char (line-end-position))) |
| 1496 | (not (eobp)) | 1496 | (not (eobp)) |
| 1497 | (cond ((setq string-start (python-syntax-context 'string)) | 1497 | (cond ((setq string-start (python-syntax-context 'string)) |
| 1498 | ;; The assertion can only fail if syntax table | ||
| 1499 | ;; text properties and the `syntax-ppss' cache | ||
| 1500 | ;; are somehow out of whack. This has been | ||
| 1501 | ;; observed when using `syntax-ppss' during | ||
| 1502 | ;; narrowing. | ||
| 1503 | (cl-assert (> string-start last-string-end) | ||
| 1504 | :show-args | ||
| 1505 | "Overlapping strings detected") | ||
| 1498 | (goto-char string-start) | 1506 | (goto-char string-start) |
| 1499 | (if (python-syntax-context 'paren) | 1507 | (if (python-syntax-context 'paren) |
| 1500 | ;; Ended up inside a paren, roll again. | 1508 | ;; Ended up inside a paren, roll again. |
| @@ -1504,8 +1512,10 @@ of the statement." | |||
| 1504 | (goto-char (+ (point) | 1512 | (goto-char (+ (point) |
| 1505 | (python-syntax-count-quotes | 1513 | (python-syntax-count-quotes |
| 1506 | (char-after (point)) (point)))) | 1514 | (char-after (point)) (point)))) |
| 1507 | (or (re-search-forward (rx (syntax string-delimiter)) nil t) | 1515 | (setq last-string-end |
| 1508 | (goto-char (point-max))))) | 1516 | (or (re-search-forward |
| 1517 | (rx (syntax string-delimiter)) nil t) | ||
| 1518 | (goto-char (point-max)))))) | ||
| 1509 | ((python-syntax-context 'paren) | 1519 | ((python-syntax-context 'paren) |
| 1510 | ;; The statement won't end before we've escaped | 1520 | ;; The statement won't end before we've escaped |
| 1511 | ;; at least one level of parenthesis. | 1521 | ;; at least one level of parenthesis. |