OLD | NEW |
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 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
42 "instead of showing the corresponding interface names (e.g. \"String\")"); | 42 "instead of showing the corresponding interface names (e.g. \"String\")"); |
43 DECLARE_FLAG(bool, trace_compiler); | 43 DECLARE_FLAG(bool, trace_compiler); |
44 DECLARE_FLAG(bool, enable_type_checks); | 44 DECLARE_FLAG(bool, enable_type_checks); |
45 | 45 |
46 static const char* kGetterPrefix = "get:"; | 46 static const char* kGetterPrefix = "get:"; |
47 static const intptr_t kGetterPrefixLength = strlen(kGetterPrefix); | 47 static const intptr_t kGetterPrefixLength = strlen(kGetterPrefix); |
48 static const char* kSetterPrefix = "set:"; | 48 static const char* kSetterPrefix = "set:"; |
49 static const intptr_t kSetterPrefixLength = strlen(kSetterPrefix); | 49 static const intptr_t kSetterPrefixLength = strlen(kSetterPrefix); |
50 | 50 |
51 cpp_vtable Object::handle_vtable_ = 0; | 51 cpp_vtable Object::handle_vtable_ = 0; |
52 cpp_vtable Object::builtin_vtables_[kNumPredefinedKinds] = { 0 }; | 52 cpp_vtable Object::builtin_vtables_[kNumPredefinedCids] = { 0 }; |
53 cpp_vtable Smi::handle_vtable_ = 0; | 53 cpp_vtable Smi::handle_vtable_ = 0; |
54 | 54 |
55 // These are initialized to a value that will force a illegal memory access if | 55 // These are initialized to a value that will force a illegal memory access if |
56 // they are being used. | 56 // they are being used. |
57 #if defined(RAW_NULL) | 57 #if defined(RAW_NULL) |
58 #error RAW_NULL should not be defined. | 58 #error RAW_NULL should not be defined. |
59 #endif | 59 #endif |
60 #define RAW_NULL kHeapObjectTag | 60 #define RAW_NULL kHeapObjectTag |
61 RawObject* Object::null_ = reinterpret_cast<RawInstance*>(RAW_NULL); | 61 RawObject* Object::null_ = reinterpret_cast<RawInstance*>(RAW_NULL); |
62 RawInstance* Object::sentinel_ = reinterpret_cast<RawInstance*>(RAW_NULL); | 62 RawInstance* Object::sentinel_ = reinterpret_cast<RawInstance*>(RAW_NULL); |
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
178 if (is_setter) { | 178 if (is_setter) { |
179 // Setters need to end with '='. | 179 // Setters need to end with '='. |
180 const String& suffix = String::Handle(Symbols::Equals()); | 180 const String& suffix = String::Handle(Symbols::Equals()); |
181 return String::Concat(result, suffix); | 181 return String::Concat(result, suffix); |
182 } | 182 } |
183 | 183 |
184 return result.raw(); | 184 return result.raw(); |
185 } | 185 } |
186 | 186 |
187 | 187 |
188 int Object::GetSingletonClassIndex(const RawClass* raw_class) { | 188 // TODO(asiva): Get rid of this function once we have predefined names for |
189 ASSERT(raw_class->IsHeapObject()); | 189 // the shared classes and set that up in the name field. |
190 if (raw_class == class_class()) { | 190 const char* Object::GetSingletonClassName(intptr_t class_id) { |
191 return kClassClass; | 191 switch (class_id) { |
192 } else if (raw_class == null_class()) { | 192 case kClassCid: return "Class"; |
193 return kNullClass; | 193 case kNullCid: return "Null"; |
194 } else if (raw_class == dynamic_class()) { | 194 case kDynamicCid: return "Dynamic"; |
195 return kDynamicClass; | 195 case kVoidCid: return "void"; |
196 } else if (raw_class == void_class()) { | 196 case kUnresolvedClassCid: return "UnresolvedClass"; |
197 return kVoidClass; | 197 case kTypeCid: return "Type"; |
198 } else if (raw_class == unresolved_class_class()) { | 198 case kTypeParameterCid: return "TypeParameter"; |
199 return kUnresolvedClassClass; | 199 case kTypeArgumentsCid: return "TypeArguments"; |
200 } else if (raw_class == type_class()) { | 200 case kInstantiatedTypeArgumentsCid: return "InstantiatedTypeArguments"; |
201 return kTypeClass; | 201 case kFunctionCid: return "Function"; |
202 } else if (raw_class == type_parameter_class()) { | 202 case kFieldCid: return "Field"; |
203 return kTypeParameterClass; | 203 case kLiteralTokenCid: return "LiteralToken"; |
204 } else if (raw_class == type_arguments_class()) { | 204 case kTokenStreamCid: return "TokenStream"; |
205 return kTypeArgumentsClass; | 205 case kScriptCid: return "Script"; |
206 } else if (raw_class == instantiated_type_arguments_class()) { | 206 case kLibraryCid: return "Library"; |
207 return kInstantiatedTypeArgumentsClass; | 207 case kLibraryPrefixCid: return "LibraryPrefix"; |
208 } else if (raw_class == function_class()) { | 208 case kCodeCid: return "Code"; |
209 return kFunctionClass; | 209 case kInstructionsCid: return "Instructions"; |
210 } else if (raw_class == field_class()) { | 210 case kPcDescriptorsCid: return "PcDescriptors"; |
211 return kFieldClass; | 211 case kStackmapCid: return "Stackmap"; |
212 } else if (raw_class == literal_token_class()) { | 212 case kLocalVarDescriptorsCid: return "LocalVarDescriptors"; |
213 return kLiteralTokenClass; | 213 case kExceptionHandlersCid: return "ExceptionHandlers"; |
214 } else if (raw_class == token_stream_class()) { | 214 case kContextCid: return "Context"; |
215 return kTokenStreamClass; | 215 case kContextScopeCid: return "ContextScope"; |
216 } else if (raw_class == script_class()) { | 216 case kICDataCid: return "ICData"; |
217 return kScriptClass; | 217 case kSubtypeTestCacheCid: return "SubtypeTestCache"; |
218 } else if (raw_class == library_class()) { | 218 case kApiErrorCid: return "ApiError"; |
219 return kLibraryClass; | 219 case kLanguageErrorCid: return "LanguageError"; |
220 } else if (raw_class == library_prefix_class()) { | 220 case kUnhandledExceptionCid: return "UnhandledException"; |
221 return kLibraryPrefixClass; | 221 case kUnwindErrorCid: return "UnwindError"; |
222 } else if (raw_class == code_class()) { | |
223 return kCodeClass; | |
224 } else if (raw_class == instructions_class()) { | |
225 return kInstructionsClass; | |
226 } else if (raw_class == pc_descriptors_class()) { | |
227 return kPcDescriptorsClass; | |
228 } else if (raw_class == stackmap_class()) { | |
229 return kStackmapClass; | |
230 } else if (raw_class == var_descriptors_class()) { | |
231 return kLocalVarDescriptorsClass; | |
232 } else if (raw_class == exception_handlers_class()) { | |
233 return kExceptionHandlersClass; | |
234 } else if (raw_class == deopt_info_class()) { | |
235 return kDeoptInfoClass; | |
236 } else if (raw_class == context_class()) { | |
237 return kContextClass; | |
238 } else if (raw_class == context_scope_class()) { | |
239 return kContextScopeClass; | |
240 } else if (raw_class == icdata_class()) { | |
241 return kICDataClass; | |
242 } else if (raw_class == subtypetestcache_class()) { | |
243 return kSubtypeTestCacheClass; | |
244 } else if (raw_class == api_error_class()) { | |
245 return kApiErrorClass; | |
246 } else if (raw_class == language_error_class()) { | |
247 return kLanguageErrorClass; | |
248 } else if (raw_class == unhandled_exception_class()) { | |
249 return kUnhandledExceptionClass; | |
250 } else if (raw_class == unwind_error_class()) { | |
251 return kUnwindErrorClass; | |
252 } | |
253 return kInvalidIndex; | |
254 } | |
255 | |
256 | |
257 RawClass* Object::GetSingletonClass(int index) { | |
258 switch (index) { | |
259 case kClassClass: return class_class(); | |
260 case kNullClass: return null_class(); | |
261 case kDynamicClass: return dynamic_class(); | |
262 case kVoidClass: return void_class(); | |
263 case kUnresolvedClassClass: return unresolved_class_class(); | |
264 case kTypeClass: return type_class(); | |
265 case kTypeParameterClass: return type_parameter_class(); | |
266 case kTypeArgumentsClass: return type_arguments_class(); | |
267 case kInstantiatedTypeArgumentsClass: | |
268 return instantiated_type_arguments_class(); | |
269 case kFunctionClass: return function_class(); | |
270 case kFieldClass: return field_class(); | |
271 case kLiteralTokenClass: return literal_token_class(); | |
272 case kTokenStreamClass: return token_stream_class(); | |
273 case kScriptClass: return script_class(); | |
274 case kLibraryClass: return library_class(); | |
275 case kLibraryPrefixClass: return library_prefix_class(); | |
276 case kCodeClass: return code_class(); | |
277 case kInstructionsClass: return instructions_class(); | |
278 case kPcDescriptorsClass: return pc_descriptors_class(); | |
279 case kStackmapClass: return stackmap_class(); | |
280 case kLocalVarDescriptorsClass: return var_descriptors_class(); | |
281 case kExceptionHandlersClass: return exception_handlers_class(); | |
282 case kDeoptInfoClass: return deopt_info_class(); | |
283 case kContextClass: return context_class(); | |
284 case kContextScopeClass: return context_scope_class(); | |
285 case kICDataClass: return icdata_class(); | |
286 case kSubtypeTestCacheClass: return subtypetestcache_class(); | |
287 case kApiErrorClass: return api_error_class(); | |
288 case kLanguageErrorClass: return language_error_class(); | |
289 case kUnhandledExceptionClass: return unhandled_exception_class(); | |
290 case kUnwindErrorClass: return unwind_error_class(); | |
291 default: break; | |
292 } | |
293 UNREACHABLE(); | |
294 return reinterpret_cast<RawClass*>(kHeapObjectTag); // return RAW_NULL. | |
295 } | |
296 | |
297 | |
298 const char* Object::GetSingletonClassName(int index) { | |
299 switch (index) { | |
300 case kClassClass: return "Class"; | |
301 case kNullClass: return "Null"; | |
302 case kDynamicClass: return "Dynamic"; | |
303 case kVoidClass: return "void"; | |
304 case kUnresolvedClassClass: return "UnresolvedClass"; | |
305 case kTypeClass: return "Type"; | |
306 case kTypeParameterClass: return "TypeParameter"; | |
307 case kTypeArgumentsClass: return "TypeArguments"; | |
308 case kInstantiatedTypeArgumentsClass: return "InstantiatedTypeArguments"; | |
309 case kFunctionClass: return "Function"; | |
310 case kFieldClass: return "Field"; | |
311 case kLiteralTokenClass: return "LiteralToken"; | |
312 case kTokenStreamClass: return "TokenStream"; | |
313 case kScriptClass: return "Script"; | |
314 case kLibraryClass: return "Library"; | |
315 case kLibraryPrefixClass: return "LibraryPrefix"; | |
316 case kCodeClass: return "Code"; | |
317 case kInstructionsClass: return "Instructions"; | |
318 case kPcDescriptorsClass: return "PcDescriptors"; | |
319 case kStackmapClass: return "Stackmap"; | |
320 case kLocalVarDescriptorsClass: return "LocalVarDescriptors"; | |
321 case kExceptionHandlersClass: return "ExceptionHandlers"; | |
322 case kDeoptInfoClass: return "DeoptInfo"; | |
323 case kContextClass: return "Context"; | |
324 case kContextScopeClass: return "ContextScope"; | |
325 case kICDataClass: return "ICData"; | |
326 case kSubtypeTestCacheClass: return "SubtypeTestCache"; | |
327 case kApiErrorClass: return "ApiError"; | |
328 case kLanguageErrorClass: return "LanguageError"; | |
329 case kUnhandledExceptionClass: return "UnhandledException"; | |
330 case kUnwindErrorClass: return "UnwindError"; | |
331 default: break; | 222 default: break; |
332 } | 223 } |
333 UNREACHABLE(); | 224 UNREACHABLE(); |
334 return NULL; | 225 return NULL; |
335 } | 226 } |
336 | 227 |
337 | 228 |
338 void Object::InitOnce() { | 229 void Object::InitOnce() { |
339 // TODO(iposva): NoGCScope needs to be added here. | 230 // TODO(iposva): NoGCScope needs to be added here. |
340 ASSERT(class_class() == null_); | 231 ASSERT(class_class() == null_); |
341 // Initialize the static vtable values. | 232 // Initialize the static vtable values. |
342 { | 233 { |
343 Object fake_object; | 234 Object fake_object; |
344 Smi fake_smi; | 235 Smi fake_smi; |
345 Object::handle_vtable_ = fake_object.vtable(); | 236 Object::handle_vtable_ = fake_object.vtable(); |
346 Smi::handle_vtable_ = fake_smi.vtable(); | 237 Smi::handle_vtable_ = fake_smi.vtable(); |
347 } | 238 } |
348 | 239 |
349 Isolate* isolate = Isolate::Current(); | 240 Isolate* isolate = Isolate::Current(); |
350 Heap* heap = isolate->heap(); | 241 Heap* heap = isolate->heap(); |
351 // Allocate and initialize the null instance, except its class_ field. | 242 // Allocate and initialize the null instance, except its class_ field. |
352 // 'null_' must be the first object allocated as it is used in allocation to | 243 // 'null_' must be the first object allocated as it is used in allocation to |
353 // clear the object. | 244 // clear the object. |
354 { | 245 { |
355 uword address = heap->Allocate(Instance::InstanceSize(), Heap::kOld); | 246 uword address = heap->Allocate(Instance::InstanceSize(), Heap::kOld); |
356 null_ = reinterpret_cast<RawInstance*>(address + kHeapObjectTag); | 247 null_ = reinterpret_cast<RawInstance*>(address + kHeapObjectTag); |
357 // The call below is using 'null_' to initialize itself. | 248 // The call below is using 'null_' to initialize itself. |
358 InitializeObject(address, kNullClassId, Instance::InstanceSize()); | 249 InitializeObject(address, kNullCid, Instance::InstanceSize()); |
359 } | 250 } |
360 | 251 |
361 // Initialize object_store empty array to null_ in order to be able to check | 252 // Initialize object_store empty array to null_ in order to be able to check |
362 // if the empty array was allocated (RAW_NULL is not available). | 253 // if the empty array was allocated (RAW_NULL is not available). |
363 isolate->object_store()->set_empty_array(Array::Handle()); | 254 isolate->object_store()->set_empty_array(Array::Handle()); |
364 | 255 |
365 Class& cls = Class::Handle(); | 256 Class& cls = Class::Handle(); |
366 | 257 |
367 // Allocate and initialize the class class. | 258 // Allocate and initialize the class class. |
368 { | 259 { |
369 intptr_t size = Class::InstanceSize(); | 260 intptr_t size = Class::InstanceSize(); |
370 uword address = heap->Allocate(size, Heap::kOld); | 261 uword address = heap->Allocate(size, Heap::kOld); |
371 class_class_ = reinterpret_cast<RawClass*>(address + kHeapObjectTag); | 262 class_class_ = reinterpret_cast<RawClass*>(address + kHeapObjectTag); |
372 InitializeObject(address, Class::kInstanceKind, size); | 263 InitializeObject(address, Class::kClassId, size); |
373 | 264 |
374 Class fake; | 265 Class fake; |
375 // Initialization from Class::New<Class>. | 266 // Initialization from Class::New<Class>. |
376 // Directly set raw_ to break a circular dependency: SetRaw will attempt | 267 // Directly set raw_ to break a circular dependency: SetRaw will attempt |
377 // to lookup class class in the class table where it is not registered yet. | 268 // to lookup class class in the class table where it is not registered yet. |
378 cls.raw_ = class_class_; | 269 cls.raw_ = class_class_; |
379 cls.set_handle_vtable(fake.vtable()); | 270 cls.set_handle_vtable(fake.vtable()); |
380 cls.set_instance_size(Class::InstanceSize()); | 271 cls.set_instance_size(Class::InstanceSize()); |
381 cls.set_next_field_offset(Class::InstanceSize()); | 272 cls.set_next_field_offset(Class::InstanceSize()); |
382 cls.set_instance_kind(Class::kInstanceKind); | 273 cls.set_id(Class::kClassId); |
383 cls.set_id(Class::kInstanceKind); | |
384 cls.raw_ptr()->is_const_ = false; | 274 cls.raw_ptr()->is_const_ = false; |
385 cls.raw_ptr()->is_interface_ = false; | 275 cls.raw_ptr()->is_interface_ = false; |
386 cls.set_is_finalized(); | 276 cls.set_is_finalized(); |
387 cls.raw_ptr()->type_arguments_instance_field_offset_ = | 277 cls.raw_ptr()->type_arguments_instance_field_offset_ = |
388 Class::kNoTypeArguments; | 278 Class::kNoTypeArguments; |
389 cls.raw_ptr()->num_native_fields_ = 0; | 279 cls.raw_ptr()->num_native_fields_ = 0; |
390 cls.InitEmptyFields(); | 280 cls.InitEmptyFields(); |
391 isolate->class_table()->Register(cls); | 281 isolate->class_table()->Register(cls); |
392 } | 282 } |
393 | 283 |
394 // Allocate and initialize the null class. | 284 // Allocate and initialize the null class. |
395 cls = Class::New<Instance>(kNullClassId); | 285 cls = Class::New<Instance>(kNullCid); |
396 cls.set_is_finalized(); | 286 cls.set_is_finalized(); |
397 null_class_ = cls.raw(); | 287 null_class_ = cls.raw(); |
398 | 288 |
399 // Allocate and initialize the free list element class. | 289 // Allocate and initialize the free list element class. |
400 cls = Class::New<FreeListElement::FakeInstance>(kFreeListElement); | 290 cls = Class::New<FreeListElement::FakeInstance>(kFreeListElement); |
401 cls.set_is_finalized(); | 291 cls.set_is_finalized(); |
402 | 292 |
403 // Allocate and initialize the sentinel values of Null class. | 293 // Allocate and initialize the sentinel values of Null class. |
404 { | 294 { |
405 Instance& sentinel = Instance::Handle(); | 295 Instance& sentinel = Instance::Handle(); |
406 sentinel ^= | 296 sentinel ^= |
407 Object::Allocate(kNullClassId, Instance::InstanceSize(), Heap::kOld); | 297 Object::Allocate(kNullCid, Instance::InstanceSize(), Heap::kOld); |
408 sentinel_ = sentinel.raw(); | 298 sentinel_ = sentinel.raw(); |
409 | 299 |
410 Instance& transition_sentinel = Instance::Handle(); | 300 Instance& transition_sentinel = Instance::Handle(); |
411 transition_sentinel ^= | 301 transition_sentinel ^= |
412 Object::Allocate(kNullClassId, Instance::InstanceSize(), Heap::kOld); | 302 Object::Allocate(kNullCid, Instance::InstanceSize(), Heap::kOld); |
413 transition_sentinel_ = transition_sentinel.raw(); | 303 transition_sentinel_ = transition_sentinel.raw(); |
414 } | 304 } |
415 | 305 |
416 // The interface "Dynamic" is not a VM internal class. It is the type class of | 306 // The interface "Dynamic" is not a VM internal class. It is the type class of |
417 // the "unknown type". For efficiency, we allocate it in the VM isolate. | 307 // the "unknown type". For efficiency, we allocate it in the VM isolate. |
418 // Therefore, it cannot have a heap allocated name (the name is hard coded, | 308 // Therefore, it cannot have a heap allocated name (the name is hard coded, |
419 // see GetSingletonClassIndex) and its array fields cannot be set to the empty | 309 // see GetSingletonClassName) and its array fields cannot be set to the empty |
420 // array, but remain null. | 310 // array, but remain null. |
421 // | 311 // |
422 // TODO(turnidge): Once the empty array is allocated in the vm | 312 // TODO(turnidge): Once the empty array is allocated in the vm |
423 // isolate, use it here. | 313 // isolate, use it here. |
424 cls = Class::New<Instance>(kDynamicClassId); | 314 cls = Class::New<Instance>(kDynamicCid); |
425 cls.set_is_finalized(); | 315 cls.set_is_finalized(); |
426 cls.set_is_interface(); | 316 cls.set_is_interface(); |
427 dynamic_class_ = cls.raw(); | 317 dynamic_class_ = cls.raw(); |
428 | 318 |
429 // Allocate the remaining VM internal classes. | 319 // Allocate the remaining VM internal classes. |
430 cls = Class::New<UnresolvedClass>(); | 320 cls = Class::New<UnresolvedClass>(); |
431 unresolved_class_class_ = cls.raw(); | 321 unresolved_class_class_ = cls.raw(); |
432 | 322 |
433 cls = Class::New<Instance>(kVoidClassId); | 323 cls = Class::New<Instance>(kVoidCid); |
434 cls.set_is_finalized(); | 324 cls.set_is_finalized(); |
435 void_class_ = cls.raw(); | 325 void_class_ = cls.raw(); |
436 | 326 |
437 cls = Class::New<Type>(); | 327 cls = Class::New<Type>(); |
438 type_class_ = cls.raw(); | 328 type_class_ = cls.raw(); |
439 | 329 |
440 cls = Class::New<TypeParameter>(); | 330 cls = Class::New<TypeParameter>(); |
441 type_parameter_class_ = cls.raw(); | 331 type_parameter_class_ = cls.raw(); |
442 | 332 |
443 cls = Class::New<TypeArguments>(); | 333 cls = Class::New<TypeArguments>(); |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
514 | 404 |
515 ASSERT(class_class() != null_); | 405 ASSERT(class_class() != null_); |
516 | 406 |
517 // Pre-allocate the Array and OneByteString class in the vm isolate so that | 407 // Pre-allocate the Array and OneByteString class in the vm isolate so that |
518 // we can create a symbol table and populate it with some frequently used | 408 // we can create a symbol table and populate it with some frequently used |
519 // strings as symbols. | 409 // strings as symbols. |
520 cls = Class::New<Array>(); | 410 cls = Class::New<Array>(); |
521 isolate->object_store()->set_array_class(cls); | 411 isolate->object_store()->set_array_class(cls); |
522 cls = Class::New<OneByteString>(); | 412 cls = Class::New<OneByteString>(); |
523 isolate->object_store()->set_one_byte_string_class(cls); | 413 isolate->object_store()->set_one_byte_string_class(cls); |
524 | |
525 // TODO(asiva): Assign the names of shared classes instead of relying on the | |
526 // lookup switch in Object::GetSingletonClassName. | |
527 } | 414 } |
528 | 415 |
529 | 416 |
530 RawClass* Object::CreateAndRegisterInterface(const char* cname, | 417 RawClass* Object::CreateAndRegisterInterface(const char* cname, |
531 const Script& script, | 418 const Script& script, |
532 const Library& lib) { | 419 const Library& lib) { |
533 const String& name = String::Handle(Symbols::New(cname)); | 420 const String& name = String::Handle(Symbols::New(cname)); |
534 const Class& cls = Class::Handle( | 421 const Class& cls = Class::Handle( |
535 Class::NewInterface(name, script, Scanner::kDummyTokenIndex)); | 422 Class::NewInterface(name, script, Scanner::kDummyTokenIndex)); |
536 lib.AddClass(cls); | 423 lib.AddClass(cls); |
(...skipping 530 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1067 bool_value = Bool::New(false); | 954 bool_value = Bool::New(false); |
1068 object_store->set_false_value(bool_value); | 955 object_store->set_false_value(bool_value); |
1069 } | 956 } |
1070 | 957 |
1071 | 958 |
1072 void Object::Print() const { | 959 void Object::Print() const { |
1073 OS::Print("%s\n", ToCString()); | 960 OS::Print("%s\n", ToCString()); |
1074 } | 961 } |
1075 | 962 |
1076 | 963 |
1077 void Object::InitializeObject(uword address, intptr_t index, intptr_t size) { | 964 void Object::InitializeObject(uword address, intptr_t class_id, intptr_t size) { |
1078 // TODO(iposva): Get a proper halt instruction from the assembler which | 965 // TODO(iposva): Get a proper halt instruction from the assembler which |
1079 // would be needed here for code objects. | 966 // would be needed here for code objects. |
1080 uword initial_value = reinterpret_cast<uword>(null_); | 967 uword initial_value = reinterpret_cast<uword>(null_); |
1081 uword cur = address; | 968 uword cur = address; |
1082 uword end = address + size; | 969 uword end = address + size; |
1083 while (cur < end) { | 970 while (cur < end) { |
1084 *reinterpret_cast<uword*>(cur) = initial_value; | 971 *reinterpret_cast<uword*>(cur) = initial_value; |
1085 cur += kWordSize; | 972 cur += kWordSize; |
1086 } | 973 } |
1087 uword tags = 0; | 974 uword tags = 0; |
1088 ASSERT(index != kIllegalObjectKind); | 975 ASSERT(class_id != kIllegalCid); |
1089 tags = RawObject::ClassIdTag::update(index, tags); | 976 tags = RawObject::ClassIdTag::update(class_id, tags); |
1090 tags = RawObject::SizeTag::update(size, tags); | 977 tags = RawObject::SizeTag::update(size, tags); |
1091 reinterpret_cast<RawObject*>(address)->tags_ = tags; | 978 reinterpret_cast<RawObject*>(address)->tags_ = tags; |
1092 } | 979 } |
1093 | 980 |
1094 | 981 |
1095 RawObject* Object::Allocate(intptr_t cls_id, | 982 RawObject* Object::Allocate(intptr_t cls_id, |
1096 intptr_t size, | 983 intptr_t size, |
1097 Heap::Space space) { | 984 Heap::Space space) { |
1098 ASSERT(Utils::IsAligned(size, kObjectAlignment)); | 985 ASSERT(Utils::IsAligned(size, kObjectAlignment)); |
1099 Isolate* isolate = Isolate::Current(); | 986 Isolate* isolate = Isolate::Current(); |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1147 } | 1034 } |
1148 return raw_obj; | 1035 return raw_obj; |
1149 } | 1036 } |
1150 | 1037 |
1151 | 1038 |
1152 RawString* Class::Name() const { | 1039 RawString* Class::Name() const { |
1153 if (raw_ptr()->name_ != String::null()) { | 1040 if (raw_ptr()->name_ != String::null()) { |
1154 return raw_ptr()->name_; | 1041 return raw_ptr()->name_; |
1155 } | 1042 } |
1156 ASSERT(class_class() != Class::null()); // class_class_ should be set up. | 1043 ASSERT(class_class() != Class::null()); // class_class_ should be set up. |
1157 intptr_t index = GetSingletonClassIndex(raw()); | 1044 return Symbols::New(GetSingletonClassName(raw_ptr()->id_)); |
1158 return Symbols::New(GetSingletonClassName(index)); | |
1159 } | 1045 } |
1160 | 1046 |
1161 | 1047 |
1162 RawString* Class::UserVisibleName() const { | 1048 RawString* Class::UserVisibleName() const { |
1163 if (FLAG_show_internal_names) { | 1049 if (FLAG_show_internal_names) { |
1164 return Name(); | 1050 return Name(); |
1165 } | 1051 } |
1166 switch (id()) { | 1052 switch (id()) { |
1167 case kInteger: | 1053 case kIntegerCid: |
1168 case kSmi: | 1054 case kSmiCid: |
1169 case kMint: | 1055 case kMintCid: |
1170 case kBigint: | 1056 case kBigintCid: |
1171 return Symbols::New("int"); | 1057 return Symbols::New("int"); |
1172 case kDouble: | 1058 case kDoubleCid: |
1173 return Symbols::New("double"); | 1059 return Symbols::New("double"); |
1174 case kOneByteString: | 1060 case kOneByteStringCid: |
1175 case kTwoByteString: | 1061 case kTwoByteStringCid: |
1176 case kFourByteString: | 1062 case kFourByteStringCid: |
1177 case kExternalOneByteString: | 1063 case kExternalOneByteStringCid: |
1178 case kExternalTwoByteString: | 1064 case kExternalTwoByteStringCid: |
1179 case kExternalFourByteString: | 1065 case kExternalFourByteStringCid: |
1180 return Symbols::New("String"); | 1066 return Symbols::New("String"); |
1181 case kBool: | 1067 case kBoolCid: |
1182 return Symbols::New("bool"); | 1068 return Symbols::New("bool"); |
1183 case kArray: | 1069 case kArrayCid: |
1184 case kImmutableArray: | 1070 case kImmutableArrayCid: |
1185 case kGrowableObjectArray: | 1071 case kGrowableObjectArrayCid: |
1186 return Symbols::New("List"); | 1072 return Symbols::New("List"); |
1187 case kInt8Array: | 1073 case kInt8ArrayCid: |
1188 case kExternalInt8Array: | 1074 case kExternalInt8ArrayCid: |
1189 return Symbols::New("Int8List"); | 1075 return Symbols::New("Int8List"); |
1190 case kUint8Array: | 1076 case kUint8ArrayCid: |
1191 case kExternalUint8Array: | 1077 case kExternalUint8ArrayCid: |
1192 return Symbols::New("Uint8List"); | 1078 return Symbols::New("Uint8List"); |
1193 case kInt16Array: | 1079 case kInt16ArrayCid: |
1194 case kExternalInt16Array: | 1080 case kExternalInt16ArrayCid: |
1195 return Symbols::New("Int16List"); | 1081 return Symbols::New("Int16List"); |
1196 case kUint16Array: | 1082 case kUint16ArrayCid: |
1197 case kExternalUint16Array: | 1083 case kExternalUint16ArrayCid: |
1198 return Symbols::New("Uint16List"); | 1084 return Symbols::New("Uint16List"); |
1199 case kInt32Array: | 1085 case kInt32ArrayCid: |
1200 case kExternalInt32Array: | 1086 case kExternalInt32ArrayCid: |
1201 return Symbols::New("Int32List"); | 1087 return Symbols::New("Int32List"); |
1202 case kUint32Array: | 1088 case kUint32ArrayCid: |
1203 case kExternalUint32Array: | 1089 case kExternalUint32ArrayCid: |
1204 return Symbols::New("Uint32List"); | 1090 return Symbols::New("Uint32List"); |
1205 case kInt64Array: | 1091 case kInt64ArrayCid: |
1206 case kExternalInt64Array: | 1092 case kExternalInt64ArrayCid: |
1207 return Symbols::New("Int64List"); | 1093 return Symbols::New("Int64List"); |
1208 case kUint64Array: | 1094 case kUint64ArrayCid: |
1209 case kExternalUint64Array: | 1095 case kExternalUint64ArrayCid: |
1210 return Symbols::New("Uint64List"); | 1096 return Symbols::New("Uint64List"); |
1211 case kFloat32Array: | 1097 case kFloat32ArrayCid: |
1212 case kExternalFloat32Array: | 1098 case kExternalFloat32ArrayCid: |
1213 return Symbols::New("Float32List"); | 1099 return Symbols::New("Float32List"); |
1214 case kFloat64Array: | 1100 case kFloat64ArrayCid: |
1215 case kExternalFloat64Array: | 1101 case kExternalFloat64ArrayCid: |
1216 return Symbols::New("Float64List"); | 1102 return Symbols::New("Float64List"); |
1217 default: | 1103 default: |
1218 const String& name = String::Handle(Name()); | 1104 const String& name = String::Handle(Name()); |
1219 return IdentifierPrettyName(name); | 1105 return IdentifierPrettyName(name); |
1220 } | 1106 } |
1221 UNREACHABLE(); | 1107 UNREACHABLE(); |
1222 } | 1108 } |
1223 | 1109 |
1224 | 1110 |
1225 RawType* Class::SignatureType() const { | 1111 RawType* Class::SignatureType() const { |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1260 ASSERT(!signature_type.IsFinalized()); | 1146 ASSERT(!signature_type.IsFinalized()); |
1261 return signature_type.raw(); | 1147 return signature_type.raw(); |
1262 } | 1148 } |
1263 | 1149 |
1264 | 1150 |
1265 template <class FakeObject> | 1151 template <class FakeObject> |
1266 RawClass* Class::New() { | 1152 RawClass* Class::New() { |
1267 ASSERT(Object::class_class() != Class::null()); | 1153 ASSERT(Object::class_class() != Class::null()); |
1268 Class& result = Class::Handle(); | 1154 Class& result = Class::Handle(); |
1269 { | 1155 { |
1270 RawObject* raw = Object::Allocate(Class::kInstanceKind, | 1156 RawObject* raw = Object::Allocate(Class::kClassId, |
1271 Class::InstanceSize(), | 1157 Class::InstanceSize(), |
1272 Heap::kOld); | 1158 Heap::kOld); |
1273 NoGCScope no_gc; | 1159 NoGCScope no_gc; |
1274 result ^= raw; | 1160 result ^= raw; |
1275 } | 1161 } |
1276 FakeObject fake; | 1162 FakeObject fake; |
1277 result.set_handle_vtable(fake.vtable()); | 1163 result.set_handle_vtable(fake.vtable()); |
1278 result.set_instance_size(FakeObject::InstanceSize()); | 1164 result.set_instance_size(FakeObject::InstanceSize()); |
1279 result.set_next_field_offset(FakeObject::InstanceSize()); | 1165 result.set_next_field_offset(FakeObject::InstanceSize()); |
1280 result.set_instance_kind(FakeObject::kInstanceKind); | 1166 result.set_id((FakeObject::kClassId != kInstanceCid && |
1281 result.set_id((FakeObject::kInstanceKind != kInstance) ? | 1167 FakeObject::kClassId != kClosureCid) ? |
1282 FakeObject::kInstanceKind : kIllegalObjectKind); | 1168 FakeObject::kClassId : kIllegalCid); |
1283 result.raw_ptr()->is_const_ = false; | 1169 result.raw_ptr()->is_const_ = false; |
1284 result.raw_ptr()->is_interface_ = false; | 1170 result.raw_ptr()->is_interface_ = false; |
1285 // VM backed classes are almost ready: run checks and resolve class | 1171 // VM backed classes are almost ready: run checks and resolve class |
1286 // references, but do not recompute size. | 1172 // references, but do not recompute size. |
1287 result.raw_ptr()->class_state_ = RawClass::kPreFinalized; | 1173 result.raw_ptr()->class_state_ = RawClass::kPreFinalized; |
1288 result.raw_ptr()->type_arguments_instance_field_offset_ = kNoTypeArguments; | 1174 result.raw_ptr()->type_arguments_instance_field_offset_ = kNoTypeArguments; |
1289 result.raw_ptr()->num_native_fields_ = 0; | 1175 result.raw_ptr()->num_native_fields_ = 0; |
1290 result.raw_ptr()->token_pos_ = Scanner::kDummyTokenIndex; | 1176 result.raw_ptr()->token_pos_ = Scanner::kDummyTokenIndex; |
1291 result.InitEmptyFields(); | 1177 result.InitEmptyFields(); |
1292 Isolate::Current()->class_table()->Register(result); | 1178 Isolate::Current()->class_table()->Register(result); |
(...skipping 304 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1597 // The value of static fields is already initialized to null. | 1483 // The value of static fields is already initialized to null. |
1598 StorePointer(&raw_ptr()->fields_, value.raw()); | 1484 StorePointer(&raw_ptr()->fields_, value.raw()); |
1599 } | 1485 } |
1600 | 1486 |
1601 | 1487 |
1602 template <class FakeInstance> | 1488 template <class FakeInstance> |
1603 RawClass* Class::New(intptr_t index) { | 1489 RawClass* Class::New(intptr_t index) { |
1604 ASSERT(Object::class_class() != Class::null()); | 1490 ASSERT(Object::class_class() != Class::null()); |
1605 Class& result = Class::Handle(); | 1491 Class& result = Class::Handle(); |
1606 { | 1492 { |
1607 RawObject* raw = Object::Allocate(Class::kInstanceKind, | 1493 RawObject* raw = Object::Allocate(Class::kClassId, |
1608 Class::InstanceSize(), | 1494 Class::InstanceSize(), |
1609 Heap::kOld); | 1495 Heap::kOld); |
1610 NoGCScope no_gc; | 1496 NoGCScope no_gc; |
1611 result ^= raw; | 1497 result ^= raw; |
1612 } | 1498 } |
1613 FakeInstance fake; | 1499 FakeInstance fake; |
1614 ASSERT(fake.IsInstance()); | 1500 ASSERT(fake.IsInstance()); |
1615 result.set_handle_vtable(fake.vtable()); | 1501 result.set_handle_vtable(fake.vtable()); |
1616 result.set_instance_size(FakeInstance::InstanceSize()); | 1502 result.set_instance_size(FakeInstance::InstanceSize()); |
1617 result.set_next_field_offset(FakeInstance::InstanceSize()); | 1503 result.set_next_field_offset(FakeInstance::InstanceSize()); |
1618 result.set_instance_kind(FakeInstance::kInstanceKind); | |
1619 result.set_id(index); | 1504 result.set_id(index); |
1620 result.raw_ptr()->is_const_ = false; | 1505 result.raw_ptr()->is_const_ = false; |
1621 result.raw_ptr()->is_interface_ = false; | 1506 result.raw_ptr()->is_interface_ = false; |
1622 result.raw_ptr()->class_state_ = RawClass::kAllocated; | 1507 result.raw_ptr()->class_state_ = RawClass::kAllocated; |
1623 result.raw_ptr()->type_arguments_instance_field_offset_ = kNoTypeArguments; | 1508 result.raw_ptr()->type_arguments_instance_field_offset_ = kNoTypeArguments; |
1624 result.raw_ptr()->num_native_fields_ = 0; | 1509 result.raw_ptr()->num_native_fields_ = 0; |
1625 result.InitEmptyFields(); | 1510 result.InitEmptyFields(); |
1626 Isolate::Current()->class_table()->Register(result); | 1511 Isolate::Current()->class_table()->Register(result); |
1627 return result.raw(); | 1512 return result.raw(); |
1628 } | 1513 } |
1629 | 1514 |
1630 | 1515 |
1631 template <class FakeInstance> | 1516 template <class FakeInstance> |
1632 RawClass* Class::New(const String& name, | 1517 RawClass* Class::New(const String& name, |
1633 const Script& script, | 1518 const Script& script, |
1634 intptr_t token_pos) { | 1519 intptr_t token_pos) { |
1635 Class& result = Class::Handle(New<FakeInstance>(kIllegalObjectKind)); | 1520 Class& result = Class::Handle(New<FakeInstance>(kIllegalCid)); |
1636 result.set_name(name); | 1521 result.set_name(name); |
1637 result.set_script(script); | 1522 result.set_script(script); |
1638 result.set_token_pos(token_pos); | 1523 result.set_token_pos(token_pos); |
1639 return result.raw(); | 1524 return result.raw(); |
1640 } | 1525 } |
1641 | 1526 |
1642 | 1527 |
1643 RawClass* Class::New(const String& name, | 1528 RawClass* Class::New(const String& name, |
1644 const Script& script, | 1529 const Script& script, |
1645 intptr_t token_pos) { | 1530 intptr_t token_pos) { |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1706 // Cache the signature type as the first canonicalized type in result. | 1591 // Cache the signature type as the first canonicalized type in result. |
1707 const Type& signature_type = Type::Handle(result.SignatureType()); | 1592 const Type& signature_type = Type::Handle(result.SignatureType()); |
1708 ASSERT(!signature_type.IsFinalized()); | 1593 ASSERT(!signature_type.IsFinalized()); |
1709 const Array& new_canonical_types = Array::Handle(Array::New(1, Heap::kOld)); | 1594 const Array& new_canonical_types = Array::Handle(Array::New(1, Heap::kOld)); |
1710 new_canonical_types.SetAt(0, signature_type); | 1595 new_canonical_types.SetAt(0, signature_type); |
1711 result.set_canonical_types(new_canonical_types); | 1596 result.set_canonical_types(new_canonical_types); |
1712 return result.raw(); | 1597 return result.raw(); |
1713 } | 1598 } |
1714 | 1599 |
1715 | 1600 |
1716 RawClass* Class::GetClass(ObjectKind kind) { | 1601 RawClass* Class::GetClass(intptr_t class_id, bool is_signature_class) { |
1717 ObjectStore* object_store = Isolate::Current()->object_store(); | 1602 if (class_id >= kIntegerCid && class_id <= kJSRegExpCid) { |
1718 switch (kind) { | 1603 return Isolate::Current()->class_table()->At(class_id); |
1719 case kInteger: | 1604 } |
1720 ASSERT(object_store->integer_implementation_class() != Class::null()); | 1605 if (class_id >= kNumPredefinedCids) { |
1721 return object_store->integer_implementation_class(); | 1606 if (is_signature_class) { |
1722 case kSmi: | |
1723 ASSERT(object_store->smi_class() != Class::null()); | |
1724 return object_store->smi_class(); | |
1725 case kMint: | |
1726 ASSERT(object_store->mint_class() != Class::null()); | |
1727 return object_store->mint_class(); | |
1728 case kBigint: | |
1729 ASSERT(object_store->bigint_class() != Class::null()); | |
1730 return object_store->bigint_class(); | |
1731 case kDouble: | |
1732 ASSERT(object_store->double_class() != Class::null()); | |
1733 return object_store->double_class(); | |
1734 case kOneByteString: | |
1735 ASSERT(object_store->one_byte_string_class() != Class::null()); | |
1736 return object_store->one_byte_string_class(); | |
1737 case kTwoByteString: | |
1738 ASSERT(object_store->two_byte_string_class() != Class::null()); | |
1739 return object_store->two_byte_string_class(); | |
1740 case kFourByteString: | |
1741 ASSERT(object_store->four_byte_string_class() != Class::null()); | |
1742 return object_store->four_byte_string_class(); | |
1743 case kExternalOneByteString: | |
1744 ASSERT(object_store->external_one_byte_string_class() != Class::null()); | |
1745 return object_store->external_one_byte_string_class(); | |
1746 case kExternalTwoByteString: | |
1747 ASSERT(object_store->external_two_byte_string_class() != Class::null()); | |
1748 return object_store->external_two_byte_string_class(); | |
1749 case kExternalFourByteString: | |
1750 ASSERT(object_store->external_four_byte_string_class() != Class::null()); | |
1751 return object_store->external_four_byte_string_class(); | |
1752 case kBool: | |
1753 ASSERT(object_store->bool_class() != Class::null()); | |
1754 return object_store->bool_class(); | |
1755 case kArray: | |
1756 ASSERT(object_store->array_class() != Class::null()); | |
1757 return object_store->array_class(); | |
1758 case kImmutableArray: | |
1759 ASSERT(object_store->immutable_array_class() != Class::null()); | |
1760 return object_store->immutable_array_class(); | |
1761 case kGrowableObjectArray: | |
1762 ASSERT(object_store->growable_object_array_class() != Class::null()); | |
1763 return object_store->growable_object_array_class(); | |
1764 case kInt8Array: | |
1765 ASSERT(object_store->int8_array_class() != Class::null()); | |
1766 return object_store->int8_array_class(); | |
1767 case kUint8Array: | |
1768 ASSERT(object_store->uint8_array_class() != Class::null()); | |
1769 return object_store->uint8_array_class(); | |
1770 case kInt16Array: | |
1771 ASSERT(object_store->int16_array_class() != Class::null()); | |
1772 return object_store->int16_array_class(); | |
1773 case kUint16Array: | |
1774 ASSERT(object_store->uint16_array_class() != Class::null()); | |
1775 return object_store->uint16_array_class(); | |
1776 case kInt32Array: | |
1777 ASSERT(object_store->int32_array_class() != Class::null()); | |
1778 return object_store->int32_array_class(); | |
1779 case kUint32Array: | |
1780 ASSERT(object_store->uint32_array_class() != Class::null()); | |
1781 return object_store->uint32_array_class(); | |
1782 case kInt64Array: | |
1783 ASSERT(object_store->int64_array_class() != Class::null()); | |
1784 return object_store->int64_array_class(); | |
1785 case kUint64Array: | |
1786 ASSERT(object_store->uint64_array_class() != Class::null()); | |
1787 return object_store->uint64_array_class(); | |
1788 case kFloat32Array: | |
1789 ASSERT(object_store->float32_array_class() != Class::null()); | |
1790 return object_store->float32_array_class(); | |
1791 case kFloat64Array: | |
1792 ASSERT(object_store->float64_array_class() != Class::null()); | |
1793 return object_store->float64_array_class(); | |
1794 case kExternalInt8Array: | |
1795 ASSERT(object_store->external_int8_array_class() != Class::null()); | |
1796 return object_store->external_int8_array_class(); | |
1797 case kExternalUint8Array: | |
1798 ASSERT(object_store->external_uint8_array_class() != Class::null()); | |
1799 return object_store->external_uint8_array_class(); | |
1800 case kExternalInt16Array: | |
1801 ASSERT(object_store->external_int16_array_class() != Class::null()); | |
1802 return object_store->external_int16_array_class(); | |
1803 case kExternalUint16Array: | |
1804 ASSERT(object_store->external_uint16_array_class() != Class::null()); | |
1805 return object_store->external_uint16_array_class(); | |
1806 case kExternalInt32Array: | |
1807 ASSERT(object_store->external_int32_array_class() != Class::null()); | |
1808 return object_store->external_int32_array_class(); | |
1809 case kExternalUint32Array: | |
1810 ASSERT(object_store->external_uint32_array_class() != Class::null()); | |
1811 return object_store->external_uint32_array_class(); | |
1812 case kExternalInt64Array: | |
1813 ASSERT(object_store->external_int64_array_class() != Class::null()); | |
1814 return object_store->external_int64_array_class(); | |
1815 case kExternalUint64Array: | |
1816 ASSERT(object_store->external_uint64_array_class() != Class::null()); | |
1817 return object_store->external_uint64_array_class(); | |
1818 case kExternalFloat32Array: | |
1819 ASSERT(object_store->external_float32_array_class() != Class::null()); | |
1820 return object_store->external_float32_array_class(); | |
1821 case kExternalFloat64Array: | |
1822 ASSERT(object_store->external_float64_array_class() != Class::null()); | |
1823 return object_store->external_float64_array_class(); | |
1824 case kStacktrace: | |
1825 ASSERT(object_store->stacktrace_class() != Class::null()); | |
1826 return object_store->stacktrace_class(); | |
1827 case kJSRegExp: | |
1828 ASSERT(object_store->jsregexp_class() != Class::null()); | |
1829 return object_store->jsregexp_class(); | |
1830 case kClosure: | |
1831 return Class::New<Closure>(); | 1607 return Class::New<Closure>(); |
1832 case kInstance: | 1608 } |
1833 return Class::New<Instance>(); | 1609 return Class::New<Instance>(); |
1834 default: | |
1835 OS::Print("Class::GetClass kind unknown: %d\n", kind); | |
1836 UNREACHABLE(); | |
1837 } | 1610 } |
| 1611 OS::Print("Class::GetClass id unknown: %d\n", class_id); |
| 1612 UNREACHABLE(); |
1838 return Class::null(); | 1613 return Class::null(); |
1839 } | 1614 } |
1840 | 1615 |
1841 | 1616 |
1842 RawClass* Class::NewNativeWrapper(Library* library, | 1617 RawClass* Class::NewNativeWrapper(Library* library, |
1843 const String& name, | 1618 const String& name, |
1844 int field_count) { | 1619 int field_count) { |
1845 Class& cls = Class::Handle(library->LookupClass(name)); | 1620 Class& cls = Class::Handle(library->LookupClass(name)); |
1846 if (cls.IsNull()) { | 1621 if (cls.IsNull()) { |
1847 cls = New<Instance>(name, Script::Handle(), Scanner::kDummyTokenIndex); | 1622 cls = New<Instance>(name, Script::Handle(), Scanner::kDummyTokenIndex); |
(...skipping 472 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2320 const UnresolvedClass& type = UnresolvedClass::Handle(UnresolvedClass::New()); | 2095 const UnresolvedClass& type = UnresolvedClass::Handle(UnresolvedClass::New()); |
2321 type.set_library_prefix(library_prefix); | 2096 type.set_library_prefix(library_prefix); |
2322 type.set_ident(ident); | 2097 type.set_ident(ident); |
2323 type.set_token_pos(token_pos); | 2098 type.set_token_pos(token_pos); |
2324 return type.raw(); | 2099 return type.raw(); |
2325 } | 2100 } |
2326 | 2101 |
2327 | 2102 |
2328 RawUnresolvedClass* UnresolvedClass::New() { | 2103 RawUnresolvedClass* UnresolvedClass::New() { |
2329 ASSERT(Object::unresolved_class_class() != Class::null()); | 2104 ASSERT(Object::unresolved_class_class() != Class::null()); |
2330 RawObject* raw = Object::Allocate(UnresolvedClass::kInstanceKind, | 2105 RawObject* raw = Object::Allocate(UnresolvedClass::kClassId, |
2331 UnresolvedClass::InstanceSize(), | 2106 UnresolvedClass::InstanceSize(), |
2332 Heap::kOld); | 2107 Heap::kOld); |
2333 return reinterpret_cast<RawUnresolvedClass*>(raw); | 2108 return reinterpret_cast<RawUnresolvedClass*>(raw); |
2334 } | 2109 } |
2335 | 2110 |
2336 | 2111 |
2337 void UnresolvedClass::set_token_pos(intptr_t token_pos) const { | 2112 void UnresolvedClass::set_token_pos(intptr_t token_pos) const { |
2338 ASSERT(token_pos >= 0); | 2113 ASSERT(token_pos >= 0); |
2339 raw_ptr()->token_pos_ = token_pos; | 2114 raw_ptr()->token_pos_ = token_pos; |
2340 } | 2115 } |
(...skipping 628 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2969 } | 2744 } |
2970 | 2745 |
2971 | 2746 |
2972 void Type::set_arguments(const AbstractTypeArguments& value) const { | 2747 void Type::set_arguments(const AbstractTypeArguments& value) const { |
2973 StorePointer(&raw_ptr()->arguments_, value.raw()); | 2748 StorePointer(&raw_ptr()->arguments_, value.raw()); |
2974 } | 2749 } |
2975 | 2750 |
2976 | 2751 |
2977 RawType* Type::New(Heap::Space space) { | 2752 RawType* Type::New(Heap::Space space) { |
2978 ASSERT(Object::type_class() != Class::null()); | 2753 ASSERT(Object::type_class() != Class::null()); |
2979 RawObject* raw = Object::Allocate(Type::kInstanceKind, | 2754 RawObject* raw = Object::Allocate(Type::kClassId, |
2980 Type::InstanceSize(), | 2755 Type::InstanceSize(), |
2981 space); | 2756 space); |
2982 return reinterpret_cast<RawType*>(raw); | 2757 return reinterpret_cast<RawType*>(raw); |
2983 } | 2758 } |
2984 | 2759 |
2985 | 2760 |
2986 RawType* Type::New(const Object& clazz, | 2761 RawType* Type::New(const Object& clazz, |
2987 const AbstractTypeArguments& arguments, | 2762 const AbstractTypeArguments& arguments, |
2988 intptr_t token_pos, | 2763 intptr_t token_pos, |
2989 Heap::Space space) { | 2764 Heap::Space space) { |
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3128 ASSERT(IsFinalized()); | 2903 ASSERT(IsFinalized()); |
3129 if (instantiator_type_arguments.IsNull()) { | 2904 if (instantiator_type_arguments.IsNull()) { |
3130 return Type::DynamicType(); | 2905 return Type::DynamicType(); |
3131 } | 2906 } |
3132 return instantiator_type_arguments.TypeAt(index()); | 2907 return instantiator_type_arguments.TypeAt(index()); |
3133 } | 2908 } |
3134 | 2909 |
3135 | 2910 |
3136 RawTypeParameter* TypeParameter::New() { | 2911 RawTypeParameter* TypeParameter::New() { |
3137 ASSERT(Object::type_parameter_class() != Class::null()); | 2912 ASSERT(Object::type_parameter_class() != Class::null()); |
3138 RawObject* raw = Object::Allocate(TypeParameter::kInstanceKind, | 2913 RawObject* raw = Object::Allocate(TypeParameter::kClassId, |
3139 TypeParameter::InstanceSize(), | 2914 TypeParameter::InstanceSize(), |
3140 Heap::kOld); | 2915 Heap::kOld); |
3141 return reinterpret_cast<RawTypeParameter*>(raw); | 2916 return reinterpret_cast<RawTypeParameter*>(raw); |
3142 } | 2917 } |
3143 | 2918 |
3144 | 2919 |
3145 RawTypeParameter* TypeParameter::New(const Class& parameterized_class, | 2920 RawTypeParameter* TypeParameter::New(const Class& parameterized_class, |
3146 intptr_t index, | 2921 intptr_t index, |
3147 const String& name, | 2922 const String& name, |
3148 const AbstractType& bound, | 2923 const AbstractType& bound, |
(...skipping 402 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3551 } | 3326 } |
3552 | 3327 |
3553 | 3328 |
3554 RawTypeArguments* TypeArguments::New(intptr_t len, Heap::Space space) { | 3329 RawTypeArguments* TypeArguments::New(intptr_t len, Heap::Space space) { |
3555 if (len < 0 || len > kMaxElements) { | 3330 if (len < 0 || len > kMaxElements) { |
3556 // This should be caught before we reach here. | 3331 // This should be caught before we reach here. |
3557 FATAL1("Fatal error in TypeArguments::New: invalid len %ld\n", len); | 3332 FATAL1("Fatal error in TypeArguments::New: invalid len %ld\n", len); |
3558 } | 3333 } |
3559 TypeArguments& result = TypeArguments::Handle(); | 3334 TypeArguments& result = TypeArguments::Handle(); |
3560 { | 3335 { |
3561 RawObject* raw = Object::Allocate(TypeArguments::kInstanceKind, | 3336 RawObject* raw = Object::Allocate(TypeArguments::kClassId, |
3562 TypeArguments::InstanceSize(len), | 3337 TypeArguments::InstanceSize(len), |
3563 space); | 3338 space); |
3564 NoGCScope no_gc; | 3339 NoGCScope no_gc; |
3565 result ^= raw; | 3340 result ^= raw; |
3566 // Length must be set before we start storing into the array. | 3341 // Length must be set before we start storing into the array. |
3567 result.SetLength(len); | 3342 result.SetLength(len); |
3568 } | 3343 } |
3569 return result.raw(); | 3344 return result.raw(); |
3570 } | 3345 } |
3571 | 3346 |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3671 | 3446 |
3672 | 3447 |
3673 void InstantiatedTypeArguments::set_instantiator_type_arguments( | 3448 void InstantiatedTypeArguments::set_instantiator_type_arguments( |
3674 const AbstractTypeArguments& value) const { | 3449 const AbstractTypeArguments& value) const { |
3675 StorePointer(&raw_ptr()->instantiator_type_arguments_, value.raw()); | 3450 StorePointer(&raw_ptr()->instantiator_type_arguments_, value.raw()); |
3676 } | 3451 } |
3677 | 3452 |
3678 | 3453 |
3679 RawInstantiatedTypeArguments* InstantiatedTypeArguments::New() { | 3454 RawInstantiatedTypeArguments* InstantiatedTypeArguments::New() { |
3680 ASSERT(Object::instantiated_type_arguments_class() != Class::null()); | 3455 ASSERT(Object::instantiated_type_arguments_class() != Class::null()); |
3681 RawObject* raw = Object::Allocate(InstantiatedTypeArguments::kInstanceKind, | 3456 RawObject* raw = Object::Allocate(InstantiatedTypeArguments::kClassId, |
3682 InstantiatedTypeArguments::InstanceSize(), | 3457 InstantiatedTypeArguments::InstanceSize(), |
3683 Heap::kNew); | 3458 Heap::kNew); |
3684 return reinterpret_cast<RawInstantiatedTypeArguments*>(raw); | 3459 return reinterpret_cast<RawInstantiatedTypeArguments*>(raw); |
3685 } | 3460 } |
3686 | 3461 |
3687 | 3462 |
3688 RawInstantiatedTypeArguments* InstantiatedTypeArguments::New( | 3463 RawInstantiatedTypeArguments* InstantiatedTypeArguments::New( |
3689 const AbstractTypeArguments& uninstantiated_type_arguments, | 3464 const AbstractTypeArguments& uninstantiated_type_arguments, |
3690 const AbstractTypeArguments& instantiator_type_arguments) { | 3465 const AbstractTypeArguments& instantiator_type_arguments) { |
3691 const InstantiatedTypeArguments& result = | 3466 const InstantiatedTypeArguments& result = |
(...skipping 507 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4199 if (!IsClosureFunction()) { | 3974 if (!IsClosureFunction()) { |
4200 return false; | 3975 return false; |
4201 } | 3976 } |
4202 const Function& parent = Function::Handle(parent_function()); | 3977 const Function& parent = Function::Handle(parent_function()); |
4203 return parent.raw_ptr()->implicit_closure_function_ == raw(); | 3978 return parent.raw_ptr()->implicit_closure_function_ == raw(); |
4204 } | 3979 } |
4205 | 3980 |
4206 | 3981 |
4207 RawFunction* Function::New() { | 3982 RawFunction* Function::New() { |
4208 ASSERT(Object::function_class() != Class::null()); | 3983 ASSERT(Object::function_class() != Class::null()); |
4209 RawObject* raw = Object::Allocate(Function::kInstanceKind, | 3984 RawObject* raw = Object::Allocate(Function::kClassId, |
4210 Function::InstanceSize(), | 3985 Function::InstanceSize(), |
4211 Heap::kOld); | 3986 Heap::kOld); |
4212 return reinterpret_cast<RawFunction*>(raw); | 3987 return reinterpret_cast<RawFunction*>(raw); |
4213 } | 3988 } |
4214 | 3989 |
4215 | 3990 |
4216 RawFunction* Function::New(const String& name, | 3991 RawFunction* Function::New(const String& name, |
4217 RawFunction::Kind kind, | 3992 RawFunction::Kind kind, |
4218 bool is_static, | 3993 bool is_static, |
4219 bool is_const, | 3994 bool is_const, |
(...skipping 383 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4603 | 4378 |
4604 | 4379 |
4605 void Field::set_type(const AbstractType& value) const { | 4380 void Field::set_type(const AbstractType& value) const { |
4606 ASSERT(!value.IsNull()); | 4381 ASSERT(!value.IsNull()); |
4607 StorePointer(&raw_ptr()->type_, value.raw()); | 4382 StorePointer(&raw_ptr()->type_, value.raw()); |
4608 } | 4383 } |
4609 | 4384 |
4610 | 4385 |
4611 RawField* Field::New() { | 4386 RawField* Field::New() { |
4612 ASSERT(Object::field_class() != Class::null()); | 4387 ASSERT(Object::field_class() != Class::null()); |
4613 RawObject* raw = Object::Allocate(Field::kInstanceKind, | 4388 RawObject* raw = Object::Allocate(Field::kClassId, |
4614 Field::InstanceSize(), | 4389 Field::InstanceSize(), |
4615 Heap::kOld); | 4390 Heap::kOld); |
4616 return reinterpret_cast<RawField*>(raw); | 4391 return reinterpret_cast<RawField*>(raw); |
4617 } | 4392 } |
4618 | 4393 |
4619 | 4394 |
4620 RawField* Field::New(const String& name, | 4395 RawField* Field::New(const String& name, |
4621 bool is_static, | 4396 bool is_static, |
4622 bool is_final, | 4397 bool is_final, |
4623 bool is_const, | 4398 bool is_const, |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4669 } | 4444 } |
4670 | 4445 |
4671 | 4446 |
4672 void LiteralToken::set_value(const Object& value) const { | 4447 void LiteralToken::set_value(const Object& value) const { |
4673 StorePointer(&raw_ptr()->value_, value.raw()); | 4448 StorePointer(&raw_ptr()->value_, value.raw()); |
4674 } | 4449 } |
4675 | 4450 |
4676 | 4451 |
4677 RawLiteralToken* LiteralToken::New() { | 4452 RawLiteralToken* LiteralToken::New() { |
4678 ASSERT(Object::literal_token_class() != Class::null()); | 4453 ASSERT(Object::literal_token_class() != Class::null()); |
4679 RawObject* raw = Object::Allocate(LiteralToken::kInstanceKind, | 4454 RawObject* raw = Object::Allocate(LiteralToken::kClassId, |
4680 LiteralToken::InstanceSize(), | 4455 LiteralToken::InstanceSize(), |
4681 Heap::kOld); | 4456 Heap::kOld); |
4682 return reinterpret_cast<RawLiteralToken*>(raw); | 4457 return reinterpret_cast<RawLiteralToken*>(raw); |
4683 } | 4458 } |
4684 | 4459 |
4685 | 4460 |
4686 RawLiteralToken* LiteralToken::New(Token::Kind kind, const String& literal) { | 4461 RawLiteralToken* LiteralToken::New(Token::Kind kind, const String& literal) { |
4687 const LiteralToken& result = LiteralToken::Handle(LiteralToken::New()); | 4462 const LiteralToken& result = LiteralToken::Handle(LiteralToken::New()); |
4688 result.set_kind(kind); | 4463 result.set_kind(kind); |
4689 result.set_literal(literal); | 4464 result.set_literal(literal); |
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4855 | 4630 |
4856 | 4631 |
4857 RawTokenStream* TokenStream::New(intptr_t len) { | 4632 RawTokenStream* TokenStream::New(intptr_t len) { |
4858 ASSERT(Object::token_stream_class() != Class::null()); | 4633 ASSERT(Object::token_stream_class() != Class::null()); |
4859 if (len < 0 || len > kMaxElements) { | 4634 if (len < 0 || len > kMaxElements) { |
4860 // This should be caught before we reach here. | 4635 // This should be caught before we reach here. |
4861 FATAL1("Fatal error in TokenStream::New: invalid len %ld\n", len); | 4636 FATAL1("Fatal error in TokenStream::New: invalid len %ld\n", len); |
4862 } | 4637 } |
4863 TokenStream& result = TokenStream::Handle(); | 4638 TokenStream& result = TokenStream::Handle(); |
4864 { | 4639 { |
4865 RawObject* raw = Object::Allocate(TokenStream::kInstanceKind, | 4640 RawObject* raw = Object::Allocate(TokenStream::kClassId, |
4866 TokenStream::InstanceSize(len), | 4641 TokenStream::InstanceSize(len), |
4867 Heap::kOld); | 4642 Heap::kOld); |
4868 NoGCScope no_gc; | 4643 NoGCScope no_gc; |
4869 result ^= raw; | 4644 result ^= raw; |
4870 result.SetLength(len); | 4645 result.SetLength(len); |
4871 } | 4646 } |
4872 return result.raw(); | 4647 return result.raw(); |
4873 } | 4648 } |
4874 | 4649 |
4875 | 4650 |
(...skipping 476 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5352 if ((snippet_start != -1) && (snippet_end != -1)) { | 5127 if ((snippet_start != -1) && (snippet_end != -1)) { |
5353 snippet = | 5128 snippet = |
5354 String::SubString(src, snippet_start, snippet_end - snippet_start); | 5129 String::SubString(src, snippet_start, snippet_end - snippet_start); |
5355 } | 5130 } |
5356 return snippet.raw(); | 5131 return snippet.raw(); |
5357 } | 5132 } |
5358 | 5133 |
5359 | 5134 |
5360 RawScript* Script::New() { | 5135 RawScript* Script::New() { |
5361 ASSERT(Object::script_class() != Class::null()); | 5136 ASSERT(Object::script_class() != Class::null()); |
5362 RawObject* raw = Object::Allocate(Script::kInstanceKind, | 5137 RawObject* raw = Object::Allocate(Script::kClassId, |
5363 Script::InstanceSize(), | 5138 Script::InstanceSize(), |
5364 Heap::kOld); | 5139 Heap::kOld); |
5365 return reinterpret_cast<RawScript*>(raw); | 5140 return reinterpret_cast<RawScript*>(raw); |
5366 } | 5141 } |
5367 | 5142 |
5368 | 5143 |
5369 RawScript* Script::New(const String& url, | 5144 RawScript* Script::New(const String& url, |
5370 const String& source, | 5145 const String& source, |
5371 RawScript::Kind kind) { | 5146 RawScript::Kind kind) { |
5372 const Script& result = Script::Handle(Script::New()); | 5147 const Script& result = Script::Handle(Script::New()); |
(...skipping 804 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6177 void Library::InitImportedIntoList() const { | 5952 void Library::InitImportedIntoList() const { |
6178 const Array& imported_into = | 5953 const Array& imported_into = |
6179 Array::Handle(Array::New(kInitialImportedIntoCapacity, Heap::kOld)); | 5954 Array::Handle(Array::New(kInitialImportedIntoCapacity, Heap::kOld)); |
6180 StorePointer(&raw_ptr()->imported_into_, imported_into.raw()); | 5955 StorePointer(&raw_ptr()->imported_into_, imported_into.raw()); |
6181 raw_ptr()->num_imported_into_ = 0; | 5956 raw_ptr()->num_imported_into_ = 0; |
6182 } | 5957 } |
6183 | 5958 |
6184 | 5959 |
6185 RawLibrary* Library::New() { | 5960 RawLibrary* Library::New() { |
6186 ASSERT(Object::library_class() != Class::null()); | 5961 ASSERT(Object::library_class() != Class::null()); |
6187 RawObject* raw = Object::Allocate(Library::kInstanceKind, | 5962 RawObject* raw = Object::Allocate(Library::kClassId, |
6188 Library::InstanceSize(), | 5963 Library::InstanceSize(), |
6189 Heap::kOld); | 5964 Heap::kOld); |
6190 return reinterpret_cast<RawLibrary*>(raw); | 5965 return reinterpret_cast<RawLibrary*>(raw); |
6191 } | 5966 } |
6192 | 5967 |
6193 | 5968 |
6194 RawLibrary* Library::NewLibraryHelper(const String& url, | 5969 RawLibrary* Library::NewLibraryHelper(const String& url, |
6195 bool import_core_lib) { | 5970 bool import_core_lib) { |
6196 const Library& result = Library::Handle(Library::New()); | 5971 const Library& result = Library::Handle(Library::New()); |
6197 result.StorePointer(&result.raw_ptr()->name_, url.raw()); | 5972 result.StorePointer(&result.raw_ptr()->name_, url.raw()); |
(...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6504 if (!resolved_class.IsNull()) { | 6279 if (!resolved_class.IsNull()) { |
6505 return resolved_class.raw(); | 6280 return resolved_class.raw(); |
6506 } | 6281 } |
6507 } | 6282 } |
6508 return Class::null(); | 6283 return Class::null(); |
6509 } | 6284 } |
6510 | 6285 |
6511 | 6286 |
6512 RawLibraryPrefix* LibraryPrefix::New() { | 6287 RawLibraryPrefix* LibraryPrefix::New() { |
6513 ASSERT(Object::library_prefix_class() != Class::null()); | 6288 ASSERT(Object::library_prefix_class() != Class::null()); |
6514 RawObject* raw = Object::Allocate(LibraryPrefix::kInstanceKind, | 6289 RawObject* raw = Object::Allocate(LibraryPrefix::kClassId, |
6515 LibraryPrefix::InstanceSize(), | 6290 LibraryPrefix::InstanceSize(), |
6516 Heap::kOld); | 6291 Heap::kOld); |
6517 return reinterpret_cast<RawLibraryPrefix*>(raw); | 6292 return reinterpret_cast<RawLibraryPrefix*>(raw); |
6518 } | 6293 } |
6519 | 6294 |
6520 | 6295 |
6521 RawLibraryPrefix* LibraryPrefix::New(const String& name, const Library& lib) { | 6296 RawLibraryPrefix* LibraryPrefix::New(const String& name, const Library& lib) { |
6522 const LibraryPrefix& result = LibraryPrefix::Handle(LibraryPrefix::New()); | 6297 const LibraryPrefix& result = LibraryPrefix::Handle(LibraryPrefix::New()); |
6523 result.set_name(name); | 6298 result.set_name(name); |
6524 result.set_num_libs(0); | 6299 result.set_num_libs(0); |
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6636 | 6411 |
6637 RawInstructions* Instructions::New(intptr_t size) { | 6412 RawInstructions* Instructions::New(intptr_t size) { |
6638 ASSERT(Object::instructions_class() != Class::null()); | 6413 ASSERT(Object::instructions_class() != Class::null()); |
6639 if (size < 0 || size > kMaxElements) { | 6414 if (size < 0 || size > kMaxElements) { |
6640 // This should be caught before we reach here. | 6415 // This should be caught before we reach here. |
6641 FATAL1("Fatal error in Instructions::New: invalid size %ld\n", size); | 6416 FATAL1("Fatal error in Instructions::New: invalid size %ld\n", size); |
6642 } | 6417 } |
6643 Instructions& result = Instructions::Handle(); | 6418 Instructions& result = Instructions::Handle(); |
6644 { | 6419 { |
6645 uword aligned_size = Instructions::InstanceSize(size); | 6420 uword aligned_size = Instructions::InstanceSize(size); |
6646 RawObject* raw = Object::Allocate(Instructions::kInstanceKind, | 6421 RawObject* raw = Object::Allocate(Instructions::kClassId, |
6647 aligned_size, | 6422 aligned_size, |
6648 Heap::kCode); | 6423 Heap::kCode); |
6649 NoGCScope no_gc; | 6424 NoGCScope no_gc; |
6650 // TODO(iposva): Remove premarking once old and code spaces are merged. | 6425 // TODO(iposva): Remove premarking once old and code spaces are merged. |
6651 raw->SetMarkBit(); | 6426 raw->SetMarkBit(); |
6652 result ^= raw; | 6427 result ^= raw; |
6653 result.set_size(size); | 6428 result.set_size(size); |
6654 } | 6429 } |
6655 return result.raw(); | 6430 return result.raw(); |
6656 } | 6431 } |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6733 RawPcDescriptors* PcDescriptors::New(intptr_t num_descriptors) { | 6508 RawPcDescriptors* PcDescriptors::New(intptr_t num_descriptors) { |
6734 ASSERT(Object::pc_descriptors_class() != Class::null()); | 6509 ASSERT(Object::pc_descriptors_class() != Class::null()); |
6735 if (num_descriptors < 0 || num_descriptors > kMaxElements) { | 6510 if (num_descriptors < 0 || num_descriptors > kMaxElements) { |
6736 // This should be caught before we reach here. | 6511 // This should be caught before we reach here. |
6737 FATAL1("Fatal error in PcDescriptors::New: invalid num_descriptors %ld\n", | 6512 FATAL1("Fatal error in PcDescriptors::New: invalid num_descriptors %ld\n", |
6738 num_descriptors); | 6513 num_descriptors); |
6739 } | 6514 } |
6740 PcDescriptors& result = PcDescriptors::Handle(); | 6515 PcDescriptors& result = PcDescriptors::Handle(); |
6741 { | 6516 { |
6742 uword size = PcDescriptors::InstanceSize(num_descriptors); | 6517 uword size = PcDescriptors::InstanceSize(num_descriptors); |
6743 RawObject* raw = Object::Allocate(PcDescriptors::kInstanceKind, | 6518 RawObject* raw = Object::Allocate(PcDescriptors::kClassId, |
6744 size, | 6519 size, |
6745 Heap::kOld); | 6520 Heap::kOld); |
6746 NoGCScope no_gc; | 6521 NoGCScope no_gc; |
6747 result ^= raw; | 6522 result ^= raw; |
6748 result.SetLength(num_descriptors); | 6523 result.SetLength(num_descriptors); |
6749 } | 6524 } |
6750 return result.raw(); | 6525 return result.raw(); |
6751 } | 6526 } |
6752 | 6527 |
6753 | 6528 |
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6868 ASSERT(bmap != NULL); | 6643 ASSERT(bmap != NULL); |
6869 Stackmap& result = Stackmap::Handle(); | 6644 Stackmap& result = Stackmap::Handle(); |
6870 intptr_t size = bmap->SizeInBytes(); | 6645 intptr_t size = bmap->SizeInBytes(); |
6871 if (size < 0 || size > kMaxElements) { | 6646 if (size < 0 || size > kMaxElements) { |
6872 // This should be caught before we reach here. | 6647 // This should be caught before we reach here. |
6873 FATAL1("Fatal error in PcDescriptors::New: invalid size %ld\n", size); | 6648 FATAL1("Fatal error in PcDescriptors::New: invalid size %ld\n", size); |
6874 } | 6649 } |
6875 { | 6650 { |
6876 // Stackmap data objects are associated with a code object, allocate them | 6651 // Stackmap data objects are associated with a code object, allocate them |
6877 // in old generation. | 6652 // in old generation. |
6878 RawObject* raw = Object::Allocate(Stackmap::kInstanceKind, | 6653 RawObject* raw = Object::Allocate(Stackmap::kClassId, |
6879 Stackmap::InstanceSize(size), | 6654 Stackmap::InstanceSize(size), |
6880 Heap::kOld); | 6655 Heap::kOld); |
6881 NoGCScope no_gc; | 6656 NoGCScope no_gc; |
6882 result ^= raw; | 6657 result ^= raw; |
6883 result.set_bitmap_size_in_bytes(size); | 6658 result.set_bitmap_size_in_bytes(size); |
6884 } | 6659 } |
6885 result.SetPC(pc_offset); | 6660 result.SetPC(pc_offset); |
6886 intptr_t bound = bmap->SizeInBits(); | 6661 intptr_t bound = bmap->SizeInBits(); |
6887 for (intptr_t i = 0; i < bound; i++) { | 6662 for (intptr_t i = 0; i < bound; i++) { |
6888 result.SetBit(i, bmap->Get(i)); | 6663 result.SetBit(i, bmap->Get(i)); |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6963 RawLocalVarDescriptors* LocalVarDescriptors::New(intptr_t num_variables) { | 6738 RawLocalVarDescriptors* LocalVarDescriptors::New(intptr_t num_variables) { |
6964 ASSERT(Object::var_descriptors_class() != Class::null()); | 6739 ASSERT(Object::var_descriptors_class() != Class::null()); |
6965 if (num_variables < 0 || num_variables > kMaxElements) { | 6740 if (num_variables < 0 || num_variables > kMaxElements) { |
6966 // This should be caught before we reach here. | 6741 // This should be caught before we reach here. |
6967 FATAL1("Fatal error in LocalVarDescriptors::New: " | 6742 FATAL1("Fatal error in LocalVarDescriptors::New: " |
6968 "invalid num_variables %ld\n", num_variables); | 6743 "invalid num_variables %ld\n", num_variables); |
6969 } | 6744 } |
6970 LocalVarDescriptors& result = LocalVarDescriptors::Handle(); | 6745 LocalVarDescriptors& result = LocalVarDescriptors::Handle(); |
6971 { | 6746 { |
6972 uword size = LocalVarDescriptors::InstanceSize(num_variables); | 6747 uword size = LocalVarDescriptors::InstanceSize(num_variables); |
6973 RawObject* raw = Object::Allocate(LocalVarDescriptors::kInstanceKind, | 6748 RawObject* raw = Object::Allocate(LocalVarDescriptors::kClassId, |
6974 size, | 6749 size, |
6975 Heap::kOld); | 6750 Heap::kOld); |
6976 NoGCScope no_gc; | 6751 NoGCScope no_gc; |
6977 result ^= raw; | 6752 result ^= raw; |
6978 result.raw_ptr()->length_ = num_variables; | 6753 result.raw_ptr()->length_ = num_variables; |
6979 } | 6754 } |
6980 const Array& names = Array::Handle(Array::New(num_variables, Heap::kOld)); | 6755 const Array& names = Array::Handle(Array::New(num_variables, Heap::kOld)); |
6981 result.raw_ptr()->names_ = names.raw(); | 6756 result.raw_ptr()->names_ = names.raw(); |
6982 return result.raw(); | 6757 return result.raw(); |
6983 } | 6758 } |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7024 RawExceptionHandlers* ExceptionHandlers::New(intptr_t num_handlers) { | 6799 RawExceptionHandlers* ExceptionHandlers::New(intptr_t num_handlers) { |
7025 ASSERT(Object::exception_handlers_class() != Class::null()); | 6800 ASSERT(Object::exception_handlers_class() != Class::null()); |
7026 if (num_handlers < 0 || num_handlers > kMaxElements) { | 6801 if (num_handlers < 0 || num_handlers > kMaxElements) { |
7027 // This should be caught before we reach here. | 6802 // This should be caught before we reach here. |
7028 FATAL1("Fatal error in ExceptionHandlers::New: invalid num_handlers %ld\n", | 6803 FATAL1("Fatal error in ExceptionHandlers::New: invalid num_handlers %ld\n", |
7029 num_handlers); | 6804 num_handlers); |
7030 } | 6805 } |
7031 ExceptionHandlers& result = ExceptionHandlers::Handle(); | 6806 ExceptionHandlers& result = ExceptionHandlers::Handle(); |
7032 { | 6807 { |
7033 uword size = ExceptionHandlers::InstanceSize(num_handlers); | 6808 uword size = ExceptionHandlers::InstanceSize(num_handlers); |
7034 RawObject* raw = Object::Allocate(ExceptionHandlers::kInstanceKind, | 6809 RawObject* raw = Object::Allocate(ExceptionHandlers::kClassId, |
7035 size, | 6810 size, |
7036 Heap::kOld); | 6811 Heap::kOld); |
7037 NoGCScope no_gc; | 6812 NoGCScope no_gc; |
7038 result ^= raw; | 6813 result ^= raw; |
7039 result.SetLength(num_handlers); | 6814 result.SetLength(num_handlers); |
7040 } | 6815 } |
7041 return result.raw(); | 6816 return result.raw(); |
7042 } | 6817 } |
7043 | 6818 |
7044 | 6819 |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7108 } | 6883 } |
7109 return buffer; | 6884 return buffer; |
7110 } | 6885 } |
7111 | 6886 |
7112 | 6887 |
7113 RawDeoptInfo* DeoptInfo::New(intptr_t num_commands) { | 6888 RawDeoptInfo* DeoptInfo::New(intptr_t num_commands) { |
7114 ASSERT(Object::deopt_info_class() != Class::null()); | 6889 ASSERT(Object::deopt_info_class() != Class::null()); |
7115 DeoptInfo& result = DeoptInfo::Handle(); | 6890 DeoptInfo& result = DeoptInfo::Handle(); |
7116 { | 6891 { |
7117 uword size = DeoptInfo::InstanceSize(num_commands); | 6892 uword size = DeoptInfo::InstanceSize(num_commands); |
7118 RawObject* raw = Object::Allocate(DeoptInfo::kInstanceKind, | 6893 RawObject* raw = Object::Allocate(DeoptInfo::kClassId, |
7119 size, | 6894 size, |
7120 Heap::kOld); | 6895 Heap::kOld); |
7121 NoGCScope no_gc; | 6896 NoGCScope no_gc; |
7122 result ^= raw; | 6897 result ^= raw; |
7123 result.SetLength(num_commands); | 6898 result.SetLength(num_commands); |
7124 } | 6899 } |
7125 return result.raw(); | 6900 return result.raw(); |
7126 } | 6901 } |
7127 | 6902 |
7128 | 6903 |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7221 RawCode* Code::New(intptr_t pointer_offsets_length) { | 6996 RawCode* Code::New(intptr_t pointer_offsets_length) { |
7222 if (pointer_offsets_length < 0 || pointer_offsets_length > kMaxElements) { | 6997 if (pointer_offsets_length < 0 || pointer_offsets_length > kMaxElements) { |
7223 // This should be caught before we reach here. | 6998 // This should be caught before we reach here. |
7224 FATAL1("Fatal error in Code::New: invalid pointer_offsets_length %ld\n", | 6999 FATAL1("Fatal error in Code::New: invalid pointer_offsets_length %ld\n", |
7225 pointer_offsets_length); | 7000 pointer_offsets_length); |
7226 } | 7001 } |
7227 ASSERT(Object::code_class() != Class::null()); | 7002 ASSERT(Object::code_class() != Class::null()); |
7228 Code& result = Code::Handle(); | 7003 Code& result = Code::Handle(); |
7229 { | 7004 { |
7230 uword size = Code::InstanceSize(pointer_offsets_length); | 7005 uword size = Code::InstanceSize(pointer_offsets_length); |
7231 RawObject* raw = Object::Allocate(Code::kInstanceKind, size, Heap::kOld); | 7006 RawObject* raw = Object::Allocate(Code::kClassId, size, Heap::kOld); |
7232 NoGCScope no_gc; | 7007 NoGCScope no_gc; |
7233 result ^= raw; | 7008 result ^= raw; |
7234 result.set_pointer_offsets_length(pointer_offsets_length); | 7009 result.set_pointer_offsets_length(pointer_offsets_length); |
7235 result.set_is_optimized(false); | 7010 result.set_is_optimized(false); |
7236 result.set_comments(Comments::New(0)); | 7011 result.set_comments(Comments::New(0)); |
7237 } | 7012 } |
7238 return result.raw(); | 7013 return result.raw(); |
7239 } | 7014 } |
7240 | 7015 |
7241 | 7016 |
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7459 ASSERT(num_variables >= 0); | 7234 ASSERT(num_variables >= 0); |
7460 ASSERT(Object::context_class() != Class::null()); | 7235 ASSERT(Object::context_class() != Class::null()); |
7461 | 7236 |
7462 if (num_variables < 0 || num_variables > kMaxElements) { | 7237 if (num_variables < 0 || num_variables > kMaxElements) { |
7463 // This should be caught before we reach here. | 7238 // This should be caught before we reach here. |
7464 FATAL1("Fatal error in Context::New: invalid num_variables %ld\n", | 7239 FATAL1("Fatal error in Context::New: invalid num_variables %ld\n", |
7465 num_variables); | 7240 num_variables); |
7466 } | 7241 } |
7467 Context& result = Context::Handle(); | 7242 Context& result = Context::Handle(); |
7468 { | 7243 { |
7469 RawObject* raw = Object::Allocate(Context::kInstanceKind, | 7244 RawObject* raw = Object::Allocate(Context::kClassId, |
7470 Context::InstanceSize(num_variables), | 7245 Context::InstanceSize(num_variables), |
7471 space); | 7246 space); |
7472 NoGCScope no_gc; | 7247 NoGCScope no_gc; |
7473 result ^= raw; | 7248 result ^= raw; |
7474 result.set_num_variables(num_variables); | 7249 result.set_num_variables(num_variables); |
7475 } | 7250 } |
7476 result.set_isolate(Isolate::Current()); | 7251 result.set_isolate(Isolate::Current()); |
7477 return result.raw(); | 7252 return result.raw(); |
7478 } | 7253 } |
7479 | 7254 |
7480 | 7255 |
7481 const char* Context::ToCString() const { | 7256 const char* Context::ToCString() const { |
7482 return "Context"; | 7257 return "Context"; |
7483 } | 7258 } |
7484 | 7259 |
7485 | 7260 |
7486 RawContextScope* ContextScope::New(intptr_t num_variables) { | 7261 RawContextScope* ContextScope::New(intptr_t num_variables) { |
7487 ASSERT(Object::context_scope_class() != Class::null()); | 7262 ASSERT(Object::context_scope_class() != Class::null()); |
7488 if (num_variables < 0 || num_variables > kMaxElements) { | 7263 if (num_variables < 0 || num_variables > kMaxElements) { |
7489 // This should be caught before we reach here. | 7264 // This should be caught before we reach here. |
7490 FATAL1("Fatal error in ContextScope::New: invalid num_variables %ld\n", | 7265 FATAL1("Fatal error in ContextScope::New: invalid num_variables %ld\n", |
7491 num_variables); | 7266 num_variables); |
7492 } | 7267 } |
7493 intptr_t size = ContextScope::InstanceSize(num_variables); | 7268 intptr_t size = ContextScope::InstanceSize(num_variables); |
7494 ContextScope& result = ContextScope::Handle(); | 7269 ContextScope& result = ContextScope::Handle(); |
7495 { | 7270 { |
7496 RawObject* raw = Object::Allocate(ContextScope::kInstanceKind, | 7271 RawObject* raw = Object::Allocate(ContextScope::kClassId, |
7497 size, | 7272 size, |
7498 Heap::kOld); | 7273 Heap::kOld); |
7499 NoGCScope no_gc; | 7274 NoGCScope no_gc; |
7500 result ^= raw; | 7275 result ^= raw; |
7501 result.set_num_variables(num_variables); | 7276 result.set_num_variables(num_variables); |
7502 } | 7277 } |
7503 return result.raw(); | 7278 return result.raw(); |
7504 } | 7279 } |
7505 | 7280 |
7506 | 7281 |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7613 } | 7388 } |
7614 | 7389 |
7615 | 7390 |
7616 intptr_t ICData::NumberOfChecks() const { | 7391 intptr_t ICData::NumberOfChecks() const { |
7617 // Do not count the sentinel; | 7392 // Do not count the sentinel; |
7618 return (Array::Handle(ic_data()).Length() / TestEntryLength()) - 1; | 7393 return (Array::Handle(ic_data()).Length() / TestEntryLength()) - 1; |
7619 } | 7394 } |
7620 | 7395 |
7621 | 7396 |
7622 void ICData::WriteSentinel() const { | 7397 void ICData::WriteSentinel() const { |
7623 const Smi& sentinel_value = Smi::Handle(Smi::New(kIllegalObjectKind)); | 7398 const Smi& sentinel_value = Smi::Handle(Smi::New(kIllegalCid)); |
7624 const Array& data = Array::Handle(ic_data()); | 7399 const Array& data = Array::Handle(ic_data()); |
7625 for (intptr_t i = 1; i <= TestEntryLength(); i++) { | 7400 for (intptr_t i = 1; i <= TestEntryLength(); i++) { |
7626 data.SetAt(data.Length() - i, sentinel_value); | 7401 data.SetAt(data.Length() - i, sentinel_value); |
7627 } | 7402 } |
7628 } | 7403 } |
7629 | 7404 |
7630 | 7405 |
7631 void ICData::AddCheck(const GrowableArray<intptr_t>& class_ids, | 7406 void ICData::AddCheck(const GrowableArray<intptr_t>& class_ids, |
7632 const Function& target) const { | 7407 const Function& target) const { |
7633 ASSERT(num_args_tested() > 1); // Otherwise use 'AddReceiverCheck'. | 7408 ASSERT(num_args_tested() > 1); // Otherwise use 'AddReceiverCheck'. |
7634 ASSERT(class_ids.length() == num_args_tested()); | 7409 ASSERT(class_ids.length() == num_args_tested()); |
7635 const intptr_t old_num = NumberOfChecks(); | 7410 const intptr_t old_num = NumberOfChecks(); |
7636 Array& data = Array::Handle(ic_data()); | 7411 Array& data = Array::Handle(ic_data()); |
7637 const intptr_t new_len = data.Length() + TestEntryLength(); | 7412 const intptr_t new_len = data.Length() + TestEntryLength(); |
7638 data = Array::Grow(data, new_len, Heap::kOld); | 7413 data = Array::Grow(data, new_len, Heap::kOld); |
7639 set_ic_data(data); | 7414 set_ic_data(data); |
7640 WriteSentinel(); | 7415 WriteSentinel(); |
7641 intptr_t data_pos = old_num * TestEntryLength(); | 7416 intptr_t data_pos = old_num * TestEntryLength(); |
7642 for (intptr_t i = 0; i < class_ids.length(); i++) { | 7417 for (intptr_t i = 0; i < class_ids.length(); i++) { |
7643 // kIllegalObjectKind is used as terminating value, do not add it. | 7418 // kIllegalCid is used as terminating value, do not add it. |
7644 ASSERT(class_ids[i] != kIllegalObjectKind); | 7419 ASSERT(class_ids[i] != kIllegalCid); |
7645 data.SetAt(data_pos++, Smi::Handle(Smi::New(class_ids[i]))); | 7420 data.SetAt(data_pos++, Smi::Handle(Smi::New(class_ids[i]))); |
7646 } | 7421 } |
7647 ASSERT(!target.IsNull()); | 7422 ASSERT(!target.IsNull()); |
7648 data.SetAt(data_pos, target); | 7423 data.SetAt(data_pos, target); |
7649 } | 7424 } |
7650 | 7425 |
7651 | 7426 |
7652 void ICData::AddReceiverCheck(intptr_t receiver_class_id, | 7427 void ICData::AddReceiverCheck(intptr_t receiver_class_id, |
7653 const Function& target) const { | 7428 const Function& target) const { |
7654 ASSERT(num_args_tested() == 1); // Otherwise use 'AddCheck'. | 7429 ASSERT(num_args_tested() == 1); // Otherwise use 'AddCheck'. |
7655 ASSERT(receiver_class_id != kIllegalObjectKind); | 7430 ASSERT(receiver_class_id != kIllegalCid); |
7656 ASSERT(!target.IsNull()); | 7431 ASSERT(!target.IsNull()); |
7657 | 7432 |
7658 const intptr_t old_num = NumberOfChecks(); | 7433 const intptr_t old_num = NumberOfChecks(); |
7659 Array& data = Array::Handle(ic_data()); | 7434 Array& data = Array::Handle(ic_data()); |
7660 const intptr_t new_len = data.Length() + TestEntryLength(); | 7435 const intptr_t new_len = data.Length() + TestEntryLength(); |
7661 data = Array::Grow(data, new_len, Heap::kOld); | 7436 data = Array::Grow(data, new_len, Heap::kOld); |
7662 set_ic_data(data); | 7437 set_ic_data(data); |
7663 WriteSentinel(); | 7438 WriteSentinel(); |
7664 intptr_t data_pos = old_num * TestEntryLength(); | 7439 intptr_t data_pos = old_num * TestEntryLength(); |
7665 if ((receiver_class_id == kSmi) && (data_pos > 0)) { | 7440 if ((receiver_class_id == kSmiCid) && (data_pos > 0)) { |
7666 // Instert kSmi in position 0. | 7441 // Instert kSmiCid in position 0. |
7667 const intptr_t zero_class_id = GetReceiverClassIdAt(0); | 7442 const intptr_t zero_class_id = GetReceiverClassIdAt(0); |
7668 ASSERT(zero_class_id != kSmi); // Simple duplicate entry check. | 7443 ASSERT(zero_class_id != kSmiCid); // Simple duplicate entry check. |
7669 const Function& zero_target = Function::Handle(GetTargetAt(0)); | 7444 const Function& zero_target = Function::Handle(GetTargetAt(0)); |
7670 data.SetAt(0, Smi::Handle(Smi::New(receiver_class_id))); | 7445 data.SetAt(0, Smi::Handle(Smi::New(receiver_class_id))); |
7671 data.SetAt(1, target); | 7446 data.SetAt(1, target); |
7672 data.SetAt(data_pos, Smi::Handle(Smi::New(zero_class_id))); | 7447 data.SetAt(data_pos, Smi::Handle(Smi::New(zero_class_id))); |
7673 data.SetAt(data_pos + 1, zero_target); | 7448 data.SetAt(data_pos + 1, zero_target); |
7674 } else { | 7449 } else { |
7675 data.SetAt(data_pos, Smi::Handle(Smi::New(receiver_class_id))); | 7450 data.SetAt(data_pos, Smi::Handle(Smi::New(receiver_class_id))); |
7676 data.SetAt(data_pos + 1, target); | 7451 data.SetAt(data_pos + 1, target); |
7677 } | 7452 } |
7678 } | 7453 } |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7771 | 7546 |
7772 RawICData* ICData::New(const Function& function, | 7547 RawICData* ICData::New(const Function& function, |
7773 const String& target_name, | 7548 const String& target_name, |
7774 intptr_t deopt_id, | 7549 intptr_t deopt_id, |
7775 intptr_t num_args_tested) { | 7550 intptr_t num_args_tested) { |
7776 ASSERT(Object::icdata_class() != Class::null()); | 7551 ASSERT(Object::icdata_class() != Class::null()); |
7777 ASSERT(num_args_tested > 0); | 7552 ASSERT(num_args_tested > 0); |
7778 ICData& result = ICData::Handle(); | 7553 ICData& result = ICData::Handle(); |
7779 { | 7554 { |
7780 // IC data objects are long living objects, allocate them in old generation. | 7555 // IC data objects are long living objects, allocate them in old generation. |
7781 RawObject* raw = Object::Allocate(ICData::kInstanceKind, | 7556 RawObject* raw = Object::Allocate(ICData::kClassId, |
7782 ICData::InstanceSize(), | 7557 ICData::InstanceSize(), |
7783 Heap::kOld); | 7558 Heap::kOld); |
7784 NoGCScope no_gc; | 7559 NoGCScope no_gc; |
7785 result ^= raw; | 7560 result ^= raw; |
7786 } | 7561 } |
7787 result.set_function(function); | 7562 result.set_function(function); |
7788 result.set_target_name(target_name); | 7563 result.set_target_name(target_name); |
7789 result.set_deopt_id(deopt_id); | 7564 result.set_deopt_id(deopt_id); |
7790 result.set_num_args_tested(num_args_tested); | 7565 result.set_num_args_tested(num_args_tested); |
7791 // Number of array elements in one test entry (num_args_tested + 1) | 7566 // Number of array elements in one test entry (num_args_tested + 1) |
7792 intptr_t len = result.TestEntryLength(); | 7567 intptr_t len = result.TestEntryLength(); |
7793 // IC data array must be null terminated (sentinel entry). | 7568 // IC data array must be null terminated (sentinel entry). |
7794 const Array& ic_data = Array::Handle(Array::New(len, Heap::kOld)); | 7569 const Array& ic_data = Array::Handle(Array::New(len, Heap::kOld)); |
7795 result.set_ic_data(ic_data); | 7570 result.set_ic_data(ic_data); |
7796 result.WriteSentinel(); | 7571 result.WriteSentinel(); |
7797 return result.raw(); | 7572 return result.raw(); |
7798 } | 7573 } |
7799 | 7574 |
7800 | 7575 |
7801 RawSubtypeTestCache* SubtypeTestCache::New() { | 7576 RawSubtypeTestCache* SubtypeTestCache::New() { |
7802 ASSERT(Object::subtypetestcache_class() != Class::null()); | 7577 ASSERT(Object::subtypetestcache_class() != Class::null()); |
7803 SubtypeTestCache& result = SubtypeTestCache::Handle(); | 7578 SubtypeTestCache& result = SubtypeTestCache::Handle(); |
7804 { | 7579 { |
7805 // SubtypeTestCache objects are long living objects, allocate them in the | 7580 // SubtypeTestCache objects are long living objects, allocate them in the |
7806 // old generation. | 7581 // old generation. |
7807 RawObject* raw = Object::Allocate(SubtypeTestCache::kInstanceKind, | 7582 RawObject* raw = Object::Allocate(SubtypeTestCache::kClassId, |
7808 SubtypeTestCache::InstanceSize(), | 7583 SubtypeTestCache::InstanceSize(), |
7809 Heap::kOld); | 7584 Heap::kOld); |
7810 NoGCScope no_gc; | 7585 NoGCScope no_gc; |
7811 result ^= raw; | 7586 result ^= raw; |
7812 } | 7587 } |
7813 const Array& cache = Array::Handle(Array::New(kTestEntryLength)); | 7588 const Array& cache = Array::Handle(Array::New(kTestEntryLength)); |
7814 result.set_cache(cache); | 7589 result.set_cache(cache); |
7815 return result.raw(); | 7590 return result.raw(); |
7816 } | 7591 } |
7817 | 7592 |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7880 // Error is an abstract class. We should never reach here. | 7655 // Error is an abstract class. We should never reach here. |
7881 UNREACHABLE(); | 7656 UNREACHABLE(); |
7882 return "Error"; | 7657 return "Error"; |
7883 } | 7658 } |
7884 | 7659 |
7885 | 7660 |
7886 RawApiError* ApiError::New(const String& message, Heap::Space space) { | 7661 RawApiError* ApiError::New(const String& message, Heap::Space space) { |
7887 ASSERT(Object::api_error_class() != Class::null()); | 7662 ASSERT(Object::api_error_class() != Class::null()); |
7888 ApiError& result = ApiError::Handle(); | 7663 ApiError& result = ApiError::Handle(); |
7889 { | 7664 { |
7890 RawObject* raw = Object::Allocate(ApiError::kInstanceKind, | 7665 RawObject* raw = Object::Allocate(ApiError::kClassId, |
7891 ApiError::InstanceSize(), | 7666 ApiError::InstanceSize(), |
7892 space); | 7667 space); |
7893 NoGCScope no_gc; | 7668 NoGCScope no_gc; |
7894 result ^= raw; | 7669 result ^= raw; |
7895 } | 7670 } |
7896 result.set_message(message); | 7671 result.set_message(message); |
7897 return result.raw(); | 7672 return result.raw(); |
7898 } | 7673 } |
7899 | 7674 |
7900 | 7675 |
(...skipping 10 matching lines...) Expand all Loading... |
7911 | 7686 |
7912 const char* ApiError::ToCString() const { | 7687 const char* ApiError::ToCString() const { |
7913 return "ApiError"; | 7688 return "ApiError"; |
7914 } | 7689 } |
7915 | 7690 |
7916 | 7691 |
7917 RawLanguageError* LanguageError::New(const String& message, Heap::Space space) { | 7692 RawLanguageError* LanguageError::New(const String& message, Heap::Space space) { |
7918 ASSERT(Object::language_error_class() != Class::null()); | 7693 ASSERT(Object::language_error_class() != Class::null()); |
7919 LanguageError& result = LanguageError::Handle(); | 7694 LanguageError& result = LanguageError::Handle(); |
7920 { | 7695 { |
7921 RawObject* raw = Object::Allocate(LanguageError::kInstanceKind, | 7696 RawObject* raw = Object::Allocate(LanguageError::kClassId, |
7922 LanguageError::InstanceSize(), | 7697 LanguageError::InstanceSize(), |
7923 space); | 7698 space); |
7924 NoGCScope no_gc; | 7699 NoGCScope no_gc; |
7925 result ^= raw; | 7700 result ^= raw; |
7926 } | 7701 } |
7927 result.set_message(message); | 7702 result.set_message(message); |
7928 return result.raw(); | 7703 return result.raw(); |
7929 } | 7704 } |
7930 | 7705 |
7931 | 7706 |
(...skipping 12 matching lines...) Expand all Loading... |
7944 return "LanguageError"; | 7719 return "LanguageError"; |
7945 } | 7720 } |
7946 | 7721 |
7947 | 7722 |
7948 RawUnhandledException* UnhandledException::New(const Instance& exception, | 7723 RawUnhandledException* UnhandledException::New(const Instance& exception, |
7949 const Instance& stacktrace, | 7724 const Instance& stacktrace, |
7950 Heap::Space space) { | 7725 Heap::Space space) { |
7951 ASSERT(Object::unhandled_exception_class() != Class::null()); | 7726 ASSERT(Object::unhandled_exception_class() != Class::null()); |
7952 UnhandledException& result = UnhandledException::Handle(); | 7727 UnhandledException& result = UnhandledException::Handle(); |
7953 { | 7728 { |
7954 RawObject* raw = Object::Allocate(UnhandledException::kInstanceKind, | 7729 RawObject* raw = Object::Allocate(UnhandledException::kClassId, |
7955 UnhandledException::InstanceSize(), | 7730 UnhandledException::InstanceSize(), |
7956 space); | 7731 space); |
7957 NoGCScope no_gc; | 7732 NoGCScope no_gc; |
7958 result ^= raw; | 7733 result ^= raw; |
7959 } | 7734 } |
7960 result.set_exception(exception); | 7735 result.set_exception(exception); |
7961 result.set_stacktrace(stacktrace); | 7736 result.set_stacktrace(stacktrace); |
7962 return result.raw(); | 7737 return result.raw(); |
7963 } | 7738 } |
7964 | 7739 |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8005 | 7780 |
8006 const char* UnhandledException::ToCString() const { | 7781 const char* UnhandledException::ToCString() const { |
8007 return "UnhandledException"; | 7782 return "UnhandledException"; |
8008 } | 7783 } |
8009 | 7784 |
8010 | 7785 |
8011 RawUnwindError* UnwindError::New(const String& message, Heap::Space space) { | 7786 RawUnwindError* UnwindError::New(const String& message, Heap::Space space) { |
8012 ASSERT(Object::unwind_error_class() != Class::null()); | 7787 ASSERT(Object::unwind_error_class() != Class::null()); |
8013 UnwindError& result = UnwindError::Handle(); | 7788 UnwindError& result = UnwindError::Handle(); |
8014 { | 7789 { |
8015 RawObject* raw = Object::Allocate(UnwindError::kInstanceKind, | 7790 RawObject* raw = Object::Allocate(UnwindError::kClassId, |
8016 UnwindError::InstanceSize(), | 7791 UnwindError::InstanceSize(), |
8017 space); | 7792 space); |
8018 NoGCScope no_gc; | 7793 NoGCScope no_gc; |
8019 result ^= raw; | 7794 result ^= raw; |
8020 } | 7795 } |
8021 result.set_message(message); | 7796 result.set_message(message); |
8022 return result.raw(); | 7797 return result.raw(); |
8023 } | 7798 } |
8024 | 7799 |
8025 | 7800 |
(...skipping 394 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8420 raw_ptr()->value_ = value; | 8195 raw_ptr()->value_ = value; |
8421 } | 8196 } |
8422 | 8197 |
8423 | 8198 |
8424 RawMint* Mint::New(int64_t val, Heap::Space space) { | 8199 RawMint* Mint::New(int64_t val, Heap::Space space) { |
8425 // Do not allocate a Mint if Smi would do. | 8200 // Do not allocate a Mint if Smi would do. |
8426 ASSERT(!Smi::IsValid64(val)); | 8201 ASSERT(!Smi::IsValid64(val)); |
8427 ASSERT(Isolate::Current()->object_store()->mint_class() != Class::null()); | 8202 ASSERT(Isolate::Current()->object_store()->mint_class() != Class::null()); |
8428 Mint& result = Mint::Handle(); | 8203 Mint& result = Mint::Handle(); |
8429 { | 8204 { |
8430 RawObject* raw = Object::Allocate(Mint::kInstanceKind, | 8205 RawObject* raw = Object::Allocate(Mint::kClassId, |
8431 Mint::InstanceSize(), | 8206 Mint::InstanceSize(), |
8432 space); | 8207 space); |
8433 NoGCScope no_gc; | 8208 NoGCScope no_gc; |
8434 result ^= raw; | 8209 result ^= raw; |
8435 } | 8210 } |
8436 result.set_value(val); | 8211 result.set_value(val); |
8437 return result.raw(); | 8212 return result.raw(); |
8438 } | 8213 } |
8439 | 8214 |
8440 | 8215 |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8547 return false; | 8322 return false; |
8548 } | 8323 } |
8549 return EqualsToDouble(Double::Cast(other).value()); | 8324 return EqualsToDouble(Double::Cast(other).value()); |
8550 } | 8325 } |
8551 | 8326 |
8552 | 8327 |
8553 RawDouble* Double::New(double d, Heap::Space space) { | 8328 RawDouble* Double::New(double d, Heap::Space space) { |
8554 ASSERT(Isolate::Current()->object_store()->double_class() != Class::null()); | 8329 ASSERT(Isolate::Current()->object_store()->double_class() != Class::null()); |
8555 Double& result = Double::Handle(); | 8330 Double& result = Double::Handle(); |
8556 { | 8331 { |
8557 RawObject* raw = Object::Allocate(Double::kInstanceKind, | 8332 RawObject* raw = Object::Allocate(Double::kClassId, |
8558 Double::InstanceSize(), | 8333 Double::InstanceSize(), |
8559 space); | 8334 space); |
8560 NoGCScope no_gc; | 8335 NoGCScope no_gc; |
8561 result ^= raw; | 8336 result ^= raw; |
8562 } | 8337 } |
8563 result.set_value(d); | 8338 result.set_value(d); |
8564 return result.raw(); | 8339 return result.raw(); |
8565 } | 8340 } |
8566 | 8341 |
8567 | 8342 |
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8710 | 8485 |
8711 | 8486 |
8712 RawBigint* Bigint::Allocate(intptr_t length, Heap::Space space) { | 8487 RawBigint* Bigint::Allocate(intptr_t length, Heap::Space space) { |
8713 if (length < 0 || length > kMaxElements) { | 8488 if (length < 0 || length > kMaxElements) { |
8714 // This should be caught before we reach here. | 8489 // This should be caught before we reach here. |
8715 FATAL1("Fatal error in Bigint::Allocate: invalid length %ld\n", length); | 8490 FATAL1("Fatal error in Bigint::Allocate: invalid length %ld\n", length); |
8716 } | 8491 } |
8717 ASSERT(Isolate::Current()->object_store()->bigint_class() != Class::null()); | 8492 ASSERT(Isolate::Current()->object_store()->bigint_class() != Class::null()); |
8718 Bigint& result = Bigint::Handle(); | 8493 Bigint& result = Bigint::Handle(); |
8719 { | 8494 { |
8720 RawObject* raw = Object::Allocate(Bigint::kInstanceKind, | 8495 RawObject* raw = Object::Allocate(Bigint::kClassId, |
8721 Bigint::InstanceSize(length), | 8496 Bigint::InstanceSize(length), |
8722 space); | 8497 space); |
8723 NoGCScope no_gc; | 8498 NoGCScope no_gc; |
8724 result ^= raw; | 8499 result ^= raw; |
8725 result.raw_ptr()->allocated_length_ = length; // Chunk length allocated. | 8500 result.raw_ptr()->allocated_length_ = length; // Chunk length allocated. |
8726 result.raw_ptr()->signed_length_ = length; // Chunk length in use. | 8501 result.raw_ptr()->signed_length_ = length; // Chunk length in use. |
8727 } | 8502 } |
8728 return result.raw(); | 8503 return result.raw(); |
8729 } | 8504 } |
8730 | 8505 |
(...skipping 742 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9473 Heap::Space space) { | 9248 Heap::Space space) { |
9474 ASSERT(Isolate::Current() == Dart::vm_isolate() || | 9249 ASSERT(Isolate::Current() == Dart::vm_isolate() || |
9475 Isolate::Current()->object_store()->one_byte_string_class() != | 9250 Isolate::Current()->object_store()->one_byte_string_class() != |
9476 Class::null()); | 9251 Class::null()); |
9477 if (len < 0 || len > kMaxElements) { | 9252 if (len < 0 || len > kMaxElements) { |
9478 // This should be caught before we reach here. | 9253 // This should be caught before we reach here. |
9479 FATAL1("Fatal error in OneByteString::New: invalid len %ld\n", len); | 9254 FATAL1("Fatal error in OneByteString::New: invalid len %ld\n", len); |
9480 } | 9255 } |
9481 OneByteString& result = OneByteString::Handle(); | 9256 OneByteString& result = OneByteString::Handle(); |
9482 { | 9257 { |
9483 RawObject* raw = Object::Allocate(OneByteString::kInstanceKind, | 9258 RawObject* raw = Object::Allocate(OneByteString::kClassId, |
9484 OneByteString::InstanceSize(len), | 9259 OneByteString::InstanceSize(len), |
9485 space); | 9260 space); |
9486 NoGCScope no_gc; | 9261 NoGCScope no_gc; |
9487 result ^= raw; | 9262 result ^= raw; |
9488 result.SetLength(len); | 9263 result.SetLength(len); |
9489 result.SetHash(0); | 9264 result.SetHash(0); |
9490 } | 9265 } |
9491 return result.raw(); | 9266 return result.raw(); |
9492 } | 9267 } |
9493 | 9268 |
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9615 | 9390 |
9616 RawTwoByteString* TwoByteString::New(intptr_t len, | 9391 RawTwoByteString* TwoByteString::New(intptr_t len, |
9617 Heap::Space space) { | 9392 Heap::Space space) { |
9618 ASSERT(Isolate::Current()->object_store()->two_byte_string_class()); | 9393 ASSERT(Isolate::Current()->object_store()->two_byte_string_class()); |
9619 if (len < 0 || len > kMaxElements) { | 9394 if (len < 0 || len > kMaxElements) { |
9620 // This should be caught before we reach here. | 9395 // This should be caught before we reach here. |
9621 FATAL1("Fatal error in TwoByteString::New: invalid len %ld\n", len); | 9396 FATAL1("Fatal error in TwoByteString::New: invalid len %ld\n", len); |
9622 } | 9397 } |
9623 TwoByteString& result = TwoByteString::Handle(); | 9398 TwoByteString& result = TwoByteString::Handle(); |
9624 { | 9399 { |
9625 RawObject* raw = Object::Allocate(TwoByteString::kInstanceKind, | 9400 RawObject* raw = Object::Allocate(TwoByteString::kClassId, |
9626 TwoByteString::InstanceSize(len), | 9401 TwoByteString::InstanceSize(len), |
9627 space); | 9402 space); |
9628 NoGCScope no_gc; | 9403 NoGCScope no_gc; |
9629 result ^= raw; | 9404 result ^= raw; |
9630 result.SetLength(len); | 9405 result.SetLength(len); |
9631 result.SetHash(0); | 9406 result.SetHash(0); |
9632 } | 9407 } |
9633 return result.raw(); | 9408 return result.raw(); |
9634 } | 9409 } |
9635 | 9410 |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9748 RawFourByteString* FourByteString::New(intptr_t len, | 9523 RawFourByteString* FourByteString::New(intptr_t len, |
9749 Heap::Space space) { | 9524 Heap::Space space) { |
9750 ASSERT(Isolate::Current()->object_store()->four_byte_string_class() != | 9525 ASSERT(Isolate::Current()->object_store()->four_byte_string_class() != |
9751 Class::null()); | 9526 Class::null()); |
9752 if (len < 0 || len > kMaxElements) { | 9527 if (len < 0 || len > kMaxElements) { |
9753 // This should be caught before we reach here. | 9528 // This should be caught before we reach here. |
9754 FATAL1("Fatal error in FourByteString::New: invalid len %ld\n", len); | 9529 FATAL1("Fatal error in FourByteString::New: invalid len %ld\n", len); |
9755 } | 9530 } |
9756 FourByteString& result = FourByteString::Handle(); | 9531 FourByteString& result = FourByteString::Handle(); |
9757 { | 9532 { |
9758 RawObject* raw = Object::Allocate(FourByteString::kInstanceKind, | 9533 RawObject* raw = Object::Allocate(FourByteString::kClassId, |
9759 FourByteString::InstanceSize(len), | 9534 FourByteString::InstanceSize(len), |
9760 space); | 9535 space); |
9761 NoGCScope no_gc; | 9536 NoGCScope no_gc; |
9762 result ^= raw; | 9537 result ^= raw; |
9763 result.SetLength(len); | 9538 result.SetLength(len); |
9764 result.SetHash(0); | 9539 result.SetHash(0); |
9765 } | 9540 } |
9766 return result.raw(); | 9541 return result.raw(); |
9767 } | 9542 } |
9768 | 9543 |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9861 ASSERT(Isolate::Current()->object_store()->external_one_byte_string_class() != | 9636 ASSERT(Isolate::Current()->object_store()->external_one_byte_string_class() != |
9862 Class::null()); | 9637 Class::null()); |
9863 if (len < 0 || len > kMaxElements) { | 9638 if (len < 0 || len > kMaxElements) { |
9864 // This should be caught before we reach here. | 9639 // This should be caught before we reach here. |
9865 FATAL1("Fatal error in ExternalOneByteString::New: invalid len %ld\n", len); | 9640 FATAL1("Fatal error in ExternalOneByteString::New: invalid len %ld\n", len); |
9866 } | 9641 } |
9867 ExternalOneByteString& result = ExternalOneByteString::Handle(); | 9642 ExternalOneByteString& result = ExternalOneByteString::Handle(); |
9868 ExternalStringData<uint8_t>* external_data = | 9643 ExternalStringData<uint8_t>* external_data = |
9869 new ExternalStringData<uint8_t>(data, peer, callback); | 9644 new ExternalStringData<uint8_t>(data, peer, callback); |
9870 { | 9645 { |
9871 RawObject* raw = Object::Allocate(ExternalOneByteString::kInstanceKind, | 9646 RawObject* raw = Object::Allocate(ExternalOneByteString::kClassId, |
9872 ExternalOneByteString::InstanceSize(), | 9647 ExternalOneByteString::InstanceSize(), |
9873 space); | 9648 space); |
9874 NoGCScope no_gc; | 9649 NoGCScope no_gc; |
9875 result ^= raw; | 9650 result ^= raw; |
9876 result.SetLength(len); | 9651 result.SetLength(len); |
9877 result.SetHash(0); | 9652 result.SetHash(0); |
9878 result.SetExternalData(external_data); | 9653 result.SetExternalData(external_data); |
9879 } | 9654 } |
9880 AddFinalizer(result, external_data, ExternalOneByteString::Finalize); | 9655 AddFinalizer(result, external_data, ExternalOneByteString::Finalize); |
9881 return result.raw(); | 9656 return result.raw(); |
(...skipping 30 matching lines...) Expand all Loading... |
9912 ASSERT(Isolate::Current()->object_store()->external_two_byte_string_class() != | 9687 ASSERT(Isolate::Current()->object_store()->external_two_byte_string_class() != |
9913 Class::null()); | 9688 Class::null()); |
9914 if (len < 0 || len > kMaxElements) { | 9689 if (len < 0 || len > kMaxElements) { |
9915 // This should be caught before we reach here. | 9690 // This should be caught before we reach here. |
9916 FATAL1("Fatal error in ExternalTwoByteString::New: invalid len %ld\n", len); | 9691 FATAL1("Fatal error in ExternalTwoByteString::New: invalid len %ld\n", len); |
9917 } | 9692 } |
9918 ExternalTwoByteString& result = ExternalTwoByteString::Handle(); | 9693 ExternalTwoByteString& result = ExternalTwoByteString::Handle(); |
9919 ExternalStringData<uint16_t>* external_data = | 9694 ExternalStringData<uint16_t>* external_data = |
9920 new ExternalStringData<uint16_t>(data, peer, callback); | 9695 new ExternalStringData<uint16_t>(data, peer, callback); |
9921 { | 9696 { |
9922 RawObject* raw = Object::Allocate(ExternalTwoByteString::kInstanceKind, | 9697 RawObject* raw = Object::Allocate(ExternalTwoByteString::kClassId, |
9923 ExternalTwoByteString::InstanceSize(), | 9698 ExternalTwoByteString::InstanceSize(), |
9924 space); | 9699 space); |
9925 NoGCScope no_gc; | 9700 NoGCScope no_gc; |
9926 result ^= raw; | 9701 result ^= raw; |
9927 result.SetLength(len); | 9702 result.SetLength(len); |
9928 result.SetHash(0); | 9703 result.SetHash(0); |
9929 result.SetExternalData(external_data); | 9704 result.SetExternalData(external_data); |
9930 } | 9705 } |
9931 AddFinalizer(result, external_data, ExternalTwoByteString::Finalize); | 9706 AddFinalizer(result, external_data, ExternalTwoByteString::Finalize); |
9932 return result.raw(); | 9707 return result.raw(); |
(...skipping 21 matching lines...) Expand all Loading... |
9954 external_four_byte_string_class() != Class::null()); | 9729 external_four_byte_string_class() != Class::null()); |
9955 if (len < 0 || len > kMaxElements) { | 9730 if (len < 0 || len > kMaxElements) { |
9956 // This should be caught before we reach here. | 9731 // This should be caught before we reach here. |
9957 FATAL1("Fatal error in ExternalFourByteString::New: invalid len %ld\n", | 9732 FATAL1("Fatal error in ExternalFourByteString::New: invalid len %ld\n", |
9958 len); | 9733 len); |
9959 } | 9734 } |
9960 ExternalFourByteString& result = ExternalFourByteString::Handle(); | 9735 ExternalFourByteString& result = ExternalFourByteString::Handle(); |
9961 ExternalStringData<uint32_t>* external_data = | 9736 ExternalStringData<uint32_t>* external_data = |
9962 new ExternalStringData<uint32_t>(data, peer, callback); | 9737 new ExternalStringData<uint32_t>(data, peer, callback); |
9963 { | 9738 { |
9964 RawObject* raw = Object::Allocate(ExternalFourByteString::kInstanceKind, | 9739 RawObject* raw = Object::Allocate(ExternalFourByteString::kClassId, |
9965 ExternalFourByteString::InstanceSize(), | 9740 ExternalFourByteString::InstanceSize(), |
9966 space); | 9741 space); |
9967 NoGCScope no_gc; | 9742 NoGCScope no_gc; |
9968 result ^= raw; | 9743 result ^= raw; |
9969 result.SetLength(len); | 9744 result.SetLength(len); |
9970 result.SetHash(0); | 9745 result.SetHash(0); |
9971 result.SetExternalData(external_data); | 9746 result.SetExternalData(external_data); |
9972 } | 9747 } |
9973 AddFinalizer(result, external_data, ExternalFourByteString::Finalize); | 9748 AddFinalizer(result, external_data, ExternalFourByteString::Finalize); |
9974 return result.raw(); | 9749 return result.raw(); |
(...skipping 20 matching lines...) Expand all Loading... |
9995 return Isolate::Current()->object_store()->false_value(); | 9770 return Isolate::Current()->object_store()->false_value(); |
9996 } | 9771 } |
9997 | 9772 |
9998 | 9773 |
9999 RawBool* Bool::New(bool value) { | 9774 RawBool* Bool::New(bool value) { |
10000 ASSERT(Isolate::Current()->object_store()->bool_class() != Class::null()); | 9775 ASSERT(Isolate::Current()->object_store()->bool_class() != Class::null()); |
10001 Bool& result = Bool::Handle(); | 9776 Bool& result = Bool::Handle(); |
10002 { | 9777 { |
10003 // Since the two boolean instances are singletons we allocate them straight | 9778 // Since the two boolean instances are singletons we allocate them straight |
10004 // in the old generation. | 9779 // in the old generation. |
10005 RawObject* raw = Object::Allocate(Bool::kInstanceKind, | 9780 RawObject* raw = Object::Allocate(Bool::kClassId, |
10006 Bool::InstanceSize(), | 9781 Bool::InstanceSize(), |
10007 Heap::kOld); | 9782 Heap::kOld); |
10008 NoGCScope no_gc; | 9783 NoGCScope no_gc; |
10009 result ^= raw; | 9784 result ^= raw; |
10010 } | 9785 } |
10011 result.set_value(value); | 9786 result.set_value(value); |
10012 return result.raw(); | 9787 return result.raw(); |
10013 } | 9788 } |
10014 | 9789 |
10015 | 9790 |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10124 intptr_t capacity_len = growable_array.Capacity(); | 9899 intptr_t capacity_len = growable_array.Capacity(); |
10125 Isolate* isolate = Isolate::Current(); | 9900 Isolate* isolate = Isolate::Current(); |
10126 const Array& array = Array::Handle(isolate, growable_array.data()); | 9901 const Array& array = Array::Handle(isolate, growable_array.data()); |
10127 const Array& new_array = Array::Handle(isolate, Array::Empty()); | 9902 const Array& new_array = Array::Handle(isolate, Array::Empty()); |
10128 intptr_t capacity_size = Array::InstanceSize(capacity_len); | 9903 intptr_t capacity_size = Array::InstanceSize(capacity_len); |
10129 intptr_t used_size = Array::InstanceSize(used_len); | 9904 intptr_t used_size = Array::InstanceSize(used_len); |
10130 NoGCScope no_gc; | 9905 NoGCScope no_gc; |
10131 | 9906 |
10132 // Update the size in the header field and length of the array object. | 9907 // Update the size in the header field and length of the array object. |
10133 uword tags = array.raw_ptr()->tags_; | 9908 uword tags = array.raw_ptr()->tags_; |
10134 ASSERT(kArray == RawObject::ClassIdTag::decode(tags)); | 9909 ASSERT(kArrayCid == RawObject::ClassIdTag::decode(tags)); |
10135 tags = RawObject::SizeTag::update(used_size, tags); | 9910 tags = RawObject::SizeTag::update(used_size, tags); |
10136 array.raw_ptr()->tags_ = tags; | 9911 array.raw_ptr()->tags_ = tags; |
10137 array.SetLength(used_len); | 9912 array.SetLength(used_len); |
10138 | 9913 |
10139 // Null the GrowableObjectArray, we are removing it's backing array. | 9914 // Null the GrowableObjectArray, we are removing it's backing array. |
10140 growable_array.SetLength(0); | 9915 growable_array.SetLength(0); |
10141 growable_array.SetData(new_array); | 9916 growable_array.SetData(new_array); |
10142 | 9917 |
10143 // If there is any left over space fill it with either an Array object or | 9918 // If there is any left over space fill it with either an Array object or |
10144 // just a plain object (depending on the amount of left over space) so | 9919 // just a plain object (depending on the amount of left over space) so |
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10281 return New(data, space); | 10056 return New(data, space); |
10282 } | 10057 } |
10283 | 10058 |
10284 | 10059 |
10285 RawGrowableObjectArray* GrowableObjectArray::New(const Array& array, | 10060 RawGrowableObjectArray* GrowableObjectArray::New(const Array& array, |
10286 Heap::Space space) { | 10061 Heap::Space space) { |
10287 ASSERT(Isolate::Current()->object_store()->growable_object_array_class() | 10062 ASSERT(Isolate::Current()->object_store()->growable_object_array_class() |
10288 != Class::null()); | 10063 != Class::null()); |
10289 GrowableObjectArray& result = GrowableObjectArray::Handle(); | 10064 GrowableObjectArray& result = GrowableObjectArray::Handle(); |
10290 { | 10065 { |
10291 RawObject* raw = Object::Allocate(GrowableObjectArray::kInstanceKind, | 10066 RawObject* raw = Object::Allocate(GrowableObjectArray::kClassId, |
10292 GrowableObjectArray::InstanceSize(), | 10067 GrowableObjectArray::InstanceSize(), |
10293 space); | 10068 space); |
10294 NoGCScope no_gc; | 10069 NoGCScope no_gc; |
10295 result ^= raw; | 10070 result ^= raw; |
10296 result.SetLength(0); | 10071 result.SetLength(0); |
10297 result.SetData(array); | 10072 result.SetData(array); |
10298 } | 10073 } |
10299 return result.raw(); | 10074 return result.raw(); |
10300 } | 10075 } |
10301 | 10076 |
(...skipping 681 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10983 | 10758 |
10984 | 10759 |
10985 RawStacktrace* Stacktrace::New(const GrowableObjectArray& func_list, | 10760 RawStacktrace* Stacktrace::New(const GrowableObjectArray& func_list, |
10986 const GrowableObjectArray& code_list, | 10761 const GrowableObjectArray& code_list, |
10987 const GrowableObjectArray& pc_offset_list, | 10762 const GrowableObjectArray& pc_offset_list, |
10988 Heap::Space space) { | 10763 Heap::Space space) { |
10989 ASSERT(Isolate::Current()->object_store()->stacktrace_class() != | 10764 ASSERT(Isolate::Current()->object_store()->stacktrace_class() != |
10990 Class::null()); | 10765 Class::null()); |
10991 Stacktrace& result = Stacktrace::Handle(); | 10766 Stacktrace& result = Stacktrace::Handle(); |
10992 { | 10767 { |
10993 RawObject* raw = Object::Allocate(Stacktrace::kInstanceKind, | 10768 RawObject* raw = Object::Allocate(Stacktrace::kClassId, |
10994 Stacktrace::InstanceSize(), | 10769 Stacktrace::InstanceSize(), |
10995 space); | 10770 space); |
10996 NoGCScope no_gc; | 10771 NoGCScope no_gc; |
10997 result ^= raw; | 10772 result ^= raw; |
10998 } | 10773 } |
10999 // Create arrays for the function, code and pc_offset triplet for each frame. | 10774 // Create arrays for the function, code and pc_offset triplet for each frame. |
11000 const Array& function_array = Array::Handle(Array::MakeArray(func_list)); | 10775 const Array& function_array = Array::Handle(Array::MakeArray(func_list)); |
11001 const Array& code_array = Array::Handle(Array::MakeArray(code_list)); | 10776 const Array& code_array = Array::Handle(Array::MakeArray(code_list)); |
11002 const Array& pc_offset_array = | 10777 const Array& pc_offset_array = |
11003 Array::Handle(Array::MakeArray(pc_offset_list)); | 10778 Array::Handle(Array::MakeArray(pc_offset_list)); |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
11108 | 10883 |
11109 RawJSRegExp* JSRegExp::New(intptr_t len, Heap::Space space) { | 10884 RawJSRegExp* JSRegExp::New(intptr_t len, Heap::Space space) { |
11110 ASSERT(Isolate::Current()->object_store()->jsregexp_class() != | 10885 ASSERT(Isolate::Current()->object_store()->jsregexp_class() != |
11111 Class::null()); | 10886 Class::null()); |
11112 if (len < 0 || len > kMaxElements) { | 10887 if (len < 0 || len > kMaxElements) { |
11113 // This should be caught before we reach here. | 10888 // This should be caught before we reach here. |
11114 FATAL1("Fatal error in JSRegexp::New: invalid len %ld\n", len); | 10889 FATAL1("Fatal error in JSRegexp::New: invalid len %ld\n", len); |
11115 } | 10890 } |
11116 JSRegExp& result = JSRegExp::Handle(); | 10891 JSRegExp& result = JSRegExp::Handle(); |
11117 { | 10892 { |
11118 RawObject* raw = Object::Allocate(JSRegExp::kInstanceKind, | 10893 RawObject* raw = Object::Allocate(JSRegExp::kClassId, |
11119 JSRegExp::InstanceSize(len), | 10894 JSRegExp::InstanceSize(len), |
11120 space); | 10895 space); |
11121 NoGCScope no_gc; | 10896 NoGCScope no_gc; |
11122 result ^= raw; | 10897 result ^= raw; |
11123 result.set_type(kUnitialized); | 10898 result.set_type(kUnitialized); |
11124 result.set_flags(0); | 10899 result.set_flags(0); |
11125 result.SetLength(len); | 10900 result.SetLength(len); |
11126 } | 10901 } |
11127 return result.raw(); | 10902 return result.raw(); |
11128 } | 10903 } |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
11187 const char* JSRegExp::ToCString() const { | 10962 const char* JSRegExp::ToCString() const { |
11188 const String& str = String::Handle(pattern()); | 10963 const String& str = String::Handle(pattern()); |
11189 const char* format = "JSRegExp: pattern=%s flags=%s"; | 10964 const char* format = "JSRegExp: pattern=%s flags=%s"; |
11190 intptr_t len = OS::SNPrint(NULL, 0, format, str.ToCString(), Flags()); | 10965 intptr_t len = OS::SNPrint(NULL, 0, format, str.ToCString(), Flags()); |
11191 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len + 1); | 10966 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len + 1); |
11192 OS::SNPrint(chars, (len + 1), format, str.ToCString(), Flags()); | 10967 OS::SNPrint(chars, (len + 1), format, str.ToCString(), Flags()); |
11193 return chars; | 10968 return chars; |
11194 } | 10969 } |
11195 | 10970 |
11196 } // namespace dart | 10971 } // namespace dart |
OLD | NEW |