Userland/js: Use the new line editor in repl

We now get cursor movements for free!
and we're rid of that icky `free` call, yay.
This commit is contained in:
AnotherTest 2020-03-30 22:44:23 +04:30 committed by Andreas Kling
parent 6f407fff32
commit 06d35d036d
Notes: sideshowbarker 2024-07-19 08:02:05 +09:00
2 changed files with 10 additions and 22 deletions

View file

@ -4,7 +4,7 @@ APPS = ${SRCS:.cpp=}
EXTRA_CLEAN = $(APPS)
LIB_DEPS = Web GUI Gfx Audio Protocol IPC Thread Pthread PCIDB Markdown JS Core
LIB_DEPS = Web GUI Gfx Audio Protocol IPC Thread Pthread PCIDB Markdown JS Core LineEdit
include ../Makefile.common

View file

@ -37,36 +37,25 @@
#include <LibJS/Runtime/Object.h>
#include <LibJS/Runtime/PrimitiveString.h>
#include <LibJS/Runtime/Value.h>
#include <LibLineEdit/LineEditor.h>
#include <stdio.h>
bool dump_ast = false;
static LineEditor editor {};
String read_next_piece()
{
StringBuilder piece;
int level = 0;
StringBuilder prompt_builder;
do {
if (level == 0)
fprintf(stderr, "> ");
else
fprintf(stderr, ".%*c", 4 * level + 1, ' ');
prompt_builder.clear();
prompt_builder.append("> ");
for (auto i = 0; i < level; ++i)
prompt_builder.append(" ");
char* line = nullptr;
size_t allocated_size = 0;
ssize_t nread = getline(&line, &allocated_size, stdin);
if (nread < 0) {
if (errno == 0) {
// Explicit EOF; stop reading. Print a newline though, to make
// the next prompt (or the shell prompt) appear on the next
// line.
fprintf(stderr, "\n");
break;
} else {
perror("getline");
exit(1);
}
}
String line = editor.get_line(prompt_builder.build());
piece.append(line);
auto lexer = JS::Lexer(line);
@ -87,8 +76,6 @@ String read_next_piece()
break;
}
}
free(line);
} while (level > 0);
return piece.to_string();
@ -207,6 +194,7 @@ int main(int argc, char** argv)
interpreter.global_object().put("global", &interpreter.global_object());
if (script_path == nullptr) {
editor.initialize();
repl(interpreter);
} else {
auto file = Core::File::construct(script_path);