diff options
Diffstat (limited to 'deps/v8/src/d8-readline.cc')
-rw-r--r-- | deps/v8/src/d8-readline.cc | 152 |
1 files changed, 0 insertions, 152 deletions
diff --git a/deps/v8/src/d8-readline.cc b/deps/v8/src/d8-readline.cc deleted file mode 100644 index 39c93d35de..0000000000 --- a/deps/v8/src/d8-readline.cc +++ /dev/null @@ -1,152 +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 Handle<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; -} - - -Handle<String> ReadLineEditor::Prompt(const char* prompt) { - char* result = NULL; - result = readline(prompt); - if (result == NULL) return Handle<String>(); - AddHistory(result); - return String::NewFromUtf8(isolate_, result); -} - - -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 Persistent<Array> current_completions; - Isolate* isolate = read_line_editor.isolate_; - HandleScope scope(isolate); - Handle<Array> completions; - if (state == 0) { - Local<String> full_text = String::NewFromUtf8(isolate, - rl_line_buffer, - String::kNormalString, - rl_point); - completions = Shell::GetCompletions(isolate, - String::NewFromUtf8(isolate, text), - full_text); - current_completions.Reset(isolate, completions); - current_index = 0; - } else { - completions = Local<Array>::New(isolate, current_completions); - } - if (current_index < completions->Length()) { - Handle<Integer> index = Integer::New(isolate, current_index); - Handle<Value> str_obj = completions->Get(index); - current_index++; - String::Utf8Value str(str_obj); - return strdup(*str); - } else { - current_completions.Reset(); - return NULL; - } -} -#endif // V8_SHARED - - -} // namespace v8 |