Index: vm/object.cc |
=================================================================== |
--- vm/object.cc (revision 1624) |
+++ vm/object.cc (working copy) |
@@ -573,6 +573,11 @@ |
bool_value = Bool::New(false); |
object_store->set_false_value(bool_value); |
+ // Setup some default native field classes which can be extended for |
+ // specifying native fields in dart classes. |
+ Library::InitNativeWrappersLibrary(isolate); |
+ ASSERT(isolate->object_store()->native_wrappers_library() != Library::null()); |
+ |
// Finish the initialization by compiling the bootstrap scripts containing the |
// base interfaces and the implementation of the internal classes. |
Bootstrap::Compile(core_lib, script); |
@@ -4143,6 +4148,32 @@ |
} |
+void Library::InitNativeWrappersLibrary(Isolate* isolate) { |
+ static const int kNumNativeWrappersClasses = 4; |
+ ASSERT(kNumNativeWrappersClasses > 0 && kNumNativeWrappersClasses < 10); |
+ const String& native_flds_lib_url = String::Handle( |
+ String::NewSymbol("dart:nativewrappers")); |
+ Library& native_flds_lib = Library::Handle( |
+ Library::NewLibraryHelper(native_flds_lib_url, false)); |
+ native_flds_lib.Register(); |
+ isolate->object_store()->set_native_wrappers_library(native_flds_lib); |
+ static const char* const kNativeWrappersClass = "NativeFieldWrapperClass"; |
+ static const int kNameLength = 25; |
+ ASSERT(kNameLength == (strlen(kNativeWrappersClass) + 1 + 1)); |
+ char name_buffer[kNameLength]; |
+ String& cls_name = String::Handle(); |
+ for (int fld_cnt = 1; fld_cnt <= kNumNativeWrappersClasses; fld_cnt++) { |
+ OS::SNPrint(name_buffer, |
+ kNameLength, |
+ "%s%d", |
+ kNativeWrappersClass, |
+ fld_cnt); |
+ cls_name = String::NewSymbol(name_buffer); |
+ Class::NewNativeWrapper(&native_flds_lib, cls_name, fld_cnt); |
+ } |
+} |
+ |
+ |
RawLibrary* Library::LookupLibrary(const String &url) { |
Library& lib = Library::Handle(); |
String& lib_url = String::Handle(); |
@@ -4213,6 +4244,11 @@ |
} |
+RawLibrary* Library::NativeWrappersLibrary() { |
+ return Isolate::Current()->object_store()->native_wrappers_library(); |
+} |
+ |
+ |
const char* Library::ToCString() const { |
const char* kFormat = "Library:'%s'"; |
const String& name = String::Handle(url()); |