| // 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 "tonic/dart_builtin.h" |
| |
| #include <stdlib.h> |
| #include <string.h> |
| |
| #include "base/logging.h" |
| #include "tonic/dart_converter.h" |
| |
| namespace tonic { |
| |
| 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 tonic |