Deleted Added
full compact
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 ---