zcov: / lib/AST/FullExpr.cpp


Files: 1 Branches Taken: 0.0% 0 / 6
Generated: 2010-02-10 01:31 Branches Executed: 0.0% 0 / 6
Line Coverage: 0.0% 0 / 20


Programs: 2 Runs 3018


       1                 : //===--- FullExpr.cpp - C++ full expression class ---------------*- C++ -*-===//
       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                 : //===----------------------------------------------------------------------===//
       9                 : //
      10                 : //  This file defines the FullExpr interface, to be used for type safe handling
      11                 : //  of full expressions.
      12                 : //
      13                 : //  Full expressions are described in C++ [intro.execution]p12.
      14                 : //
      15                 : //===----------------------------------------------------------------------===//
      16                 : 
      17                 : #include "clang/AST/ASTContext.h"
      18                 : #include "clang/AST/FullExpr.h"
      19                 : #include "clang/AST/Expr.h"
      20                 : #include "clang/AST/ExprCXX.h"
      21                 : #include "llvm/Support/AlignOf.h"
      22                 : using namespace clang;
      23                 : 
      24                 : FullExpr FullExpr::Create(ASTContext &Context, Expr *SubExpr,
      25                0:                           CXXTemporary **Temporaries, unsigned NumTemporaries) {
      26                0:   FullExpr E;
      27                 : 
                        0: branch 0 not taken
                        0: branch 1 not taken
      28                0:   if (!NumTemporaries) {
      29                0:       E.SubExpr = SubExpr;
      30                0:       return E;
      31                 :   }
      32                 : 
      33                 :   unsigned Size = sizeof(FullExpr) 
      34                0:       + sizeof(CXXTemporary *) * NumTemporaries;
      35                 : 
      36                0:   unsigned Align = llvm::AlignOf<ExprAndTemporaries>::Alignment;
      37                 :   ExprAndTemporaries *ET = 
      38                0:       static_cast<ExprAndTemporaries *>(Context.Allocate(Size, Align));
      39                 : 
      40                0:   ET->SubExpr = SubExpr;
      41                0:   std::copy(Temporaries, Temporaries + NumTemporaries, ET->temps_begin());
      42                 :     
      43                0:   return E;
      44                 : }
      45                 : 
      46                0: void FullExpr::Destroy(ASTContext &Context) {
                        0: branch 1 not taken
                        0: branch 2 not taken
      47                0:   if (Expr *E = SubExpr.dyn_cast<Expr *>()) {
      48                0:     E->Destroy(Context);
      49                0:     return;
      50                 :   }
      51                 :   
      52                0:   ExprAndTemporaries *ET = SubExpr.get<ExprAndTemporaries *>();
                        0: branch 1 not taken
                        0: branch 2 not taken
      53                0:   for (ExprAndTemporaries::temps_iterator i = ET->temps_begin(), 
      54                0:        e = ET->temps_end(); i != e; ++i)
      55                0:     (*i)->Destroy(Context);
      56                 : 
      57                0:   Context.Deallocate(ET);
      58                 : }

Generated: 2010-02-10 01:31 by zcov