unix: Enable REPL auto-indent.
This commit is contained in:
parent
0af73014cc
commit
3ca84026db
@ -16,6 +16,6 @@ d = {1:'one',
|
|||||||
2:'two'}
|
2:'two'}
|
||||||
print(d[2])
|
print(d[2])
|
||||||
def f(x):
|
def f(x):
|
||||||
print(x)
|
print(x)
|
||||||
|
|
||||||
f(3)
|
f(3)
|
||||||
|
@ -26,7 +26,7 @@ Micro Python \.\+ version
|
|||||||
two
|
two
|
||||||
>>> def f(x):
|
>>> def f(x):
|
||||||
... print(x)
|
... print(x)
|
||||||
...
|
... [K
|
||||||
>>> f(3)
|
>>> f(3)
|
||||||
3
|
3
|
||||||
>>>
|
>>>
|
||||||
|
58
unix/main.c
58
unix/main.c
@ -134,6 +134,9 @@ STATIC int execute_from_lexer(mp_lexer_t *lex, mp_parse_input_kind_t input_kind,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if MICROPY_USE_READLINE == 1
|
||||||
|
#include "lib/mp-readline/readline.h"
|
||||||
|
#else
|
||||||
STATIC char *strjoin(const char *s1, int sep_char, const char *s2) {
|
STATIC char *strjoin(const char *s1, int sep_char, const char *s2) {
|
||||||
int l1 = strlen(s1);
|
int l1 = strlen(s1);
|
||||||
int l2 = strlen(s2);
|
int l2 = strlen(s2);
|
||||||
@ -147,10 +150,63 @@ STATIC char *strjoin(const char *s1, int sep_char, const char *s2) {
|
|||||||
s[l1 + l2] = 0;
|
s[l1 + l2] = 0;
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
STATIC int do_repl(void) {
|
STATIC int do_repl(void) {
|
||||||
mp_hal_stdout_tx_str("Micro Python " MICROPY_GIT_TAG " on " MICROPY_BUILD_DATE "; " MICROPY_PY_SYS_PLATFORM " version\n");
|
mp_hal_stdout_tx_str("Micro Python " MICROPY_GIT_TAG " on " MICROPY_BUILD_DATE "; " MICROPY_PY_SYS_PLATFORM " version\n");
|
||||||
|
|
||||||
|
#if MICROPY_USE_READLINE == 1
|
||||||
|
|
||||||
|
// use MicroPython supplied readline
|
||||||
|
|
||||||
|
vstr_t line;
|
||||||
|
vstr_init(&line, 16);
|
||||||
|
for (;;) {
|
||||||
|
input_restart:
|
||||||
|
vstr_reset(&line);
|
||||||
|
mp_hal_stdio_mode_raw();
|
||||||
|
int ret = readline(&line, ">>> ");
|
||||||
|
|
||||||
|
if (ret == CHAR_CTRL_D) {
|
||||||
|
// EOF
|
||||||
|
printf("\n");
|
||||||
|
mp_hal_stdio_mode_orig();
|
||||||
|
vstr_clear(&line);
|
||||||
|
return 0;
|
||||||
|
} else if (line.len == 0) {
|
||||||
|
if (ret != 0) {
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
mp_hal_stdio_mode_orig();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (mp_repl_continue_with_input(vstr_null_terminated_str(&line))) {
|
||||||
|
vstr_add_byte(&line, '\n');
|
||||||
|
ret = readline(&line, "... ");
|
||||||
|
if (ret == CHAR_CTRL_C) {
|
||||||
|
// cancel everything
|
||||||
|
printf("\n");
|
||||||
|
mp_hal_stdio_mode_orig();
|
||||||
|
goto input_restart;
|
||||||
|
} else if (ret == CHAR_CTRL_D) {
|
||||||
|
// stop entering compound statement
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
mp_hal_stdio_mode_orig();
|
||||||
|
|
||||||
|
mp_lexer_t *lex = mp_lexer_new_from_str_len(MP_QSTR__lt_stdin_gt_, line.buf, line.len, false);
|
||||||
|
ret = execute_from_lexer(lex, MP_PARSE_SINGLE_INPUT, true);
|
||||||
|
if (ret & FORCED_EXIT) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
// use GNU or simple readline
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
char *line = prompt(">>> ");
|
char *line = prompt(">>> ");
|
||||||
if (line == NULL) {
|
if (line == NULL) {
|
||||||
@ -175,6 +231,8 @@ STATIC int do_repl(void) {
|
|||||||
}
|
}
|
||||||
free(line);
|
free(line);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
STATIC int do_file(const char *file) {
|
STATIC int do_file(const char *file) {
|
||||||
|
@ -53,6 +53,7 @@
|
|||||||
#define MICROPY_USE_READLINE_HISTORY (1)
|
#define MICROPY_USE_READLINE_HISTORY (1)
|
||||||
#define MICROPY_HELPER_REPL (1)
|
#define MICROPY_HELPER_REPL (1)
|
||||||
#define MICROPY_REPL_EMACS_KEYS (1)
|
#define MICROPY_REPL_EMACS_KEYS (1)
|
||||||
|
#define MICROPY_REPL_AUTO_INDENT (1)
|
||||||
#define MICROPY_HELPER_LEXER_UNIX (1)
|
#define MICROPY_HELPER_LEXER_UNIX (1)
|
||||||
#define MICROPY_ENABLE_SOURCE_LINE (1)
|
#define MICROPY_ENABLE_SOURCE_LINE (1)
|
||||||
#define MICROPY_FLOAT_IMPL (MICROPY_FLOAT_IMPL_DOUBLE)
|
#define MICROPY_FLOAT_IMPL (MICROPY_FLOAT_IMPL_DOUBLE)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user