 |
|
 |
|
| 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 |
| |
 |
|
 |
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