Skip to main content
summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorJohn Camelon2005-04-08 15:38:23 +0000
committerJohn Camelon2005-04-08 15:38:23 +0000
commitcfbadc7405e607fed4b4ad435dc0cb65b921684b (patch)
tree98330aae9c8c837de41c0ae028bf13cbc8c0f3b2 /core
parente0adfeae97c2a94fda5231867ea8e647ae949fa2 (diff)
downloadorg.eclipse.cdt-cfbadc7405e607fed4b4ad435dc0cb65b921684b.tar.gz
org.eclipse.cdt-cfbadc7405e607fed4b4ad435dc0cb65b921684b.tar.xz
org.eclipse.cdt-cfbadc7405e607fed4b4ad435dc0cb65b921684b.zip
Patch for Devin Steffler.
add the actual operator kind if need be but Andrew said it is enough to just make sure that toCharArray() always returns the same thing regardless of spaces, comments, etc
Diffstat (limited to 'core')
-rw-r--r--core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPSpecFailingTest.java102
-rw-r--r--core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java96
-rw-r--r--core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2SpecBaseTest.java9
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPASTOperatorName.java87
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTOperatorName.java148
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassScope.java3
6 files changed, 387 insertions, 58 deletions
diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPSpecFailingTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPSpecFailingTest.java
index f3152eacb42..c87c6af041f 100644
--- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPSpecFailingTest.java
+++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPSpecFailingTest.java
@@ -28,7 +28,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
#define arraycheck(a,b) a[b] || b[a]
--End Example]
*/
- public void test2_3s2() { // TODO Devin exists bug 64993
+ public void test2_3s2() { // TODO exists bug 64993
StringBuffer buffer = new StringBuffer();
buffer.append("??=define arraycheck(a,b) a??(b??) ??!??! b??(a??)\n"); //$NON-NLS-1$
buffer.append("// becomes\n"); //$NON-NLS-1$
@@ -62,7 +62,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
// violates the ODR
--End Example]
*/
- public void test3_2s5() { // TODO Devin raised bug 90602
+ public void test3_2s5() { // TODO raised bug 90602
StringBuffer buffer = new StringBuffer();
buffer.append("// translation unit 1:\n"); //$NON-NLS-1$
buffer.append("struct X {\n"); //$NON-NLS-1$
@@ -110,7 +110,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
};
--End Example]
*/
- public void test3_3_6s5() { // TODO Devin raised bug 90606
+ public void test3_3_6s5() { // TODO raised bug 90606
StringBuffer buffer = new StringBuffer();
buffer.append("typedef int c;\n"); //$NON-NLS-1$
buffer.append("enum { i = 1 };\n"); //$NON-NLS-1$
@@ -151,7 +151,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
};
--End Example]
*/
- public void test3_4_1s10() { // TODO Devin raised bug 90609
+ public void test3_4_1s10() { // TODO raised bug 90609
StringBuffer buffer = new StringBuffer();
buffer.append("struct A {\n"); //$NON-NLS-1$
buffer.append("typedef int AT;\n"); //$NON-NLS-1$
@@ -183,7 +183,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
// not to: C::X C::arr[C::number];
--End Example]
*/
- public void test3_4_3s3() { // TODO Devin raised bug 90610
+ public void test3_4_3s3() { // TODO raised bug 90610
StringBuffer buffer = new StringBuffer();
buffer.append("class X { };\n"); //$NON-NLS-1$
buffer.append("class C {\n"); //$NON-NLS-1$
@@ -233,7 +233,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
}
--End Example]
*/
- public void test3_4_3_2s3() { // TODO Devin raised bug 90611
+ public void test3_4_3_2s3() { // TODO raised bug 90611
StringBuffer buffer = new StringBuffer();
buffer.append("namespace A {\n"); //$NON-NLS-1$
buffer.append("int a;\n"); //$NON-NLS-1$
@@ -282,7 +282,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
}
--End Example]
*/
- public void test6_4s3() { // TODO Devin raised bug 90618
+ public void test6_4s3() { // TODO raised bug 90618
StringBuffer buffer = new StringBuffer();
buffer.append("int foo() {\n"); //$NON-NLS-1$
buffer.append("if (int x = f()) {\n"); //$NON-NLS-1$
@@ -316,7 +316,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
T(g)(h,2); //declaration
--End Example]
*/
- public void test6_8s2() { // TODO Devin raised bug 90622
+ public void test6_8s2() { // TODO raised bug 90622
StringBuffer buffer = new StringBuffer();
buffer.append("class T {\n"); //$NON-NLS-1$
buffer.append("// ...\n"); //$NON-NLS-1$
@@ -347,7 +347,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
typedef I I;
--End Example]
*/
- public void test7_1_3s2() { // TODO Devin raised bug 90623
+ public void test7_1_3s2() { // TODO raised bug 90623
StringBuffer buffer = new StringBuffer();
buffer.append("typedef struct s { //\n"); //$NON-NLS-1$
buffer.append("} s;\n"); //$NON-NLS-1$
@@ -391,7 +391,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
}
--End Example]
*/
- public void test7_3_3s10() { // TODO Devin raised bug 90626
+ public void test7_3_3s10() { // TODO raised bug 90626
StringBuffer buffer = new StringBuffer();
buffer.append("namespace A {\n"); //$NON-NLS-1$
buffer.append("int x;\n"); //$NON-NLS-1$
@@ -438,7 +438,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
}
--End Example]
*/
- public void test8_2s3() { // TODO Devin raised bug 90640
+ public void test8_2s3() { // TODO raised bug 90640
StringBuffer buffer = new StringBuffer();
buffer.append("// #include <cstddef>\n"); //$NON-NLS-1$
buffer.append("char *p;\n"); //$NON-NLS-1$
@@ -465,7 +465,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
S<int(1)> y; // expression (illformed)
--End Example]
*/
- public void test8_2s4() { // TODO Devin raised bug 90632
+ public void test8_2s4() { // TODO raised bug 90632
StringBuffer buffer = new StringBuffer();
buffer.append("template <class T>\n"); //$NON-NLS-1$
buffer.append("struct S {\n"); //$NON-NLS-1$
@@ -492,7 +492,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
}
--End Example]
*/
- public void test8_2s7a() { // TODO Devin raised bug 90633
+ public void test8_2s7a() { // TODO raised bug 90633
StringBuffer buffer = new StringBuffer();
buffer.append("class C { };\n"); //$NON-NLS-1$
buffer.append("void f(int(C)) { } // void f(int (*fp)(C c)) { }\n"); //$NON-NLS-1$
@@ -517,7 +517,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
int c(b);
--End Example]
*/
- public void test8_5s2() { // TODO Devin raised bug 90641
+ public void test8_5s2() { // TODO raised bug 90641
StringBuffer buffer = new StringBuffer();
buffer.append("int f(int);\n"); //$NON-NLS-1$
buffer.append("int a = 2;\n"); //$NON-NLS-1$
@@ -535,7 +535,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
char msg[] = "Syntax error on line %s\n";
--End Example]
*/
- public void test8_5_2s1() { // TODO Devin raised bug 90647
+ public void test8_5_2s1() { // TODO raised bug 90647
StringBuffer buffer = new StringBuffer();
buffer.append("char msg[] = \"Syntax error on line %s\n\";\n"); //$NON-NLS-1$
try {
@@ -563,7 +563,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
}
--End Example]
*/
- public void test8_5_3s1() { // TODO Devin raised bug 90648
+ public void test8_5_3s1() { // TODO raised bug 90648
StringBuffer buffer = new StringBuffer();
buffer.append("int g(int);\n"); //$NON-NLS-1$
buffer.append("void f()\n"); //$NON-NLS-1$
@@ -598,7 +598,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
}
--End Example]
*/
- public void test9_5s2() { // TODO Devin raised bug 90650
+ public void test9_5s2() { // TODO raised bug 90650
StringBuffer buffer = new StringBuffer();
buffer.append("void f()\n"); //$NON-NLS-1$
buffer.append("{\n"); //$NON-NLS-1$
@@ -627,7 +627,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
}
--End Example]
*/
- public void test10_2s3b() { // TODO Devin raised bug 90652
+ public void test10_2s3b() { // TODO raised bug 90652
StringBuffer buffer = new StringBuffer();
buffer.append("struct U { static int i; };\n"); //$NON-NLS-1$
buffer.append("struct V : U { };\n"); //$NON-NLS-1$
@@ -656,7 +656,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
}
--End Example]
*/
- public void test12s1() { // TODO Devin raised bug 90653
+ public void test12s1() { // TODO raised bug 90653
StringBuffer buffer = new StringBuffer();
buffer.append("struct A { }; // implicitlydeclared A::operator=\n"); //$NON-NLS-1$
buffer.append("struct B : A {\n"); //$NON-NLS-1$
@@ -691,7 +691,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
int c = X(a); // OK: a.operator X().operator int()
--End Example]
*/
- public void test12_3s4() { // TODO Devin raised bug 90654
+ public void test12_3s4() { // TODO raised bug 90654
StringBuffer buffer = new StringBuffer();
buffer.append("class X {\n"); //$NON-NLS-1$
buffer.append("// ...\n"); //$NON-NLS-1$
@@ -735,7 +735,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
};
--End Example]
*/
- public void test12_7s2() { // TODO Devin raised bug 90664
+ public void test12_7s2() { // TODO raised bug 90664
StringBuffer buffer = new StringBuffer();
buffer.append("struct A { };\n"); //$NON-NLS-1$
buffer.append("struct B : virtual A { };\n"); //$NON-NLS-1$
@@ -772,7 +772,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
// better than short ® float.
--End Example]
*/
- public void test13_3_3_2s3c() { // TODO Devin raised bug 90667
+ public void test13_3_3_2s3c() { // TODO raised bug 90667
StringBuffer buffer = new StringBuffer();
buffer.append("struct A {\n"); //$NON-NLS-1$
buffer.append("operator short();\n"); //$NON-NLS-1$
@@ -802,7 +802,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
}
--End Example]
*/
- public void test13_4s5a() { // TODO Devin raised bug 90674
+ public void test13_4s5a() { // TODO raised bug 90674
StringBuffer buffer = new StringBuffer();
buffer.append("int f(double);\n"); //$NON-NLS-1$
buffer.append("int f(int);\n"); //$NON-NLS-1$
@@ -833,7 +833,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
S<v> z; // OK due to both adjustment and conversion
--End Example]
*/
- public void test14_1s8() { // TODO Devin raised bug 90668
+ public void test14_1s8() { // TODO raised bug 90668
StringBuffer buffer = new StringBuffer();
buffer.append("template<int *a> struct R { };\n"); //$NON-NLS-1$
buffer.append("template<int b[5]> struct S { };\n"); //$NON-NLS-1$
@@ -856,7 +856,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
template<class T> void f(T* p = new T);
--End Example]
*/
- public void test14_1s13() { // TODO Devin raised bug 60670
+ public void test14_1s13() { // TODO raised bug 60670
StringBuffer buffer = new StringBuffer();
buffer.append("template<class T, T* p, class U = T> class X { };\n"); //$NON-NLS-1$
buffer.append("template<class T> void f(T* p = new T);\n"); //$NON-NLS-1$
@@ -877,7 +877,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
}
--End Example]
*/
- public void test14_3s2() { // TODO Devin raised bug 90671
+ public void test14_3s2() { // TODO raised bug 90671
StringBuffer buffer = new StringBuffer();
buffer.append("template<class T> void f();\n"); //$NON-NLS-1$
buffer.append("template<int I> void f();\n"); //$NON-NLS-1$
@@ -903,7 +903,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
}
--End Example]
*/
- public void test14_3s5() { // TODO Devin raised bug 90672
+ public void test14_3s5() { // TODO raised bug 90672
StringBuffer buffer = new StringBuffer();
buffer.append("template<class T> struct A {\n"); //$NON-NLS-1$
buffer.append("~A();\n"); //$NON-NLS-1$
@@ -937,7 +937,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
A<&f> a; // selects f(int)
--End Example]
*/
- public void test14_3_2s5() { // TODO Devin raised bug 90673
+ public void test14_3_2s5() { // TODO raised bug 90673
StringBuffer buffer = new StringBuffer();
buffer.append("template<const int* pci> struct X { };\n"); //$NON-NLS-1$
buffer.append("int ai[10];\n"); //$NON-NLS-1$
@@ -968,7 +968,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
template<class T> T X<T>::s = 0;
--End Example]
*/
- public void test14_5_1_3s1() { // TODO Devin no bug raised on this, can't reproduce in AST View
+ public void test14_5_1_3s1() { // TODO no bug raised on this, can't reproduce in AST View
StringBuffer buffer = new StringBuffer();
buffer.append("template<class T> class X {\n"); //$NON-NLS-1$
buffer.append("static T s;\n"); //$NON-NLS-1$
@@ -997,7 +997,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
};
--End Example]
*/
- public void test14_5_3s1() { // TODO Devin raised bug 90678
+ public void test14_5_3s1() { // TODO raised bug 90678
StringBuffer buffer = new StringBuffer();
buffer.append("template<class T> class task;\n"); //$NON-NLS-1$
buffer.append("template<class T> task<T>* preempt(task<T>*);\n"); //$NON-NLS-1$
@@ -1030,7 +1030,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
};
--End Example]
*/
- public void test14_5_3s6() { // TODO Devin raised bug 90678
+ public void test14_5_3s6() { // TODO raised bug 90678
StringBuffer buffer = new StringBuffer();
buffer.append("template<class T> struct A {\n"); //$NON-NLS-1$
buffer.append("struct B { };\n"); //$NON-NLS-1$
@@ -1060,7 +1060,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
A<short>::C::B<int*> absip; // uses partial specialization
--End Example]
*/
- public void test14_5_4s6() { // TODO Devin raised bug 90678
+ public void test14_5_4s6() { // TODO raised bug 90678
StringBuffer buffer = new StringBuffer();
buffer.append("template<class T> struct A {\n"); //$NON-NLS-1$
buffer.append("class C {\n"); //$NON-NLS-1$
@@ -1091,7 +1091,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
// the using declaration which refers to the primary template
--End Example]
*/
- public void test14_5_4s7() { // TODO Devin raised bug 90678
+ public void test14_5_4s7() { // TODO raised bug 90678
StringBuffer buffer = new StringBuffer();
buffer.append("namespace N {\n"); //$NON-NLS-1$
buffer.append("template<class T1, class T2> class A { }; // primary template\n"); //$NON-NLS-1$
@@ -1121,7 +1121,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
A<char>::B<int> abci; // uses #1
--End Example]
*/
- public void test14_5_4_3s2() { // TODO Devin raised bug 90681
+ public void test14_5_4_3s2() { // TODO raised bug 90681
StringBuffer buffer = new StringBuffer();
buffer.append("template<class T> struct A {\n"); //$NON-NLS-1$
buffer.append("template<class T2> struct B {}; // #1\n"); //$NON-NLS-1$
@@ -1156,7 +1156,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
}
--End Example]
*/
- public void test14_5_5_1s1() { // TODO Devin raised bug 90682
+ public void test14_5_5_1s1() { // TODO raised bug 90682
StringBuffer buffer = new StringBuffer();
buffer.append("// file1.c \n"); //$NON-NLS-1$
buffer.append("template<class T>\n"); //$NON-NLS-1$
@@ -1186,7 +1186,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
template <int I, int J> A<IJ> f(A<I>, A<J>); // different from #1
--End Example]
*/
- public void test14_5_5_1s5() { // TODO Devin raised bug 90683
+ public void test14_5_5_1s5() { // TODO raised bug 90683
StringBuffer buffer = new StringBuffer();
buffer.append("template <int I, int J> A<I+J> f(A<I>, A<J>); // #1\n"); //$NON-NLS-1$
buffer.append("template <int K, int L> A<K+L> f(A<K>, A<L>); // same as #1\n"); //$NON-NLS-1$
@@ -1204,7 +1204,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
template <int K, int L> void f(A<K+L>); // same as #1
--End Example]
*/
- public void test14_5_5_1s6() { // TODO Devin raised bug 90683
+ public void test14_5_5_1s6() { // TODO raised bug 90683
StringBuffer buffer = new StringBuffer();
buffer.append("template <int I, int J> void f(A<I+J>); // #1\n"); //$NON-NLS-1$
buffer.append("template <int K, int L> void f(A<K+L>); // same as #1\n"); //$NON-NLS-1$
@@ -1228,7 +1228,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
}
--End Example]
*/
- public void test14_5_5_2s6() { // TODO Devin raised bug 90684
+ public void test14_5_5_2s6() { // TODO raised bug 90684
StringBuffer buffer = new StringBuffer();
buffer.append("template<class T> void f(T); // #1\n"); //$NON-NLS-1$
buffer.append("template<class T> void f(T*, int=1); // #2\n"); //$NON-NLS-1$
@@ -1255,7 +1255,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
};
--End Example]
*/
- public void test14_6_1s1() { // TODO Devin can not reproduce IProblemBinding via DOMAST View
+ public void test14_6_1s1() { // TODO can not reproduce IProblemBinding via DOMAST View
StringBuffer buffer = new StringBuffer();
buffer.append("template<class T> class X {\n"); //$NON-NLS-1$
buffer.append("X* p; // meaning X<T>\n"); //$NON-NLS-1$
@@ -1275,7 +1275,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
template<class T> void f(T* p = new T);
--End Example]
*/
- public void test14_6_1s3a() { // TODO Devin already have bug on this one
+ public void test14_6_1s3a() { // TODO already have bug on this one
StringBuffer buffer = new StringBuffer();
buffer.append("template<class T, T* p, class U = T> class X { };\n"); //$NON-NLS-1$
buffer.append("template<class T> void f(T* p = new T);\n"); //$NON-NLS-1$
@@ -1299,7 +1299,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
}
--End Example]
*/
- public void test14_6_1s6() { // TODO Devin raised bug 90686
+ public void test14_6_1s6() { // TODO raised bug 90686
StringBuffer buffer = new StringBuffer();
buffer.append("namespace N {\n"); //$NON-NLS-1$
buffer.append("class C { };\n"); //$NON-NLS-1$
@@ -1328,7 +1328,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
};
--End Example]
*/
- public void test14_6_2s3() { // TODO Devin this doesn't compile via g++ ?
+ public void test14_6_2s3() { // TODO this doesn't compile via g++ ?
StringBuffer buffer = new StringBuffer();
buffer.append("typedef double A;\n"); //$NON-NLS-1$
buffer.append("template<class T> B {\n"); //$NON-NLS-1$
@@ -1355,7 +1355,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
X<char*> bb;
--End Example]
*/
- public void test14_7s6() { // TODO Devin can't reproduce via ASTDOM View
+ public void test14_7s6() { // TODO can't reproduce via ASTDOM View
StringBuffer buffer = new StringBuffer();
buffer.append("template<class T> class X {\n"); //$NON-NLS-1$
buffer.append("static T s;\n"); //$NON-NLS-1$
@@ -1385,7 +1385,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
};
--End Example]
*/
- public void test14_7_1s5() { // TODO Devin already have similar bug
+ public void test14_7_1s5() { // TODO already have similar bug
StringBuffer buffer = new StringBuffer();
buffer.append("template <class T> struct S {\n"); //$NON-NLS-1$
buffer.append("operator int();\n"); //$NON-NLS-1$
@@ -1425,7 +1425,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
}
--End Example]
*/
- public void test14_7_1s10() { // TODO Devin already have similar bug
+ public void test14_7_1s10() { // TODO already have similar bug
StringBuffer buffer = new StringBuffer();
buffer.append("namespace N {\n"); //$NON-NLS-1$
buffer.append("template<class T> class List {\n"); //$NON-NLS-1$
@@ -1461,7 +1461,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
};
--End Example]
*/
- public void test14_7_1s14() { // TODO Devin can't reproduce via DOMAST View
+ public void test14_7_1s14() { // TODO can't reproduce via DOMAST View
StringBuffer buffer = new StringBuffer();
buffer.append("template<class T> class X {\n"); //$NON-NLS-1$
buffer.append("X<T>* p; // OK\n"); //$NON-NLS-1$
@@ -1484,7 +1484,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
template void sort<>(Array<int>&);
--End Example]
*/
- public void test14_7_2s6() { // TODO Devin raised bug 90689
+ public void test14_7_2s6() { // TODO raised bug 90689
StringBuffer buffer = new StringBuffer();
buffer.append("template<class T> class Array { };\n"); //$NON-NLS-1$
buffer.append("template<class T> void sort(Array<T>& v);\n"); //$NON-NLS-1$
@@ -1506,7 +1506,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
template<> void sort<char*>(Array<char*>&) ;
--End Example]
*/
- public void test14_7_3s1() { // TODO Devin have similar bug
+ public void test14_7_3s1() { // TODO have similar bug
StringBuffer buffer = new StringBuffer();
buffer.append("template<class T> class stream;\n"); //$NON-NLS-1$
buffer.append("template<> class stream<char> { };\n"); //$NON-NLS-1$
@@ -1528,7 +1528,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
template<> int g<>(int) { } // OK: not inline
--End Example]
*/
- public void test14_7_3s14() { // TODO Devin similar bug already
+ public void test14_7_3s14() { // TODO similar bug already
StringBuffer buffer = new StringBuffer();
buffer.append("template<class T> void f(T) { }\n"); //$NON-NLS-1$
buffer.append("template<class T> inline T g(T) { }\n"); //$NON-NLS-1$
@@ -1563,7 +1563,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
template<> void A<int>::h(int) { }
--End Example]
*/
- public void test14_7_3s16() { // TODO Devin similar bug already
+ public void test14_7_3s16() { // TODO similar bug already
StringBuffer buffer = new StringBuffer();
buffer.append("template<class T> struct A {\n"); //$NON-NLS-1$
buffer.append("void f(T);\n"); //$NON-NLS-1$
@@ -1601,7 +1601,7 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
template<> template<> void A<char>::B<char>::mf() { };
--End Example]
*/
- public void test14_7_3s17() { // TODO Devin doesn't compile via g++
+ public void test14_7_3s17() { // TODO doesn't compile via g++
StringBuffer buffer = new StringBuffer();
buffer.append("template<class T1> class A {\n"); //$NON-NLS-1$
buffer.append("template<class T2> class B {\n"); //$NON-NLS-1$
diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java
index b8a4c867934..0d6260be676 100644
--- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java
+++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java
@@ -3413,5 +3413,101 @@ public class AST2CPPTests extends AST2BaseTest {
assertSame( x.getType(), X );
assertEquals( problem.getID(), IProblemBinding.SEMANTIC_INVALID_REDEFINITION );
}
+
+ public void testOperatorNames() throws Exception {
+ StringBuffer buffer = new StringBuffer();
+ buffer.append("struct C { \n"); //$NON-NLS-1$
+ buffer.append(" void* operator new [ ] (unsigned int);\n"); //$NON-NLS-1$
+ buffer.append(" void* operator new (unsigned int);\n"); //$NON-NLS-1$
+ buffer.append(" void operator delete [ ] ( void * ); \n"); //$NON-NLS-1$
+ buffer.append(" void operator delete (void *);\n"); //$NON-NLS-1$
+ buffer.append(" const C& operator+=(const C&);\n"); //$NON-NLS-1$
+ buffer.append(" const C& operator -= (const C&);\n"); //$NON-NLS-1$
+ buffer.append(" const C& operator *= (const C&);\n"); //$NON-NLS-1$
+ buffer.append(" cosnt C& operator /= (const C&);\n"); //$NON-NLS-1$
+ buffer.append(" const C& operator %= (const C&);\n"); //$NON-NLS-1$
+ buffer.append(" const C& operator^=(const C&);\n"); //$NON-NLS-1$
+ buffer.append(" const C& operator&= (const C&);\n"); //$NON-NLS-1$
+ buffer.append(" const C& operator |= (const C&);\n"); //$NON-NLS-1$
+ buffer.append(" const C& operator >>=(const C&);\n"); //$NON-NLS-1$
+ buffer.append(" const C& operator<<= (const C&);\n"); //$NON-NLS-1$
+ buffer.append(" const C& operator<<(const C&);\n"); //$NON-NLS-1$
+ buffer.append(" const C& operator>>(const C&);\n"); //$NON-NLS-1$
+ buffer.append(" const C& operator /**/ == /**/ (const C&);\n"); //$NON-NLS-1$
+ buffer.append(" const C& operator != /**/ (const C&);\n"); //$NON-NLS-1$
+ buffer.append(" const C& operator <= (const C&);\n"); //$NON-NLS-1$
+ buffer.append(" const C& operator /**/ >=(const C&);\n"); //$NON-NLS-1$
+ buffer.append(" const C& operator =(const C&);\n"); //$NON-NLS-1$
+ buffer.append(" const C& operator&& (const C&);\n"); //$NON-NLS-1$
+ buffer.append(" const C& operator ||(const C&);\n"); //$NON-NLS-1$
+ buffer.append(" const C& operator ++(const C&);\n"); //$NON-NLS-1$
+ buffer.append(" const C& operator-- (const C&);\n"); //$NON-NLS-1$
+ buffer.append(" const C& operator/**/,/**/(const C&);\n"); //$NON-NLS-1$
+ buffer.append(" const C& operator->*\n(const C&);\n"); //$NON-NLS-1$
+ buffer.append(" const C& operator -> (const C&);\n"); //$NON-NLS-1$
+ buffer.append(" const C& operator /**/ ( /**/ ) /**/ (const C&);\n"); //$NON-NLS-1$
+ buffer.append(" const C& operator /**/ [ /**/ ] /**/ (const C&);\n"); //$NON-NLS-1$
+ buffer.append(" const C& operator + (const C&);\n"); //$NON-NLS-1$
+ buffer.append(" const C& operator- (const C&);\n"); //$NON-NLS-1$
+ buffer.append(" const C& operator *(const C&);\n"); //$NON-NLS-1$
+ buffer.append(" const C& operator /(const C&);\n"); //$NON-NLS-1$
+ buffer.append(" const C& operator % /**/(const C&);\n"); //$NON-NLS-1$
+ buffer.append(" const C& operator ^(const C&);\n"); //$NON-NLS-1$
+ buffer.append(" const C& operator &(const C&);\n"); //$NON-NLS-1$
+ buffer.append(" const C& operator |(const C&);\n"); //$NON-NLS-1$
+ buffer.append(" const C& operator ~ (const C&);\n"); //$NON-NLS-1$
+ buffer.append(" const C& operator \t\r\n ! /**/ (const C&);\n"); //$NON-NLS-1$
+ buffer.append(" const C& operator <(const C&);\n"); //$NON-NLS-1$
+ buffer.append(" const C& operator>(const C&);\n"); //$NON-NLS-1$
+ buffer.append("}; \n"); //$NON-NLS-1$
+
+ IASTTranslationUnit tu = parse(buffer.toString(), ParserLanguage.CPP);
+ CPPNameCollector col = new CPPNameCollector();
+ tu.accept( col );
+
+ assertEquals(col.size(), 161);
+ assertEquals(col.getName(1).toString(), "operator new[]"); //$NON-NLS-1$
+ assertEquals(col.getName(3).toString(), "operator new"); //$NON-NLS-1$
+ assertEquals(col.getName(5).toString(), "operator delete[]"); //$NON-NLS-1$
+ assertEquals(col.getName(7).toString(), "operator delete"); //$NON-NLS-1$
+ assertEquals(col.getName(10).toString(), "operator +="); //$NON-NLS-1$
+ assertEquals(col.getName(14).toString(), "operator -="); //$NON-NLS-1$
+ assertEquals(col.getName(18).toString(), "operator *="); //$NON-NLS-1$
+ assertEquals(col.getName(22).toString(), "operator /="); //$NON-NLS-1$
+ assertEquals(col.getName(26).toString(), "operator %="); //$NON-NLS-1$
+ assertEquals(col.getName(30).toString(), "operator ^="); //$NON-NLS-1$
+ assertEquals(col.getName(34).toString(), "operator &="); //$NON-NLS-1$
+ assertEquals(col.getName(38).toString(), "operator |="); //$NON-NLS-1$
+ assertEquals(col.getName(42).toString(), "operator >>="); //$NON-NLS-1$
+ assertEquals(col.getName(46).toString(), "operator <<="); //$NON-NLS-1$
+ assertEquals(col.getName(50).toString(), "operator <<"); //$NON-NLS-1$
+ assertEquals(col.getName(54).toString(), "operator >>"); //$NON-NLS-1$
+ assertEquals(col.getName(58).toString(), "operator =="); //$NON-NLS-1$
+ assertEquals(col.getName(62).toString(), "operator !="); //$NON-NLS-1$
+ assertEquals(col.getName(66).toString(), "operator <="); //$NON-NLS-1$
+ assertEquals(col.getName(70).toString(), "operator >="); //$NON-NLS-1$
+ assertEquals(col.getName(74).toString(), "operator ="); //$NON-NLS-1$
+ assertEquals(col.getName(78).toString(), "operator &&"); //$NON-NLS-1$
+ assertEquals(col.getName(82).toString(), "operator ||"); //$NON-NLS-1$
+ assertEquals(col.getName(86).toString(), "operator ++"); //$NON-NLS-1$
+ assertEquals(col.getName(90).toString(), "operator --"); //$NON-NLS-1$
+ assertEquals(col.getName(94).toString(), "operator ,"); //$NON-NLS-1$
+ assertEquals(col.getName(98).toString(), "operator ->*"); //$NON-NLS-1$
+ assertEquals(col.getName(102).toString(), "operator ->"); //$NON-NLS-1$
+ assertEquals(col.getName(106).toString(), "operator ()"); //$NON-NLS-1$
+ assertEquals(col.getName(110).toString(), "operator []"); //$NON-NLS-1$
+ assertEquals(col.getName(114).toString(), "operator +"); //$NON-NLS-1$
+ assertEquals(col.getName(118).toString(), "operator -"); //$NON-NLS-1$
+ assertEquals(col.getName(122).toString(), "operator *"); //$NON-NLS-1$
+ assertEquals(col.getName(126).toString(), "operator /"); //$NON-NLS-1$
+ assertEquals(col.getName(130).toString(), "operator %"); //$NON-NLS-1$
+ assertEquals(col.getName(134).toString(), "operator ^"); //$NON-NLS-1$
+ assertEquals(col.getName(138).toString(), "operator &"); //$NON-NLS-1$
+ assertEquals(col.getName(142).toString(), "operator |"); //$NON-NLS-1$
+ assertEquals(col.getName(146).toString(), "operator ~"); //$NON-NLS-1$
+ assertEquals(col.getName(150).toString(), "operator !"); //$NON-NLS-1$
+ assertEquals(col.getName(154).toString(), "operator <"); //$NON-NLS-1$
+ assertEquals(col.getName(158).toString(), "operator >"); //$NON-NLS-1$
+ }
}
diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2SpecBaseTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2SpecBaseTest.java
index a4fb2e31705..a2de5eeeb0b 100644
--- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2SpecBaseTest.java
+++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2SpecBaseTest.java
@@ -26,7 +26,6 @@ import org.eclipse.cdt.core.parser.NullLogService;
import org.eclipse.cdt.core.parser.ParserLanguage;
import org.eclipse.cdt.core.parser.ParserMode;
import org.eclipse.cdt.core.parser.ScannerInfo;
-import org.eclipse.cdt.core.parser.tests.ast2.AST2BaseTest.CPPNameCollector;
import org.eclipse.cdt.internal.core.dom.parser.ISourceCodeParser;
import org.eclipse.cdt.internal.core.dom.parser.c.ANSICParserExtensionConfiguration;
import org.eclipse.cdt.internal.core.dom.parser.c.CVisitor;
@@ -72,8 +71,8 @@ public class AST2SpecBaseTest extends TestCase {
}
private IASTTranslationUnit parse( String code, ParserLanguage lang, boolean useGNUExtensions, boolean expectNoProblems, boolean checkSemantics, boolean checkBindings ) throws ParserException {
- // TODO Devin beef this up with tests... i.e. run once with \n, and then run again with \r\n replacing \n ... etc
- // TODO Devin another example might be to replace all characters with corresponding trigraph/digraph tests...
+ // TODO beef this up with tests... i.e. run once with \n, and then run again with \r\n replacing \n ... etc
+ // TODO another example might be to replace all characters with corresponding trigraph/digraph tests...
CodeReader codeReader = new CodeReader(code.toCharArray());
return parse(codeReader, lang, useGNUExtensions, expectNoProblems, checkSemantics, checkBindings);
@@ -134,12 +133,12 @@ public class AST2SpecBaseTest extends TestCase {
CPPNameResolver res = new CPPNameResolver();
tu.accept( res );
if (res.foundProblemBinding)
- throw new ParserException("found IProblemBinding");
+ throw new ParserException("found IProblemBinding"); //$NON-NLS-1$
} else if (lang == ParserLanguage.C ) {
CNameResolver res = new CNameResolver();
tu.accept( res );
if (res.foundProblemBinding)
- throw new ParserException("found IProblemBinding");
+ throw new ParserException("found IProblemBinding"); //$NON-NLS-1$
}
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPASTOperatorName.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPASTOperatorName.java
index 39895ba541e..282632f3c35 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPASTOperatorName.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPASTOperatorName.java
@@ -18,5 +18,90 @@ import org.eclipse.cdt.core.dom.ast.IASTName;
* @author dsteffle
*/
public interface ICPPASTOperatorName extends IASTName {
-
+ public static final String OPERATOR = "operator "; //$NON-NLS-1$
+
+ public static final String OP_GT = ">"; //$NON-NLS-1$
+ public static final char[] OPERATOR_GT = new String(OPERATOR + OP_GT).toCharArray();
+ public static final String OP_LT = "<"; //$NON-NLS-1$
+ public static final char[] OPERATOR_LT = new String(OPERATOR + OP_LT).toCharArray();
+ public static final String OP_NOT = "!"; //$NON-NLS-1$
+ public static final char[] OPERATOR_NOT = new String(OPERATOR + OP_NOT).toCharArray();
+ public static final String OP_COMPL = "~"; //$NON-NLS-1$
+ public static final char[] OPERATOR_COMPL = new String(OPERATOR + OP_COMPL).toCharArray();
+ public static final String OP_BITOR = "|"; //$NON-NLS-1$
+ public static final char[] OPERATOR_BITOR = new String(OPERATOR + OP_BITOR).toCharArray();
+ public static final String OP_AMPER = "&"; //$NON-NLS-1$
+ public static final char[] OPERATOR_AMPER = new String(OPERATOR + OP_AMPER).toCharArray();
+ public static final String OP_XOR = "^"; //$NON-NLS-1$
+ public static final char[] OPERATOR_XOR = new String(OPERATOR + OP_XOR).toCharArray();
+ public static final String OP_MOD = "%"; //$NON-NLS-1$
+ public static final char[] OPERATOR_MOD = new String(OPERATOR + OP_MOD).toCharArray();
+ public static final String OP_DIV = "/"; //$NON-NLS-1$
+ public static final char[] OPERATOR_DIV = new String(OPERATOR + OP_DIV).toCharArray();
+ public static final String OP_STAR = "*"; //$NON-NLS-1$
+ public static final char[] OPERATOR_STAR = new String(OPERATOR + OP_STAR).toCharArray();
+ public static final String OP_PLUS = "+"; //$NON-NLS-1$
+ public static final char[] OPERATOR_PLUS = new String(OPERATOR + OP_PLUS).toCharArray();
+ public static final String OP_BRACKET = "[]"; //$NON-NLS-1$
+ public static final char[] OPERATOR_BRACKET = new String(OPERATOR + OP_BRACKET).toCharArray();
+ public static final String OP_PAREN = "()"; //$NON-NLS-1$
+ public static final char[] OPERATOR_PAREN = new String(OPERATOR + OP_PAREN).toCharArray();
+ public static final String OP_ARROW = "->"; //$NON-NLS-1$
+ public static final char[] OPERATOR_ARROW = new String(OPERATOR + OP_ARROW).toCharArray();
+ public static final String OP_ARROWSTAR = "->*"; //$NON-NLS-1$
+ public static final char[] OPERATOR_ARROWSTAR = new String(OPERATOR + OP_ARROWSTAR).toCharArray();
+ public static final String OP_COMMA = ","; //$NON-NLS-1$
+ public static final char[] OPERATOR_COMMA = new String(OPERATOR + OP_COMMA).toCharArray();
+ public static final String OP_MINUS = "-"; //$NON-NLS-1$
+ public static final char[] OPERATOR_MINUS = new String(OPERATOR + OP_MINUS).toCharArray();
+ public static final String OP_DECR = "--"; //$NON-NLS-1$
+ public static final char[] OPERATOR_DECR = new String(OPERATOR + OP_DECR).toCharArray();
+ public static final String OP_INCR = "++"; //$NON-NLS-1$
+ public static final char[] OPERATOR_INCR = new String(OPERATOR + OP_INCR).toCharArray();
+ public static final String OP_OR = "||"; //$NON-NLS-1$
+ public static final char[] OPERATOR_OR = new String(OPERATOR + OP_OR).toCharArray();
+ public static final String OP_AND = "&&"; //$NON-NLS-1$
+ public static final char[] OPERATOR_AND = new String(OPERATOR + OP_AND).toCharArray();
+ public static final String OP_ASSIGN = "="; //$NON-NLS-1$
+ public static final char[] OPERATOR_ASSIGN = new String(OPERATOR + OP_ASSIGN).toCharArray();
+ public static final String OP_GTEQUAL = ">="; //$NON-NLS-1$
+ public static final char[] OPERATOR_GTEQUAL = new String(OPERATOR + OP_GTEQUAL).toCharArray();
+ public static final String OP_LTEQUAL = "<="; //$NON-NLS-1$
+ public static final char[] OPERATOR_LTEQUAL = new String(OPERATOR + OP_LTEQUAL).toCharArray();
+ public static final String OP_NOTEQUAL = "!="; //$NON-NLS-1$
+ public static final char[] OPERATOR_NOTEQUAL = new String(OPERATOR + OP_NOTEQUAL).toCharArray();
+ public static final String OP_EQUAL = "=="; //$NON-NLS-1$
+ public static final char[] OPERATOR_EQUAL = new String(OPERATOR + OP_EQUAL).toCharArray();
+ public static final String OP_SHIFTR = ">>"; //$NON-NLS-1$
+ public static final char[] OPERATOR_SHIFTR = new String(OPERATOR + OP_SHIFTR).toCharArray();
+ public static final String OP_SHIFTL = "<<"; //$NON-NLS-1$
+ public static final char[] OPERATOR_SHIFTL = new String(OPERATOR + OP_SHIFTL).toCharArray();
+ public static final String OP_SHIFTL_ASSIGN = "<<="; //$NON-NLS-1$
+ public static final char[] OPERATOR_SHIFTL_ASSIGN = new String(OPERATOR + OP_SHIFTL_ASSIGN).toCharArray();
+ public static final String OP_SHIFTR_ASSIGN = ">>="; //$NON-NLS-1$
+ public static final char[] OPERATOR_SHIFTR_ASSIGN = new String(OPERATOR + OP_SHIFTR_ASSIGN).toCharArray();
+ public static final String OP_BITOR_ASSIGN = "|="; //$NON-NLS-1$
+ public static final char[] OPERATOR_BITOR_ASSIGN = new String(OPERATOR + OP_BITOR_ASSIGN).toCharArray();
+ public static final String OP_AMPER_ASSIGN = "&="; //$NON-NLS-1$
+ public static final char[] OPERATOR_AMPER_ASSIGN = new String(OPERATOR + OP_AMPER_ASSIGN).toCharArray();
+ public static final String OP_XOR_ASSIGN = "^="; //$NON-NLS-1$
+ public static final char[] OPERATOR_XOR_ASSIGN = new String(OPERATOR + OP_XOR_ASSIGN).toCharArray();
+ public static final String OP_MOD_ASSIGN = "%="; //$NON-NLS-1$
+ public static final char[] OPERATOR_MOD_ASSIGN = new String(OPERATOR + OP_MOD_ASSIGN).toCharArray();
+ public static final String OP_DIV_ASSIGN = "/="; //$NON-NLS-1$
+ public static final char[] OPERATOR_DIV_ASSIGN = new String(OPERATOR + OP_DIV_ASSIGN).toCharArray();
+ public static final String OP_STAR_ASSIGN = "*="; //$NON-NLS-1$
+ public static final char[] OPERATOR_STAR_ASSIGN = new String(OPERATOR + OP_STAR_ASSIGN).toCharArray();
+ public static final String OP_MINUS_ASSIGN = "-="; //$NON-NLS-1$
+ public static final char[] OPERATOR_MINUS_ASSIGN = new String(OPERATOR + OP_MINUS_ASSIGN).toCharArray();
+ public static final String OP_PLUS_ASSIGN = "+="; //$NON-NLS-1$
+ public static final char[] OPERATOR_PLUS_ASSIGN = new String(OPERATOR + OP_PLUS_ASSIGN).toCharArray();
+ public static final String OP_NEW = "new"; //$NON-NLS-1$
+ public static final char[] OPERATOR_NEW = new String(OPERATOR + OP_NEW).toCharArray();
+ public static final String OP_DELETE_ARRAY = "delete[]"; //$NON-NLS-1$
+ public static final char[] OPERATOR_DELETE_ARRAY = new String(OPERATOR + OP_DELETE_ARRAY).toCharArray();
+ public static final String OP_DELETE = "delete"; //$NON-NLS-1$
+ public static final char[] OPERATOR_DELETE = new String(OPERATOR + OP_DELETE).toCharArray();
+ public static final String OP_NEW_ARRAY = "new[]"; //$NON-NLS-1$
+ public static final char[] OPERATOR_NEW_ARRAY = new String(OPERATOR + OP_NEW_ARRAY).toCharArray();
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTOperatorName.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTOperatorName.java
index af3a5d21628..4201ef54f2b 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTOperatorName.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTOperatorName.java
@@ -18,11 +18,159 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTOperatorName;
* @author dsteffle
*/
public class CPPASTOperatorName extends CPPASTName implements ICPPASTOperatorName {
+ private static final int FIRST_CHAR_AFTER_OPERATOR = 8;
+
+ private static final String LBRACKET = "["; //$NON-NLS-1$
+ private static final String RBRACKET = "]"; //$NON-NLS-1$
+ private static final String LPAREN = "("; //$NON-NLS-1$
+ private static final String RPAREN = ")"; //$NON-NLS-1$
+
+ private boolean wasSet=false;
+
+ /**
+ * Default constructor.
+ *
+ */
public CPPASTOperatorName() {
super();
}
+ /**
+ * Primary consturctor that should be used to initialize the CPPASTOperatorName.
+ * @param name the char[] name to initialize to
+ */
public CPPASTOperatorName(char[] name) {
super(name);
+ wasSet=true;
+ super.setName(enforceOpStandard(super.toString()));
+ }
+
+ /**
+ * Returns the char[] of the name and ensures that the name will be standardized
+ * so that it will be of the form "operator op".
+ * @return
+ */
+ public char[] toCharArray() {
+ if (!wasSet) {
+ super.setName(enforceOpStandard(super.toString()));
+ wasSet=true;
+ }
+
+ return super.toCharArray();
+ }
+
+ /**
+ * Returns the String of the name and ensures that the name will be standardized
+ * so that it will be of the form "operator op".
+ * @return
+ */
+ public String toString() {
+ if (!wasSet) {
+ super.setName(enforceOpStandard(super.toString()));
+ wasSet=true;
+ }
+
+ return super.toString();
+ }
+
+ /**
+ * Sets the name of this CPPASTOperatorName and ensures that the name follows
+ * the standard "operator op".
+ * @param name
+ */
+ public void setName(char[] name) {
+ super.setName(enforceOpStandard(new String(name)));
+ wasSet=true;
+ }
+
+ private char[] enforceOpStandard(String name) {
+ // need to use indexOf (could optimize by skipping the first 8 chars?)
+ if (name.indexOf(OP_NEW, FIRST_CHAR_AFTER_OPERATOR) >=FIRST_CHAR_AFTER_OPERATOR && name.indexOf(LBRACKET, FIRST_CHAR_AFTER_OPERATOR) >=FIRST_CHAR_AFTER_OPERATOR && name.indexOf(RBRACKET, FIRST_CHAR_AFTER_OPERATOR) >=FIRST_CHAR_AFTER_OPERATOR) {
+ return OPERATOR_NEW_ARRAY;
+ } else if (name.indexOf(OP_DELETE, FIRST_CHAR_AFTER_OPERATOR) >=FIRST_CHAR_AFTER_OPERATOR && name.indexOf(LBRACKET, FIRST_CHAR_AFTER_OPERATOR) >=FIRST_CHAR_AFTER_OPERATOR && name.indexOf(RBRACKET, FIRST_CHAR_AFTER_OPERATOR) >=FIRST_CHAR_AFTER_OPERATOR) {
+ return OPERATOR_DELETE_ARRAY;
+ } else if (name.indexOf(OP_NEW, FIRST_CHAR_AFTER_OPERATOR) >= FIRST_CHAR_AFTER_OPERATOR) {
+ return OPERATOR_NEW;
+ } else if (name.indexOf(OP_DELETE, FIRST_CHAR_AFTER_OPERATOR) >= FIRST_CHAR_AFTER_OPERATOR) {
+ return OPERATOR_DELETE;
+ } else if (name.indexOf(OP_PLUS_ASSIGN, FIRST_CHAR_AFTER_OPERATOR) >= FIRST_CHAR_AFTER_OPERATOR) {
+ return OPERATOR_PLUS_ASSIGN;
+ } else if (name.indexOf(OP_MINUS_ASSIGN, FIRST_CHAR_AFTER_OPERATOR) >= FIRST_CHAR_AFTER_OPERATOR) {
+ return OPERATOR_MINUS_ASSIGN;
+ } else if (name.indexOf(OP_STAR_ASSIGN, FIRST_CHAR_AFTER_OPERATOR) >= FIRST_CHAR_AFTER_OPERATOR) {
+ return OPERATOR_STAR_ASSIGN;
+ } else if (name.indexOf(OP_DIV_ASSIGN, FIRST_CHAR_AFTER_OPERATOR) >= FIRST_CHAR_AFTER_OPERATOR) {
+ return OPERATOR_DIV_ASSIGN;
+ } else if (name.indexOf(OP_MOD_ASSIGN, FIRST_CHAR_AFTER_OPERATOR) >= FIRST_CHAR_AFTER_OPERATOR) {
+ return OPERATOR_MOD_ASSIGN;
+ } else if (name.indexOf(OP_XOR_ASSIGN, FIRST_CHAR_AFTER_OPERATOR) >= FIRST_CHAR_AFTER_OPERATOR) {
+ return OPERATOR_XOR_ASSIGN;
+ } else if (name.indexOf(OP_AMPER_ASSIGN, FIRST_CHAR_AFTER_OPERATOR) >= FIRST_CHAR_AFTER_OPERATOR) {
+ return OPERATOR_AMPER_ASSIGN;
+ } else if (name.indexOf(OP_BITOR_ASSIGN, FIRST_CHAR_AFTER_OPERATOR) >= FIRST_CHAR_AFTER_OPERATOR) {
+ return OPERATOR_BITOR_ASSIGN;
+ } else if (name.indexOf(OP_SHIFTR_ASSIGN, FIRST_CHAR_AFTER_OPERATOR) >= FIRST_CHAR_AFTER_OPERATOR) {
+ return OPERATOR_SHIFTR_ASSIGN;
+ } else if (name.indexOf(OP_SHIFTL_ASSIGN, FIRST_CHAR_AFTER_OPERATOR) >= FIRST_CHAR_AFTER_OPERATOR) {
+ return OPERATOR_SHIFTL_ASSIGN;
+ } else if (name.indexOf(OP_SHIFTL, FIRST_CHAR_AFTER_OPERATOR) >= FIRST_CHAR_AFTER_OPERATOR) {
+ return OPERATOR_SHIFTL;
+ } else if (name.indexOf(OP_SHIFTR, FIRST_CHAR_AFTER_OPERATOR) >= FIRST_CHAR_AFTER_OPERATOR) {
+ return OPERATOR_SHIFTR;
+ } else if (name.indexOf(OP_EQUAL, FIRST_CHAR_AFTER_OPERATOR) >= FIRST_CHAR_AFTER_OPERATOR) {
+ return OPERATOR_EQUAL;
+ } else if (name.indexOf(OP_NOTEQUAL, FIRST_CHAR_AFTER_OPERATOR) >= FIRST_CHAR_AFTER_OPERATOR) {
+ return OPERATOR_NOTEQUAL;
+ } else if (name.indexOf(OP_LTEQUAL, FIRST_CHAR_AFTER_OPERATOR) >= FIRST_CHAR_AFTER_OPERATOR) {
+ return OPERATOR_LTEQUAL;
+ } else if (name.indexOf(OP_GTEQUAL, FIRST_CHAR_AFTER_OPERATOR) >= FIRST_CHAR_AFTER_OPERATOR) {
+ return OPERATOR_GTEQUAL;
+ } else if (name.indexOf(OP_ASSIGN, FIRST_CHAR_AFTER_OPERATOR) >= FIRST_CHAR_AFTER_OPERATOR) {
+ return OPERATOR_ASSIGN;
+ } else if (name.indexOf(OP_AND, FIRST_CHAR_AFTER_OPERATOR) >= FIRST_CHAR_AFTER_OPERATOR) {
+ return OPERATOR_AND;
+ } else if (name.indexOf(OP_OR, FIRST_CHAR_AFTER_OPERATOR) >= FIRST_CHAR_AFTER_OPERATOR) {
+ return OPERATOR_OR;
+ } else if (name.indexOf(OP_INCR, FIRST_CHAR_AFTER_OPERATOR) >= FIRST_CHAR_AFTER_OPERATOR) {
+ return OPERATOR_INCR;
+ } else if (name.indexOf(OP_DECR, FIRST_CHAR_AFTER_OPERATOR) >= FIRST_CHAR_AFTER_OPERATOR) {
+ return OPERATOR_DECR;
+ } else if (name.indexOf(OP_COMMA, FIRST_CHAR_AFTER_OPERATOR) >= FIRST_CHAR_AFTER_OPERATOR) {
+ return OPERATOR_COMMA;
+ } else if (name.indexOf(OP_ARROWSTAR, FIRST_CHAR_AFTER_OPERATOR) >= FIRST_CHAR_AFTER_OPERATOR) {
+ return OPERATOR_ARROWSTAR;
+ } else if (name.indexOf(OP_ARROW, FIRST_CHAR_AFTER_OPERATOR) >= FIRST_CHAR_AFTER_OPERATOR) {
+ return OPERATOR_ARROW;
+ } else if (name.indexOf(LPAREN, FIRST_CHAR_AFTER_OPERATOR) >= FIRST_CHAR_AFTER_OPERATOR && name.indexOf(RPAREN, FIRST_CHAR_AFTER_OPERATOR) >= FIRST_CHAR_AFTER_OPERATOR) {
+ return OPERATOR_PAREN;
+ } else if (name.indexOf(LBRACKET, FIRST_CHAR_AFTER_OPERATOR) >=FIRST_CHAR_AFTER_OPERATOR && name.indexOf(RBRACKET, FIRST_CHAR_AFTER_OPERATOR) >=FIRST_CHAR_AFTER_OPERATOR) {
+ return OPERATOR_BRACKET;
+ } else if (name.indexOf(OP_PLUS, FIRST_CHAR_AFTER_OPERATOR) >= FIRST_CHAR_AFTER_OPERATOR) {
+ return OPERATOR_PLUS;
+ } else if (name.indexOf(OP_MINUS, FIRST_CHAR_AFTER_OPERATOR) >= FIRST_CHAR_AFTER_OPERATOR) {
+ return OPERATOR_MINUS;
+ } else if (name.indexOf(OP_STAR, FIRST_CHAR_AFTER_OPERATOR) >= FIRST_CHAR_AFTER_OPERATOR) {
+ return OPERATOR_STAR;
+ } else if (name.indexOf(OP_DIV, FIRST_CHAR_AFTER_OPERATOR) >= FIRST_CHAR_AFTER_OPERATOR) {
+ return OPERATOR_DIV;
+ } else if (name.indexOf(OP_MOD, FIRST_CHAR_AFTER_OPERATOR) >= FIRST_CHAR_AFTER_OPERATOR) {
+ return OPERATOR_MOD;
+ } else if (name.indexOf(OP_XOR, FIRST_CHAR_AFTER_OPERATOR) >= FIRST_CHAR_AFTER_OPERATOR) {
+ return OPERATOR_XOR;
+ } else if (name.indexOf(OP_AMPER, FIRST_CHAR_AFTER_OPERATOR) >= FIRST_CHAR_AFTER_OPERATOR) {
+ return OPERATOR_AMPER;
+ } else if (name.indexOf(OP_BITOR, FIRST_CHAR_AFTER_OPERATOR) >= FIRST_CHAR_AFTER_OPERATOR) {
+ return OPERATOR_BITOR;
+ } else if (name.indexOf(OP_COMPL, FIRST_CHAR_AFTER_OPERATOR) >= FIRST_CHAR_AFTER_OPERATOR) {
+ return OPERATOR_COMPL;
+ } else if (name.indexOf(OP_NOT, FIRST_CHAR_AFTER_OPERATOR) >= FIRST_CHAR_AFTER_OPERATOR) {
+ return OPERATOR_NOT;
+ } else if (name.indexOf(OP_LT, FIRST_CHAR_AFTER_OPERATOR) >= FIRST_CHAR_AFTER_OPERATOR) {
+ return OPERATOR_LT;
+ } else if (name.indexOf(OP_GT, FIRST_CHAR_AFTER_OPERATOR) >= FIRST_CHAR_AFTER_OPERATOR) {
+ return OPERATOR_GT;
+ }
+
+ return name.toCharArray();
}
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassScope.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassScope.java
index f4a3b691a41..ac98c321865 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassScope.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassScope.java
@@ -26,6 +26,7 @@ import org.eclipse.cdt.core.dom.ast.IProblemBinding;
import org.eclipse.cdt.core.dom.ast.IType;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCompositeTypeSpecifier;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNewExpression;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTOperatorName;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTQualifiedName;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateId;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassScope;
@@ -93,7 +94,7 @@ public class CPPClassScope extends CPPScope implements ICPPClassScope {
//copy assignment operator: A& operator = ( const A & )
IType refType = new CPPReferenceType( clsType );
- m = new CPPImplicitMethod( this, "operator =".toCharArray(), refType, ps ); //$NON-NLS-1$
+ m = new CPPImplicitMethod( this, ICPPASTOperatorName.OPERATOR_ASSIGN, refType, ps ); //$NON-NLS-1$
implicits[2] = m;
addBinding( m );

Back to the top