Index: src/d8-readline.cc |
diff --git a/src/d8-readline.cc b/src/d8-readline.cc |
index 71be933109be193c6a80ef5f5a613fcd325dd830..679c5366f21854028ac35034fd9fdfd3f7441fb7 100644 |
--- a/src/d8-readline.cc |
+++ b/src/d8-readline.cc |
@@ -1,4 +1,4 @@ |
-// Copyright 2011 the V8 project authors. All rights reserved. |
+// Copyright 2012 the V8 project authors. All rights reserved. |
// Redistribution and use in source and binary forms, with or without |
// modification, are permitted provided that the following conditions are |
// met: |
@@ -49,10 +49,14 @@ namespace v8 { |
class ReadLineEditor: public LineEditor { |
public: |
ReadLineEditor() : LineEditor(LineEditor::READLINE, "readline") { } |
- virtual i::SmartArrayPointer<char> Prompt(const char* prompt); |
+ virtual Handle<String> Prompt(const char* prompt); |
virtual bool Open(); |
virtual bool Close(); |
virtual void AddHistory(const char* str); |
+ |
+ static const char* kHistoryFileName; |
+ static const int kMaxHistoryEntries; |
+ |
private: |
static char** AttemptedCompletion(const char* text, int start, int end); |
static char* CompletionGenerator(const char* text, int state); |
@@ -66,25 +70,34 @@ char ReadLineEditor::kWordBreakCharacters[] = {' ', '\t', '\n', '"', |
'\0'}; |
+const char* ReadLineEditor::kHistoryFileName = ".d8_history"; |
+const int ReadLineEditor::kMaxHistoryEntries = 1000; |
+ |
+ |
bool ReadLineEditor::Open() { |
rl_initialize(); |
rl_attempted_completion_function = AttemptedCompletion; |
rl_completer_word_break_characters = kWordBreakCharacters; |
rl_bind_key('\t', rl_complete); |
using_history(); |
- stifle_history(Shell::kMaxHistoryEntries); |
- return read_history(Shell::kHistoryFileName) == 0; |
+ stifle_history(kMaxHistoryEntries); |
+ return read_history(kHistoryFileName) == 0; |
} |
bool ReadLineEditor::Close() { |
- return write_history(Shell::kHistoryFileName) == 0; |
+ return write_history(kHistoryFileName) == 0; |
} |
-i::SmartArrayPointer<char> ReadLineEditor::Prompt(const char* prompt) { |
+Handle<String> ReadLineEditor::Prompt(const char* prompt) { |
char* result = readline(prompt); |
- return i::SmartArrayPointer<char>(result); |
+ if (result != NULL) { |
+ AddHistory(result); |
+ } else { |
+ return Handle<String>(); |
+ } |
+ return String::New(result); |
} |
@@ -118,10 +131,10 @@ char* ReadLineEditor::CompletionGenerator(const char* text, int state) { |
static unsigned current_index; |
static Persistent<Array> current_completions; |
if (state == 0) { |
- i::SmartArrayPointer<char> full_text(i::StrNDup(rl_line_buffer, rl_point)); |
HandleScope scope; |
+ Local<String> full_text = String::New(rl_line_buffer, rl_point); |
Handle<Array> completions = |
- Shell::GetCompletions(String::New(text), String::New(*full_text)); |
+ Shell::GetCompletions(String::New(text), full_text); |
current_completions = Persistent<Array>::New(completions); |
current_index = 0; |
} |