Changes in src/ResolvExpr/Resolver.cc [92355883:4894239]
- File:
-
- 1 edited
-
src/ResolvExpr/Resolver.cc (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/ResolvExpr/Resolver.cc
r92355883 r4894239 988 988 } 989 989 }; 990 991 struct ResolveDesignators_new final : public ast::WithShortCircuiting { 992 ResolveContext& context; 993 bool result = false; 994 995 ResolveDesignators_new( ResolveContext& _context ): context{_context} {}; 996 997 void previsit( const ast::Node * ) { 998 // short circuit if we already know there are designations 999 if ( result ) visit_children = false; 1000 } 1001 1002 void previsit( const ast::Designation * des ) { 1003 if ( result ) visit_children = false; 1004 else if ( ! des->designators.empty() ) { 1005 if ( (des->designators.size() == 1) ) { 1006 const ast::Expr * designator = des->designators.at(0); 1007 if ( const ast::NameExpr * designatorName = dynamic_cast<const ast::NameExpr *>(designator) ) { 1008 auto candidates = context.symtab.lookupId(designatorName->name); 1009 for ( auto candidate : candidates ) { 1010 if ( dynamic_cast<const ast::EnumInstType *>(candidate.id->get_type()) ) { 1011 result = true; 1012 break; 1013 } 1014 } 1015 } 1016 } 1017 visit_children = false; 1018 } 1019 } 1020 }; 990 1021 } // anonymous namespace 991 1022 /// Check if this expression is or includes a deleted expression … … 1507 1538 if ( InitTweak::tryConstruct( mutDecl ) && ( managedTypes.isManaged( mutDecl ) || ((! isInFunction() || mutDecl->storage.is_static ) && ! InitTweak::isConstExpr( mutDecl->init ) ) ) ) { 1508 1539 // constructed objects cannot be designated 1509 // if ( InitTweak::isDesignated( mutDecl->init ) ) SemanticError( mutDecl, "Cannot include designations in the initializer for a managed Object. If this is really what you want, then initialize with @=.\n" );1510 1540 if ( InitTweak::isDesignated( mutDecl->init ) ) { 1511 SemanticError( mutDecl, "Cannot include designations in the initializer for a managed Object. If this is really what you want, then initialize with @=.\n" ); 1541 ast::Pass<ResolveDesignators_new> res( context ); 1542 maybe_accept( mutDecl->init.get(), res ); 1543 if ( !res.core.result ) { 1544 SemanticError( mutDecl, "Cannot include designations in the initializer for a managed Object. If this is really what you want, then initialize with @=.\n" ); 1545 } 1512 1546 } 1513 1547 // constructed objects should not have initializers nested too deeply
Note:
See TracChangeset
for help on using the changeset viewer.