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