예제 #1
0
DictionaryIterator Dictionary::getIterator(
    ExecutionContext* executionContext) const {
  v8::Local<v8::Value> iteratorGetter;
  if (!getInternal(v8::Symbol::GetIterator(m_isolate), iteratorGetter) ||
      !iteratorGetter->IsFunction())
    return nullptr;
  v8::Local<v8::Value> iterator;
  if (!v8Call(V8ScriptRunner::callFunction(
                  v8::Local<v8::Function>::Cast(iteratorGetter),
                  executionContext, m_dictionaryObject, 0, nullptr, m_isolate),
              iterator))
    return nullptr;
  if (!iterator->IsObject())
    return nullptr;
  return DictionaryIterator(v8::Local<v8::Object>::Cast(iterator), m_isolate);
}
예제 #2
0
DictionaryIterator Dictionary::getIterator(
    ExecutionContext* executionContext) const {
  v8::Local<v8::Value> iteratorGetter;
  // TODO(alancutter): Support callable objects as well as functions.
  if (!getInternal(v8::Symbol::GetIterator(m_isolate), iteratorGetter) ||
      !iteratorGetter->IsFunction())
    return nullptr;
  v8::Local<v8::Value> iterator;
  if (!v8Call(V8ScriptRunner::callFunction(
                  v8::Local<v8::Function>::Cast(iteratorGetter),
                  executionContext, m_options, 0, nullptr, m_isolate),
              iterator))
    return nullptr;
  if (!iterator->IsObject())
    return nullptr;
  return DictionaryIterator(v8::Local<v8::Object>::Cast(iterator), m_isolate);
}