Reviewers: Jakob,
Message:
PTAL.
When quitting d8 in an ordered manner (not ^C), a log is saved
into .d8_history,
from which it's loaded in a later d8 session.
Description:
Fixed broken readline console history.
Please review this at http://codereview.chromium.org/7888035/
SVN Base: https://v8.googlecode.com/svn/branches/bleeding_edge
Affected files:
M src/d8.h
M src/d8.cc
Index: src/d8.cc
diff --git a/src/d8.cc b/src/d8.cc
index
a02529999aaa95864923ae9f5bedb186ac39319b..87fa50f59f120e2422a763eb158559f765bf478e
100644
--- a/src/d8.cc
+++ b/src/d8.cc
@@ -117,6 +117,7 @@ CounterCollection Shell::local_counters_;
CounterCollection* Shell::counters_ = &local_counters_;
i::Mutex* Shell::context_mutex_(i::OS::CreateMutex());
Persistent<Context> Shell::utility_context_;
+LineEditor* Shell::console = NULL;
#endif // V8_SHARED
Persistent<Context> Shell::evaluation_context_;
@@ -791,6 +792,7 @@ void Shell::Exit(int exit_code) {
#ifndef V8_SHARED
void Shell::OnExit() {
+ console->Close();
if (i::FLAG_dump_counters) {
printf("+----------------------------------------+-------------+\n");
printf("| Name | Value |\n");
@@ -895,20 +897,20 @@ void Shell::RunShell() {
HandleScope outer_scope;
Handle<String> name = String::New("(d8)");
#ifndef V8_SHARED
- LineEditor* editor = LineEditor::Get();
- printf("V8 version %s [console: %s]\n", V8::GetVersion(),
editor->name());
+ console = LineEditor::Get();
+ printf("V8 version %s [console: %s]\n", V8::GetVersion(),
console->name());
if (i::FLAG_debugger) {
printf("JavaScript debugger enabled\n");
}
- editor->Open();
+ console->Open();
while (true) {
- i::SmartArrayPointer<char> input = editor->Prompt(Shell::kPrompt);
+ i::SmartArrayPointer<char> input = console->Prompt(Shell::kPrompt);
if (input.is_empty()) break;
- editor->AddHistory(*input);
+ console->AddHistory(*input);
HandleScope inner_scope;
ExecuteString(String::New(*input), name, true, true);
}
- editor->Close();
+ console->Close();
#else
printf("V8 version %s [D8 light using shared library]\n",
V8::GetVersion());
static const int kBufferSize = 256;
Index: src/d8.h
diff --git a/src/d8.h b/src/d8.h
index
c062808fa8857dbec60b8d639f56e3fb37d54161..39a77b583f36bb2e24a436fc1c259ed751756f5d
100644
--- a/src/d8.h
+++ b/src/d8.h
@@ -116,6 +116,29 @@ class CounterMap {
#endif // V8_SHARED
+#ifndef V8_SHARED
+class LineEditor {
+ public:
+ enum Type { DUMB = 0, READLINE = 1 };
+ LineEditor(Type type, const char* name);
+ virtual ~LineEditor() { }
+
+ virtual i::SmartArrayPointer<char> Prompt(const char* prompt) = 0;
+ virtual bool Open() { return true; }
+ virtual bool Close() { return true; }
+ virtual void AddHistory(const char* str) { }
+
+ const char* name() { return name_; }
+ static LineEditor* Get();
+ private:
+ Type type_;
+ const char* name_;
+ LineEditor* next_;
+ static LineEditor* first_;
+};
+#endif // V8_SHARED
+
+
class SourceGroup {
public:
SourceGroup() :
@@ -313,6 +336,7 @@ class Shell : public i::AllStatic {
static void AddOSMethods(Handle<ObjectTemplate> os_template);
#ifndef V8_SHARED
static const char* kHistoryFileName;
+ static LineEditor* console;
#endif // V8_SHARED
static const char* kPrompt;
static ShellOptions options;
@@ -343,29 +367,6 @@ class Shell : public i::AllStatic {
};
-#ifndef V8_SHARED
-class LineEditor {
- public:
- enum Type { DUMB = 0, READLINE = 1 };
- LineEditor(Type type, const char* name);
- virtual ~LineEditor() { }
-
- virtual i::SmartArrayPointer<char> Prompt(const char* prompt) = 0;
- virtual bool Open() { return true; }
- virtual bool Close() { return true; }
- virtual void AddHistory(const char* str) { }
-
- const char* name() { return name_; }
- static LineEditor* Get();
- private:
- Type type_;
- const char* name_;
- LineEditor* next_;
- static LineEditor* first_;
-};
-#endif // V8_SHARED
-
-
} // namespace v8
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev