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

Side by Side Diff: vm/object.h

Issue 10783035: Create frequently used symbols in the vm isolate (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/runtime/
Patch Set: Created 8 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « vm/isolate.cc ('k') | vm/object.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #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 11 matching lines...) Expand all
22 22
23 // Forward declarations. 23 // Forward declarations.
24 #define DEFINE_FORWARD_DECLARATION(clazz) \ 24 #define DEFINE_FORWARD_DECLARATION(clazz) \
25 class clazz; 25 class clazz;
26 CLASS_LIST(DEFINE_FORWARD_DECLARATION) 26 CLASS_LIST(DEFINE_FORWARD_DECLARATION)
27 #undef DEFINE_FORWARD_DECLARATION 27 #undef DEFINE_FORWARD_DECLARATION
28 class Api; 28 class Api;
29 class Assembler; 29 class Assembler;
30 class Code; 30 class Code;
31 class LocalScope; 31 class LocalScope;
32 class Symbols;
32 33
33 #define OBJECT_IMPLEMENTATION(object, super) \ 34 #define OBJECT_IMPLEMENTATION(object, super) \
34 public: /* NOLINT */ \ 35 public: /* NOLINT */ \
35 Raw##object* raw() const { return reinterpret_cast<Raw##object*>(raw_); } \ 36 Raw##object* raw() const { return reinterpret_cast<Raw##object*>(raw_); } \
36 void operator=(Raw##object* value) { \ 37 void operator=(Raw##object* value) { \
37 initializeHandle(this, value); \ 38 initializeHandle(this, value); \
38 } \ 39 } \
39 bool Is##object() const { return true; } \ 40 bool Is##object() const { return true; } \
40 void operator^=(RawObject* value) { \ 41 void operator^=(RawObject* value) { \
41 initializeHandle(this, value); \ 42 initializeHandle(this, value); \
(...skipping 322 matching lines...) Expand 10 before | Expand all | Expand 10 after
364 365
365 uword raw_value() const { 366 uword raw_value() const {
366 return reinterpret_cast<uword>(raw()); 367 return reinterpret_cast<uword>(raw());
367 } 368 }
368 369
369 inline void SetRaw(RawObject* value); 370 inline void SetRaw(RawObject* value);
370 371
371 cpp_vtable vtable() const { return bit_copy<cpp_vtable>(*this); } 372 cpp_vtable vtable() const { return bit_copy<cpp_vtable>(*this); }
372 void set_vtable(cpp_vtable value) { *vtable_address() = value; } 373 void set_vtable(cpp_vtable value) { *vtable_address() = value; }
373 374
374 static RawObject* Allocate(const Class& cls, 375 static RawObject* Allocate(intptr_t cls_id,
375 intptr_t size, 376 intptr_t size,
376 Heap::Space space); 377 Heap::Space space);
377 378
378 static intptr_t RoundedAllocationSize(intptr_t size) { 379 static intptr_t RoundedAllocationSize(intptr_t size) {
379 return Utils::RoundUp(size, kObjectAlignment); 380 return Utils::RoundUp(size, kObjectAlignment);
380 } 381 }
381 382
382 bool Contains(uword addr) const { 383 bool Contains(uword addr) const {
383 intptr_t this_size = raw()->Size(); 384 intptr_t this_size = raw()->Size();
384 uword this_addr = RawObject::ToAddr(raw()); 385 uword this_addr = RawObject::ToAddr(raw());
(...skipping 2936 matching lines...) Expand 10 before | Expand all | Expand 10 after
3321 3322
3322 static RawString* Transform(int32_t (*mapping)(int32_t ch), 3323 static RawString* Transform(int32_t (*mapping)(int32_t ch),
3323 const String& str, 3324 const String& str,
3324 Heap::Space space = Heap::kNew); 3325 Heap::Space space = Heap::kNew);
3325 3326
3326 static RawString* ToUpperCase(const String& str, 3327 static RawString* ToUpperCase(const String& str,
3327 Heap::Space space = Heap::kNew); 3328 Heap::Space space = Heap::kNew);
3328 static RawString* ToLowerCase(const String& str, 3329 static RawString* ToLowerCase(const String& str,
3329 Heap::Space space = Heap::kNew); 3330 Heap::Space space = Heap::kNew);
3330 3331
3331 static RawString* NewSymbol(const char* str);
3332 template<typename T>
3333 static RawString* NewSymbol(const T* characters, intptr_t len);
3334 static RawString* NewSymbol(const String& str);
3335 static RawString* NewSymbol(const String& str,
3336 intptr_t begin_index,
3337 intptr_t length);
3338
3339 static RawString* NewFormatted(const char* format, ...); 3332 static RawString* NewFormatted(const char* format, ...);
3340 3333
3341 protected: 3334 protected:
3342 bool HasHash() const { 3335 bool HasHash() const {
3343 ASSERT(Smi::New(0) == NULL); 3336 ASSERT(Smi::New(0) == NULL);
3344 return (raw_ptr()->hash_ != NULL); 3337 return (raw_ptr()->hash_ != NULL);
3345 } 3338 }
3346 3339
3347 void SetLength(intptr_t value) const { 3340 void SetLength(intptr_t value) const {
3348 // This is only safe because we create a new Smi, which does not cause 3341 // This is only safe because we create a new Smi, which does not cause
3349 // heap allocation. 3342 // heap allocation.
3350 raw_ptr()->length_ = Smi::New(value); 3343 raw_ptr()->length_ = Smi::New(value);
3351 } 3344 }
3352 3345
3353 void SetHash(intptr_t value) const { 3346 void SetHash(intptr_t value) const {
3354 // This is only safe because we create a new Smi, which does not cause 3347 // This is only safe because we create a new Smi, which does not cause
3355 // heap allocation. 3348 // heap allocation.
3356 raw_ptr()->hash_ = Smi::New(value); 3349 raw_ptr()->hash_ = Smi::New(value);
3357 } 3350 }
3358 3351
3359 template<typename HandleType, typename ElementType> 3352 template<typename HandleType, typename ElementType>
3360 static void ReadFromImpl(SnapshotReader* reader, 3353 static void ReadFromImpl(SnapshotReader* reader,
3361 HandleType* str_obj, 3354 HandleType* str_obj,
3362 intptr_t len, 3355 intptr_t len,
3363 intptr_t tags); 3356 intptr_t tags);
3364 3357
3365 HEAP_OBJECT_IMPLEMENTATION(String, Instance); 3358 HEAP_OBJECT_IMPLEMENTATION(String, Instance);
3359
3360 friend class Symbols;
3366 }; 3361 };
3367 3362
3368 3363
3369 class OneByteString : public String { 3364 class OneByteString : public String {
3370 public: 3365 public:
3371 virtual int32_t CharAt(intptr_t index) const { 3366 virtual int32_t CharAt(intptr_t index) const {
3372 return *CharAddr(index); 3367 return *CharAddr(index);
3373 } 3368 }
3374 3369
3375 virtual intptr_t CharSize() const { 3370 virtual intptr_t CharSize() const {
(...skipping 1834 matching lines...) Expand 10 before | Expand all | Expand 10 after
5210 if (this->CharAt(i) != str.CharAt(begin_index + i)) { 5205 if (this->CharAt(i) != str.CharAt(begin_index + i)) {
5211 return false; 5206 return false;
5212 } 5207 }
5213 } 5208 }
5214 return true; 5209 return true;
5215 } 5210 }
5216 5211
5217 } // namespace dart 5212 } // namespace dart
5218 5213
5219 #endif // VM_OBJECT_H_ 5214 #endif // VM_OBJECT_H_
OLDNEW
« no previous file with comments | « vm/isolate.cc ('k') | vm/object.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698