summaryrefslogtreecommitdiff
path: root/py
diff options
context:
space:
mode:
authorLi Weiwei <liweiwei@yeweitech.org>2018-05-18 11:15:53 +0800
committerDamien George <damien.p.george@gmail.com>2018-05-18 15:23:02 +1000
commit3e6ab82179f7b9a1df915f4bd0d6e48a454d942c (patch)
tree98bb3160f80eaa390efd6ced451ba251a46691c7 /py
parent869024dd6e62905b7e1069b547856a769b3b24ba (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.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/py/repl.c b/py/repl.c
index 5dce8bbb7..da0fefb3a 100644
--- a/py/repl.c
+++ b/py/repl.c
@@ -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;
}