Changes in src/AST/Convert.cpp [60aaa51d:0b73f0c]
- File:
-
- 1 edited
-
src/AST/Convert.cpp (modified) (11 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/AST/Convert.cpp
r60aaa51d r0b73f0c 16 16 #include "Convert.hpp" 17 17 18 #include <deque>19 18 #include <unordered_map> 20 19 … … 576 575 577 576 if ( srcInferred.mode == ast::Expr::InferUnion::Params ) { 578 const ast::InferredParams &srcParams = srcInferred.inferParams ();577 const ast::InferredParams &srcParams = srcInferred.inferParamsConst(); 579 578 for (auto srcParam : srcParams) { 580 579 tgtInferParams[srcParam.first] = ParamEntry( … … 586 585 } 587 586 } else if ( srcInferred.mode == ast::Expr::InferUnion::Slots ) { 588 const ast::ResnSlots &srcSlots = srcInferred.resnSlots ();587 const ast::ResnSlots &srcSlots = srcInferred.resnSlotsConst(); 589 588 for (auto srcSlot : srcSlots) { 590 589 tgtResnSlots.push_back(srcSlot); … … 736 735 expr->var = get<DeclarationWithType>().accept1(node->var); 737 736 Type * type = expr->var->get_type()->clone(); 737 if(FunctionType * ft = dynamic_cast<FunctionType*>(type)) { 738 if(node->result.as<ast::PointerType>()) { 739 type = new PointerType({}, ft); 740 } 741 } 742 738 743 type->set_lvalue( true ); 739 expr-> set_result( type );744 expr->result = type ; 740 745 this->node = expr; 741 746 return nullptr; … … 783 788 assert (!rslt->isType); 784 789 } 785 if (node->type) { 790 else { 791 assert(node->type); 786 792 rslt = new SizeofExpr( 787 793 get<Type>().accept1(node->type) … … 804 810 assert (!rslt->isType); 805 811 } 806 if (node->type) { 812 else { 813 assert(node->type); 807 814 rslt = new AlignofExpr( 808 815 get<Type>().accept1(node->type) … … 1414 1421 # define GET_ACCEPT_V(child, type) \ 1415 1422 getAcceptV< ast::type, decltype( old->child ) >( old->child ) 1416 1417 template<typename NewT, typename OldC>1418 std::deque< ast::ptr<NewT> > getAcceptD( OldC& old ) {1419 std::deque< ast::ptr<NewT> > ret;1420 for ( auto a : old ) {1421 a->accept( *this );1422 ret.emplace_back( strict_dynamic_cast< NewT * >(node) );1423 node = nullptr;1424 }1425 return ret;1426 }1427 1428 # define GET_ACCEPT_D(child, type) \1429 getAcceptD< ast::type, decltype( old->child ) >( old->child )1430 1423 1431 1424 ast::Label make_label(Label* old) { … … 2164 2157 ); 2165 2158 2166 visitBaseExpr ( old,2159 visitBaseExpr_SkipResultType( old, 2167 2160 expr 2168 2161 ); … … 2170 2163 expr->var = GET_ACCEPT_1(var, DeclWithType); 2171 2164 expr->result = expr->var->get_type(); 2165 if(const ast::FunctionType * ft = expr->result.as<ast::FunctionType>()) { 2166 if(dynamic_cast<PointerType *>(old->result)) { 2167 expr->result = new ast::PointerType(ft); 2168 } 2169 } 2172 2170 add_qualifiers( expr->result, ast::CV::Lvalue ); 2173 2171 this->node = expr; … … 2464 2462 2465 2463 virtual void visit( UntypedInitExpr * old ) override final { 2466 std:: deque<ast::InitAlternative> initAlts;2464 std::vector<ast::InitAlternative> initAlts; 2467 2465 for (auto ia : old->initAlts) { 2468 2466 initAlts.push_back(ast::InitAlternative( … … 2729 2727 this->node = new ast::Designation( 2730 2728 old->location, 2731 GET_ACCEPT_ D(designators, Expr)2729 GET_ACCEPT_V(designators, Expr) 2732 2730 ); 2733 2731 }
Note:
See TracChangeset
for help on using the changeset viewer.