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

Side by Side Diff: vm/object.h

Issue 10914050: Use external byte arrays for token stream, this moves the token stream out of the isolate heap. For… (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/runtime/
Patch Set: Created 8 years, 3 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/datastream.h ('k') | vm/object.cc » ('j') | vm/object.cc » ('J')
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 1797 matching lines...) Expand 10 before | Expand all | Expand 10 after
1808 void set_literal(const String& literal) const; 1808 void set_literal(const String& literal) const;
1809 void set_value(const Object& value) const; 1809 void set_value(const Object& value) const;
1810 1810
1811 HEAP_OBJECT_IMPLEMENTATION(LiteralToken, Object); 1811 HEAP_OBJECT_IMPLEMENTATION(LiteralToken, Object);
1812 friend class Class; 1812 friend class Class;
1813 }; 1813 };
1814 1814
1815 1815
1816 class TokenStream : public Object { 1816 class TokenStream : public Object {
1817 public: 1817 public:
1818 inline intptr_t Length() const;
1819
1820 RawArray* TokenObjects() const; 1818 RawArray* TokenObjects() const;
1821 void SetTokenObjects(const Array& value) const; 1819 void SetTokenObjects(const Array& value) const;
1822 1820
1821 RawExternalUint8Array* GetStream() const;
1822 void SetStream(const ExternalUint8Array& stream) const;
1823
1823 RawString* GenerateSource() const; 1824 RawString* GenerateSource() const;
1824 intptr_t ComputeSourcePosition(intptr_t tok_pos) const; 1825 intptr_t ComputeSourcePosition(intptr_t tok_pos) const;
1825 intptr_t ComputeTokenPosition(intptr_t src_pos) const; 1826 intptr_t ComputeTokenPosition(intptr_t src_pos) const;
1826 1827
1827 static const intptr_t kBytesPerElement = 1; 1828 static const intptr_t kBytesPerElement = 1;
1828 static const intptr_t kMaxElements = kSmiMax / kBytesPerElement; 1829 static const intptr_t kMaxElements = kSmiMax / kBytesPerElement;
1829 1830
1830 static intptr_t InstanceSize() { 1831 static intptr_t InstanceSize() {
1831 ASSERT(sizeof(RawTokenStream) == OFFSET_OF(RawTokenStream, data_)); 1832 return RoundedAllocationSize(sizeof(RawTokenStream));
1832 return 0;
1833 }
1834 static intptr_t InstanceSize(intptr_t len) {
1835 ASSERT(0 <= len && len <= kMaxElements);
1836 return RoundedAllocationSize(
1837 sizeof(RawTokenStream) + (len * kBytesPerElement));
1838 } 1833 }
1839 1834
1840 static RawTokenStream* New(intptr_t length); 1835 static RawTokenStream* New(intptr_t length);
1841 static RawTokenStream* New(const Scanner::GrowableTokenStream& tokens, 1836 static RawTokenStream* New(const Scanner::GrowableTokenStream& tokens,
1842 const String& private_key); 1837 const String& private_key);
1843 1838
1844 // The class Iterator encapsulates iteration over the tokens 1839 // The class Iterator encapsulates iteration over the tokens
1845 // in a TokenStream object. 1840 // in a TokenStream object.
1846 class Iterator : ValueObject { 1841 class Iterator : ValueObject {
1847 public: 1842 public:
(...skipping 12 matching lines...) Expand all
1860 1855
1861 void Advance(); 1856 void Advance();
1862 1857
1863 RawObject* CurrentToken() const; 1858 RawObject* CurrentToken() const;
1864 RawString* CurrentLiteral() const; 1859 RawString* CurrentLiteral() const;
1865 RawString* MakeLiteralToken(const Object& obj) const; 1860 RawString* MakeLiteralToken(const Object& obj) const;
1866 1861
1867 private: 1862 private:
1868 // Read token from the token stream (could be a simple token or an index 1863 // Read token from the token stream (could be a simple token or an index
1869 // into the token objects array for IDENT or literal tokens). 1864 // into the token objects array for IDENT or literal tokens).
1870 intptr_t ReadToken(); 1865 intptr_t ReadToken() {
1871 uint8_t ReadByte(); 1866 int64_t value = stream_.ReadUnsigned();
1867 ASSERT((value >= 0) && (value <= kIntptrMax));
1868 return value;
1869 }
1872 1870
1873 const TokenStream& tokens_; 1871 const TokenStream& tokens_;
1872 const ExternalUint8Array& data_;
1873 ReadStream stream_;
1874 Array& token_objects_; 1874 Array& token_objects_;
1875 Object& obj_; 1875 Object& obj_;
1876 intptr_t cur_token_pos_; 1876 intptr_t cur_token_pos_;
1877 intptr_t stream_token_pos_;
1878 Token::Kind cur_token_kind_; 1877 Token::Kind cur_token_kind_;
1879 intptr_t cur_token_obj_index_; 1878 intptr_t cur_token_obj_index_;
1880 }; 1879 };
1881 1880
1882 private: 1881 private:
1883 void SetLength(intptr_t value) const;
1884
1885 RawString* PrivateKey() const; 1882 RawString* PrivateKey() const;
1886 void SetPrivateKey(const String& value) const; 1883 void SetPrivateKey(const String& value) const;
1887 1884
1888 uint8_t* EntryAddr(intptr_t token_pos) const { 1885 static RawTokenStream* New();
1889 ASSERT((token_pos >=0) && (token_pos < Length())); 1886 static void DataFinalizer(void *peer);
1890 return &raw_ptr()->data_[token_pos];
1891 }
1892 1887
1893 HEAP_OBJECT_IMPLEMENTATION(TokenStream, Object); 1888 HEAP_OBJECT_IMPLEMENTATION(TokenStream, Object);
1894 friend class Class; 1889 friend class Class;
1895 }; 1890 };
1896 1891
1897 1892
1898 class Script : public Object { 1893 class Script : public Object {
1899 public: 1894 public:
1900 RawString* url() const { return raw_ptr()->url_; } 1895 RawString* url() const { return raw_ptr()->url_; }
1901 bool HasSource() const; 1896 bool HasSource() const;
(...skipping 3611 matching lines...) Expand 10 before | Expand all | Expand 10 after
5513 return Smi::Value(reinterpret_cast<RawSmi*>(raw_ptr()->value_)); 5508 return Smi::Value(reinterpret_cast<RawSmi*>(raw_ptr()->value_));
5514 } 5509 }
5515 5510
5516 5511
5517 void Field::SetOffset(intptr_t value) const { 5512 void Field::SetOffset(intptr_t value) const {
5518 ASSERT(!is_static()); // SetOffset is valid only for instance fields. 5513 ASSERT(!is_static()); // SetOffset is valid only for instance fields.
5519 raw_ptr()->value_ = Smi::New(value); 5514 raw_ptr()->value_ = Smi::New(value);
5520 } 5515 }
5521 5516
5522 5517
5523 intptr_t TokenStream::Length() const {
5524 return Smi::Value(raw_ptr()->length_);
5525 }
5526
5527
5528 void Context::SetAt(intptr_t index, const Instance& value) const { 5518 void Context::SetAt(intptr_t index, const Instance& value) const {
5529 StorePointer(InstanceAddr(index), value.raw()); 5519 StorePointer(InstanceAddr(index), value.raw());
5530 } 5520 }
5531 5521
5532 5522
5533 bool String::Equals(const String& str) const { 5523 bool String::Equals(const String& str) const {
5534 if (raw() == str.raw()) { 5524 if (raw() == str.raw()) {
5535 return true; // Both handles point to the same raw instance. 5525 return true; // Both handles point to the same raw instance.
5536 } 5526 }
5537 if (str.IsNull()) { 5527 if (str.IsNull()) {
(...skipping 17 matching lines...) Expand all
5555 if (this->CharAt(i) != str.CharAt(begin_index + i)) { 5545 if (this->CharAt(i) != str.CharAt(begin_index + i)) {
5556 return false; 5546 return false;
5557 } 5547 }
5558 } 5548 }
5559 return true; 5549 return true;
5560 } 5550 }
5561 5551
5562 } // namespace dart 5552 } // namespace dart
5563 5553
5564 #endif // VM_OBJECT_H_ 5554 #endif // VM_OBJECT_H_
OLDNEW
« no previous file with comments | « vm/datastream.h ('k') | vm/object.cc » ('j') | vm/object.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698