ExprCXX.cpp (200583) | ExprCXX.cpp (201361) |
---|---|
1//===--- ExprCXX.cpp - (C++) Expression AST Node Implementation -----------===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// --- 268 unchanged lines hidden (view full) --- 277 return true; 278 if (const RecordType *RT = 279 C.getBaseElementType(QueriedType)->getAs<RecordType>()) 280 return cast<CXXRecordDecl>(RT->getDecl())->hasTrivialDestructor(); 281 return false; 282 } 283} 284 | 1//===--- ExprCXX.cpp - (C++) Expression AST Node Implementation -----------===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// --- 268 unchanged lines hidden (view full) --- 277 return true; 278 if (const RecordType *RT = 279 C.getBaseElementType(QueriedType)->getAs<RecordType>()) 280 return cast<CXXRecordDecl>(RT->getDecl())->hasTrivialDestructor(); 281 return false; 282 } 283} 284 |
285SourceRange CXXConstructExpr::getSourceRange() const { 286 // FIXME: Should we know where the parentheses are, if there are any? 287 for (std::reverse_iterator<Stmt**> I(&Args[NumArgs]), E(&Args[0]); I!=E;++I) { 288 // Ignore CXXDefaultExprs when computing the range, as they don't 289 // have a range. 290 if (!isa<CXXDefaultArgExpr>(*I)) 291 return SourceRange(Loc, (*I)->getLocEnd()); 292 } 293 294 return SourceRange(Loc); 295} 296 |
|
285SourceRange CXXOperatorCallExpr::getSourceRange() const { 286 OverloadedOperatorKind Kind = getOperator(); 287 if (Kind == OO_PlusPlus || Kind == OO_MinusMinus) { 288 if (getNumArgs() == 1) 289 // Prefix operator 290 return SourceRange(getOperatorLoc(), 291 getArg(0)->getSourceRange().getEnd()); 292 else --- 42 unchanged lines hidden (view full) --- 335 case CXXStaticCastExprClass: return "static_cast"; 336 case CXXDynamicCastExprClass: return "dynamic_cast"; 337 case CXXReinterpretCastExprClass: return "reinterpret_cast"; 338 case CXXConstCastExprClass: return "const_cast"; 339 default: return "<invalid cast>"; 340 } 341} 342 | 297SourceRange CXXOperatorCallExpr::getSourceRange() const { 298 OverloadedOperatorKind Kind = getOperator(); 299 if (Kind == OO_PlusPlus || Kind == OO_MinusMinus) { 300 if (getNumArgs() == 1) 301 // Prefix operator 302 return SourceRange(getOperatorLoc(), 303 getArg(0)->getSourceRange().getEnd()); 304 else --- 42 unchanged lines hidden (view full) --- 347 case CXXStaticCastExprClass: return "static_cast"; 348 case CXXDynamicCastExprClass: return "dynamic_cast"; 349 case CXXReinterpretCastExprClass: return "reinterpret_cast"; 350 case CXXConstCastExprClass: return "const_cast"; 351 default: return "<invalid cast>"; 352 } 353} 354 |
355CXXDefaultArgExpr * 356CXXDefaultArgExpr::Create(ASTContext &C, SourceLocation Loc, 357 ParmVarDecl *Param, Expr *SubExpr) { 358 void *Mem = C.Allocate(sizeof(CXXDefaultArgExpr) + sizeof(Stmt *)); 359 return new (Mem) CXXDefaultArgExpr(CXXDefaultArgExprClass, Loc, Param, 360 SubExpr); 361} 362 363void CXXDefaultArgExpr::DoDestroy(ASTContext &C) { 364 if (Param.getInt()) 365 getExpr()->Destroy(C); 366 this->~CXXDefaultArgExpr(); 367 C.Deallocate(this); 368} 369 |
|
343CXXTemporary *CXXTemporary::Create(ASTContext &C, 344 const CXXDestructorDecl *Destructor) { 345 return new (C) CXXTemporary(Destructor); 346} 347 348void CXXTemporary::Destroy(ASTContext &Ctx) { 349 this->~CXXTemporary(); 350 Ctx.Deallocate(this); --- 16 unchanged lines hidden (view full) --- 367 368CXXTemporaryObjectExpr::CXXTemporaryObjectExpr(ASTContext &C, 369 CXXConstructorDecl *Cons, 370 QualType writtenTy, 371 SourceLocation tyBeginLoc, 372 Expr **Args, 373 unsigned NumArgs, 374 SourceLocation rParenLoc) | 370CXXTemporary *CXXTemporary::Create(ASTContext &C, 371 const CXXDestructorDecl *Destructor) { 372 return new (C) CXXTemporary(Destructor); 373} 374 375void CXXTemporary::Destroy(ASTContext &Ctx) { 376 this->~CXXTemporary(); 377 Ctx.Deallocate(this); --- 16 unchanged lines hidden (view full) --- 394 395CXXTemporaryObjectExpr::CXXTemporaryObjectExpr(ASTContext &C, 396 CXXConstructorDecl *Cons, 397 QualType writtenTy, 398 SourceLocation tyBeginLoc, 399 Expr **Args, 400 unsigned NumArgs, 401 SourceLocation rParenLoc) |
375 : CXXConstructExpr(C, CXXTemporaryObjectExprClass, writtenTy, Cons, 376 false, Args, NumArgs), | 402 : CXXConstructExpr(C, CXXTemporaryObjectExprClass, writtenTy, tyBeginLoc, 403 Cons, false, Args, NumArgs), |
377 TyBeginLoc(tyBeginLoc), RParenLoc(rParenLoc) { 378} 379 380CXXConstructExpr *CXXConstructExpr::Create(ASTContext &C, QualType T, | 404 TyBeginLoc(tyBeginLoc), RParenLoc(rParenLoc) { 405} 406 407CXXConstructExpr *CXXConstructExpr::Create(ASTContext &C, QualType T, |
408 SourceLocation Loc, |
|
381 CXXConstructorDecl *D, bool Elidable, | 409 CXXConstructorDecl *D, bool Elidable, |
382 Expr **Args, unsigned NumArgs) { 383 return new (C) CXXConstructExpr(C, CXXConstructExprClass, T, D, Elidable, 384 Args, NumArgs); | 410 Expr **Args, unsigned NumArgs, 411 bool ZeroInitialization) { 412 return new (C) CXXConstructExpr(C, CXXConstructExprClass, T, Loc, D, 413 Elidable, Args, NumArgs, ZeroInitialization); |
385} 386 387CXXConstructExpr::CXXConstructExpr(ASTContext &C, StmtClass SC, QualType T, | 414} 415 416CXXConstructExpr::CXXConstructExpr(ASTContext &C, StmtClass SC, QualType T, |
417 SourceLocation Loc, |
|
388 CXXConstructorDecl *D, bool elidable, | 418 CXXConstructorDecl *D, bool elidable, |
389 Expr **args, unsigned numargs) | 419 Expr **args, unsigned numargs, 420 bool ZeroInitialization) |
390: Expr(SC, T, 391 T->isDependentType(), 392 (T->isDependentType() || 393 CallExpr::hasAnyValueDependentArguments(args, numargs))), | 421: Expr(SC, T, 422 T->isDependentType(), 423 (T->isDependentType() || 424 CallExpr::hasAnyValueDependentArguments(args, numargs))), |
394 Constructor(D), Elidable(elidable), Args(0), NumArgs(numargs) { 395 if (NumArgs) { 396 Args = new (C) Stmt*[NumArgs]; 397 398 for (unsigned i = 0; i != NumArgs; ++i) { 399 assert(args[i] && "NULL argument in CXXConstructExpr"); 400 Args[i] = args[i]; 401 } | 425 Constructor(D), Loc(Loc), Elidable(elidable), 426 ZeroInitialization(ZeroInitialization), Args(0), NumArgs(numargs) 427{ 428 if (NumArgs) { 429 Args = new (C) Stmt*[NumArgs]; 430 431 for (unsigned i = 0; i != NumArgs; ++i) { 432 assert(args[i] && "NULL argument in CXXConstructExpr"); 433 Args[i] = args[i]; |
402 } | 434 } |
435 } |
|
403} 404 405CXXConstructExpr::CXXConstructExpr(EmptyShell Empty, ASTContext &C, 406 unsigned numargs) 407 : Expr(CXXConstructExprClass, Empty), Args(0), NumArgs(numargs) 408{ 409 if (NumArgs) 410 Args = new (C) Stmt*[NumArgs]; --- 4 unchanged lines hidden (view full) --- 415 if (Args) 416 C.Deallocate(Args); 417 this->~CXXConstructExpr(); 418 C.Deallocate(this); 419} 420 421CXXExprWithTemporaries::CXXExprWithTemporaries(Expr *subexpr, 422 CXXTemporary **temps, | 436} 437 438CXXConstructExpr::CXXConstructExpr(EmptyShell Empty, ASTContext &C, 439 unsigned numargs) 440 : Expr(CXXConstructExprClass, Empty), Args(0), NumArgs(numargs) 441{ 442 if (NumArgs) 443 Args = new (C) Stmt*[NumArgs]; --- 4 unchanged lines hidden (view full) --- 448 if (Args) 449 C.Deallocate(Args); 450 this->~CXXConstructExpr(); 451 C.Deallocate(this); 452} 453 454CXXExprWithTemporaries::CXXExprWithTemporaries(Expr *subexpr, 455 CXXTemporary **temps, |
423 unsigned numtemps, 424 bool shoulddestroytemps) | 456 unsigned numtemps) |
425: Expr(CXXExprWithTemporariesClass, subexpr->getType(), 426 subexpr->isTypeDependent(), subexpr->isValueDependent()), | 457: Expr(CXXExprWithTemporariesClass, subexpr->getType(), 458 subexpr->isTypeDependent(), subexpr->isValueDependent()), |
427 SubExpr(subexpr), Temps(0), NumTemps(numtemps), 428 ShouldDestroyTemps(shoulddestroytemps) { | 459 SubExpr(subexpr), Temps(0), NumTemps(numtemps) { |
429 if (NumTemps > 0) { 430 Temps = new CXXTemporary*[NumTemps]; 431 for (unsigned i = 0; i < NumTemps; ++i) 432 Temps[i] = temps[i]; 433 } 434} 435 436CXXExprWithTemporaries *CXXExprWithTemporaries::Create(ASTContext &C, 437 Expr *SubExpr, 438 CXXTemporary **Temps, | 460 if (NumTemps > 0) { 461 Temps = new CXXTemporary*[NumTemps]; 462 for (unsigned i = 0; i < NumTemps; ++i) 463 Temps[i] = temps[i]; 464 } 465} 466 467CXXExprWithTemporaries *CXXExprWithTemporaries::Create(ASTContext &C, 468 Expr *SubExpr, 469 CXXTemporary **Temps, |
439 unsigned NumTemps, 440 bool ShouldDestroyTemps){ 441 return new (C) CXXExprWithTemporaries(SubExpr, Temps, NumTemps, 442 ShouldDestroyTemps); | 470 unsigned NumTemps) { 471 return new (C) CXXExprWithTemporaries(SubExpr, Temps, NumTemps); |
443} 444 445void CXXExprWithTemporaries::DoDestroy(ASTContext &C) { 446 DestroyChildren(C); 447 this->~CXXExprWithTemporaries(); 448 C.Deallocate(this); 449} 450 --- 182 unchanged lines hidden --- | 472} 473 474void CXXExprWithTemporaries::DoDestroy(ASTContext &C) { 475 DestroyChildren(C); 476 this->~CXXExprWithTemporaries(); 477 C.Deallocate(this); 478} 479 --- 182 unchanged lines hidden --- |