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

Side by Side Diff: src/utils.h

Issue 2457393003: Thread decls-list through Declaration (Closed)
Patch Set: rebase Created 4 years, 1 month 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
« no previous file with comments | « src/parsing/parser.cc ('k') | test/cctest/asmjs/test-asm-typer.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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef V8_UTILS_H_ 5 #ifndef V8_UTILS_H_
6 #define V8_UTILS_H_ 6 #define V8_UTILS_H_
7 7
8 #include <limits.h> 8 #include <limits.h>
9 #include <stdlib.h> 9 #include <stdlib.h>
10 #include <string.h> 10 #include <string.h>
(...skipping 1579 matching lines...) Expand 10 before | Expand all | Expand 10 after
1590 #if defined(V8_TARGET_LITTLE_ENDIAN) 1590 #if defined(V8_TARGET_LITTLE_ENDIAN)
1591 WriteUnalignedValue<V>(p, value); 1591 WriteUnalignedValue<V>(p, value);
1592 #elif defined(V8_TARGET_BIG_ENDIAN) 1592 #elif defined(V8_TARGET_BIG_ENDIAN)
1593 byte* src = reinterpret_cast<byte*>(&value); 1593 byte* src = reinterpret_cast<byte*>(&value);
1594 byte* dst = reinterpret_cast<byte*>(p); 1594 byte* dst = reinterpret_cast<byte*>(p);
1595 for (size_t i = 0; i < sizeof(V); i++) { 1595 for (size_t i = 0; i < sizeof(V); i++) {
1596 dst[i] = src[sizeof(V) - i - 1]; 1596 dst[i] = src[sizeof(V) - i - 1];
1597 } 1597 }
1598 #endif // V8_TARGET_LITTLE_ENDIAN 1598 #endif // V8_TARGET_LITTLE_ENDIAN
1599 } 1599 }
1600
1601 // Represents a linked list that threads through the nodes in the linked list.
1602 // Entries in the list are pointers to nodes. The nodes need to have a T**
1603 // next() method that returns the location where the next value is stored.
1604 template <typename T>
1605 class ThreadedList final {
1606 public:
1607 ThreadedList() : head_(nullptr), tail_(&head_) {}
1608 void Add(T* v) {
1609 DCHECK_NULL(*tail_);
1610 DCHECK_NULL(*v->next());
1611 *tail_ = v;
1612 tail_ = v->next();
1613 }
1614
1615 void Clear() {
1616 head_ = nullptr;
1617 tail_ = &head_;
1618 }
1619
1620 class Iterator final {
1621 public:
1622 Iterator& operator++() {
1623 entry_ = (*entry_)->next();
1624 return *this;
1625 }
1626 bool operator!=(const Iterator& other) { return entry_ != other.entry_; }
1627 T* operator*() { return *entry_; }
1628 Iterator& operator=(T* entry) {
1629 T* next = *(*entry_)->next();
1630 *entry->next() = next;
1631 *entry_ = entry;
1632 return *this;
1633 }
1634
1635 private:
1636 explicit Iterator(T** entry) : entry_(entry) {}
1637
1638 T** entry_;
1639
1640 friend class ThreadedList;
1641 };
1642
1643 Iterator begin() { return Iterator(&head_); }
1644 Iterator end() { return Iterator(tail_); }
1645
1646 void Rewind(Iterator reset_point) {
1647 tail_ = reset_point.entry_;
1648 *tail_ = nullptr;
1649 }
1650
1651 bool is_empty() const { return head_ == nullptr; }
1652
1653 // Slow. For testing purposes.
1654 int LengthForTest() {
1655 int result = 0;
1656 for (Iterator t = begin(); t != end(); ++t) ++result;
1657 return result;
1658 }
1659 T* AtForTest(int i) {
1660 Iterator t = begin();
1661 while (i-- > 0) ++t;
1662 return *t;
1663 }
1664
1665 private:
1666 T* head_;
1667 T** tail_;
1668 DISALLOW_COPY_AND_ASSIGN(ThreadedList);
1669 };
1670
1600 } // namespace internal 1671 } // namespace internal
1601 } // namespace v8 1672 } // namespace v8
1602 1673
1603 #endif // V8_UTILS_H_ 1674 #endif // V8_UTILS_H_
OLDNEW
« no previous file with comments | « src/parsing/parser.cc ('k') | test/cctest/asmjs/test-asm-typer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698