Index: vm/object.cc |
=================================================================== |
--- vm/object.cc (revision 1545) |
+++ vm/object.cc (working copy) |
@@ -566,6 +566,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::InitNativeFieldsLibrary(isolate); |
+ ASSERT(isolate->object_store()->native_fields_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); |
@@ -4102,6 +4107,27 @@ |
} |
+void Library::InitNativeFieldsLibrary(Isolate* isolate) { |
+ static const int kNumNativeFieldClasses = 4; |
+ ASSERT(kNumNativeFieldClasses > 0 && kNumNativeFieldClasses < 10); |
+ const String& native_flds_lib_url = String::Handle( |
+ String::NewSymbol("dart:core-native-fields")); |
+ Library& native_flds_lib = Library::Handle( |
+ Library::NewLibraryHelper(native_flds_lib_url, false)); |
+ native_flds_lib.Register(); |
+ isolate->object_store()->set_native_fields_library(native_flds_lib); |
+ static const char* const kNativeFieldClass = "NativeFieldWrapperClass"; |
+ static const int kNameLength = strlen(kNativeFieldClass) + 1 + 1; |
+ char name_buffer[kNameLength]; |
+ String& cls_name = String::Handle(); |
+ for (int fld_cnt = 1; fld_cnt <= kNumNativeFieldClasses; fld_cnt++) { |
+ OS::SNPrint(name_buffer, kNameLength, "%s%d", kNativeFieldClass, 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(); |
@@ -4172,6 +4198,11 @@ |
} |
+RawLibrary* Library::NativeFieldsLibrary() { |
+ return Isolate::Current()->object_store()->native_fields_library(); |
+} |
+ |
+ |
const char* Library::ToCString() const { |
const char* kFormat = "Library:'%s'"; |
const String& name = String::Handle(url()); |