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

Side by Side Diff: vm/object.h

Issue 9462003: Changes to shrink the token stream representation from two words to one word. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/runtime/
Patch Set: Created 8 years, 9 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/dart.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 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
137 kVoidClass, 137 kVoidClass,
138 kUnresolvedClassClass, 138 kUnresolvedClassClass,
139 kTypeClass, 139 kTypeClass,
140 kTypeParameterClass, 140 kTypeParameterClass,
141 kInstantiatedTypeClass, 141 kInstantiatedTypeClass,
142 kAbstractTypeArgumentsClass, 142 kAbstractTypeArgumentsClass,
143 kTypeArgumentsClass, 143 kTypeArgumentsClass,
144 kInstantiatedTypeArgumentsClass, 144 kInstantiatedTypeArgumentsClass,
145 kFunctionClass, 145 kFunctionClass,
146 kFieldClass, 146 kFieldClass,
147 kLiteralTokenClass,
147 kTokenStreamClass, 148 kTokenStreamClass,
148 kScriptClass, 149 kScriptClass,
149 kLibraryClass, 150 kLibraryClass,
150 kLibraryPrefixClass, 151 kLibraryPrefixClass,
151 kCodeClass, 152 kCodeClass,
152 kInstructionsClass, 153 kInstructionsClass,
153 kPcDescriptorsClass, 154 kPcDescriptorsClass,
154 kLocalVarDescriptorsClass, 155 kLocalVarDescriptorsClass,
155 kExceptionHandlersClass, 156 kExceptionHandlersClass,
156 kContextClass, 157 kContextClass,
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
272 } 273 }
273 static RawClass* abstract_type_arguments_class() { 274 static RawClass* abstract_type_arguments_class() {
274 return abstract_type_arguments_class_; 275 return abstract_type_arguments_class_;
275 } 276 }
276 static RawClass* type_arguments_class() { return type_arguments_class_; } 277 static RawClass* type_arguments_class() { return type_arguments_class_; }
277 static RawClass* instantiated_type_arguments_class() { 278 static RawClass* instantiated_type_arguments_class() {
278 return instantiated_type_arguments_class_; 279 return instantiated_type_arguments_class_;
279 } 280 }
280 static RawClass* function_class() { return function_class_; } 281 static RawClass* function_class() { return function_class_; }
281 static RawClass* field_class() { return field_class_; } 282 static RawClass* field_class() { return field_class_; }
283 static RawClass* literal_token_class() { return literal_token_class_; }
282 static RawClass* token_stream_class() { return token_stream_class_; } 284 static RawClass* token_stream_class() { return token_stream_class_; }
283 static RawClass* script_class() { return script_class_; } 285 static RawClass* script_class() { return script_class_; }
284 static RawClass* library_class() { return library_class_; } 286 static RawClass* library_class() { return library_class_; }
285 static RawClass* library_prefix_class() { return library_prefix_class_; } 287 static RawClass* library_prefix_class() { return library_prefix_class_; }
286 static RawClass* code_class() { return code_class_; } 288 static RawClass* code_class() { return code_class_; }
287 static RawClass* instructions_class() { return instructions_class_; } 289 static RawClass* instructions_class() { return instructions_class_; }
288 static RawClass* pc_descriptors_class() { return pc_descriptors_class_; } 290 static RawClass* pc_descriptors_class() { return pc_descriptors_class_; }
289 static RawClass* var_descriptors_class() { return var_descriptors_class_; } 291 static RawClass* var_descriptors_class() { return var_descriptors_class_; }
290 static RawClass* exception_handlers_class() { 292 static RawClass* exception_handlers_class() {
291 return exception_handlers_class_; 293 return exception_handlers_class_;
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
383 static RawClass* type_class_; // Class of Type. 385 static RawClass* type_class_; // Class of Type.
384 static RawClass* type_parameter_class_; // Class of TypeParameter vm object. 386 static RawClass* type_parameter_class_; // Class of TypeParameter vm object.
385 static RawClass* instantiated_type_class_; // Class of InstantiatedType. 387 static RawClass* instantiated_type_class_; // Class of InstantiatedType.
386 // Class of AbstractTypeArguments vm object. 388 // Class of AbstractTypeArguments vm object.
387 static RawClass* abstract_type_arguments_class_; 389 static RawClass* abstract_type_arguments_class_;
388 // Class of the TypeArguments vm object. 390 // Class of the TypeArguments vm object.
389 static RawClass* type_arguments_class_; 391 static RawClass* type_arguments_class_;
390 static RawClass* instantiated_type_arguments_class_; // Class of Inst..ments. 392 static RawClass* instantiated_type_arguments_class_; // Class of Inst..ments.
391 static RawClass* function_class_; // Class of the Function vm object. 393 static RawClass* function_class_; // Class of the Function vm object.
392 static RawClass* field_class_; // Class of the Field vm object. 394 static RawClass* field_class_; // Class of the Field vm object.
395 static RawClass* literal_token_class_; // Class of LiteralToken vm object.
393 static RawClass* token_stream_class_; // Class of the TokenStream vm object. 396 static RawClass* token_stream_class_; // Class of the TokenStream vm object.
394 static RawClass* script_class_; // Class of the Script vm object. 397 static RawClass* script_class_; // Class of the Script vm object.
395 static RawClass* library_class_; // Class of the Library vm object. 398 static RawClass* library_class_; // Class of the Library vm object.
396 static RawClass* library_prefix_class_; // Class of Library prefix vm object. 399 static RawClass* library_prefix_class_; // Class of Library prefix vm object.
397 static RawClass* code_class_; // Class of the Code vm object. 400 static RawClass* code_class_; // Class of the Code vm object.
398 static RawClass* instructions_class_; // Class of the Instructions vm object. 401 static RawClass* instructions_class_; // Class of the Instructions vm object.
399 static RawClass* pc_descriptors_class_; // Class of PcDescriptors vm object. 402 static RawClass* pc_descriptors_class_; // Class of PcDescriptors vm object.
400 static RawClass* var_descriptors_class_; // Class of LocalVarDescriptors. 403 static RawClass* var_descriptors_class_; // Class of LocalVarDescriptors.
401 static RawClass* exception_handlers_class_; // Class of ExceptionHandlers. 404 static RawClass* exception_handlers_class_; // Class of ExceptionHandlers.
402 static RawClass* context_class_; // Class of the Context vm object. 405 static RawClass* context_class_; // Class of the Context vm object.
(...skipping 1147 matching lines...) Expand 10 before | Expand all | Expand 10 after
1550 void set_token_index(intptr_t token_index) const { 1553 void set_token_index(intptr_t token_index) const {
1551 raw_ptr()->token_index_ = token_index; 1554 raw_ptr()->token_index_ = token_index;
1552 } 1555 }
1553 static RawField* New(); 1556 static RawField* New();
1554 1557
1555 HEAP_OBJECT_IMPLEMENTATION(Field, Object); 1558 HEAP_OBJECT_IMPLEMENTATION(Field, Object);
1556 friend class Class; 1559 friend class Class;
1557 }; 1560 };
1558 1561
1559 1562
1563 class LiteralToken : public Object {
1564 public:
1565 Token::Kind kind() const { return raw_ptr()->kind_; }
1566 RawString* literal() const { return raw_ptr()->literal_; }
1567 RawObject* value() const { return raw_ptr()->value_; }
1568
1569 static intptr_t InstanceSize() {
1570 return RoundedAllocationSize(sizeof(RawLiteralToken));
1571 }
1572
1573 static RawLiteralToken* New();
1574 static RawLiteralToken* New(Token::Kind kind, const String& literal);
1575
1576 private:
1577 void set_kind(Token::Kind kind) const { raw_ptr()->kind_ = kind; }
1578 void set_literal(const String& literal) const;
1579 void set_value(const Object& value) const;
1580
1581 HEAP_OBJECT_IMPLEMENTATION(LiteralToken, Object);
1582 friend class Class;
1583 };
1584
1585
1560 class TokenStream : public Object { 1586 class TokenStream : public Object {
1561 public: 1587 public:
1562 inline intptr_t Length() const; 1588 inline intptr_t Length() const;
1563 1589
1564 inline Token::Kind KindAt(intptr_t index) const; 1590 inline Token::Kind KindAt(intptr_t index) const;
1565 1591
1566 void SetTokenAt(intptr_t index, Token::Kind kind, const String& literal); 1592 void SetTokenAt(intptr_t index, Token::Kind kind, const String& literal);
1593 void SetTokenAt(intptr_t index, const Object& token);
1567 1594
1568 RawObject* LiteralAt(intptr_t index) const { 1595 RawObject* TokenAt(intptr_t index) const;
1569 return *EntryAddr(index, RawTokenStream::kLiteralEntry); 1596 RawString* LiteralAt(intptr_t index) const;
1570 }
1571 1597
1572 static intptr_t InstanceSize() { 1598 static intptr_t InstanceSize() {
1573 ASSERT(sizeof(RawTokenStream) == OFFSET_OF(RawTokenStream, data_)); 1599 ASSERT(sizeof(RawTokenStream) == OFFSET_OF(RawTokenStream, data_));
1574 return 0; 1600 return 0;
1575 } 1601 }
1576 static intptr_t InstanceSize(intptr_t len) { 1602 static intptr_t InstanceSize(intptr_t len) {
1577 return RoundedAllocationSize( 1603 return RoundedAllocationSize(sizeof(RawTokenStream) + (len * kWordSize));
1578 sizeof(RawTokenStream) +
1579 (len * RawTokenStream::kNumberOfEntries * kWordSize));
1580 } 1604 }
1581 static intptr_t StreamLength(intptr_t len) { 1605 static intptr_t StreamLength(intptr_t len) {
1582 return (len * RawTokenStream::kNumberOfEntries); 1606 return len;
1583 } 1607 }
1584 1608
1585 static RawTokenStream* New(intptr_t length); 1609 static RawTokenStream* New(intptr_t length);
1586 static RawTokenStream* New(const Scanner::GrowableTokenStream& tokens); 1610 static RawTokenStream* New(const Scanner::GrowableTokenStream& tokens);
1587 1611
1588 private: 1612 private:
1589 void SetLength(intptr_t value) const; 1613 void SetLength(intptr_t value) const;
1590 1614
1591 RawObject** EntryAddr(intptr_t index, intptr_t entry_offset) const { 1615 RawObject** EntryAddr(intptr_t index) const {
1592 ASSERT((index >=0) && (index < Length())); 1616 ASSERT((index >=0) && (index < Length()));
1593 intptr_t data_index = 1617 return &raw_ptr()->data_[index];
1594 (index * RawTokenStream::kNumberOfEntries) + entry_offset;
1595 return &raw_ptr()->data_[data_index];
1596 } 1618 }
1597 1619
1598 RawSmi** SmiAddr(intptr_t index, intptr_t entry_offset) const { 1620 RawSmi** SmiAddr(intptr_t index) const {
1599 return reinterpret_cast<RawSmi**>(EntryAddr(index, entry_offset)); 1621 return reinterpret_cast<RawSmi**>(EntryAddr(index));
1600 } 1622 }
1601 1623
1602 HEAP_OBJECT_IMPLEMENTATION(TokenStream, Object); 1624 HEAP_OBJECT_IMPLEMENTATION(TokenStream, Object);
1603 friend class Class; 1625 friend class Class;
1604 }; 1626 };
1605 1627
1606 1628
1607 class Script : public Object { 1629 class Script : public Object {
1608 public: 1630 public:
1609 RawString* url() const { return raw_ptr()->url_; } 1631 RawString* url() const { return raw_ptr()->url_; }
(...skipping 2145 matching lines...) Expand 10 before | Expand all | Expand 10 after
3755 raw_ptr()->value_ = Smi::New(value); 3777 raw_ptr()->value_ = Smi::New(value);
3756 } 3778 }
3757 3779
3758 3780
3759 intptr_t TokenStream::Length() const { 3781 intptr_t TokenStream::Length() const {
3760 return Smi::Value(raw_ptr()->length_); 3782 return Smi::Value(raw_ptr()->length_);
3761 } 3783 }
3762 3784
3763 3785
3764 Token::Kind TokenStream::KindAt(intptr_t index) const { 3786 Token::Kind TokenStream::KindAt(intptr_t index) const {
3765 return static_cast<Token::Kind>( 3787 const Object& obj = Object::Handle(TokenAt(index));
3766 Smi::Value(*SmiAddr(index, RawTokenStream::kKindEntry))); 3788 if (obj.IsSmi()) {
3789 return static_cast<Token::Kind>(
3790 Smi::Value(reinterpret_cast<RawSmi*>(obj.raw())));
3791 } else if (obj.IsLiteralToken()) {
3792 LiteralToken& token = LiteralToken::Handle();
3793 token ^= obj.raw();
3794 return token.kind();
3795 }
3796 ASSERT(obj.IsString()); // Must be an identifier.
3797 return Token::kIDENT;
3767 } 3798 }
3768 3799
3769 3800
3770 void Context::SetAt(intptr_t index, const Instance& value) const { 3801 void Context::SetAt(intptr_t index, const Instance& value) const {
3771 StorePointer(InstanceAddr(index), value.raw()); 3802 StorePointer(InstanceAddr(index), value.raw());
3772 } 3803 }
3773 3804
3774 } // namespace dart 3805 } // namespace dart
3775 3806
3776 #endif // VM_OBJECT_H_ 3807 #endif // VM_OBJECT_H_
OLDNEW
« no previous file with comments | « vm/dart.cc ('k') | vm/object.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698