]> granicus.if.org Git - clang/commitdiff
Perform code-completion within ParseCastExpression, which handles,
authorDouglas Gregor <dgregor@apple.com>
Tue, 6 Apr 2010 15:09:27 +0000 (15:09 +0000)
committerDouglas Gregor <dgregor@apple.com>
Tue, 6 Apr 2010 15:09:27 +0000 (15:09 +0000)
e.g., the right-hand side of binary expressions.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@100526 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Parse/ParseExpr.cpp
test/Index/complete-exprs.c [new file with mode: 0644]

index af91021d33ce7387f8a97b62f57ba3b1eabc346e..965f764dcf6c9b24de89d3ba93fe021ab647c907 100644 (file)
@@ -897,11 +897,16 @@ Parser::OwningExprResult Parser::ParseCastExpression(bool isUnaryExpression,
   }
   case tok::caret:
     return ParsePostfixExpressionSuffix(ParseBlockLiteralExpression());
+  case tok::code_completion:
+    Actions.CodeCompleteOrdinaryName(CurScope, Action::CCC_Expression);
+    ConsumeToken();
+    return ParseCastExpression(isUnaryExpression, isAddressOfOperand, 
+                               NotCastExpr, TypeOfCast);
   case tok::l_square:
     // These can be followed by postfix-expr pieces.
     if (getLang().ObjC1)
       return ParsePostfixExpressionSuffix(ParseObjCMessageExpression());
-    // FALL THROUGH.
+    // FALL THROUGH.      
   default:
     NotCastExpr = true;
     return ExprError();
diff --git a/test/Index/complete-exprs.c b/test/Index/complete-exprs.c
new file mode 100644 (file)
index 0000000..efc82f9
--- /dev/null
@@ -0,0 +1,15 @@
+// Note: the run lines follow their respective tests, since line/column
+// matter in this test.
+
+int f(int);
+
+int test(int i, int j, int k, int l) {
+  return i | j | k & l;
+}
+
+// RUN: c-index-test -code-completion-at=%s:7:9 %s | FileCheck -check-prefix=CHECK-CC1 %s
+// CHECK-CC1: FunctionDecl:{ResultType int}{TypedText f}{LeftParen (}{Placeholder int}{RightParen )}
+// CHECK-CC1: NotImplemented:{TypedText sizeof}{LeftParen (}{Placeholder expression-or-type}{RightParen )}
+// RUN: c-index-test -code-completion-at=%s:7:14 %s | FileCheck -check-prefix=CHECK-CC1 %s
+// RUN: c-index-test -code-completion-at=%s:7:18 %s | FileCheck -check-prefix=CHECK-CC1 %s
+// RUN: c-index-test -code-completion-at=%s:7:22 %s | FileCheck -check-prefix=CHECK-CC1 %s