Index: tonic/dart_builtin.cc |
diff --git a/tonic/dart_builtin.cc b/tonic/dart_builtin.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..5c4803f08ca74ffd9bc23df5a01f995e98e0d165 |
--- /dev/null |
+++ b/tonic/dart_builtin.cc |
@@ -0,0 +1,56 @@ |
+// 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 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 |