Index: src/d8-readline.cc |
diff --git a/src/d8-readline.cc b/src/d8-readline.cc |
index 5226364c649d80db3c5d2b8120f472af5932fbf7..298518d72ab4ab31ebab2ee90ba208d23ea8b231 100644 |
--- a/src/d8-readline.cc |
+++ b/src/d8-readline.cc |
@@ -150,18 +150,19 @@ char* ReadLineEditor::CompletionGenerator(const char* text, int state) { |
static Persistent<Array> current_completions; |
Isolate* isolate = read_line_editor.isolate_; |
Locker lock(isolate); |
+ HandleScope scope; |
+ Handle<Array> completions; |
if (state == 0) { |
- HandleScope scope; |
Local<String> full_text = String::New(rl_line_buffer, rl_point); |
- Handle<Array> completions = |
- Shell::GetCompletions(isolate, String::New(text), full_text); |
- current_completions = Persistent<Array>::New(isolate, completions); |
+ completions = Shell::GetCompletions(isolate, String::New(text), full_text); |
+ current_completions.Reset(isolate, completions); |
current_index = 0; |
+ } else { |
+ completions = Local<Array>::New(isolate, current_completions); |
} |
- if (current_index < current_completions->Length()) { |
- HandleScope scope; |
+ if (current_index < completions->Length()) { |
Handle<Integer> index = Integer::New(current_index); |
- Handle<Value> str_obj = current_completions->Get(index); |
+ Handle<Value> str_obj = completions->Get(index); |
current_index++; |
String::Utf8Value str(str_obj); |
return strdup(*str); |