Chromium Code Reviews| 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 #ifndef VM_OBJECT_H_ | 5 #ifndef VM_OBJECT_H_ |
| 6 #define VM_OBJECT_H_ | 6 #define VM_OBJECT_H_ |
| 7 | 7 |
| 8 #include "include/dart_api.h" | 8 #include "include/dart_api.h" |
| 9 #include "platform/assert.h" | 9 #include "platform/assert.h" |
| 10 #include "platform/utils.h" | 10 #include "platform/utils.h" |
| (...skipping 2338 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2349 | 2349 |
| 2350 | 2350 |
| 2351 class Stackmap : public Object { | 2351 class Stackmap : public Object { |
| 2352 public: | 2352 public: |
| 2353 static const intptr_t kNoMaximum = -1; | 2353 static const intptr_t kNoMaximum = -1; |
| 2354 static const intptr_t kNoMinimum = -1; | 2354 static const intptr_t kNoMinimum = -1; |
| 2355 | 2355 |
| 2356 bool IsObject(intptr_t index) const { | 2356 bool IsObject(intptr_t index) const { |
| 2357 return InRange(index) && GetBit(index); | 2357 return InRange(index) && GetBit(index); |
| 2358 } | 2358 } |
| 2359 | |
| 2360 RawCode* Code() const { return raw_ptr()->code_; } | |
| 2361 void SetCode(const dart::Code& code) const; | |
| 2362 | |
| 2363 intptr_t Length() const { return raw_ptr()->length_; } | |
| 2364 | |
| 2359 uword PC() const { return raw_ptr()->pc_; } | 2365 uword PC() const { return raw_ptr()->pc_; } |
| 2360 void SetPC(uword value) const { raw_ptr()->pc_ = value; } | 2366 void SetPC(uword value) const { raw_ptr()->pc_ = value; } |
| 2361 | 2367 |
| 2362 RawCode* GetCode() const { return raw_ptr()->code_; } | |
| 2363 void SetCode(const Code& code) const; | |
| 2364 | |
| 2365 // Return the index of the highest stack slot that has an object. | |
| 2366 intptr_t MaximumBitIndex() const { return raw_ptr()->max_set_bit_index_; } | |
| 2367 | |
| 2368 // Return the index of the lowest stack slot that has an object. | |
| 2369 intptr_t MinimumBitIndex() const { return raw_ptr()->min_set_bit_index_; } | |
| 2370 | |
| 2371 static const intptr_t kMaxLengthInBytes = kSmiMax; | 2368 static const intptr_t kMaxLengthInBytes = kSmiMax; |
| 2372 | 2369 |
| 2373 static intptr_t InstanceSize() { | 2370 static intptr_t InstanceSize() { |
| 2374 ASSERT(sizeof(RawStackmap) == OFFSET_OF(RawStackmap, data_)); | 2371 ASSERT(sizeof(RawStackmap) == OFFSET_OF(RawStackmap, data_)); |
| 2375 return 0; | 2372 return 0; |
| 2376 } | 2373 } |
| 2377 static intptr_t InstanceSize(intptr_t length_in_bytes) { | 2374 static intptr_t InstanceSize(intptr_t length) { |
| 2378 ASSERT(length_in_bytes >= 0); | 2375 ASSERT(length >= 0); |
| 2379 ASSERT(length_in_bytes <= kMaxLengthInBytes); | 2376 // The stackmap payload is in an array of bytes. |
| 2380 return RoundedAllocationSize(sizeof(RawStackmap) + length_in_bytes); | 2377 intptr_t payload_size = |
| 2378 Utils::RoundUp(length, kBitsPerByte) / kBitsPerByte; | |
| 2379 return RoundedAllocationSize(sizeof(RawStackmap) + payload_size); | |
| 2381 } | 2380 } |
| 2382 static RawStackmap* New(intptr_t pc_offset, | 2381 static RawStackmap* New(intptr_t pc_offset, |
| 2383 intptr_t length_in_bits, | 2382 intptr_t length, |
| 2384 BitmapBuilder* bmap); | 2383 BitmapBuilder* bmap); |
| 2385 | 2384 |
| 2386 private: | 2385 private: |
| 2387 inline intptr_t SizeInBits() const; | 2386 void SetLength(intptr_t length) const { raw_ptr()->length_ = length; } |
| 2388 | 2387 |
| 2389 void SetMinBitIndex(intptr_t value) const { | 2388 bool InRange(intptr_t index) const { return index < Length(); } |
| 2390 raw_ptr()->min_set_bit_index_ = value; | |
| 2391 } | |
| 2392 void SetMaxBitIndex(intptr_t value) const { | |
| 2393 raw_ptr()->max_set_bit_index_ = value; | |
| 2394 } | |
| 2395 | |
| 2396 bool InRange(intptr_t index) const { return index < SizeInBits(); } | |
| 2397 | 2389 |
| 2398 bool GetBit(intptr_t bit_index) const; | 2390 bool GetBit(intptr_t bit_index) const; |
| 2399 void SetBit(intptr_t bit_index, bool value) const; | 2391 void SetBit(intptr_t bit_index, bool value) const; |
| 2400 | 2392 |
| 2401 void set_bitmap_size_in_bytes(intptr_t value) const; | |
| 2402 | |
| 2403 HEAP_OBJECT_IMPLEMENTATION(Stackmap, Object); | 2393 HEAP_OBJECT_IMPLEMENTATION(Stackmap, Object); |
| 2404 friend class BitmapBuilder; | 2394 friend class BitmapBuilder; |
| 2405 friend class Class; | 2395 friend class Class; |
| 2406 }; | 2396 }; |
| 2407 | 2397 |
| 2408 | 2398 |
| 2409 class ExceptionHandlers : public Object { | 2399 class ExceptionHandlers : public Object { |
| 2410 private: | 2400 private: |
| 2411 // Describes the layout of exception handler data. | 2401 // Describes the layout of exception handler data. |
| 2412 enum { | 2402 enum { |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2529 } | 2519 } |
| 2530 intptr_t pointer_offsets_length() const { | 2520 intptr_t pointer_offsets_length() const { |
| 2531 return raw_ptr()->pointer_offsets_length_; | 2521 return raw_ptr()->pointer_offsets_length_; |
| 2532 } | 2522 } |
| 2533 bool is_optimized() const { | 2523 bool is_optimized() const { |
| 2534 return (raw_ptr()->is_optimized_ == 1); | 2524 return (raw_ptr()->is_optimized_ == 1); |
| 2535 } | 2525 } |
| 2536 void set_is_optimized(bool value) const { | 2526 void set_is_optimized(bool value) const { |
| 2537 raw_ptr()->is_optimized_ = value ? 1 : 0; | 2527 raw_ptr()->is_optimized_ = value ? 1 : 0; |
| 2538 } | 2528 } |
| 2539 intptr_t spill_slot_count() const { | |
|
Kevin Millikin (Google)
2012/08/17 09:07:43
This is no longer used, and it's easy to add back
| |
| 2540 return raw_ptr()->spill_slot_count_; | |
| 2541 } | |
| 2542 void set_spill_slot_count(intptr_t count) const { | |
| 2543 raw_ptr()->spill_slot_count_ = count; | |
| 2544 } | |
| 2545 | 2529 |
| 2546 uword EntryPoint() const { | 2530 uword EntryPoint() const { |
| 2547 const Instructions& instr = Instructions::Handle(instructions()); | 2531 const Instructions& instr = Instructions::Handle(instructions()); |
| 2548 return instr.EntryPoint(); | 2532 return instr.EntryPoint(); |
| 2549 } | 2533 } |
| 2550 intptr_t Size() const { | 2534 intptr_t Size() const { |
| 2551 const Instructions& instr = Instructions::Handle(instructions()); | 2535 const Instructions& instr = Instructions::Handle(instructions()); |
| 2552 return instr.size(); | 2536 return instr.size(); |
| 2553 } | 2537 } |
| 2554 | 2538 |
| (...skipping 2958 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 5513 intptr_t TokenStream::Length() const { | 5497 intptr_t TokenStream::Length() const { |
| 5514 return Smi::Value(raw_ptr()->length_); | 5498 return Smi::Value(raw_ptr()->length_); |
| 5515 } | 5499 } |
| 5516 | 5500 |
| 5517 | 5501 |
| 5518 void Context::SetAt(intptr_t index, const Instance& value) const { | 5502 void Context::SetAt(intptr_t index, const Instance& value) const { |
| 5519 StorePointer(InstanceAddr(index), value.raw()); | 5503 StorePointer(InstanceAddr(index), value.raw()); |
| 5520 } | 5504 } |
| 5521 | 5505 |
| 5522 | 5506 |
| 5523 intptr_t Stackmap::SizeInBits() const { | |
| 5524 return (Smi::Value(raw_ptr()->bitmap_size_in_bytes_) * kBitsPerByte); | |
| 5525 } | |
| 5526 | |
| 5527 | |
| 5528 bool String::Equals(const String& str) const { | 5507 bool String::Equals(const String& str) const { |
| 5529 if (raw() == str.raw()) { | 5508 if (raw() == str.raw()) { |
| 5530 return true; // Both handles point to the same raw instance. | 5509 return true; // Both handles point to the same raw instance. |
| 5531 } | 5510 } |
| 5532 if (str.IsNull()) { | 5511 if (str.IsNull()) { |
| 5533 return false; | 5512 return false; |
| 5534 } | 5513 } |
| 5535 return Equals(str, 0, str.Length()); | 5514 return Equals(str, 0, str.Length()); |
| 5536 } | 5515 } |
| 5537 | 5516 |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 5550 if (this->CharAt(i) != str.CharAt(begin_index + i)) { | 5529 if (this->CharAt(i) != str.CharAt(begin_index + i)) { |
| 5551 return false; | 5530 return false; |
| 5552 } | 5531 } |
| 5553 } | 5532 } |
| 5554 return true; | 5533 return true; |
| 5555 } | 5534 } |
| 5556 | 5535 |
| 5557 } // namespace dart | 5536 } // namespace dart |
| 5558 | 5537 |
| 5559 #endif // VM_OBJECT_H_ | 5538 #endif // VM_OBJECT_H_ |
| OLD | NEW |