Skip to main content
summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorMarkus Schorn2010-08-06 11:12:19 +0000
committerMarkus Schorn2010-08-06 11:12:19 +0000
commit4558192a5542d6d352fae00fa01bb3830ff99d3d (patch)
tree304debcc86775cd5640ca617c53032019ec00a3d /core
parent3f184587160d2795fce8fba17473aeae1ccdde4c (diff)
downloadorg.eclipse.cdt-4558192a5542d6d352fae00fa01bb3830ff99d3d.tar.gz
org.eclipse.cdt-4558192a5542d6d352fae00fa01bb3830ff99d3d.tar.xz
org.eclipse.cdt-4558192a5542d6d352fae00fa01bb3830ff99d3d.zip
Bug 313982: Content assist in placement new.
Diffstat (limited to 'core')
-rw-r--r--core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/prefix/BasicCompletionTest.java35
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java26
2 files changed, 54 insertions, 7 deletions
diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/prefix/BasicCompletionTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/prefix/BasicCompletionTest.java
index a44b603b900..22d8066fa20 100644
--- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/prefix/BasicCompletionTest.java
+++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/prefix/BasicCompletionTest.java
@@ -224,4 +224,39 @@ public class BasicCompletionTest extends CompletionTestBase {
checkCompletion(code, false, expected);
}
+ // struct B {
+ // int m;
+ // };
+ // int foo() {
+ // B * b;
+ // new (b->
+ public void testNewExpressions_Bug313982a() throws Exception {
+ String code = getAboveComment();
+ String[] expected= {"B", "m"};
+ checkCompletion(code, true, expected);
+ }
+
+ // struct B {
+ // int m;
+ // };
+ // int foo() {
+ // B * b;
+ // new (b->m) B
+ public void testNewExpressions_Bug313982b() throws Exception {
+ String code = getAboveComment();
+ String[] expected= {"B"};
+ checkCompletion(code, true, expected);
+ }
+
+ // struct B {
+ // int m;
+ // };
+ // int foo() {
+ // B * b;
+ // new (b->m) (B
+ public void testNewExpressions_Bug313982c() throws Exception {
+ String code = getAboveComment();
+ String[] expected= {"B"};
+ checkCompletion(code, true, expected);
+ }
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java
index 9b9b35d63bb..5b5c2cac123 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java
@@ -942,7 +942,11 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
plcmt= expressionList();
endOffset= consumeOrEOC(IToken.tRPAREN).getEndOffset();
- if (LT(1) == IToken.tLPAREN) {
+ final int lt1= LT(1);
+ if (lt1 == IToken.tEOC) {
+ return newExpression(isGlobal, plcmt, typeid, isNewTypeId, init, offset, endOffset);
+ }
+ if (lt1 == IToken.tLPAREN) {
// (P)(T) ...
isNewTypeId= false;
consume(IToken.tLPAREN);
@@ -959,12 +963,17 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
typeid= null;
}
- int lt1= LT(1);
- if (typeid != null && plcmt != null && (lt1 == IToken.tLPAREN || lt1 == IToken.tLBRACE)) {
+ if (typeid != null && plcmt != null) {
// (P)(T)(I) or (P) T (I)
- init= bracedOrCtorStyleInitializer();
- endOffset= calculateEndOffset(init);
- return newExpression(isGlobal, plcmt, typeid, isNewTypeId, init, offset, endOffset);
+ int lt1= LT(1);
+ if (lt1 == IToken.tEOC)
+ return newExpression(isGlobal, plcmt, typeid, isNewTypeId, init, offset, endOffset);
+
+ if (lt1 == IToken.tLPAREN || lt1 == IToken.tLBRACE) {
+ init= bracedOrCtorStyleInitializer();
+ endOffset= calculateEndOffset(init);
+ return newExpression(isGlobal, plcmt, typeid, isNewTypeId, init, offset, endOffset);
+ }
}
// (T) ...
@@ -976,7 +985,10 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
typeid2= typeId(DeclarationOptions.TYPEID);
endOffset2= consumeOrEOC(IToken.tRPAREN).getEndOffset();
- lt1= LT(1);
+ final int lt1= LT(1);
+ if (lt1 == IToken.tEOC)
+ return newExpression(isGlobal, null, typeid2, false, init2, offset, endOffset2);
+
if (lt1 == IToken.tLPAREN || lt1 == IToken.tLBRACE) {
if (plcmt != null &&
ASTQueries.findTypeRelevantDeclarator(typeid2.getAbstractDeclarator()) instanceof IASTArrayDeclarator) {

Back to the top