py/repl: Fix handling of unmatched brackets and unfinished quotes.

Before this patch:

    >>> print(')
    ... ')
    Traceback (most recent call last):
      File "<stdin>", line 1
    SyntaxError: invalid syntax

After this patch:

    >>> print(')
    Traceback (most recent call last):
      File "<stdin>", line 1
    SyntaxError: invalid syntax

This matches CPython and prevents getting stuck in REPL continuation when a
1-quote is unmatched.
This commit is contained in:
Li Weiwei 2018-05-18 11:15:53 +08:00 committed by Damien George
parent 869024dd6e
commit 3e6ab82179

View File

@ -106,8 +106,13 @@ bool mp_repl_continue_with_input(const char *input) {
}
}
// continue if unmatched brackets or quotes
if (n_paren > 0 || n_brack > 0 || n_brace > 0 || in_quote == Q_3_SINGLE || in_quote == Q_3_DOUBLE) {
// continue if unmatched 3-quotes
if (in_quote == Q_3_SINGLE || in_quote == Q_3_DOUBLE) {
return true;
}
// continue if unmatched brackets, but only if not in a 1-quote
if ((n_paren > 0 || n_brack > 0 || n_brace > 0) && in_quote == Q_NONE) {
return true;
}