py/repl: Check for an identifier char after the keyword.

- As described in the #1850.
- Add cmdline tests.
diff --git a/py/misc.h b/py/misc.h
index a1d3e1c..79a4c1c 100644
--- a/py/misc.h
+++ b/py/misc.h
@@ -123,6 +123,7 @@
 bool unichar_isprint(unichar c);
 bool unichar_isdigit(unichar c);
 bool unichar_isxdigit(unichar c);
+bool unichar_isident(unichar c);
 bool unichar_isupper(unichar c);
 bool unichar_islower(unichar c);
 unichar unichar_tolower(unichar c);
diff --git a/py/repl.c b/py/repl.c
index 182961b..de0e8a4 100644
--- a/py/repl.c
+++ b/py/repl.c
@@ -38,7 +38,7 @@
             return false;
         }
     }
-    return head[i] == '\0' && (str[i] == '\0' || !unichar_isalpha(str[i]));
+    return head[i] == '\0' && (str[i] == '\0' || !unichar_isident(str[i]));
 }
 
 bool mp_repl_continue_with_input(const char *input) {
diff --git a/py/unicode.c b/py/unicode.c
index ccf2b55..8be63f2 100644
--- a/py/unicode.c
+++ b/py/unicode.c
@@ -145,11 +145,9 @@
     return c < 128 && (attr[c] & FL_XDIGIT) != 0;
 }
 
-/*
-bool unichar_is_alpha_or_digit(unichar c) {
-    return c < 128 && (attr[c] & (FL_ALPHA | FL_DIGIT)) != 0;
+bool unichar_isident(unichar c) {
+    return c < 128 && ((attr[c] & (FL_ALPHA | FL_DIGIT)) != 0 || c == '_');
 }
-*/
 
 bool unichar_isupper(unichar c) {
     return c < 128 && (attr[c] & FL_UPPER) != 0;