Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1)

Side by Side Diff: runtime/vm/object.cc

Issue 10830045: - Add the ability to protect VirtualMemory. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « runtime/vm/heap.cc ('k') | runtime/vm/pages.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "vm/object.h" 5 #include "vm/object.h"
6 6
7 #include "include/dart_api.h" 7 #include "include/dart_api.h"
8 #include "platform/assert.h" 8 #include "platform/assert.h"
9 #include "vm/assembler.h" 9 #include "vm/assembler.h"
10 #include "vm/bigint_operations.h" 10 #include "vm/bigint_operations.h"
(...skipping 410 matching lines...) Expand 10 before | Expand all | Expand 10 after
421 421
422 ASSERT(class_class() != null_); 422 ASSERT(class_class() != null_);
423 423
424 // Pre-allocate the Array and OneByteString class in the vm isolate so that 424 // Pre-allocate the Array and OneByteString class in the vm isolate so that
425 // we can create a symbol table and populate it with some frequently used 425 // we can create a symbol table and populate it with some frequently used
426 // strings as symbols. 426 // strings as symbols.
427 cls = Class::New<Array>(); 427 cls = Class::New<Array>();
428 isolate->object_store()->set_array_class(cls); 428 isolate->object_store()->set_array_class(cls);
429 cls = Class::New<OneByteString>(); 429 cls = Class::New<OneByteString>();
430 isolate->object_store()->set_one_byte_string_class(cls); 430 isolate->object_store()->set_one_byte_string_class(cls);
431
432 // TODO(asiva): Assign the names of shared classes instead of relying on the
433 // lookup switch in Object::GetSingletonClassName.
431 } 434 }
432 435
433 436
434 RawClass* Object::CreateAndRegisterInterface(const char* cname, 437 RawClass* Object::CreateAndRegisterInterface(const char* cname,
435 const Script& script, 438 const Script& script,
436 const Library& lib) { 439 const Library& lib) {
437 const String& name = String::Handle(Symbols::New(cname)); 440 const String& name = String::Handle(Symbols::New(cname));
438 const Class& cls = Class::Handle( 441 const Class& cls = Class::Handle(
439 Class::NewInterface(name, script, Scanner::kDummyTokenIndex)); 442 Class::NewInterface(name, script, Scanner::kDummyTokenIndex));
440 lib.AddClass(cls); 443 lib.AddClass(cls);
(...skipping 317 matching lines...) Expand 10 before | Expand all | Expand 10 after
758 761
759 cls = CreateAndRegisterInterface("ByteArray", script, core_lib); 762 cls = CreateAndRegisterInterface("ByteArray", script, core_lib);
760 pending_classes.Add(cls, Heap::kOld); 763 pending_classes.Add(cls, Heap::kOld);
761 type = Type::NewNonParameterizedType(cls); 764 type = Type::NewNonParameterizedType(cls);
762 object_store->set_byte_array_interface(type); 765 object_store->set_byte_array_interface(type);
763 766
764 // The classes 'Null' and 'void' are not registered in the class dictionary, 767 // The classes 'Null' and 'void' are not registered in the class dictionary,
765 // because their names are reserved keywords. Their names are not heap 768 // because their names are reserved keywords. Their names are not heap
766 // allocated, because the classes reside in the VM isolate. 769 // allocated, because the classes reside in the VM isolate.
767 // The corresponding types are stored in the object store. 770 // The corresponding types are stored in the object store.
768 cls = null_class_; 771 cls = null_class();
769 type = Type::NewNonParameterizedType(cls); 772 type = Type::NewNonParameterizedType(cls);
770 object_store->set_null_type(type); 773 object_store->set_null_type(type);
771 774
772 cls = void_class_; 775 cls = void_class();
773 type = Type::NewNonParameterizedType(cls); 776 type = Type::NewNonParameterizedType(cls);
774 object_store->set_void_type(type); 777 object_store->set_void_type(type);
775 778
776 // The class 'Dynamic' is registered in the class dictionary because its name 779 // The class 'Dynamic' is registered in the class dictionary because its name
777 // is a built-in identifier, rather than a reserved keyword. Its name is not 780 // is a built-in identifier, rather than a reserved keyword. Its name is not
778 // heap allocated, because the class resides in the VM isolate. 781 // heap allocated, because the class resides in the VM isolate.
779 // The corresponding type, the "unknown type", is stored in the object store. 782 // The corresponding type, the "unknown type", is stored in the object store.
780 cls = dynamic_class_; 783 cls = dynamic_class();
781 type = Type::NewNonParameterizedType(cls); 784 type = Type::NewNonParameterizedType(cls);
782 object_store->set_dynamic_type(type); 785 object_store->set_dynamic_type(type);
783 core_lib.AddClass(cls);
784 786
785 // Allocate pre-initialized values. 787 // Allocate pre-initialized values.
786 Bool& bool_value = Bool::Handle(); 788 Bool& bool_value = Bool::Handle();
787 bool_value = Bool::New(true); 789 bool_value = Bool::New(true);
788 object_store->set_true_value(bool_value); 790 object_store->set_true_value(bool_value);
789 bool_value = Bool::New(false); 791 bool_value = Bool::New(false);
790 object_store->set_false_value(bool_value); 792 object_store->set_false_value(bool_value);
791 793
792 // Setup some default native field classes which can be extended for 794 // Setup some default native field classes which can be extended for
793 // specifying native fields in dart classes. 795 // specifying native fields in dart classes.
(...skipping 5250 matching lines...) Expand 10 before | Expand all | Expand 10 after
6044 isolate->object_store()->set_core_library(core_lib); 6046 isolate->object_store()->set_core_library(core_lib);
6045 const String& core_impl_lib_url = 6047 const String& core_impl_lib_url =
6046 String::Handle(Symbols::New("dart:coreimpl")); 6048 String::Handle(Symbols::New("dart:coreimpl"));
6047 const Library& core_impl_lib = 6049 const Library& core_impl_lib =
6048 Library::Handle(Library::NewLibraryHelper(core_impl_lib_url, false)); 6050 Library::Handle(Library::NewLibraryHelper(core_impl_lib_url, false));
6049 isolate->object_store()->set_core_impl_library(core_impl_lib); 6051 isolate->object_store()->set_core_impl_library(core_impl_lib);
6050 core_impl_lib.Register(); 6052 core_impl_lib.Register();
6051 core_lib.AddImport(core_impl_lib); 6053 core_lib.AddImport(core_impl_lib);
6052 core_impl_lib.AddImport(core_lib); 6054 core_impl_lib.AddImport(core_lib);
6053 isolate->object_store()->set_root_library(Library::Handle()); 6055 isolate->object_store()->set_root_library(Library::Handle());
6056
6057 // Hook up predefined classes without setting their library pointers. These
6058 // classes are coming from the VM isolate, and are shared between multiple
6059 // isolates so setting their library pointers would be wrong.
6060 const Class& cls = Class::Handle(Object::dynamic_class());
6061 core_lib.AddObject(cls, String::Handle(cls.Name()));
6054 } 6062 }
6055 6063
6056 6064
6057 void Library::InitMathLibrary(Isolate* isolate) { 6065 void Library::InitMathLibrary(Isolate* isolate) {
6058 const String& url = String::Handle(Symbols::New("dart:math")); 6066 const String& url = String::Handle(Symbols::New("dart:math"));
6059 const Library& lib = Library::Handle(Library::New(url)); 6067 const Library& lib = Library::Handle(Library::New(url));
6060 lib.Register(); 6068 lib.Register();
6061 const Library& core_impl_lib = Library::Handle(Library::CoreImplLibrary()); 6069 const Library& core_impl_lib = Library::Handle(Library::CoreImplLibrary());
6062 lib.AddImport(core_impl_lib); 6070 lib.AddImport(core_impl_lib);
6063 isolate->object_store()->set_math_library(lib); 6071 isolate->object_store()->set_math_library(lib);
(...skipping 4782 matching lines...) Expand 10 before | Expand all | Expand 10 after
10846 const String& str = String::Handle(pattern()); 10854 const String& str = String::Handle(pattern());
10847 const char* format = "JSRegExp: pattern=%s flags=%s"; 10855 const char* format = "JSRegExp: pattern=%s flags=%s";
10848 intptr_t len = OS::SNPrint(NULL, 0, format, str.ToCString(), Flags()); 10856 intptr_t len = OS::SNPrint(NULL, 0, format, str.ToCString(), Flags());
10849 char* chars = reinterpret_cast<char*>( 10857 char* chars = reinterpret_cast<char*>(
10850 Isolate::Current()->current_zone()->Allocate(len + 1)); 10858 Isolate::Current()->current_zone()->Allocate(len + 1));
10851 OS::SNPrint(chars, (len + 1), format, str.ToCString(), Flags()); 10859 OS::SNPrint(chars, (len + 1), format, str.ToCString(), Flags());
10852 return chars; 10860 return chars;
10853 } 10861 }
10854 10862
10855 } // namespace dart 10863 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/heap.cc ('k') | runtime/vm/pages.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698