Chromium Code Reviews| Index: vm/bootstrap_natives.cc |
| =================================================================== |
| --- vm/bootstrap_natives.cc (revision 0) |
| +++ vm/bootstrap_natives.cc (revision 0) |
| @@ -0,0 +1,64 @@ |
| +// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
| +// for details. All rights reserved. Use of this source code is governed by a |
| +// BSD-style license that can be found in the LICENSE file. |
| + |
| +#include "vm/bootstrap.h" |
| + |
| +#include "include/dart_api.h" |
| + |
| +#include "vm/bootstrap_natives.h" |
| +#include "vm/dart_api_impl.h" |
| +#include "vm/object.h" |
| +#include "vm/object_store.h" |
| + |
| +namespace dart { |
| + |
| +// List all native functions implemented in the vm or core bootstrap dart |
| +// libraries so that we can resolve the native function to it's entry |
| +// point. |
| +static struct NativeEntries { |
| + const char* name_; |
| + Dart_NativeFunction function_; |
| + int argument_count_; |
| +} BootStrapEntries[] = { |
| + BOOTSTRAP_NATIVE_LIST(REGISTER_NATIVE_ENTRY) |
| +}; |
| + |
| + |
| +static Dart_NativeFunction native_lookup(Dart_Handle name, |
| + int argument_count) { |
|
turnidge
2011/11/23 18:05:12
For parallelism with the Builtin class, you could
siva
2011/11/23 22:37:27
I renamed the function to NativeLookup but did not
|
| + const Object& obj = Object::Handle(Api::UnwrapHandle(name)); |
| + if (!obj.IsString()) { |
| + return NULL; |
| + } |
| + const char* function_name = obj.ToCString(); |
| + ASSERT(function_name != NULL); |
| + int num_entries = sizeof(BootStrapEntries) / sizeof(struct NativeEntries); |
| + for (int i = 0; i < num_entries; i++) { |
| + struct NativeEntries* entry = &(BootStrapEntries[i]); |
| + if (!strncmp(function_name, entry->name_, strlen(entry->name_))) { |
| + if (entry->argument_count_ == argument_count) { |
| + return reinterpret_cast<Dart_NativeFunction>(entry->function_); |
| + } else { |
| + // Wrong number of arguments. |
| + // TODO(regis): Should we pass a buffer for error reporting? |
| + return NULL; |
| + } |
| + } |
| + } |
| + return NULL; |
| +} |
| + |
| + |
| +void Bootstrap::SetupNativeResolver() { |
| + Library& library = Library::Handle(Library::CoreLibrary()); |
| + ASSERT(!library.IsNull()); |
|
turnidge
2011/11/23 18:05:12
Change these ASSERTs to DART_CHECK_VALID to get a
siva
2011/11/23 22:37:27
I am unable to change these to DART_CHECK_VALID as
|
| + library.set_native_entry_resolver( |
| + reinterpret_cast<Dart_NativeEntryResolver>(native_lookup)); |
| + library = Library::CoreImplLibrary(); |
| + ASSERT(!library.IsNull()); |
| + library.set_native_entry_resolver( |
| + reinterpret_cast<Dart_NativeEntryResolver>(native_lookup)); |
| +} |
| + |
| +} // namespace dart |