Changeset 0d0931d
- Timestamp:
- Mar 14, 2023, 12:56:41 PM (14 months ago)
- Branches:
- ADT, ast-experimental, master
- Children:
- c19ca4b
- Parents:
- a96ce07
- Location:
- src/Parser
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Parser/DeclarationNode.cc
ra96ce07 r0d0931d 9 9 // Author : Rodolfo G. Esteves 10 10 // Created On : Sat May 16 12:34:05 2015 11 // Last Modified By : Peter A. Buhr12 // Last Modified On : Tue Mar 14 08:54:13202313 // Update Count : 140 511 // Last Modified By : Andrew Beach 12 // Last Modified On : Tue Mar 14 11:56:00 2023 13 // Update Count : 1406 14 14 // 15 15 … … 600 600 } else { 601 601 switch ( dst->kind ) { 602 602 case TypeData::Unknown: 603 603 src->qualifiers |= dst->qualifiers; 604 604 dst = src; 605 605 src = nullptr; 606 606 break; 607 607 case TypeData::Basic: 608 608 dst->qualifiers |= src->qualifiers; 609 609 if ( src->kind != TypeData::Unknown ) { … … 633 633 } // if 634 634 break; 635 635 default: 636 636 switch ( src->kind ) { 637 638 637 case TypeData::Aggregate: 638 case TypeData::Enum: 639 639 dst->base = new TypeData( TypeData::AggregateInst ); 640 640 dst->base->aggInst.aggregate = src; … … 645 645 src = nullptr; 646 646 break; 647 647 default: 648 648 if ( dst->forall ) { 649 649 dst->forall->appendList( src->forall ); … … 727 727 assert( type ); 728 728 switch ( type->kind ) { 729 729 case TypeData::Symbolic: 730 730 if ( type->symbolic.assertions ) { 731 731 type->symbolic.assertions->appendList( assertions ); … … 734 734 } // if 735 735 break; 736 736 default: 737 737 assert( false ); 738 738 } // switch … … 833 833 if ( type ) { 834 834 switch ( type->kind ) { 835 836 835 case TypeData::Aggregate: 836 case TypeData::Enum: 837 837 p->type->base = new TypeData( TypeData::AggregateInst ); 838 838 p->type->base->aggInst.aggregate = type; … … 843 843 break; 844 844 845 845 default: 846 846 p->type->base = type; 847 847 } // switch … … 865 865 866 866 DeclarationNode * DeclarationNode::addNewArray( DeclarationNode * a ) { 867 867 if ( ! a ) return this; 868 868 assert( a->type->kind == TypeData::Array ); 869 869 TypeData * lastArray = findLast( a->type ); 870 870 if ( type ) { 871 871 switch ( type->kind ) { 872 873 872 case TypeData::Aggregate: 873 case TypeData::Enum: 874 874 lastArray->base = new TypeData( TypeData::AggregateInst ); 875 875 lastArray->base->aggInst.aggregate = type; … … 879 879 lastArray->base->qualifiers |= type->qualifiers; 880 880 break; 881 881 default: 882 882 lastArray->base = type; 883 883 } // switch … … 1245 1245 1246 1246 switch ( type->kind ) { 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1247 case TypeData::Enum: 1248 case TypeData::Aggregate: { 1249 ReferenceToType * ret = buildComAggInst( type, attributes, linkage ); 1250 buildList( type->aggregate.actuals, ret->get_parameters() ); 1251 return ret; 1252 } 1253 case TypeData::Symbolic: { 1254 TypeInstType * ret = new TypeInstType( buildQualifiers( type ), *type->symbolic.name, false, attributes ); 1255 buildList( type->symbolic.actuals, ret->get_parameters() ); 1256 return ret; 1257 } 1258 default: 1259 1259 Type * simpletypes = typebuild( type ); 1260 1260 simpletypes->get_attributes() = attributes; // copy because member is const -
src/Parser/ExpressionNode.cc
ra96ce07 r0d0931d 9 9 // Author : Peter A. Buhr 10 10 // Created On : Sat May 16 13:17:07 2015 11 // Last Modified By : Peter A. Buhr12 // Last Modified On : Tue Mar 14 09:10:22202313 // Update Count : 108 111 // Last Modified By : Andrew Beach 12 // Last Modified On : Tue Mar 14 12:00:00 2023 13 // Update Count : 1082 14 14 // 15 15 … … 122 122 if ( str[i] == '1' ) v |= 1; 123 123 i += 1; 124 124 if ( i == last - 1 || (str[i] != '0' && str[i] != '1') ) break; 125 125 v <<= 1; 126 126 } // for … … 168 168 if ( posn = str.find_last_of( "pP" ); posn != string::npos ) { 169 169 ltype = 5; str.erase( posn, 1 ); 170 170 // size_t 171 171 } else if ( posn = str.find_last_of( "zZ" ); posn != string::npos ) { 172 172 Unsigned = true; type = 2; ltype = 4; str.erase( posn, 1 ); 173 173 // signed char 174 174 } else if ( posn = str.rfind( "hh" ); posn != string::npos ) { 175 175 type = 1; str.erase( posn, 2 ); 176 176 // signed char 177 177 } else if ( posn = str.rfind( "HH" ); posn != string::npos ) { 178 178 type = 1; str.erase( posn, 2 ); 179 179 // short 180 180 } else if ( posn = str.find_last_of( "hH" ); posn != string::npos ) { 181 181 type = 0; str.erase( posn, 1 ); 182 182 // int (natural number) 183 183 } else if ( posn = str.find_last_of( "nN" ); posn != string::npos ) { 184 184 type = 2; str.erase( posn, 1 ); … … 436 436 Type * strtype; 437 437 switch ( str[0] ) { // str has >= 2 characters, i.e, null string "" => safe to look at subscripts 0/1 438 438 case 'u': 439 439 if ( str[1] == '8' ) goto Default; // utf-8 characters => array of char 440 440 // lookup type of associated typedef 441 441 strtype = new TypeInstType( Type::Qualifiers( ), "char16_t", false ); 442 442 break; 443 443 case 'U': 444 444 strtype = new TypeInstType( Type::Qualifiers( ), "char32_t", false ); 445 445 break; 446 446 case 'L': 447 447 strtype = new TypeInstType( Type::Qualifiers( ), "wchar_t", false ); 448 448 break; 449 450 449 Default: // char default string type 450 default: 451 451 strtype = new BasicType( Type::Qualifiers( ), BasicType::Char ); 452 452 } // switch
Note: See TracChangeset
for help on using the changeset viewer.