Changeset 513e165 for src/Parser/ExpressionNode.cc
- Timestamp:
- Sep 13, 2017, 3:09:12 PM (8 years ago)
- Branches:
- ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, with_gc
- Children:
- 121c3c0
- Parents:
- 7aa257ae
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Parser/ExpressionNode.cc
r7aa257ae r513e165 10 10 // Created On : Sat May 16 13:17:07 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Tue Sep 12 10:00:29 201713 // Update Count : 6 7212 // Last Modified On : Wed Sep 13 14:54:19 2017 13 // Update Count : 683 14 14 // 15 15 … … 250 250 sepString( str, units, '"' ); // separate constant from units 251 251 252 BasicType::Kind strtype = BasicType::Char; // default string type253 switch ( str[0] ) { // str has >= 2 characters, i.e, null string "" 252 Type * strtype; 253 switch ( str[0] ) { // str has >= 2 characters, i.e, null string "" => safe to look at subscripts 0/1 254 254 case 'u': 255 if ( str[1] == '8' ) break; // utf-8 characters 256 strtype = BasicType::ShortUnsignedInt; 255 if ( str[1] == '8' ) goto Default; // utf-8 characters => array of char 256 // lookup type of associated typedef 257 strtype = new TypeInstType( Type::Qualifiers( Type::Const ), "char16_t", false ); 257 258 break; 258 259 case 'U': 259 strtype = BasicType::UnsignedInt;260 strtype = new TypeInstType( Type::Qualifiers( Type::Const ), "char32_t", false ); 260 261 break; 261 262 case 'L': 262 strtype = BasicType::SignedInt;263 strtype = new TypeInstType( Type::Qualifiers( Type::Const ), "wchar_t", false ); 263 264 break; 265 Default: // char default string type 266 default: 267 strtype = new BasicType( Type::Qualifiers( Type::Const ), BasicType::Char ); 264 268 } // switch 265 ArrayType * at = new ArrayType( noQualifiers, new BasicType( Type::Qualifiers( Type::Const ), strtype ),269 ArrayType * at = new ArrayType( noQualifiers, strtype, 266 270 new ConstantExpr( Constant::from_ulong( str.size() + 1 - 2 ) ), // +1 for '\0' and -2 for '"' 267 271 false, false ); … … 344 348 345 349 Expression * build_virtual_cast( DeclarationNode * decl_node, ExpressionNode * expr_node ) { 346 Type * targetType = maybeMoveBuildType( decl_node ); 347 Expression * castArg = maybeMoveBuild< Expression >( expr_node ); 348 return new VirtualCastExpr( castArg, targetType ); 350 return new VirtualCastExpr( maybeMoveBuild< Expression >( expr_node ), maybeMoveBuildType( decl_node ) ); 349 351 } // build_virtual_cast 350 352 351 353 Expression * build_fieldSel( ExpressionNode * expr_node, Expression * member ) { 352 UntypedMemberExpr * ret = new UntypedMemberExpr( member, maybeMoveBuild< Expression >(expr_node) ); 353 return ret; 354 return new UntypedMemberExpr( member, maybeMoveBuild< Expression >(expr_node) ); 354 355 } // build_fieldSel 355 356 … … 363 364 364 365 Expression * build_addressOf( ExpressionNode * expr_node ) { 365 366 return new AddressExpr( maybeMoveBuild< Expression >(expr_node) ); 366 367 } // build_addressOf 367 368 … … 422 423 } // build_cond 423 424 424 Expression * build_comma( ExpressionNode * expr_node1, ExpressionNode * expr_node2 ) {425 return new CommaExpr( maybeMoveBuild< Expression >(expr_node1), maybeMoveBuild< Expression >(expr_node2) );426 } // build_comma427 428 425 Expression * build_attrexpr( NameExpr * var, ExpressionNode * expr_node ) { 429 426 return new AttrExpr( var, maybeMoveBuild< Expression >(expr_node) ); … … 449 446 return new RangeExpr( maybeMoveBuild< Expression >( low ), maybeMoveBuild< Expression >( high ) ); 450 447 } // build_range 451 452 Expression * build_asmexpr( ExpressionNode * inout, Expression * constraint, ExpressionNode * operand ) {453 return new AsmExpr( maybeMoveBuild< Expression >( inout ), constraint, maybeMoveBuild< Expression >(operand) );454 } // build_asmexpr455 456 Expression * build_valexpr( StatementNode * s ) {457 return new StmtExpr( dynamic_cast< CompoundStmt * >(maybeMoveBuild< Statement >(s) ) );458 } // build_valexpr459 460 Expression * build_typevalue( DeclarationNode * decl ) {461 return new TypeExpr( maybeMoveBuildType( decl ) );462 } // build_typevalue463 448 464 449 Expression * build_compoundLiteral( DeclarationNode * decl_node, InitializerNode * kids ) {
Note: See TracChangeset
for help on using the changeset viewer.