Changes in src/ResolvExpr/CurrentObject.h [2b59f55:60aaa51d]
- File:
-
- 1 edited
-
src/ResolvExpr/CurrentObject.h (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/ResolvExpr/CurrentObject.h
r2b59f55 r60aaa51d 16 16 #pragma once 17 17 18 #include <deque> 18 19 #include <list> // for list 19 20 #include <memory> // for unique_ptr … … 21 22 #include <vector> 22 23 24 #include "AST/Node.hpp" // for ptr 23 25 #include "Common/CodeLocation.h" 24 26 … … 59 61 // AST class types 60 62 class Designation; 61 classInitAlternative;63 struct InitAlternative; 62 64 class Type; 63 65 64 // forward declaration of internal detail 65 class MemberIterator; 66 /// Iterates members of a type by initializer 67 class MemberIterator { 68 public: 69 virtual ~MemberIterator() {} 70 71 /// Internal set position based on iterator ranges 72 virtual void setPosition( 73 std::deque< ptr< Expr > >::const_iterator it, 74 std::deque< ptr< Expr > >::const_iterator end ) = 0; 75 76 /// walks the current object using the given designators as a guide 77 void setPosition( const std::deque< ptr< Expr > > & designators ) { 78 setPosition( designators.begin(), designators.end() ); 79 } 80 81 /// retrieve the list of possible (Type,Designation) pairs for the current position in the 82 /// current object 83 virtual std::deque< InitAlternative > operator* () const = 0; 84 85 /// true if the iterator is not currently at the end 86 virtual operator bool() const = 0; 87 88 /// moves the iterator by one member in the current object 89 virtual MemberIterator & bigStep() = 0; 90 91 /// moves the iterator by one member in the current subobject 92 virtual MemberIterator & smallStep() = 0; 93 94 /// the type of the current object 95 virtual const Type * getType() = 0; 96 97 /// the type of the current subobject 98 virtual const Type * getNext() = 0; 99 100 /// helper for operator*; aggregates must add designator to each init alternative, but 101 /// adding designators in operator* creates duplicates 102 virtual std::deque< InitAlternative > first() const = 0; 103 }; 66 104 67 105 /// Builds initializer lists in resolution … … 73 111 CurrentObject( const CodeLocation & loc, const Type * type ); 74 112 113 /// sets current position using the resolved designation 114 void setNext( const ast::Designation * designation ); 115 /// steps to next sub-object of current object 116 void increment(); 117 /// sets new current object for the duration of this brace-enclosed intializer-list 118 void enterListInit( const CodeLocation & loc ); 119 /// restores previous current object 120 void exitListInit(); 75 121 /// produces a list of alternatives (Type *, Designation *) for the current sub-object's 76 122 /// initializer. 77 std::vector< InitAlternative > getOptions(); 123 std::deque< InitAlternative > getOptions(); 124 /// produces the type of the current object but no subobjects 125 const Type * getCurrentType(); 78 126 }; 79 127 } // namespace ast
Note:
See TracChangeset
for help on using the changeset viewer.