diff options
author | Li Weiwei <liweiwei@yeweitech.org> | 2018-05-18 11:15:53 +0800 |
---|---|---|
committer | Damien George <damien.p.george@gmail.com> | 2018-05-18 15:23:02 +1000 |
commit | 3e6ab82179f7b9a1df915f4bd0d6e48a454d942c (patch) | |
tree | 98bb3160f80eaa390efd6ced451ba251a46691c7 /py | |
parent | 869024dd6e62905b7e1069b547856a769b3b24ba (diff) |
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.
Diffstat (limited to 'py')
-rw-r--r-- | py/repl.c | 9 |
1 files changed, 7 insertions, 2 deletions
@@ -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; } |