summaryrefslogtreecommitdiffstatshomepage
path: root/unix/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'unix/main.c')
-rw-r--r--unix/main.c27
1 files changed, 3 insertions, 24 deletions
diff --git a/unix/main.c b/unix/main.c
index f7b06d4f83..12aca6ddf2 100644
--- a/unix/main.c
+++ b/unix/main.c
@@ -10,32 +10,10 @@
#include "parse.h"
#include "compile.h"
#include "runtime.h"
+#include "repl.h"
#include <readline/readline.h>
-bool str_startswith_word(const char *str, const char *head) {
- int i;
- for (i = 0; str[i] && head[i]; i++) {
- if (str[i] != head[i]) {
- return false;
- }
- }
- return head[i] == '\0' && (str[i] == '\0' || !g_unichar_isalpha(str[i]));
-}
-
-bool is_compound_stmt(const char *line) {
- // TODO also "compound" if unmatched open bracket
- return
- str_startswith_word(line, "if")
- || str_startswith_word(line, "while")
- || str_startswith_word(line, "for")
- || str_startswith_word(line, "true")
- || str_startswith_word(line, "with")
- || str_startswith_word(line, "def")
- || str_startswith_word(line, "class")
- || str_startswith_word(line, "@");
-}
-
char *str_join(const char *s1, int sep_char, const char *s2) {
int l1 = strlen(s1);
int l2 = strlen(s2);
@@ -46,6 +24,7 @@ char *str_join(const char *s1, int sep_char, const char *s2) {
l1 += 1;
}
memcpy(s + l1, s2, l2);
+ s[l1 + l2] = 0;
return s;
}
@@ -56,7 +35,7 @@ void do_repl() {
// EOF
return;
}
- if (is_compound_stmt(line)) {
+ if (py_repl_is_compound_stmt(line)) {
for (;;) {
char *line2 = readline("... ");
if (line2 == NULL || strlen(line2) == 0) {