Changeset f135b50 for src/AST/Decl.cpp


Ignore:
Timestamp:
Feb 28, 2022, 3:41:44 AM (3 years ago)
Author:
JiadaL <j82liang@…>
Branches:
ADT, ast-experimental, enum, master, pthread-emulation, qualifiedEnum
Children:
786c438
Parents:
a8ef59e
Message:

The compiler is now trying to pass the value of enum const to code gen; but it won't work cause we must be able to evaluate the const_expr in compiler time. It is not currently passed as a Expression but won't be able to evaluate at compile time

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/AST/Decl.cpp

    ra8ef59e rf135b50  
    133133
    134134        auto it = enumValues.find( enumerator->name );
     135       
    135136        if ( it != enumValues.end() ) {
    136                 value = it->second;
     137                       
     138                // Handle typed enum by casting the value in (C++) compiler
     139                if ( base ) { // A typed enum
     140                        if ( const BasicType * bt = dynamic_cast<const BasicType *>(base) ) {
     141                                switch( bt->kind ) {
     142                                        case BasicType::Kind::Bool:     value = (bool) it->second; break;
     143                                        case BasicType::Kind::Char: value = (char) it->second; break;
     144                                        case BasicType::Kind::SignedChar: value = (signed char) it->second; break;
     145                                        case BasicType::Kind::UnsignedChar: value = (unsigned char) it->second; break;
     146                                        case BasicType::Kind::ShortSignedInt: value = (short signed int) it->second; break;
     147                                        case BasicType::Kind::SignedInt: value = (signed int) it->second; break;
     148                                        case BasicType::Kind::UnsignedInt: value = (unsigned int) it->second; break;
     149                                        case BasicType::Kind::LongSignedInt: value = (long signed int) it->second; break;
     150                                        case BasicType::Kind::LongUnsignedInt: value = (long unsigned int) it->second; break;
     151                                        case BasicType::Kind::LongLongSignedInt: value = (long long signed int) it->second; break;
     152                                        case BasicType::Kind::LongLongUnsignedInt: value = (long long unsigned int) it->second; break;
     153                                        // TODO: value should be able to handle long long unsigned int
     154
     155                                        default:
     156                                        value = it->second;
     157                                }
     158                        }
     159                } else {
     160                        value = it->second;
     161                }
     162
    137163                return true;
    138164        }
Note: See TracChangeset for help on using the changeset viewer.