Changes in src/AST/Decl.cpp [8f557161:3e94a23]
- File:
-
- 1 edited
-
src/AST/Decl.cpp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
src/AST/Decl.cpp
r8f557161 r3e94a23 142 142 bool EnumDecl::valueOf( const Decl * enumerator, long long& value ) const { 143 143 if ( enumValues.empty() ) { 144 Evaluation crntVal = {0, true, true}; // until expression is given, we know to start counting from 0144 long long crntVal = 0; 145 145 for ( const Decl * member : members ) { 146 146 const ObjectDecl* field = strict_dynamic_cast< const ObjectDecl* >( member ); 147 147 if ( field->init ) { 148 148 const SingleInit * init = strict_dynamic_cast< const SingleInit* >( field->init.get() ); 149 crntVal= eval( init->value );150 if ( ! crntVal.isEvaluableInGCC) {149 auto result = eval( init->value ); 150 if ( ! result.second ) { 151 151 SemanticError( init->location, ::toString( "Non-constexpr in initialization of " 152 152 "enumerator: ", field ) ); 153 153 } 154 crntVal = result.first; 154 155 } 155 156 if ( enumValues.count( field->name ) != 0 ) { 156 157 SemanticError( location, ::toString( "Enum ", name, " has multiple members with the " "name ", field->name ) ); 157 158 } 158 if (crntVal.hasKnownValue) { 159 enumValues[ field->name ] = crntVal.knownValue; 160 } 161 ++crntVal.knownValue; 159 enumValues[ field->name ] = crntVal; 160 ++crntVal; 162 161 } 163 162 }
Note:
See TracChangeset
for help on using the changeset viewer.