Index: src/d8-readline.cc |
diff --git a/src/d8-readline.cc b/src/d8-readline.cc |
deleted file mode 100644 |
index e57b7567e3b5dd4a36701a8e62dcbad371ed5cc2..0000000000000000000000000000000000000000 |
--- a/src/d8-readline.cc |
+++ /dev/null |
@@ -1,155 +0,0 @@ |
-// Copyright 2012 the V8 project authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include <stdio.h> // NOLINT |
-#include <string.h> // NOLINT |
-#include <readline/readline.h> // NOLINT |
-#include <readline/history.h> // NOLINT |
- |
-// The readline includes leaves RETURN defined which breaks V8 compilation. |
-#undef RETURN |
- |
-#include "src/d8.h" |
- |
-// There are incompatibilities between different versions and different |
-// implementations of readline. This smooths out one known incompatibility. |
-#if RL_READLINE_VERSION >= 0x0500 |
-#define completion_matches rl_completion_matches |
-#endif |
- |
- |
-namespace v8 { |
- |
- |
-class ReadLineEditor: public LineEditor { |
- public: |
- ReadLineEditor() : LineEditor(LineEditor::READLINE, "readline") { } |
- virtual Local<String> Prompt(const char* prompt); |
- virtual bool Open(Isolate* isolate); |
- virtual bool Close(); |
- virtual void AddHistory(const char* str); |
- |
- static const char* kHistoryFileName; |
- static const int kMaxHistoryEntries; |
- |
- private: |
-#ifndef V8_SHARED |
- static char** AttemptedCompletion(const char* text, int start, int end); |
- static char* CompletionGenerator(const char* text, int state); |
-#endif // V8_SHARED |
- static char kWordBreakCharacters[]; |
- |
- Isolate* isolate_; |
-}; |
- |
- |
-static ReadLineEditor read_line_editor; |
-char ReadLineEditor::kWordBreakCharacters[] = {' ', '\t', '\n', '"', |
- '\\', '\'', '`', '@', '.', '>', '<', '=', ';', '|', '&', '{', '(', |
- '\0'}; |
- |
- |
-const char* ReadLineEditor::kHistoryFileName = ".d8_history"; |
-const int ReadLineEditor::kMaxHistoryEntries = 1000; |
- |
- |
-bool ReadLineEditor::Open(Isolate* isolate) { |
- isolate_ = isolate; |
- |
- rl_initialize(); |
- |
-#ifdef V8_SHARED |
- // Don't do completion on shared library mode |
- // http://cnswww.cns.cwru.edu/php/chet/readline/readline.html#SEC24 |
- rl_bind_key('\t', rl_insert); |
-#else |
- rl_attempted_completion_function = AttemptedCompletion; |
-#endif // V8_SHARED |
- |
- rl_completer_word_break_characters = kWordBreakCharacters; |
- rl_bind_key('\t', rl_complete); |
- using_history(); |
- stifle_history(kMaxHistoryEntries); |
- return read_history(kHistoryFileName) == 0; |
-} |
- |
- |
-bool ReadLineEditor::Close() { |
- return write_history(kHistoryFileName) == 0; |
-} |
- |
- |
-Local<String> ReadLineEditor::Prompt(const char* prompt) { |
- char* result = NULL; |
- result = readline(prompt); |
- if (result == NULL) return Local<String>(); |
- AddHistory(result); |
- return String::NewFromUtf8(isolate_, result, NewStringType::kNormal) |
- .ToLocalChecked(); |
-} |
- |
- |
-void ReadLineEditor::AddHistory(const char* str) { |
- // Do not record empty input. |
- if (strlen(str) == 0) return; |
- // Remove duplicate history entry. |
- history_set_pos(history_length-1); |
- if (current_history()) { |
- do { |
- if (strcmp(current_history()->line, str) == 0) { |
- remove_history(where_history()); |
- break; |
- } |
- } while (previous_history()); |
- } |
- add_history(str); |
-} |
- |
- |
-#ifndef V8_SHARED |
-char** ReadLineEditor::AttemptedCompletion(const char* text, |
- int start, |
- int end) { |
- char** result = completion_matches(text, CompletionGenerator); |
- rl_attempted_completion_over = true; |
- return result; |
-} |
- |
- |
-char* ReadLineEditor::CompletionGenerator(const char* text, int state) { |
- static unsigned current_index; |
- static Global<Array> current_completions; |
- Isolate* isolate = read_line_editor.isolate_; |
- HandleScope scope(isolate); |
- Local<Array> completions; |
- if (state == 0) { |
- Local<String> full_text = |
- String::NewFromUtf8(isolate, rl_line_buffer, NewStringType::kNormal, |
- rl_point) |
- .ToLocalChecked(); |
- completions = Shell::GetCompletions( |
- isolate, String::NewFromUtf8(isolate, text, NewStringType::kNormal) |
- .ToLocalChecked(), |
- full_text); |
- current_completions.Reset(isolate, completions); |
- current_index = 0; |
- } else { |
- completions = Local<Array>::New(isolate, current_completions); |
- } |
- if (current_index < completions->Length()) { |
- Local<Context> context(isolate->GetCurrentContext()); |
- Local<Integer> index = Integer::New(isolate, current_index); |
- Local<Value> str_obj = completions->Get(context, index).ToLocalChecked(); |
- current_index++; |
- String::Utf8Value str(str_obj); |
- return strdup(*str); |
- } else { |
- current_completions.Reset(); |
- return NULL; |
- } |
-} |
-#endif // V8_SHARED |
- |
- |
-} // namespace v8 |