mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-04-23 04:55:15 +00:00
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:
parent
6f407fff32
commit
06d35d036d
Notes:
sideshowbarker
2024-07-19 08:02:05 +09:00
Author: https://github.com/alimpfard Commit: https://github.com/SerenityOS/serenity/commit/06d35d036d6 Pull-request: https://github.com/SerenityOS/serenity/pull/1539
2 changed files with 10 additions and 22 deletions
|
@ -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
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Add table
Reference in a new issue