Index: vm/object.cc |
=================================================================== |
--- vm/object.cc (revision 1465) |
+++ vm/object.cc (working copy) |
@@ -422,6 +422,8 @@ |
ASSERT(!core_lib.IsNull()); |
Library& core_impl_lib = Library::Handle(Library::CoreImplLibrary()); |
ASSERT(!core_impl_lib.IsNull()); |
+ Library::InitNativeFieldsLibrary(isolate); |
+ ASSERT(isolate->object_store()->native_fields_library() != Library::null()); |
// Allocate pre-initialized values. |
Bool& bool_value = Bool::Handle(); |
@@ -4090,6 +4092,30 @@ |
} |
+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")); |
Anton Muhin
2011/11/13 16:19:32
somehow reuse kCoreNativeFieldsLibURL?
siva
2011/11/15 02:16:52
Agree, would be nice, we need to expose thse throu
|
+ 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); |
+ const String& name = String::Handle(String::New("NativeFieldWrapperClass")); |
+ String& index_str = String::Handle(); |
+ String& cls_name = String::Handle(); |
+ static const int kBufferSize = 2; |
+ char chars[kBufferSize]; |
+ for (int fld_cnt = 1; fld_cnt <= kNumNativeFieldClasses; fld_cnt++) { |
+ OS::SNPrint(chars, kBufferSize, "%d", fld_cnt); |
Anton Muhin
2011/11/13 16:19:32
up to you, but for me something like below would b
siva
2011/11/15 02:16:52
Done.
|
+ index_str = String::New(chars); |
+ cls_name = String::Concat(name, index_str); |
+ cls_name = String::NewSymbol(cls_name); |
+ Class::NewNativeWrapper(&native_flds_lib, cls_name, fld_cnt); |
+ } |
+} |
+ |
+ |
RawLibrary* Library::LookupLibrary(const String &url) { |
Library& lib = Library::Handle(); |
String& lib_url = String::Handle(); |
@@ -4160,6 +4186,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()); |