diff options
author | Douglas Gregor <dgregor@apple.com> | 2010-02-19 01:07:06 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2010-02-19 01:07:06 +0000 |
commit | c74247edddc3f5596ea0b1967bc6ffd3aed26351 (patch) | |
tree | 997d1e92001cd3a46b510590607e664896df753f /clang | |
parent | 445a603c78c10b372c20335bcbf803c010a05f29 (diff) | |
download | bcm5719-llvm-c74247edddc3f5596ea0b1967bc6ffd3aed26351.tar.gz bcm5719-llvm-c74247edddc3f5596ea0b1967bc6ffd3aed26351.zip |
AST import of parenthesized expressions, unary operators, binary
operators, and compound assignment operators.
llvm-svn: 96643
Diffstat (limited to 'clang')
-rw-r--r-- | clang/lib/AST/ASTImporter.cpp | 74 | ||||
-rw-r--r-- | clang/test/ASTMerge/Inputs/exprs1.c | 4 | ||||
-rw-r--r-- | clang/test/ASTMerge/Inputs/exprs2.c | 4 |
3 files changed, 80 insertions, 2 deletions
diff --git a/clang/lib/AST/ASTImporter.cpp b/clang/lib/AST/ASTImporter.cpp index 69887bfc1c9..661adb82f25 100644 --- a/clang/lib/AST/ASTImporter.cpp +++ b/clang/lib/AST/ASTImporter.cpp @@ -109,6 +109,10 @@ namespace { Expr *VisitExpr(Expr *E); Expr *VisitIntegerLiteral(IntegerLiteral *E); Expr *VisitCharacterLiteral(CharacterLiteral *E); + Expr *VisitParenExpr(ParenExpr *E); + Expr *VisitUnaryOperator(UnaryOperator *E); + Expr *VisitBinaryOperator(BinaryOperator *E); + Expr *VisitCompoundAssignOperator(CompoundAssignOperator *E); Expr *VisitImplicitCastExpr(ImplicitCastExpr *E); }; } @@ -2609,6 +2613,76 @@ Expr *ASTNodeImporter::VisitCharacterLiteral(CharacterLiteral *E) { Importer.Import(E->getLocation())); } +Expr *ASTNodeImporter::VisitParenExpr(ParenExpr *E) { + Expr *SubExpr = Importer.Import(E->getSubExpr()); + if (!SubExpr) + return 0; + + return new (Importer.getToContext()) + ParenExpr(Importer.Import(E->getLParen()), + Importer.Import(E->getRParen()), + SubExpr); +} + +Expr *ASTNodeImporter::VisitUnaryOperator(UnaryOperator *E) { + QualType T = Importer.Import(E->getType()); + if (T.isNull()) + return 0; + + Expr *SubExpr = Importer.Import(E->getSubExpr()); + if (!SubExpr) + return 0; + + return new (Importer.getToContext()) UnaryOperator(SubExpr, E->getOpcode(), + T, + Importer.Import(E->getOperatorLoc())); +} + +Expr *ASTNodeImporter::VisitBinaryOperator(BinaryOperator *E) { + QualType T = Importer.Import(E->getType()); + if (T.isNull()) + return 0; + + Expr *LHS = Importer.Import(E->getLHS()); + if (!LHS) + return 0; + + Expr *RHS = Importer.Import(E->getRHS()); + if (!RHS) + return 0; + + return new (Importer.getToContext()) BinaryOperator(LHS, RHS, E->getOpcode(), + T, + Importer.Import(E->getOperatorLoc())); +} + +Expr *ASTNodeImporter::VisitCompoundAssignOperator(CompoundAssignOperator *E) { + QualType T = Importer.Import(E->getType()); + if (T.isNull()) + return 0; + + QualType CompLHSType = Importer.Import(E->getComputationLHSType()); + if (CompLHSType.isNull()) + return 0; + + QualType CompResultType = Importer.Import(E->getComputationResultType()); + if (CompResultType.isNull()) + return 0; + + Expr *LHS = Importer.Import(E->getLHS()); + if (!LHS) + return 0; + + Expr *RHS = Importer.Import(E->getRHS()); + if (!RHS) + return 0; + + return new (Importer.getToContext()) + CompoundAssignOperator(LHS, RHS, E->getOpcode(), + T, CompLHSType, CompResultType, + Importer.Import(E->getOperatorLoc())); +} + Expr *ASTNodeImporter::VisitImplicitCastExpr(ImplicitCastExpr *E) { QualType T = Importer.Import(E->getType()); if (T.isNull()) diff --git a/clang/test/ASTMerge/Inputs/exprs1.c b/clang/test/ASTMerge/Inputs/exprs1.c index f9de8df7fd5..bc768879799 100644 --- a/clang/test/ASTMerge/Inputs/exprs1.c +++ b/clang/test/ASTMerge/Inputs/exprs1.c @@ -1,5 +1,7 @@ // Matching enum E0 { - E0_Val0 = 'a' + E0_Val0 = 'a', + E0_Val1 = (17), + E0_Val2 = (1 << 2) }; diff --git a/clang/test/ASTMerge/Inputs/exprs2.c b/clang/test/ASTMerge/Inputs/exprs2.c index f9de8df7fd5..bc768879799 100644 --- a/clang/test/ASTMerge/Inputs/exprs2.c +++ b/clang/test/ASTMerge/Inputs/exprs2.c @@ -1,5 +1,7 @@ // Matching enum E0 { - E0_Val0 = 'a' + E0_Val0 = 'a', + E0_Val1 = (17), + E0_Val2 = (1 << 2) }; |