Changeset e04ef3a for src/Parser/ParseNode.h
- Timestamp:
- Jun 14, 2016, 12:53:03 PM (8 years ago)
- Branches:
- ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, ctor, deferred_resn, demangler, enum, forall-pointer-decay, gc_noraii, jacob/cs343-translation, jenkins-sandbox, master, memory, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, with_gc
- Children:
- c8c03683
- Parents:
- 55ba7339
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Parser/ParseNode.h
r55ba7339 re04ef3a 9 9 // Author : Rodolfo G. Esteves 10 10 // Created On : Sat May 16 13:28:16 2015 11 // Last Modified By : Rob Schluntz12 // Last Modified On : Thu Apr 14 15:37:52201613 // Update Count : 2 0511 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Mon Jun 13 16:04:47 2016 13 // Update Count : 240 14 14 // 15 15 … … 20 20 #include <list> 21 21 #include <iterator> 22 #include <memory> 22 23 23 24 #include "Common/utility.h" 24 25 #include "Parser/LinkageSpec.h" 25 26 #include "SynTree/Type.h" 27 #include "SynTree/Expression.h" 26 28 //#include "SynTree/Declaration.h" 27 29 #include "Common/UniqueName.h" … … 79 81 ExpressionNode *set_argName( const std::string *aName ); 80 82 ExpressionNode *set_argName( ExpressionNode *aDesignator ); 83 bool get_extension() const { return extension; } 84 ExpressionNode *set_extension( bool exten ) { extension = exten; return this; } 81 85 82 86 virtual void print( std::ostream &, int indent = 0) const = 0; … … 87 91 void printDesignation ( std::ostream &, int indent = 0) const; 88 92 private: 89 ExpressionNode *argName; 93 ExpressionNode *argName = 0; 94 bool extension = false; 95 }; 96 97 template< typename T > 98 struct maybeBuild_t<Expression, T> { 99 static inline Expression * doit( const T *orig ) { 100 if ( orig ) { 101 Expression *p = orig->build(); 102 p->set_extension( orig->get_extension() ); 103 return p; 104 } else { 105 return 0; 106 } // if 107 } 90 108 }; 91 109 … … 179 197 Cond, NCond, 180 198 // diadic 181 SizeOf, AlignOf, OffsetOf, Attr, CompLit,Plus, Minus, Mul, Div, Mod, Or, And,199 SizeOf, AlignOf, OffsetOf, Attr, Plus, Minus, Mul, Div, Mod, Or, And, 182 200 BitOr, BitAnd, Xor, Cast, LShift, RShift, LThan, GThan, LEThan, GEThan, Eq, Neq, 183 201 Assign, MulAssn, DivAssn, ModAssn, PlusAssn, MinusAssn, LSAssn, RSAssn, AndAssn, ERAssn, OrAssn, … … 574 592 while ( cur ) { 575 593 try { 576 SynTreeType *result = dynamic_cast< SynTreeType *>( cur->build() ); 594 // SynTreeType *result = dynamic_cast< SynTreeType *>( maybeBuild<typename std::result_of<decltype(&NodeType::build)(NodeType)>::type>( cur ) ); 595 SynTreeType *result = dynamic_cast< SynTreeType *>( maybeBuild<typename std::pointer_traits<decltype(cur->build())>::element_type>( cur ) ); 577 596 if ( result ) { 578 597 *out++ = result;
Note: See TracChangeset
for help on using the changeset viewer.