Deleted Added
sdiff udiff text old ( 200583 ) new ( 201361 )
full compact
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 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
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)
375 : CXXConstructExpr(C, CXXTemporaryObjectExprClass, writtenTy, Cons,
376 false, Args, NumArgs),
377 TyBeginLoc(tyBeginLoc), RParenLoc(rParenLoc) {
378}
379
380CXXConstructExpr *CXXConstructExpr::Create(ASTContext &C, QualType T,
381 CXXConstructorDecl *D, bool Elidable,
382 Expr **Args, unsigned NumArgs) {
383 return new (C) CXXConstructExpr(C, CXXConstructExprClass, T, D, Elidable,
384 Args, NumArgs);
385}
386
387CXXConstructExpr::CXXConstructExpr(ASTContext &C, StmtClass SC, QualType T,
388 CXXConstructorDecl *D, bool elidable,
389 Expr **args, unsigned numargs)
390: Expr(SC, T,
391 T->isDependentType(),
392 (T->isDependentType() ||
393 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 }
402 }
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,
423 unsigned numtemps,
424 bool shoulddestroytemps)
425: Expr(CXXExprWithTemporariesClass, subexpr->getType(),
426 subexpr->isTypeDependent(), subexpr->isValueDependent()),
427 SubExpr(subexpr), Temps(0), NumTemps(numtemps),
428 ShouldDestroyTemps(shoulddestroytemps) {
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,
439 unsigned NumTemps,
440 bool ShouldDestroyTemps){
441 return new (C) CXXExprWithTemporaries(SubExpr, Temps, NumTemps,
442 ShouldDestroyTemps);
443}
444
445void CXXExprWithTemporaries::DoDestroy(ASTContext &C) {
446 DestroyChildren(C);
447 this->~CXXExprWithTemporaries();
448 C.Deallocate(this);
449}
450

--- 182 unchanged lines hidden ---