Index: vm/object.cc |
=================================================================== |
--- vm/object.cc (revision 9829) |
+++ vm/object.cc (working copy) |
@@ -27,6 +27,7 @@ |
#include "vm/runtime_entry.h" |
#include "vm/scopes.h" |
#include "vm/stack_frame.h" |
+#include "vm/symbols.h" |
#include "vm/timer.h" |
#include "vm/unicode.h" |
@@ -254,7 +255,8 @@ |
Smi::handle_vtable_ = fake_smi.vtable(); |
} |
- Heap* heap = Isolate::Current()->heap(); |
+ Isolate* isolate = Isolate::Current(); |
+ Heap* heap = isolate->heap(); |
// Allocate and initialize the null instance, except its class_ field. |
// 'null_' must be the first object allocated as it is used in allocation to |
// clear the object. |
@@ -267,7 +269,7 @@ |
// Initialize object_store empty array to null_ in order to be able to check |
// if the empty array was allocated (RAW_NULL is not available). |
- Isolate::Current()->object_store()->set_empty_array(Array::Handle()); |
+ isolate->object_store()->set_empty_array(Array::Handle()); |
Class& cls = Class::Handle(); |
@@ -295,7 +297,7 @@ |
Class::kNoTypeArguments; |
cls.raw_ptr()->num_native_fields_ = 0; |
cls.InitEmptyFields(); |
- Isolate::Current()->class_table()->Register(cls); |
+ isolate->class_table()->Register(cls); |
} |
// Allocate and initialize the null class. |
@@ -309,14 +311,14 @@ |
// Allocate and initialize the sentinel values of Null class. |
{ |
- cls = null_class_; |
Instance& sentinel = Instance::Handle(); |
- sentinel ^= Object::Allocate(cls, Instance::InstanceSize(), Heap::kOld); |
+ sentinel ^= |
+ Object::Allocate(kNullClassId, Instance::InstanceSize(), Heap::kOld); |
sentinel_ = sentinel.raw(); |
Instance& transition_sentinel = Instance::Handle(); |
transition_sentinel ^= |
- Object::Allocate(cls, Instance::InstanceSize(), Heap::kOld); |
+ Object::Allocate(kNullClassId, Instance::InstanceSize(), Heap::kOld); |
transition_sentinel_ = transition_sentinel.raw(); |
} |
@@ -417,13 +419,21 @@ |
unwind_error_class_ = cls.raw(); |
ASSERT(class_class() != null_); |
+ |
+ // Pre-allocate the Array and OneByteString class in the vm isolate so that |
+ // we can create a symbol table and populate it with some frequently used |
+ // strings as symbols. |
+ cls = Class::New<Array>(); |
+ isolate->object_store()->set_array_class(cls); |
+ cls = Class::New<OneByteString>(); |
+ isolate->object_store()->set_one_byte_string_class(cls); |
} |
RawClass* Object::CreateAndRegisterInterface(const char* cname, |
const Script& script, |
const Library& lib) { |
- const String& name = String::Handle(String::NewSymbol(cname)); |
+ const String& name = String::Handle(Symbols::New(cname)); |
const Class& cls = Class::Handle( |
Class::NewInterface(name, script, Scanner::kDummyTokenIndex)); |
lib.AddClass(cls); |
@@ -435,7 +445,7 @@ |
const char* cname, |
const Script& script, |
const Library& lib) { |
- const String& name = String::Handle(String::NewSymbol(cname)); |
+ const String& name = String::Handle(Symbols::New(cname)); |
cls.set_name(name); |
cls.set_script(script); |
lib.AddClass(cls); |
@@ -447,7 +457,7 @@ |
const Script& script, |
const Library& lib) { |
String& str = String::Handle(); |
- str = String::NewSymbol(public_class_name); |
+ str = Symbols::New(public_class_name); |
str = lib.PrivateName(str); |
cls.set_name(str); |
cls.set_script(script); |
@@ -489,13 +499,6 @@ |
cls.set_type_arguments_instance_field_offset( |
GrowableObjectArray::type_arguments_offset()); |
- // Setup the symbol table used within the String class. |
- const int kInitialSymbolTableSize = 16; |
- array = Array::New(kInitialSymbolTableSize + 1); |
- // Last element contains the count of used slots. |
- array.SetAt(kInitialSymbolTableSize, Smi::Handle(Smi::New(0))); |
- object_store->set_symbol_table(array); |
- |
// canonical_type_arguments_ are NULL terminated. |
array = Array::New(4); |
object_store->set_canonical_type_arguments(array); |
@@ -504,6 +507,9 @@ |
cls = Class::New<OneByteString>(); |
object_store->set_one_byte_string_class(cls); |
+ // Setup the symbol table for the symbols created in the isolate. |
+ Symbols::SetupSymbolTable(isolate); |
+ |
// Set up the libraries array before initializing the core library. |
const GrowableObjectArray& libraries = |
GrowableObjectArray::Handle(GrowableObjectArray::New(Heap::kOld)); |
@@ -621,7 +627,7 @@ |
// non-interface classes in the core library. |
cls = Class::New<Instance>(); |
object_store->set_object_class(cls); |
- cls.set_name(String::Handle(String::NewSymbol("Object"))); |
+ cls.set_name(String::Handle(Symbols::New("Object"))); |
cls.set_script(script); |
cls.set_is_prefinalized(); |
core_lib.AddClass(cls); |
@@ -990,7 +996,7 @@ |
} |
-RawObject* Object::Allocate(const Class& cls, |
+RawObject* Object::Allocate(intptr_t cls_id, |
intptr_t size, |
Heap::Space space) { |
ASSERT(Utils::IsAligned(size, kObjectAlignment)); |
@@ -1007,9 +1013,9 @@ |
UNREACHABLE(); |
} |
NoGCScope no_gc; |
- InitializeObject(address, cls.id(), size); |
+ InitializeObject(address, cls_id, size); |
RawObject* raw_obj = reinterpret_cast<RawObject*>(address + kHeapObjectTag); |
- ASSERT(cls.id() == RawObject::ClassIdTag::decode(raw_obj->ptr()->tags_)); |
+ ASSERT(cls_id == RawObject::ClassIdTag::decode(raw_obj->ptr()->tags_)); |
return raw_obj; |
} |
@@ -1036,7 +1042,7 @@ |
RawObject* Object::Clone(const Object& src, Heap::Space space) { |
const Class& cls = Class::Handle(src.clazz()); |
intptr_t size = src.raw()->Size(); |
- RawObject* raw_obj = Object::Allocate(cls, size, space); |
+ RawObject* raw_obj = Object::Allocate(cls.id(), size, space); |
NoGCScope no_gc; |
memmove(raw_obj->ptr(), src.raw()->ptr(), size); |
if (space == Heap::kOld) { |
@@ -1053,7 +1059,7 @@ |
} |
ASSERT(class_class() != Class::null()); // class_class_ should be set up. |
intptr_t index = GetSingletonClassIndex(raw()); |
- return String::NewSymbol(GetSingletonClassName(index)); |
+ return Symbols::New(GetSingletonClassName(index)); |
} |
@@ -1066,52 +1072,52 @@ |
case kSmi: |
case kMint: |
case kBigint: |
- return String::NewSymbol("int"); |
+ return Symbols::New("int"); |
case kDouble: |
- return String::NewSymbol("double"); |
+ return Symbols::New("double"); |
case kOneByteString: |
case kTwoByteString: |
case kFourByteString: |
case kExternalOneByteString: |
case kExternalTwoByteString: |
case kExternalFourByteString: |
- return String::NewSymbol("String"); |
+ return Symbols::New("String"); |
case kBool: |
- return String::NewSymbol("bool"); |
+ return Symbols::New("bool"); |
case kArray: |
case kImmutableArray: |
case kGrowableObjectArray: |
- return String::NewSymbol("List"); |
+ return Symbols::New("List"); |
case kInt8Array: |
case kExternalInt8Array: |
- return String::NewSymbol("Int8List"); |
+ return Symbols::New("Int8List"); |
case kUint8Array: |
case kExternalUint8Array: |
- return String::NewSymbol("Uint8List"); |
+ return Symbols::New("Uint8List"); |
case kInt16Array: |
case kExternalInt16Array: |
- return String::NewSymbol("Int16List"); |
+ return Symbols::New("Int16List"); |
case kUint16Array: |
case kExternalUint16Array: |
- return String::NewSymbol("Uint16List"); |
+ return Symbols::New("Uint16List"); |
case kInt32Array: |
case kExternalInt32Array: |
- return String::NewSymbol("Int32List"); |
+ return Symbols::New("Int32List"); |
case kUint32Array: |
case kExternalUint32Array: |
- return String::NewSymbol("Uint32List"); |
+ return Symbols::New("Uint32List"); |
case kInt64Array: |
case kExternalInt64Array: |
- return String::NewSymbol("Int64List"); |
+ return Symbols::New("Int64List"); |
case kUint64Array: |
case kExternalUint64Array: |
- return String::NewSymbol("Uint64List"); |
+ return Symbols::New("Uint64List"); |
case kFloat32Array: |
case kExternalFloat32Array: |
- return String::NewSymbol("Float32List"); |
+ return Symbols::New("Float32List"); |
case kFloat64Array: |
case kExternalFloat64Array: |
- return String::NewSymbol("Float64List"); |
+ return Symbols::New("Float64List"); |
default: |
return Name(); |
} |
@@ -1161,10 +1167,10 @@ |
template <class FakeObject> |
RawClass* Class::New() { |
- Class& class_class = Class::Handle(Object::class_class()); |
+ ASSERT(Object::class_class() != Class::null()); |
Class& result = Class::Handle(); |
{ |
- RawObject* raw = Object::Allocate(class_class, |
+ RawObject* raw = Object::Allocate(Class::kInstanceKind, |
Class::InstanceSize(), |
Heap::kOld); |
NoGCScope no_gc; |
@@ -1496,10 +1502,10 @@ |
template <class FakeInstance> |
RawClass* Class::New(intptr_t index) { |
- Class& class_class = Class::Handle(Object::class_class()); |
+ ASSERT(Object::class_class() != Class::null()); |
Class& result = Class::Handle(); |
{ |
- RawObject* raw = Object::Allocate(class_class, |
+ RawObject* raw = Object::Allocate(Class::kInstanceKind, |
Class::InstanceSize(), |
Heap::kOld); |
NoGCScope no_gc; |
@@ -2223,9 +2229,8 @@ |
RawUnresolvedClass* UnresolvedClass::New() { |
- const Class& unresolved_class_class = |
- Class::Handle(Object::unresolved_class_class()); |
- RawObject* raw = Object::Allocate(unresolved_class_class, |
+ ASSERT(Object::unresolved_class_class() != Class::null()); |
+ RawObject* raw = Object::Allocate(UnresolvedClass::kInstanceKind, |
UnresolvedClass::InstanceSize(), |
Heap::kOld); |
return reinterpret_cast<RawUnresolvedClass*>(raw); |
@@ -2260,7 +2265,7 @@ |
String& name = String::Handle(); |
String& str = String::Handle(); |
name = lib_prefix.name(); // Qualifier. |
- str = String::New("."); |
+ str = Symbols::Dot(); |
name = String::Concat(name, str); |
str = ident(); |
name = String::Concat(name, str); |
@@ -2461,7 +2466,7 @@ |
// The name is only used for type checking and debugging purposes. |
// Unless profiling data shows otherwise, it is not worth caching the name in |
// the type. |
- return String::NewSymbol(type_name); |
+ return Symbols::New(type_name); |
} |
@@ -2873,8 +2878,8 @@ |
RawType* Type::New(Heap::Space space) { |
- const Class& type_class = Class::Handle(Object::type_class()); |
- RawObject* raw = Object::Allocate(type_class, |
+ ASSERT(Object::type_class() != Class::null()); |
+ RawObject* raw = Object::Allocate(Type::kInstanceKind, |
Type::InstanceSize(), |
space); |
return reinterpret_cast<RawType*>(raw); |
@@ -3034,9 +3039,8 @@ |
RawTypeParameter* TypeParameter::New() { |
- const Class& type_parameter_class = |
- Class::Handle(Object::type_parameter_class()); |
- RawObject* raw = Object::Allocate(type_parameter_class, |
+ ASSERT(Object::type_parameter_class() != Class::null()); |
+ RawObject* raw = Object::Allocate(TypeParameter::kInstanceKind, |
TypeParameter::InstanceSize(), |
Heap::kOld); |
return reinterpret_cast<RawTypeParameter*>(raw); |
@@ -3135,8 +3139,8 @@ |
const intptr_t num_strings = 2*len + 1; // "<""T"", ""T"">". |
const Array& strings = Array::Handle(Array::New(num_strings)); |
intptr_t s = 0; |
- strings.SetAt(s++, String::Handle(String::NewSymbol("<"))); |
- const String& kCommaSpace = String::Handle(String::NewSymbol(", ")); |
+ strings.SetAt(s++, String::Handle(Symbols::New("<"))); |
+ const String& kCommaSpace = String::Handle(Symbols::New(", ")); |
AbstractType& type = AbstractType::Handle(); |
for (intptr_t i = 0; i < len; i++) { |
type = TypeAt(from_index + i); |
@@ -3146,10 +3150,10 @@ |
strings.SetAt(s++, kCommaSpace); |
} |
} |
- strings.SetAt(s++, String::Handle(String::NewSymbol(">"))); |
+ strings.SetAt(s++, String::Handle(Symbols::New(">"))); |
ASSERT(s == num_strings); |
name = String::ConcatAll(strings); |
- return String::NewSymbol(name); |
+ return Symbols::New(name); |
} |
@@ -3460,11 +3464,9 @@ |
return null(); |
} |
- const Class& type_arguments_class = |
- Class::Handle(Object::type_arguments_class()); |
TypeArguments& result = TypeArguments::Handle(); |
{ |
- RawObject* raw = Object::Allocate(type_arguments_class, |
+ RawObject* raw = Object::Allocate(TypeArguments::kInstanceKind, |
TypeArguments::InstanceSize(len), |
space); |
NoGCScope no_gc; |
@@ -3584,9 +3586,8 @@ |
RawInstantiatedTypeArguments* InstantiatedTypeArguments::New() { |
- const Class& instantiated_type_arguments_class = |
- Class::Handle(Object::instantiated_type_arguments_class()); |
- RawObject* raw = Object::Allocate(instantiated_type_arguments_class, |
+ ASSERT(Object::instantiated_type_arguments_class() != Class::null()); |
+ RawObject* raw = Object::Allocate(InstantiatedTypeArguments::kInstanceKind, |
InstantiatedTypeArguments::InstanceSize(), |
Heap::kNew); |
return reinterpret_cast<RawInstantiatedTypeArguments*>(raw); |
@@ -4088,8 +4089,8 @@ |
RawFunction* Function::New() { |
- const Class& function_class = Class::Handle(Object::function_class()); |
- RawObject* raw = Object::Allocate(function_class, |
+ ASSERT(Object::function_class() != Class::null()); |
+ RawObject* raw = Object::Allocate(Function::kInstanceKind, |
Function::InstanceSize(), |
Heap::kOld); |
return reinterpret_cast<RawFunction*>(raw); |
@@ -4220,20 +4221,20 @@ |
const AbstractTypeArguments& instantiator) const { |
const GrowableObjectArray& pieces = |
GrowableObjectArray::Handle(GrowableObjectArray::New()); |
- const String& kCommaSpace = String::Handle(String::NewSymbol(", ")); |
- const String& kColonSpace = String::Handle(String::NewSymbol(": ")); |
- const String& kLParen = String::Handle(String::NewSymbol("(")); |
- const String& kRParen = String::Handle(String::NewSymbol(") => ")); |
- const String& kLBracket = String::Handle(String::NewSymbol("[")); |
- const String& kRBracket = String::Handle(String::NewSymbol("]")); |
+ const String& kCommaSpace = String::Handle(Symbols::New(", ")); |
+ const String& kColonSpace = String::Handle(Symbols::New(": ")); |
+ const String& kLParen = String::Handle(Symbols::New("(")); |
+ const String& kRParen = String::Handle(Symbols::New(") => ")); |
+ const String& kLBracket = String::Handle(Symbols::New("[")); |
+ const String& kRBracket = String::Handle(Symbols::New("]")); |
String& name = String::Handle(); |
if (!instantiate && !is_static()) { |
// Prefix the signature with its type parameters, if any (e.g. "<K, V>"). |
// The signature of static functions cannot be type parameterized. |
const String& kSpaceExtendsSpace = |
- String::Handle(String::NewSymbol(" extends ")); |
- const String& kLAngleBracket = String::Handle(String::NewSymbol("<")); |
- const String& kRAngleBracket = String::Handle(String::NewSymbol(">")); |
+ String::Handle(Symbols::New(" extends ")); |
+ const String& kLAngleBracket = String::Handle(Symbols::New("<")); |
+ const String& kRAngleBracket = String::Handle(Symbols::New(">")); |
const Class& function_class = Class::Handle(owner()); |
ASSERT(!function_class.IsNull()); |
const TypeArguments& type_parameters = TypeArguments::Handle( |
@@ -4305,7 +4306,7 @@ |
name = res_type.BuildName(name_visibility); |
pieces.Add(name); |
const Array& strings = Array::Handle(Array::MakeArray(pieces)); |
- return String::NewSymbol(String::Handle(String::ConcatAll(strings))); |
+ return Symbols::New(String::Handle(String::ConcatAll(strings))); |
} |
@@ -4383,7 +4384,7 @@ |
RawString* Field::GetterSymbol(const String& field_name) { |
String& str = String::Handle(); |
str = Field::GetterName(field_name); |
- return String::NewSymbol(str); |
+ return Symbols::New(str); |
} |
@@ -4398,7 +4399,7 @@ |
RawString* Field::SetterSymbol(const String& field_name) { |
String& str = String::Handle(); |
str = Field::SetterName(field_name); |
- return String::NewSymbol(str); |
+ return Symbols::New(str); |
} |
@@ -4451,8 +4452,8 @@ |
RawField* Field::New() { |
- const Class& field_class = Class::Handle(Object::field_class()); |
- RawObject* raw = Object::Allocate(field_class, |
+ ASSERT(Object::field_class() != Class::null()); |
+ RawObject* raw = Object::Allocate(Field::kInstanceKind, |
Field::InstanceSize(), |
Heap::kOld); |
return reinterpret_cast<RawField*>(raw); |
@@ -4506,8 +4507,8 @@ |
RawLiteralToken* LiteralToken::New() { |
- const Class& cls = Class::Handle(Object::literal_token_class()); |
- RawObject* raw = Object::Allocate(cls, |
+ ASSERT(Object::literal_token_class() != Class::null()); |
+ RawObject* raw = Object::Allocate(LiteralToken::kInstanceKind, |
LiteralToken::InstanceSize(), |
Heap::kOld); |
return reinterpret_cast<RawLiteralToken*>(raw); |
@@ -4626,10 +4627,10 @@ |
RawTokenStream* TokenStream::New(intptr_t len) { |
- const Class& token_stream_class = Class::Handle(Object::token_stream_class()); |
+ ASSERT(Object::token_stream_class() != Class::null()); |
TokenStream& result = TokenStream::Handle(); |
{ |
- RawObject* raw = Object::Allocate(token_stream_class, |
+ RawObject* raw = Object::Allocate(TokenStream::kInstanceKind, |
TokenStream::InstanceSize(len), |
Heap::kOld); |
NoGCScope no_gc; |
@@ -4928,7 +4929,7 @@ |
ASSERT(!str.IsNull()); |
return str.raw(); |
} |
- return String::NewSymbol(Token::Str(kind)); |
+ return Symbols::New(Token::Str(kind)); |
} else { |
ASSERT(obj.IsLiteralToken()); // Must be a literal token. |
const LiteralToken& literal_token = LiteralToken::Cast(obj); |
@@ -5066,7 +5067,7 @@ |
} |
} |
// Guarantee that returned string is never NULL. |
- String& line = String::Handle(String::NewSymbol("")); |
+ String& line = String::Handle(Symbols::New("")); |
if (line_start >= 0) { |
line = String::SubString(src, line_start, last_char - line_start + 1); |
} |
@@ -5123,8 +5124,8 @@ |
RawScript* Script::New() { |
- const Class& script_class = Class::Handle(Object::script_class()); |
- RawObject* raw = Object::Allocate(script_class, |
+ ASSERT(Object::script_class() != Class::null()); |
+ RawObject* raw = Object::Allocate(Script::kInstanceKind, |
Script::InstanceSize(), |
Heap::kOld); |
return reinterpret_cast<RawScript*>(raw); |
@@ -5135,7 +5136,7 @@ |
const String& source, |
RawScript::Kind kind) { |
const Script& result = Script::Handle(Script::New()); |
- result.set_url(String::Handle(String::NewSymbol(url))); |
+ result.set_url(String::Handle(Symbols::New(url))); |
result.set_source(source); |
result.set_kind(kind); |
return result.raw(); |
@@ -5931,8 +5932,8 @@ |
RawLibrary* Library::New() { |
- const Class& library_class = Class::Handle(Object::library_class()); |
- RawObject* raw = Object::Allocate(library_class, |
+ ASSERT(Object::library_class() != Class::null()); |
+ RawObject* raw = Object::Allocate(Library::kInstanceKind, |
Library::InstanceSize(), |
Heap::kOld); |
return reinterpret_cast<RawLibrary*>(raw); |
@@ -5973,13 +5974,13 @@ |
void Library::InitCoreLibrary(Isolate* isolate) { |
- const String& core_lib_url = String::Handle(String::NewSymbol("dart:core")); |
+ const String& core_lib_url = String::Handle(Symbols::New("dart:core")); |
const Library& core_lib = |
Library::Handle(Library::NewLibraryHelper(core_lib_url, false)); |
core_lib.Register(); |
isolate->object_store()->set_core_library(core_lib); |
const String& core_impl_lib_url = |
- String::Handle(String::NewSymbol("dart:coreimpl")); |
+ String::Handle(Symbols::New("dart:coreimpl")); |
const Library& core_impl_lib = |
Library::Handle(Library::NewLibraryHelper(core_impl_lib_url, false)); |
isolate->object_store()->set_core_impl_library(core_impl_lib); |
@@ -5991,7 +5992,7 @@ |
void Library::InitMathLibrary(Isolate* isolate) { |
- const String& url = String::Handle(String::NewSymbol("dart:math")); |
+ const String& url = String::Handle(Symbols::New("dart:math")); |
const Library& lib = Library::Handle(Library::New(url)); |
lib.Register(); |
const Library& core_impl_lib = Library::Handle(Library::CoreImplLibrary()); |
@@ -6001,7 +6002,7 @@ |
void Library::InitIsolateLibrary(Isolate* isolate) { |
- const String& url = String::Handle(String::NewSymbol("dart:isolate")); |
+ const String& url = String::Handle(Symbols::New("dart:isolate")); |
const Library& lib = Library::Handle(Library::New(url)); |
lib.Register(); |
isolate->object_store()->set_isolate_library(lib); |
@@ -6009,7 +6010,7 @@ |
void Library::InitMirrorsLibrary(Isolate* isolate) { |
- const String& url = String::Handle(String::NewSymbol("dart:mirrors")); |
+ const String& url = String::Handle(Symbols::New("dart:mirrors")); |
const Library& lib = Library::Handle(Library::New(url)); |
lib.Register(); |
const Library& isolate_lib = Library::Handle(Library::IsolateLibrary()); |
@@ -6025,7 +6026,7 @@ |
static const int kNumNativeWrappersClasses = 4; |
ASSERT(kNumNativeWrappersClasses > 0 && kNumNativeWrappersClasses < 10); |
const String& native_flds_lib_url = String::Handle( |
- String::NewSymbol("dart:nativewrappers")); |
+ Symbols::New("dart:nativewrappers")); |
Library& native_flds_lib = Library::Handle( |
Library::NewLibraryHelper(native_flds_lib_url, false)); |
native_flds_lib.Register(); |
@@ -6041,7 +6042,7 @@ |
"%s%d", |
kNativeWrappersClass, |
fld_cnt); |
- cls_name = String::NewSymbol(name_buffer); |
+ cls_name = Symbols::New(name_buffer); |
Class::NewNativeWrapper(&native_flds_lib, cls_name, fld_cnt); |
} |
} |
@@ -6108,7 +6109,7 @@ |
String& str = String::Handle(); |
str ^= name.raw(); |
str = String::Concat(str, String::Handle(this->private_key())); |
- str = String::NewSymbol(str); |
+ str = Symbols::New(str); |
return str.raw(); |
} |
@@ -6246,9 +6247,8 @@ |
RawLibraryPrefix* LibraryPrefix::New() { |
- const Class& library_prefix_class = |
- Class::Handle(Object::library_prefix_class()); |
- RawObject* raw = Object::Allocate(library_prefix_class, |
+ ASSERT(Object::library_prefix_class() != Class::null()); |
+ RawObject* raw = Object::Allocate(LibraryPrefix::kInstanceKind, |
LibraryPrefix::InstanceSize(), |
Heap::kOld); |
return reinterpret_cast<RawLibraryPrefix*>(raw); |
@@ -6373,11 +6373,11 @@ |
RawInstructions* Instructions::New(intptr_t size) { |
- const Class& instructions_class = Class::Handle(Object::instructions_class()); |
+ ASSERT(Object::instructions_class() != Class::null()); |
Instructions& result = Instructions::Handle(); |
{ |
uword aligned_size = Instructions::InstanceSize(size); |
- RawObject* raw = Object::Allocate(instructions_class, |
+ RawObject* raw = Object::Allocate(Instructions::kInstanceKind, |
aligned_size, |
Heap::kCode); |
NoGCScope no_gc; |
@@ -6458,11 +6458,13 @@ |
RawPcDescriptors* PcDescriptors::New(intptr_t num_descriptors) { |
- const Class& cls = Class::Handle(Object::pc_descriptors_class()); |
+ ASSERT(Object::pc_descriptors_class() != Class::null()); |
PcDescriptors& result = PcDescriptors::Handle(); |
{ |
uword size = PcDescriptors::InstanceSize(num_descriptors); |
- RawObject* raw = Object::Allocate(cls, size, Heap::kOld); |
+ RawObject* raw = Object::Allocate(PcDescriptors::kInstanceKind, |
+ size, |
+ Heap::kOld); |
NoGCScope no_gc; |
result ^= raw; |
result.SetLength(num_descriptors); |
@@ -6579,16 +6581,16 @@ |
RawStackmap* Stackmap::New(uword pc_offset, BitmapBuilder* bmap) { |
- const Class& cls = Class::Handle(Object::stackmap_class()); |
- ASSERT(!cls.IsNull()); |
+ ASSERT(Object::stackmap_class() != Class::null()); |
ASSERT(bmap != NULL); |
Stackmap& result = Stackmap::Handle(); |
intptr_t size = bmap->SizeInBytes(); |
{ |
// Stackmap data objects are associated with a code object, allocate them |
// in old generation. |
- RawObject* raw = |
- Object::Allocate(cls, Stackmap::InstanceSize(size), Heap::kOld); |
+ RawObject* raw = Object::Allocate(Stackmap::kInstanceKind, |
+ Stackmap::InstanceSize(size), |
+ Heap::kOld); |
NoGCScope no_gc; |
result ^= raw; |
result.set_bitmap_size_in_bytes(size); |
@@ -6668,11 +6670,13 @@ |
RawLocalVarDescriptors* LocalVarDescriptors::New(intptr_t num_variables) { |
- const Class& cls = Class::Handle(Object::var_descriptors_class()); |
+ ASSERT(Object::var_descriptors_class() != Class::null()); |
LocalVarDescriptors& result = LocalVarDescriptors::Handle(); |
{ |
uword size = LocalVarDescriptors::InstanceSize(num_variables); |
- RawObject* raw = Object::Allocate(cls, size, Heap::kOld); |
+ RawObject* raw = Object::Allocate(LocalVarDescriptors::kInstanceKind, |
+ size, |
+ Heap::kOld); |
NoGCScope no_gc; |
result ^= raw; |
result.raw_ptr()->length_ = num_variables; |
@@ -6722,11 +6726,13 @@ |
RawExceptionHandlers* ExceptionHandlers::New(intptr_t num_handlers) { |
- const Class& cls = Class::Handle(Object::exception_handlers_class()); |
+ ASSERT(Object::exception_handlers_class() != Class::null()); |
ExceptionHandlers& result = ExceptionHandlers::Handle(); |
{ |
uword size = ExceptionHandlers::InstanceSize(num_handlers); |
- RawObject* raw = Object::Allocate(cls, size, Heap::kOld); |
+ RawObject* raw = Object::Allocate(ExceptionHandlers::kInstanceKind, |
+ size, |
+ Heap::kOld); |
NoGCScope no_gc; |
result ^= raw; |
result.SetLength(num_handlers); |
@@ -6825,11 +6831,11 @@ |
RawCode* Code::New(int pointer_offsets_length) { |
- const Class& cls = Class::Handle(Object::code_class()); |
+ ASSERT(Object::code_class() != Class::null()); |
Code& result = Code::Handle(); |
{ |
uword size = Code::InstanceSize(pointer_offsets_length); |
- RawObject* raw = Object::Allocate(cls, size, Heap::kOld); |
+ RawObject* raw = Object::Allocate(Code::kInstanceKind, size, Heap::kOld); |
NoGCScope no_gc; |
result ^= raw; |
result.set_pointer_offsets_length(pointer_offsets_length); |
@@ -7053,11 +7059,11 @@ |
RawContext* Context::New(intptr_t num_variables, Heap::Space space) { |
ASSERT(num_variables >= 0); |
+ ASSERT(Object::context_class() != Class::null()); |
- const Class& context_class = Class::Handle(Object::context_class()); |
Context& result = Context::Handle(); |
{ |
- RawObject* raw = Object::Allocate(context_class, |
+ RawObject* raw = Object::Allocate(Context::kInstanceKind, |
Context::InstanceSize(num_variables), |
space); |
NoGCScope no_gc; |
@@ -7075,12 +7081,13 @@ |
RawContextScope* ContextScope::New(intptr_t num_variables) { |
- const Class& context_scope_class = |
- Class::Handle(Object::context_scope_class()); |
+ ASSERT(Object::context_scope_class() != Class::null()); |
intptr_t size = ContextScope::InstanceSize(num_variables); |
ContextScope& result = ContextScope::Handle(); |
{ |
- RawObject* raw = Object::Allocate(context_scope_class, size, Heap::kOld); |
+ RawObject* raw = Object::Allocate(ContextScope::kInstanceKind, |
+ size, |
+ Heap::kOld); |
NoGCScope no_gc; |
result ^= raw; |
result.set_num_variables(num_variables); |
@@ -7351,13 +7358,14 @@ |
const String& target_name, |
intptr_t id, |
intptr_t num_args_tested) { |
+ ASSERT(Object::icdata_class() != Class::null()); |
ASSERT(num_args_tested > 0); |
- const Class& cls = Class::Handle(Object::icdata_class()); |
- ASSERT(!cls.IsNull()); |
ICData& result = ICData::Handle(); |
{ |
// IC data objects are long living objects, allocate them in old generation. |
- RawObject* raw = Object::Allocate(cls, ICData::InstanceSize(), Heap::kOld); |
+ RawObject* raw = Object::Allocate(ICData::kInstanceKind, |
+ ICData::InstanceSize(), |
+ Heap::kOld); |
NoGCScope no_gc; |
result ^= raw; |
} |
@@ -7375,14 +7383,14 @@ |
RawSubtypeTestCache* SubtypeTestCache::New() { |
- const Class& cls = Class::Handle(Object::subtypetestcache_class()); |
- ASSERT(!cls.IsNull()); |
+ ASSERT(Object::subtypetestcache_class() != Class::null()); |
SubtypeTestCache& result = SubtypeTestCache::Handle(); |
{ |
// SubtypeTestCache objects are long living objects, allocate them in the |
// old generation. |
- RawObject* raw = |
- Object::Allocate(cls, SubtypeTestCache::InstanceSize(), Heap::kOld); |
+ RawObject* raw = Object::Allocate(SubtypeTestCache::kInstanceKind, |
+ SubtypeTestCache::InstanceSize(), |
+ Heap::kOld); |
NoGCScope no_gc; |
result ^= raw; |
} |
@@ -7460,10 +7468,10 @@ |
RawApiError* ApiError::New(const String& message, Heap::Space space) { |
- const Class& cls = Class::Handle(Object::api_error_class()); |
+ ASSERT(Object::api_error_class() != Class::null()); |
ApiError& result = ApiError::Handle(); |
{ |
- RawObject* raw = Object::Allocate(cls, |
+ RawObject* raw = Object::Allocate(ApiError::kInstanceKind, |
ApiError::InstanceSize(), |
space); |
NoGCScope no_gc; |
@@ -7491,10 +7499,10 @@ |
RawLanguageError* LanguageError::New(const String& message, Heap::Space space) { |
- const Class& cls = Class::Handle(Object::language_error_class()); |
+ ASSERT(Object::language_error_class() != Class::null()); |
LanguageError& result = LanguageError::Handle(); |
{ |
- RawObject* raw = Object::Allocate(cls, |
+ RawObject* raw = Object::Allocate(LanguageError::kInstanceKind, |
LanguageError::InstanceSize(), |
space); |
NoGCScope no_gc; |
@@ -7524,10 +7532,10 @@ |
RawUnhandledException* UnhandledException::New(const Instance& exception, |
const Instance& stacktrace, |
Heap::Space space) { |
- const Class& cls = Class::Handle(Object::unhandled_exception_class()); |
+ ASSERT(Object::unhandled_exception_class() != Class::null()); |
UnhandledException& result = UnhandledException::Handle(); |
{ |
- RawObject* raw = Object::Allocate(cls, |
+ RawObject* raw = Object::Allocate(UnhandledException::kInstanceKind, |
UnhandledException::InstanceSize(), |
space); |
NoGCScope no_gc; |
@@ -7585,10 +7593,10 @@ |
RawUnwindError* UnwindError::New(const String& message, Heap::Space space) { |
- const Class& cls = Class::Handle(Object::unwind_error_class()); |
+ ASSERT(Object::unwind_error_class() != Class::null()); |
UnwindError& result = UnwindError::Handle(); |
{ |
- RawObject* raw = Object::Allocate(cls, |
+ RawObject* raw = Object::Allocate(UnwindError::kInstanceKind, |
UnwindError::InstanceSize(), |
space); |
NoGCScope no_gc; |
@@ -7812,7 +7820,7 @@ |
{ |
intptr_t instance_size = cls.instance_size(); |
ASSERT(instance_size > 0); |
- RawObject* raw = Object::Allocate(cls, instance_size, space); |
+ RawObject* raw = Object::Allocate(cls.id(), instance_size, space); |
NoGCScope no_gc; |
result ^= raw; |
uword addr = reinterpret_cast<uword>(result.raw_ptr()); |
@@ -8002,12 +8010,12 @@ |
RawMint* Mint::New(int64_t val, Heap::Space space) { |
// Do not allocate a Mint if Smi would do. |
ASSERT(!Smi::IsValid64(val)); |
- Isolate* isolate = Isolate::Current(); |
- const Class& cls = |
- Class::Handle(isolate->object_store()->mint_class()); |
+ ASSERT(Isolate::Current()->object_store()->mint_class() != Class::null()); |
Mint& result = Mint::Handle(); |
{ |
- RawObject* raw = Object::Allocate(cls, Mint::InstanceSize(), space); |
+ RawObject* raw = Object::Allocate(Mint::kInstanceKind, |
+ Mint::InstanceSize(), |
+ space); |
NoGCScope no_gc; |
result ^= raw; |
} |
@@ -8130,12 +8138,12 @@ |
RawDouble* Double::New(double d, Heap::Space space) { |
- Isolate* isolate = Isolate::Current(); |
- const Class& cls = |
- Class::Handle(isolate->object_store()->double_class()); |
+ ASSERT(Isolate::Current()->object_store()->double_class() != Class::null()); |
Double& result = Double::Handle(); |
{ |
- RawObject* raw = Object::Allocate(cls, Double::InstanceSize(), space); |
+ RawObject* raw = Object::Allocate(Double::kInstanceKind, |
+ Double::InstanceSize(), |
+ space); |
NoGCScope no_gc; |
result ^= raw; |
} |
@@ -8291,11 +8299,12 @@ |
RawBigint* Bigint::Allocate(intptr_t length, Heap::Space space) { |
ASSERT(length >= 0); |
- Isolate* isolate = Isolate::Current(); |
- const Class& cls = Class::Handle(isolate->object_store()->bigint_class()); |
+ ASSERT(Isolate::Current()->object_store()->bigint_class() != Class::null()); |
Bigint& result = Bigint::Handle(); |
{ |
- RawObject* raw = Object::Allocate(cls, Bigint::InstanceSize(length), space); |
+ RawObject* raw = Object::Allocate(Bigint::kInstanceKind, |
+ Bigint::InstanceSize(length), |
+ space); |
NoGCScope no_gc; |
result ^= raw; |
result.raw_ptr()->allocated_length_ = length; // Chunk length allocated. |
@@ -8521,7 +8530,7 @@ |
if (IsCanonical()) { |
return this->raw(); |
} |
- return NewSymbol(*this); |
+ return Symbols::New(*this); |
} |
@@ -8802,162 +8811,6 @@ |
} |
-static void GrowSymbolTable(const Array& symbol_table, intptr_t table_size) { |
- // TODO(iposva): Avoid exponential growth. |
- intptr_t new_table_size = table_size * 2; |
- Array& new_symbol_table = Array::Handle(Array::New(new_table_size + 1)); |
- // Copy all elements from the original symbol table to the newly allocated |
- // array. |
- String& element = String::Handle(); |
- Object& new_element = Object::Handle(); |
- for (intptr_t i = 0; i < table_size; i++) { |
- element ^= symbol_table.At(i); |
- if (!element.IsNull()) { |
- intptr_t hash = element.Hash(); |
- intptr_t index = hash % new_table_size; |
- new_element = new_symbol_table.At(index); |
- while (!new_element.IsNull()) { |
- index = (index + 1) % new_table_size; // Move to next element. |
- new_element = new_symbol_table.At(index); |
- } |
- new_symbol_table.SetAt(index, element); |
- } |
- } |
- // Copy used count. |
- new_element = symbol_table.At(table_size); |
- new_symbol_table.SetAt(new_table_size, new_element); |
- // Remember the new symbol table now. |
- Isolate::Current()->object_store()->set_symbol_table(new_symbol_table); |
-} |
- |
- |
-static void InsertIntoSymbolTable(const Array& symbol_table, |
- const String& symbol, |
- intptr_t index, |
- intptr_t table_size) { |
- symbol.SetCanonical(); // Mark object as being canonical. |
- symbol_table.SetAt(index, symbol); // Remember the new symbol. |
- Smi& used = Smi::Handle(); |
- used ^= symbol_table.At(table_size); |
- intptr_t used_elements = used.Value() + 1; // One more element added. |
- used = Smi::New(used_elements); |
- symbol_table.SetAt(table_size, used); // Update used count. |
- |
- // Rehash if symbol_table is 75% full. |
- if (used_elements > ((table_size / 4) * 3)) { |
- GrowSymbolTable(symbol_table, table_size); |
- } |
-} |
- |
- |
-RawString* String::NewSymbol(const char* str) { |
- intptr_t width = 0; |
- intptr_t len = Utf8::CodePointCount(str, &width); |
- intptr_t size = len * width; |
- Zone* zone = Isolate::Current()->current_zone(); |
- if (len == 0) { |
- return String::NewSymbol(reinterpret_cast<uint8_t*>(NULL), 0); |
- } else if (width == 1) { |
- uint8_t* characters = reinterpret_cast<uint8_t*>(zone->Allocate(size)); |
- Utf8::Decode(str, characters, len); |
- return NewSymbol(characters, len); |
- } else if (width == 2) { |
- uint16_t* characters = reinterpret_cast<uint16_t*>(zone->Allocate(size)); |
- Utf8::Decode(str, characters, len); |
- return NewSymbol(characters, len); |
- } |
- ASSERT(width == 4); |
- uint32_t* characters = reinterpret_cast<uint32_t*>(zone->Allocate(size)); |
- Utf8::Decode(str, characters, len); |
- return NewSymbol(characters, len); |
-} |
- |
- |
-template<typename T> |
-RawString* String::NewSymbol(const T* characters, intptr_t len) { |
- Isolate* isolate = Isolate::Current(); |
- |
- // Calculate the String hash for this sequence of characters. |
- intptr_t hash = Hash(characters, len); |
- |
- const Array& symbol_table = |
- Array::Handle(isolate, isolate->object_store()->symbol_table()); |
- // Last element of the array is the number of used elements. |
- intptr_t table_size = symbol_table.Length() - 1; |
- intptr_t index = hash % table_size; |
- |
- String& symbol = String::Handle(isolate, String::null()); |
- symbol ^= symbol_table.At(index); |
- while (!symbol.IsNull() && !symbol.Equals(characters, len)) { |
- index = (index + 1) % table_size; // Move to next element. |
- symbol ^= symbol_table.At(index); |
- } |
- // Since we leave enough room in the table to guarantee, that we find an |
- // empty spot, index is the insertion point if symbol is null. |
- if (symbol.IsNull()) { |
- // Allocate new result string. |
- symbol = String::New(characters, len, Heap::kOld); |
- symbol.SetHash(hash); // Remember the calculated hash value. |
- InsertIntoSymbolTable(symbol_table, symbol, index, table_size); |
- } |
- ASSERT(symbol.IsSymbol()); |
- return symbol.raw(); |
-} |
- |
-template RawString* String::NewSymbol(const uint8_t* characters, intptr_t len); |
-template RawString* String::NewSymbol(const uint16_t* characters, intptr_t len); |
-template RawString* String::NewSymbol(const uint32_t* characters, intptr_t len); |
- |
- |
-RawString* String::NewSymbol(const String& str) { |
- if (str.IsSymbol()) { |
- return str.raw(); |
- } |
- return NewSymbol(str, 0, str.Length()); |
-} |
- |
- |
-RawString* String::NewSymbol(const String& str, |
- intptr_t begin_index, |
- intptr_t len) { |
- ASSERT(begin_index >= 0); |
- ASSERT(len >= 0); |
- ASSERT((begin_index + len) <= str.Length()); |
- Isolate* isolate = Isolate::Current(); |
- |
- // Calculate the String hash for this sequence of characters. |
- intptr_t hash = String::Hash(str, begin_index, len); |
- |
- const Array& symbol_table = |
- Array::Handle(isolate, isolate->object_store()->symbol_table()); |
- // Last element of the array is the number of used elements. |
- intptr_t table_size = symbol_table.Length() - 1; |
- intptr_t index = hash % table_size; |
- |
- String& symbol = String::Handle(isolate, String::null()); |
- symbol ^= symbol_table.At(index); |
- while (!symbol.IsNull() && !symbol.Equals(str, begin_index, len)) { |
- index = (index + 1) % table_size; // Move to next element. |
- symbol ^= symbol_table.At(index); |
- } |
- // Since we leave enough room in the table to guarantee, that we find an |
- // empty spot, index is the insertion point if symbol is null. |
- if (symbol.IsNull()) { |
- if (str.IsOld() && begin_index == 0 && len == str.Length()) { |
- // Reuse the incoming str as the symbol value. |
- symbol = str.raw(); |
- } else { |
- // Allocate a copy in old space. |
- symbol = String::SubString(str, begin_index, len, Heap::kOld); |
- } |
- symbol.SetHash(hash); |
- InsertIntoSymbolTable(symbol_table, symbol, index, table_size); |
- } |
- ASSERT(symbol.IsSymbol()); |
- return symbol.raw(); |
-} |
- |
- |
RawString* String::NewFormatted(const char* format, ...) { |
va_list args; |
va_start(args, format); |
@@ -9203,13 +9056,12 @@ |
RawOneByteString* OneByteString::New(intptr_t len, |
Heap::Space space) { |
- Isolate* isolate = Isolate::Current(); |
- |
- const Class& cls = |
- Class::Handle(isolate->object_store()->one_byte_string_class()); |
+ ASSERT(Isolate::Current() == Dart::vm_isolate() || |
+ Isolate::Current()->object_store()->one_byte_string_class() != |
+ Class::null()); |
OneByteString& result = OneByteString::Handle(); |
{ |
- RawObject* raw = Object::Allocate(cls, |
+ RawObject* raw = Object::Allocate(OneByteString::kInstanceKind, |
OneByteString::InstanceSize(len), |
space); |
NoGCScope no_gc; |
@@ -9344,13 +9196,10 @@ |
RawTwoByteString* TwoByteString::New(intptr_t len, |
Heap::Space space) { |
- Isolate* isolate = Isolate::Current(); |
- |
- const Class& cls = |
- Class::Handle(isolate->object_store()->two_byte_string_class()); |
+ ASSERT(Isolate::Current()->object_store()->two_byte_string_class()); |
TwoByteString& result = TwoByteString::Handle(); |
{ |
- RawObject* raw = Object::Allocate(cls, |
+ RawObject* raw = Object::Allocate(TwoByteString::kInstanceKind, |
TwoByteString::InstanceSize(len), |
space); |
NoGCScope no_gc; |
@@ -9475,13 +9324,11 @@ |
RawFourByteString* FourByteString::New(intptr_t len, |
Heap::Space space) { |
- Isolate* isolate = Isolate::Current(); |
- |
- const Class& cls = |
- Class::Handle(isolate->object_store()->four_byte_string_class()); |
+ ASSERT(Isolate::Current()->object_store()->four_byte_string_class() != |
+ Class::null()); |
FourByteString& result = FourByteString::Handle(); |
{ |
- RawObject* raw = Object::Allocate(cls, |
+ RawObject* raw = Object::Allocate(FourByteString::kInstanceKind, |
FourByteString::InstanceSize(len), |
space); |
NoGCScope no_gc; |
@@ -9584,15 +9431,13 @@ |
void* peer, |
Dart_PeerFinalizer callback, |
Heap::Space space) { |
- Isolate* isolate = Isolate::Current(); |
- |
- const Class& cls = |
- Class::Handle(isolate->object_store()->external_one_byte_string_class()); |
+ ASSERT(Isolate::Current()->object_store()->external_one_byte_string_class() != |
+ Class::null()); |
ExternalOneByteString& result = ExternalOneByteString::Handle(); |
ExternalStringData<uint8_t>* external_data = |
new ExternalStringData<uint8_t>(data, peer, callback); |
{ |
- RawObject* raw = Object::Allocate(cls, |
+ RawObject* raw = Object::Allocate(ExternalOneByteString::kInstanceKind, |
ExternalOneByteString::InstanceSize(), |
space); |
NoGCScope no_gc; |
@@ -9633,15 +9478,13 @@ |
void* peer, |
Dart_PeerFinalizer callback, |
Heap::Space space) { |
- Isolate* isolate = Isolate::Current(); |
- |
- const Class& cls = |
- Class::Handle(isolate->object_store()->external_two_byte_string_class()); |
+ ASSERT(Isolate::Current()->object_store()->external_two_byte_string_class() != |
+ Class::null()); |
ExternalTwoByteString& result = ExternalTwoByteString::Handle(); |
ExternalStringData<uint16_t>* external_data = |
new ExternalStringData<uint16_t>(data, peer, callback); |
{ |
- RawObject* raw = Object::Allocate(cls, |
+ RawObject* raw = Object::Allocate(ExternalTwoByteString::kInstanceKind, |
ExternalTwoByteString::InstanceSize(), |
space); |
NoGCScope no_gc; |
@@ -9672,15 +9515,13 @@ |
void* peer, |
Dart_PeerFinalizer callback, |
Heap::Space space) { |
- Isolate* isolate = Isolate::Current(); |
- |
- const Class& cls = |
- Class::Handle(isolate->object_store()->external_four_byte_string_class()); |
+ ASSERT(Isolate::Current()->object_store()-> |
+ external_four_byte_string_class() != Class::null()); |
ExternalFourByteString& result = ExternalFourByteString::Handle(); |
ExternalStringData<uint32_t>* external_data = |
new ExternalStringData<uint32_t>(data, peer, callback); |
{ |
- RawObject* raw = Object::Allocate(cls, |
+ RawObject* raw = Object::Allocate(ExternalFourByteString::kInstanceKind, |
ExternalFourByteString::InstanceSize(), |
space); |
NoGCScope no_gc; |
@@ -9716,14 +9557,14 @@ |
RawBool* Bool::New(bool value) { |
- Isolate* isolate = Isolate::Current(); |
- |
- const Class& cls = Class::Handle(isolate->object_store()->bool_class()); |
+ ASSERT(Isolate::Current()->object_store()->bool_class() != Class::null()); |
Bool& result = Bool::Handle(); |
{ |
// Since the two boolean instances are singletons we allocate them straight |
// in the old generation. |
- RawObject* raw = Object::Allocate(cls, Bool::InstanceSize(), Heap::kOld); |
+ RawObject* raw = Object::Allocate(Bool::kInstanceKind, |
+ Bool::InstanceSize(), |
+ Heap::kOld); |
NoGCScope no_gc; |
result ^= raw; |
} |
@@ -9772,6 +9613,7 @@ |
RawArray* Array::New(intptr_t len, Heap::Space space) { |
ObjectStore* object_store = Isolate::Current()->object_store(); |
+ ASSERT(object_store->array_class() != Class::null()); |
Class& cls = Class::Handle(object_store->array_class()); |
return New(cls, len, space); |
} |
@@ -9786,7 +9628,7 @@ |
} |
Array& result = Array::Handle(); |
{ |
- RawObject* raw = Object::Allocate(cls, |
+ RawObject* raw = Object::Allocate(cls.id(), |
Array::InstanceSize(len), |
space); |
NoGCScope no_gc; |
@@ -9899,6 +9741,7 @@ |
RawImmutableArray* ImmutableArray::New(intptr_t len, |
Heap::Space space) { |
ObjectStore* object_store = Isolate::Current()->object_store(); |
+ ASSERT(object_store->immutable_array_class() != Class::null()); |
Class& cls = Class::Handle(object_store->immutable_array_class()); |
return reinterpret_cast<RawImmutableArray*>(Array::New(cls, len, space)); |
} |
@@ -10003,11 +9846,11 @@ |
RawGrowableObjectArray* GrowableObjectArray::New(const Array& array, |
Heap::Space space) { |
- ObjectStore* object_store = Isolate::Current()->object_store(); |
- Class& cls = Class::Handle(object_store->growable_object_array_class()); |
+ ASSERT(Isolate::Current()->object_store()->growable_object_array_class() |
+ != Class::null()); |
GrowableObjectArray& result = GrowableObjectArray::Handle(); |
{ |
- RawObject* raw = Object::Allocate(cls, |
+ RawObject* raw = Object::Allocate(GrowableObjectArray::kInstanceKind, |
GrowableObjectArray::InstanceSize(), |
space); |
NoGCScope no_gc; |
@@ -10086,7 +9929,7 @@ |
ExternalByteArrayData<ElementT>* external_data = |
new ExternalByteArrayData<ElementT>(data, peer, callback); |
{ |
- RawObject* raw = Object::Allocate(cls, HandleT::InstanceSize(), space); |
+ RawObject* raw = Object::Allocate(cls.id(), HandleT::InstanceSize(), space); |
NoGCScope no_gc; |
result ^= raw; |
result.SetLength(len); |
@@ -10122,7 +9965,9 @@ |
RawT* ByteArray::NewImpl(const Class& cls, intptr_t len, Heap::Space space) { |
HandleT& result = HandleT::Handle(); |
{ |
- RawObject* raw = Object::Allocate(cls, HandleT::InstanceSize(len), space); |
+ RawObject* raw = Object::Allocate(cls.id(), |
+ HandleT::InstanceSize(len), |
+ space); |
NoGCScope no_gc; |
result ^= raw; |
result.SetLength(len); |
@@ -10141,7 +9986,9 @@ |
Heap::Space space) { |
HandleT& result = HandleT::Handle(); |
{ |
- RawObject* raw = Object::Allocate(cls, HandleT::InstanceSize(len), space); |
+ RawObject* raw = Object::Allocate(cls.id(), |
+ HandleT::InstanceSize(len), |
+ space); |
NoGCScope no_gc; |
result ^= raw; |
result.SetLength(len); |
@@ -10155,6 +10002,7 @@ |
RawInt8Array* Int8Array::New(intptr_t len, Heap::Space space) { |
Isolate* isolate = Isolate::Current(); |
+ ASSERT(isolate->object_store()->int8_array_class() != Class::null()); |
const Class& cls = |
Class::Handle(isolate->object_store()->int8_array_class()); |
return NewImpl<Int8Array, RawInt8Array>(cls, len, space); |
@@ -10165,6 +10013,7 @@ |
intptr_t len, |
Heap::Space space) { |
Isolate* isolate = Isolate::Current(); |
+ ASSERT(isolate->object_store()->int8_array_class() != Class::null()); |
const Class& cls = |
Class::Handle(isolate->object_store()->int8_array_class()); |
return NewImpl<Int8Array, RawInt8Array>(cls, data, len, space); |
@@ -10178,6 +10027,7 @@ |
RawUint8Array* Uint8Array::New(intptr_t len, Heap::Space space) { |
Isolate* isolate = Isolate::Current(); |
+ ASSERT(isolate->object_store()->uint8_array_class() != Class::null()); |
const Class& cls = |
Class::Handle(isolate->object_store()->uint8_array_class()); |
return NewImpl<Uint8Array, RawUint8Array>(cls, len, space); |
@@ -10188,6 +10038,7 @@ |
intptr_t len, |
Heap::Space space) { |
Isolate* isolate = Isolate::Current(); |
+ ASSERT(isolate->object_store()->uint8_array_class() != Class::null()); |
const Class& cls = |
Class::Handle(isolate->object_store()->uint8_array_class()); |
return NewImpl<Uint8Array, RawUint8Array>(cls, data, len, space); |
@@ -10201,6 +10052,7 @@ |
RawInt16Array* Int16Array::New(intptr_t len, Heap::Space space) { |
Isolate* isolate = Isolate::Current(); |
+ ASSERT(isolate->object_store()->int16_array_class() != Class::null()); |
const Class& cls = |
Class::Handle(isolate->object_store()->int16_array_class()); |
return NewImpl<Int16Array, RawInt16Array>(cls, len, space); |
@@ -10211,6 +10063,7 @@ |
intptr_t len, |
Heap::Space space) { |
Isolate* isolate = Isolate::Current(); |
+ ASSERT(isolate->object_store()->int16_array_class() != Class::null()); |
const Class& cls = |
Class::Handle(isolate->object_store()->int16_array_class()); |
return NewImpl<Int16Array, RawInt16Array>(cls, data, len, space); |
@@ -10224,6 +10077,7 @@ |
RawUint16Array* Uint16Array::New(intptr_t len, Heap::Space space) { |
Isolate* isolate = Isolate::Current(); |
+ ASSERT(isolate->object_store()->uint16_array_class() != Class::null()); |
const Class& cls = |
Class::Handle(isolate->object_store()->uint16_array_class()); |
return NewImpl<Uint16Array, RawUint16Array>(cls, len, space); |
@@ -10234,6 +10088,7 @@ |
intptr_t len, |
Heap::Space space) { |
Isolate* isolate = Isolate::Current(); |
+ ASSERT(isolate->object_store()->uint16_array_class() != Class::null()); |
const Class& cls = |
Class::Handle(isolate->object_store()->uint16_array_class()); |
return NewImpl<Uint16Array, RawUint16Array>(cls, data, len, space); |
@@ -10247,6 +10102,7 @@ |
RawInt32Array* Int32Array::New(intptr_t len, Heap::Space space) { |
Isolate* isolate = Isolate::Current(); |
+ ASSERT(isolate->object_store()->int32_array_class() != Class::null()); |
const Class& cls = |
Class::Handle(isolate->object_store()->int32_array_class()); |
return NewImpl<Int32Array, RawInt32Array>(cls, len, space); |
@@ -10257,6 +10113,7 @@ |
intptr_t len, |
Heap::Space space) { |
Isolate* isolate = Isolate::Current(); |
+ ASSERT(isolate->object_store()->int32_array_class() != Class::null()); |
const Class& cls = |
Class::Handle(isolate->object_store()->int32_array_class()); |
return NewImpl<Int32Array, RawInt32Array>(cls, data, len, space); |
@@ -10270,6 +10127,7 @@ |
RawUint32Array* Uint32Array::New(intptr_t len, Heap::Space space) { |
Isolate* isolate = Isolate::Current(); |
+ ASSERT(isolate->object_store()->uint32_array_class() != Class::null()); |
const Class& cls = |
Class::Handle(isolate->object_store()->uint32_array_class()); |
return NewImpl<Uint32Array, RawUint32Array>(cls, len, space); |
@@ -10280,6 +10138,7 @@ |
intptr_t len, |
Heap::Space space) { |
Isolate* isolate = Isolate::Current(); |
+ ASSERT(isolate->object_store()->uint32_array_class() != Class::null()); |
const Class& cls = |
Class::Handle(isolate->object_store()->uint32_array_class()); |
return NewImpl<Uint32Array, RawUint32Array>(cls, data, len, space); |
@@ -10293,6 +10152,7 @@ |
RawInt64Array* Int64Array::New(intptr_t len, Heap::Space space) { |
Isolate* isolate = Isolate::Current(); |
+ ASSERT(isolate->object_store()->int64_array_class() != Class::null()); |
const Class& cls = |
Class::Handle(isolate->object_store()->int64_array_class()); |
return NewImpl<Int64Array, RawInt64Array>(cls, len, space); |
@@ -10303,6 +10163,7 @@ |
intptr_t len, |
Heap::Space space) { |
Isolate* isolate = Isolate::Current(); |
+ ASSERT(isolate->object_store()->int64_array_class() != Class::null()); |
const Class& cls = |
Class::Handle(isolate->object_store()->int64_array_class()); |
return NewImpl<Int64Array, RawInt64Array>(cls, data, len, space); |
@@ -10316,6 +10177,7 @@ |
RawUint64Array* Uint64Array::New(intptr_t len, Heap::Space space) { |
Isolate* isolate = Isolate::Current(); |
+ ASSERT(isolate->object_store()->uint64_array_class() != Class::null()); |
const Class& cls = |
Class::Handle(isolate->object_store()->uint64_array_class()); |
return NewImpl<Uint64Array, RawUint64Array>(cls, len, space); |
@@ -10326,6 +10188,7 @@ |
intptr_t len, |
Heap::Space space) { |
Isolate* isolate = Isolate::Current(); |
+ ASSERT(isolate->object_store()->uint64_array_class() != Class::null()); |
const Class& cls = |
Class::Handle(isolate->object_store()->uint64_array_class()); |
return NewImpl<Uint64Array, RawUint64Array>(cls, data, len, space); |
@@ -10339,6 +10202,7 @@ |
RawFloat32Array* Float32Array::New(intptr_t len, Heap::Space space) { |
Isolate* isolate = Isolate::Current(); |
+ ASSERT(isolate->object_store()->float32_array_class() != Class::null()); |
const Class& cls = |
Class::Handle(isolate->object_store()->float32_array_class()); |
return NewImpl<Float32Array, RawFloat32Array>(cls, len, space); |
@@ -10349,6 +10213,7 @@ |
intptr_t len, |
Heap::Space space) { |
Isolate* isolate = Isolate::Current(); |
+ ASSERT(isolate->object_store()->float32_array_class() != Class::null()); |
const Class& cls = |
Class::Handle(isolate->object_store()->float32_array_class()); |
return NewImpl<Float32Array, RawFloat32Array>(cls, data, len, space); |
@@ -10362,6 +10227,7 @@ |
RawFloat64Array* Float64Array::New(intptr_t len, Heap::Space space) { |
Isolate* isolate = Isolate::Current(); |
+ ASSERT(isolate->object_store()->float64_array_class() != Class::null()); |
const Class& cls = |
Class::Handle(isolate->object_store()->float64_array_class()); |
return NewImpl<Float64Array, RawFloat64Array>(cls, len, space); |
@@ -10372,6 +10238,7 @@ |
intptr_t len, |
Heap::Space space) { |
Isolate* isolate = Isolate::Current(); |
+ ASSERT(isolate->object_store()->float64_array_class() != Class::null()); |
const Class& cls = |
Class::Handle(isolate->object_store()->float64_array_class()); |
return NewImpl<Float64Array, RawFloat64Array>(cls, data, len, space); |
@@ -10389,6 +10256,7 @@ |
Dart_PeerFinalizer callback, |
Heap::Space space) { |
Isolate* isolate = Isolate::Current(); |
+ ASSERT(isolate->object_store()->external_int8_array_class() != Class::null()); |
const Class& cls = |
Class::Handle(isolate->object_store()->external_int8_array_class()); |
return NewExternalImpl<ExternalInt8Array, RawExternalInt8Array>( |
@@ -10407,6 +10275,8 @@ |
Dart_PeerFinalizer callback, |
Heap::Space space) { |
Isolate* isolate = Isolate::Current(); |
+ ASSERT(isolate->object_store()->external_uint8_array_class() != |
+ Class::null()); |
const Class& cls = |
Class::Handle(isolate->object_store()->external_uint8_array_class()); |
return NewExternalImpl<ExternalUint8Array, RawExternalUint8Array>( |
@@ -10425,6 +10295,8 @@ |
Dart_PeerFinalizer callback, |
Heap::Space space) { |
Isolate* isolate = Isolate::Current(); |
+ ASSERT(isolate->object_store()->external_int16_array_class() != |
+ Class::null()); |
const Class& cls = |
Class::Handle(isolate->object_store()->external_int16_array_class()); |
return NewExternalImpl<ExternalInt16Array, RawExternalInt16Array>( |
@@ -10443,6 +10315,8 @@ |
Dart_PeerFinalizer callback, |
Heap::Space space) { |
Isolate* isolate = Isolate::Current(); |
+ ASSERT(isolate->object_store()->external_uint16_array_class() != |
+ Class::null()); |
const Class& cls = |
Class::Handle(isolate->object_store()->external_uint16_array_class()); |
return NewExternalImpl<ExternalUint16Array, RawExternalUint16Array>( |
@@ -10461,6 +10335,8 @@ |
Dart_PeerFinalizer callback, |
Heap::Space space) { |
Isolate* isolate = Isolate::Current(); |
+ ASSERT(isolate->object_store()->external_int32_array_class() != |
+ Class::null()); |
const Class& cls = |
Class::Handle(isolate->object_store()->external_int32_array_class()); |
return NewExternalImpl<ExternalInt32Array, RawExternalInt32Array>( |
@@ -10479,6 +10355,8 @@ |
Dart_PeerFinalizer callback, |
Heap::Space space) { |
Isolate* isolate = Isolate::Current(); |
+ ASSERT(isolate->object_store()->external_uint32_array_class() != |
+ Class::null()); |
const Class& cls = |
Class::Handle(isolate->object_store()->external_uint32_array_class()); |
return NewExternalImpl<ExternalUint32Array, RawExternalUint32Array>( |
@@ -10497,6 +10375,8 @@ |
Dart_PeerFinalizer callback, |
Heap::Space space) { |
Isolate* isolate = Isolate::Current(); |
+ ASSERT(isolate->object_store()->external_int64_array_class() != |
+ Class::null()); |
const Class& cls = |
Class::Handle(isolate->object_store()->external_int64_array_class()); |
return NewExternalImpl<ExternalInt64Array, RawExternalInt64Array>( |
@@ -10515,6 +10395,8 @@ |
Dart_PeerFinalizer callback, |
Heap::Space space) { |
Isolate* isolate = Isolate::Current(); |
+ ASSERT(isolate->object_store()->external_uint64_array_class() != |
+ Class::null()); |
const Class& cls = |
Class::Handle(isolate->object_store()->external_uint64_array_class()); |
return NewExternalImpl<ExternalUint64Array, RawExternalUint64Array>( |
@@ -10533,6 +10415,8 @@ |
Dart_PeerFinalizer callback, |
Heap::Space space) { |
Isolate* isolate = Isolate::Current(); |
+ ASSERT(isolate->object_store()->external_float32_array_class() != |
+ Class::null()); |
const Class& cls = |
Class::Handle(isolate->object_store()->external_float32_array_class()); |
return NewExternalImpl<ExternalFloat32Array, RawExternalFloat32Array>( |
@@ -10551,6 +10435,8 @@ |
Dart_PeerFinalizer callback, |
Heap::Space space) { |
Isolate* isolate = Isolate::Current(); |
+ ASSERT(isolate->object_store()->external_float64_array_class() != |
+ Class::null()); |
const Class& cls = |
Class::Handle(isolate->object_store()->external_float64_array_class()); |
return NewExternalImpl<ExternalFloat64Array, RawExternalFloat64Array>( |
@@ -10573,7 +10459,7 @@ |
const Class& cls = Class::Handle(function.signature_class()); |
Closure& result = Closure::Handle(); |
{ |
- RawObject* raw = Object::Allocate(cls, Closure::InstanceSize(), space); |
+ RawObject* raw = Object::Allocate(cls.id(), Closure::InstanceSize(), space); |
NoGCScope no_gc; |
result ^= raw; |
} |
@@ -10671,11 +10557,11 @@ |
RawStacktrace* Stacktrace::New(const GrowableArray<uword>& stack_frame_pcs, |
Heap::Space space) { |
- const Class& cls = Class::Handle( |
- Isolate::Current()->object_store()->stacktrace_class()); |
+ ASSERT(Isolate::Current()->object_store()->stacktrace_class() != |
+ Class::null()); |
Stacktrace& result = Stacktrace::Handle(); |
{ |
- RawObject* raw = Object::Allocate(cls, |
+ RawObject* raw = Object::Allocate(Stacktrace::kInstanceKind, |
Stacktrace::InstanceSize(), |
space); |
NoGCScope no_gc; |
@@ -10798,11 +10684,11 @@ |
RawJSRegExp* JSRegExp::New(intptr_t len, Heap::Space space) { |
- const Class& cls = Class::Handle( |
- Isolate::Current()->object_store()->jsregexp_class()); |
+ ASSERT(Isolate::Current()->object_store()->jsregexp_class() != |
+ Class::null()); |
JSRegExp& result = JSRegExp::Handle(); |
{ |
- RawObject* raw = Object::Allocate(cls, |
+ RawObject* raw = Object::Allocate(JSRegExp::kInstanceKind, |
JSRegExp::InstanceSize(len), |
space); |
NoGCScope no_gc; |