Changes in src/Parser/ExpressionNode.cc [beec62c:db70fe4]
- File:
-
- 1 edited
-
src/Parser/ExpressionNode.cc (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/Parser/ExpressionNode.cc
rbeec62c rdb70fe4 10 10 // Created On : Sat May 16 13:17:07 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : T ue Sep 12 10:00:29201713 // Update Count : 6 7212 // Last Modified On : Thu Sep 14 23:09:34 2017 13 // Update Count : 690 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 … … 361 362 return ret; 362 363 } // build_pfieldSel 363 364 Expression * build_addressOf( ExpressionNode * expr_node ) {365 return new AddressExpr( maybeMoveBuild< Expression >(expr_node) );366 } // build_addressOf367 368 Expression * build_sizeOfexpr( ExpressionNode * expr_node ) {369 return new SizeofExpr( maybeMoveBuild< Expression >(expr_node) );370 } // build_sizeOfexpr371 372 Expression * build_sizeOftype( DeclarationNode * decl_node ) {373 return new SizeofExpr( maybeMoveBuildType( decl_node ) );374 } // build_sizeOftype375 376 Expression * build_alignOfexpr( ExpressionNode * expr_node ) {377 return new AlignofExpr( maybeMoveBuild< Expression >(expr_node) );378 } // build_alignOfexpr379 380 Expression * build_alignOftype( DeclarationNode * decl_node ) {381 return new AlignofExpr( maybeMoveBuildType( decl_node) );382 } // build_alignOftype383 364 384 365 Expression * build_offsetOf( DeclarationNode * decl_node, NameExpr * member ) { … … 422 403 } // build_cond 423 404 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 Expression * build_attrexpr( NameExpr * var, ExpressionNode * expr_node ) {429 return new AttrExpr( var, maybeMoveBuild< Expression >(expr_node) );430 } // build_attrexpr431 432 Expression * build_attrtype( NameExpr * var, DeclarationNode * decl_node ) {433 return new AttrExpr( var, maybeMoveBuildType( decl_node ) );434 } // build_attrtype435 436 405 Expression * build_tuple( ExpressionNode * expr_node ) { 437 406 list< Expression * > exprs; … … 445 414 return new UntypedExpr( maybeMoveBuild< Expression >(function), args, nullptr ); 446 415 } // build_func 447 448 Expression * build_range( ExpressionNode * low, ExpressionNode * high ) {449 return new RangeExpr( maybeMoveBuild< Expression >( low ), maybeMoveBuild< Expression >( high ) );450 } // build_range451 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 416 464 417 Expression * build_compoundLiteral( DeclarationNode * decl_node, InitializerNode * kids ) {
Note:
See TracChangeset
for help on using the changeset viewer.