blob: 3a8fa3caee4842e3d3b82be40b78acc1093b225b [file] [log] [blame]
// Copyright 2015 The Chromium 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 "sky/engine/tonic/dart_builtin.h"
#include <stdlib.h>
#include <string.h>
#include "base/logging.h"
#include "sky/engine/tonic/dart_converter.h"
namespace blink {
DartBuiltin::DartBuiltin(const Natives* natives, size_t count)
: natives_(natives), count_(count) {
}
DartBuiltin::~DartBuiltin() {
}
Dart_NativeFunction DartBuiltin::Resolver(Dart_Handle name,
int argument_count,
bool* auto_setup_scope) const {
const char* function_name = nullptr;
Dart_Handle result = Dart_StringToCString(name, &function_name);
DART_CHECK_VALID(result);
DCHECK(function_name != nullptr);
DCHECK(auto_setup_scope != nullptr);
*auto_setup_scope = true;
for (size_t i = 0; i < count_; ++i) {
const Natives& entry = natives_[i];
if (!strcmp(function_name, entry.name) &&
(entry.argument_count == argument_count)) {
return entry.function;
}
}
return nullptr;
}
const uint8_t* DartBuiltin::Symbolizer(Dart_NativeFunction native_function) const {
for (size_t i = 0; i < count_; ++i) {
const Natives& entry = natives_[i];
if (entry.function == native_function)
return reinterpret_cast<const uint8_t*>(entry.name);
}
return nullptr;
}
Dart_Handle DartBuiltin::LookupLibrary(const char* name) {
Dart_Handle library = Dart_LookupLibrary(ToDart(name));
DCHECK(!Dart_IsError(library));
return library;
}
} // namespace blink