1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

Bug 90606 - [IBinding] Problem from sizeof ambiguity

Bug 86861 - [Parser] IASTProblemStatement with cast expression as selector
This commit is contained in:
John Camelon 2005-05-05 18:53:50 +00:00
parent 6447835c74
commit c4c31b724f
10 changed files with 5129 additions and 5128 deletions

View file

@ -88,55 +88,6 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
} }
} }
/**
[--Start Example(CPP 3.3.6-5):
typedef int c;
enum { i = 1 };
class X {
int i=3;
char v[i];
int f() { return sizeof(c); } // OK: X::c
char c;
enum { i = 2 };
};
typedef char* T;
struct Y {
typedef long T;
T b;
};
typedef int I;
class D {
typedef I I; // error, even though no reordering involved
};
--End Example]
*/
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$
buffer.append("class X {\n"); //$NON-NLS-1$
buffer.append("int i=3;\n"); //$NON-NLS-1$
buffer.append("char v[i];\n"); //$NON-NLS-1$
buffer.append("int f() { return sizeof(c); } // OK: X::c\n"); //$NON-NLS-1$
buffer.append("char c;\n"); //$NON-NLS-1$
buffer.append("enum { i = 2 };\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
buffer.append("typedef char* T;\n"); //$NON-NLS-1$
buffer.append("struct Y {\n"); //$NON-NLS-1$
buffer.append("typedef long T;\n"); //$NON-NLS-1$
buffer.append("T b;\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
buffer.append("typedef int I;\n"); //$NON-NLS-1$
buffer.append("class D {\n"); //$NON-NLS-1$
buffer.append("typedef I I; // error, even though no reordering involved\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
try {
parse(buffer.toString(), ParserLanguage.CPP, true, 0);
assertTrue(false);
} catch (Exception e) {
}
}
/** /**
[--Start Example(CPP 3.4.1-10): [--Start Example(CPP 3.4.1-10):
struct A { struct A {
@ -493,42 +444,6 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
} }
} }
/**
[--Start Example(CPP 13.4-5a):
int f(double);
int f(int);
int (*pfd)(double) = &f; // selects f(double)
int (*pfi)(int) = &f; // selects f(int)
int (*pfe)(...) = &f; // error: type mismatch
int (&rfi)(int) = f; // selects f(int)
int (&rfd)(double) = f; // selects f(double)
void g() {
(int (*)(int))&f; // cast expression as selector
}
--End Example]
*/
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$
buffer.append("int (*pfd)(double) = &f; // selects f(double)\n"); //$NON-NLS-1$
buffer.append("int (*pfi)(int) = &f; // selects f(int)\n"); //$NON-NLS-1$
buffer.append("int (*pfe)(...) = &f; // error: type mismatch\n"); //$NON-NLS-1$
buffer.append("int (&rfi)(int) = f; // selects f(int)\n"); //$NON-NLS-1$
buffer.append("int (&rfd)(double) = f; // selects f(double)\n"); //$NON-NLS-1$
buffer.append("void g() {\n"); //$NON-NLS-1$
buffer.append("(int (*)(int))&f; // cast expression as selector\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
try {
parse(buffer.toString(), ParserLanguage.CPP, false, 0);
assertTrue(false);
} catch (Exception e) {
}
}
/** /**
[--Start Example(CPP 14.3-2): [--Start Example(CPP 14.3-2):
template<class T> void f(); template<class T> void f();
@ -1181,7 +1096,4 @@ public class AST2CPPSpecFailingTest extends AST2SpecBaseTest {
} catch (Exception e) { } catch (Exception e) {
} }
} }
} }

View file

@ -12136,4 +12136,79 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
parse(buffer.toString(), ParserLanguage.CPP, true, 0); parse(buffer.toString(), ParserLanguage.CPP, true, 0);
} }
/**
[--Start Example(CPP 3.3.6-5):
typedef int c;
enum { i = 1 };
class X {
int i=3;
char v[i];
int f() { return sizeof(c); } // OK: X::c
char c;
enum { i = 2 };
};
typedef char* T;
struct Y {
typedef long T;
T b;
};
typedef int I;
class D {
typedef I I; // error, even though no reordering involved
};
--End Example]
*/
public void test3_3_6s5() throws Exception { // 90606
StringBuffer buffer = new StringBuffer();
buffer.append("typedef int c;\n"); //$NON-NLS-1$
buffer.append("enum { i = 1 };\n"); //$NON-NLS-1$
buffer.append("class X {\n"); //$NON-NLS-1$
buffer.append("int i=3;\n"); //$NON-NLS-1$
buffer.append("char v[i];\n"); //$NON-NLS-1$
buffer.append("int f() { return sizeof(c); } // OK: X::c\n"); //$NON-NLS-1$
buffer.append("char c;\n"); //$NON-NLS-1$
buffer.append("enum { i = 2 };\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
buffer.append("typedef char* T;\n"); //$NON-NLS-1$
buffer.append("struct Y {\n"); //$NON-NLS-1$
buffer.append("typedef long T;\n"); //$NON-NLS-1$
buffer.append("T b;\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
buffer.append("typedef int I;\n"); //$NON-NLS-1$
buffer.append("class D {\n"); //$NON-NLS-1$
buffer.append("typedef I I; // error, even though no reordering involved\n"); //$NON-NLS-1$
buffer.append("};\n"); //$NON-NLS-1$
parse(buffer.toString(), ParserLanguage.CPP, true, 0);
}
/**
[--Start Example(CPP 13.4-5a):
int f(double);
int f(int);
int (*pfd)(double) = &f; // selects f(double)
int (*pfi)(int) = &f; // selects f(int)
int (*pfe)(...) = &f; // error: type mismatch
int (&rfi)(int) = f; // selects f(int)
int (&rfd)(double) = f; // selects f(double)
void g() {
(int (*)(int))&f; // cast expression as selector
}
--End Example]
* @throws ParserException
*/
public void test13_4s5a() throws ParserException { // bug 90674
StringBuffer buffer = new StringBuffer();
buffer.append("int f(double);\n"); //$NON-NLS-1$
buffer.append("int f(int);\n"); //$NON-NLS-1$
buffer.append("int (*pfd)(double) = &f; // selects f(double)\n"); //$NON-NLS-1$
buffer.append("int (*pfi)(int) = &f; // selects f(int)\n"); //$NON-NLS-1$
buffer.append("int (*pfe)(...) = &f; // error: type mismatch\n"); //$NON-NLS-1$
buffer.append("int (&rfi)(int) = f; // selects f(int)\n"); //$NON-NLS-1$
buffer.append("int (&rfd)(double) = f; // selects f(double)\n"); //$NON-NLS-1$
buffer.append("void g() {\n"); //$NON-NLS-1$
buffer.append("(int (*)(int))&f; // cast expression as selector\n"); //$NON-NLS-1$
buffer.append("}\n"); //$NON-NLS-1$
parse(buffer.toString(), ParserLanguage.CPP, false, 0);
}
} }

View file

@ -1,6 +1,7 @@
package org.eclipse.cdt.core.parser.tests.ast2; package org.eclipse.cdt.core.parser.tests.ast2;
import org.eclipse.cdt.core.dom.ast.IASTDeclaration; import org.eclipse.cdt.core.dom.ast.IASTDeclaration;
import org.eclipse.cdt.core.dom.ast.IASTExpression;
import org.eclipse.cdt.core.dom.ast.IASTInitializerExpression; import org.eclipse.cdt.core.dom.ast.IASTInitializerExpression;
import org.eclipse.cdt.core.dom.ast.IASTSimpleDeclaration; import org.eclipse.cdt.core.dom.ast.IASTSimpleDeclaration;
import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit; import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
@ -229,9 +230,10 @@ public class AST2UtilOldTests extends AST2BaseTest {
} }
// Kind UNARY_SIZEOF_TYPEID : unsigned int // Kind UNARY_SIZEOF_TYPEID : unsigned int
public void testUnarySizeofTypeId() throws Exception { public void testUnarySizeofTypeId() throws Exception {
IASTTranslationUnit tu = parse("int y = foo( sizeof(x) );".toString(), ParserLanguage.CPP); //$NON-NLS-1$ IASTTranslationUnit tu = parse("int x, y = foo( sizeof(x) );".toString(), ParserLanguage.CPP); //$NON-NLS-1$
IASTDeclaration[] d = tu.getDeclarations(); IASTDeclaration[] d = tu.getDeclarations();
isExpressionStringEqual( ((IASTInitializerExpression)((IASTSimpleDeclaration)d[0]).getDeclarators()[0].getInitializer()).getExpression(), "foo(sizeof (x))" ); //$NON-NLS-1$ final IASTExpression expression = ((IASTInitializerExpression)((IASTSimpleDeclaration)d[0]).getDeclarators()[1].getInitializer()).getExpression();
isExpressionStringEqual( expression, "foo(sizeof (x))" ); //$NON-NLS-1$
} }
// Kind NEW_TYPEID // Kind NEW_TYPEID
public void testNewTypeId() throws Exception { public void testNewTypeId() throws Exception {

View file

@ -51,6 +51,7 @@ import org.eclipse.cdt.core.dom.ast.IASTStatement;
import org.eclipse.cdt.core.dom.ast.IASTSwitchStatement; import org.eclipse.cdt.core.dom.ast.IASTSwitchStatement;
import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit; import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
import org.eclipse.cdt.core.dom.ast.IASTTypeId; import org.eclipse.cdt.core.dom.ast.IASTTypeId;
import org.eclipse.cdt.core.dom.ast.IASTTypeIdExpression;
import org.eclipse.cdt.core.dom.ast.IASTUnaryExpression; import org.eclipse.cdt.core.dom.ast.IASTUnaryExpression;
import org.eclipse.cdt.core.dom.ast.IASTWhileStatement; import org.eclipse.cdt.core.dom.ast.IASTWhileStatement;
import org.eclipse.cdt.core.dom.ast.IASTEnumerationSpecifier.IASTEnumerator; import org.eclipse.cdt.core.dom.ast.IASTEnumerationSpecifier.IASTEnumerator;
@ -389,6 +390,8 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser {
protected IToken simpleDeclarationMark; protected IToken simpleDeclarationMark;
private static final IASTNode[] EMPTY_NODE_ARRAY = new IASTNode[0];
public IASTTranslationUnit parse() { public IASTTranslationUnit parse() {
long startTime = System.currentTimeMillis(); long startTime = System.currentTimeMillis();
translationUnit(); translationUnit();
@ -633,8 +636,7 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser {
protected abstract IASTExpression multiplicativeExpression() protected abstract IASTExpression multiplicativeExpression()
throws BacktrackException, EndOfFileException; throws BacktrackException, EndOfFileException;
protected abstract IASTTypeId typeId(boolean skipArrayMods, protected abstract IASTTypeId typeId(boolean forNewExpression) throws BacktrackException,
boolean forNewExpression) throws BacktrackException,
EndOfFileException; EndOfFileException;
protected abstract IASTExpression castExpression() protected abstract IASTExpression castExpression()
@ -938,7 +940,7 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser {
if (LT(1) == IToken.tLPAREN) { if (LT(1) == IToken.tLPAREN) {
try { try {
consume(IToken.tLPAREN); consume(IToken.tLPAREN);
d = typeId(false, false); d = typeId(false);
lastOffset = consume(IToken.tRPAREN).getEndOffset(); lastOffset = consume(IToken.tRPAREN).getEndOffset();
} catch (BacktrackException bt) { } catch (BacktrackException bt) {
backup(m); backup(m);
@ -974,7 +976,7 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser {
} else } else
try { try {
consume(IToken.tLPAREN); consume(IToken.tLPAREN);
d = typeId(false, false); d = typeId(false);
lastOffset = consume(IToken.tRPAREN).getEndOffset(); lastOffset = consume(IToken.tRPAREN).getEndOffset();
} catch (BacktrackException bt) { } catch (BacktrackException bt) {
backup(m); backup(m);
@ -2105,5 +2107,107 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser {
throwBacktrack(token.getOffset(), token.getLength()); throwBacktrack(token.getOffset(), token.getLength());
} }
protected IASTNode[] parseTypeIdOrUnaryExpression(boolean typeIdWithParentheses ) throws EndOfFileException {
IASTTypeId typeId = null;
IASTExpression unaryExpression = null;
IToken typeIdLA = null, unaryExpressionLA = null;
IToken mark = mark();
try
{
if( typeIdWithParentheses )
consume( IToken.tLPAREN );
typeId = typeId( false );
if( typeIdWithParentheses )
{
switch (LT(1)) {
case IToken.tRPAREN:
case IToken.tEOC:
consume();
break;
default:
throw backtrack;
}
}
typeIdLA = LA(1);
}
catch( BacktrackException bte )
{
typeId = null;
}
backup( mark );
try
{
unaryExpression = unaryExpression();
unaryExpressionLA = LA(1);
}
catch( BacktrackException bte )
{
unaryExpression = null;
}
IASTNode [] result;
if( unaryExpression == null && typeId != null )
{
backup( typeIdLA );
result = new IASTNode[1];
result[0] = typeId;
return result;
}
if( unaryExpression != null && typeId == null )
{
backup( unaryExpressionLA );
result = new IASTNode[1];
result[0] = unaryExpression;
return result;
}
if( unaryExpression != null && typeId != null && typeIdLA == unaryExpressionLA )
{
result = new IASTNode[2];
result[0] = typeId;
result[1] = unaryExpression;
return result;
}
return EMPTY_NODE_ARRAY;
}
protected abstract IASTAmbiguousExpression createAmbiguousExpression();
protected IASTExpression parseSizeofExpression() throws BacktrackException, EndOfFileException {
int startingOffset = consume(IToken.t_sizeof).getOffset();
IASTNode[] choice = parseTypeIdOrUnaryExpression(true);
switch (choice.length) {
case 1:
int lastOffset = calculateEndOffset(choice[0]);
if (choice[0] instanceof IASTExpression)
return buildUnaryExpression(IASTUnaryExpression.op_sizeof,
(IASTExpression) choice[0], startingOffset, lastOffset);
else if (choice[0] instanceof IASTTypeId)
return buildTypeIdExpression(IASTTypeIdExpression.op_sizeof,
(IASTTypeId) choice[0], startingOffset, lastOffset);
throwBacktrack(LA(1));
break;
case 2:
lastOffset = calculateEndOffset(choice[0]);
IASTAmbiguousExpression ambExpr = createAmbiguousExpression();
IASTExpression e1 = buildTypeIdExpression(
IASTTypeIdExpression.op_sizeof, (IASTTypeId) choice[0],
startingOffset, lastOffset);
IASTExpression e2 = buildUnaryExpression(
IASTUnaryExpression.op_sizeof, (IASTExpression) choice[1],
startingOffset, lastOffset);
ambExpr.addExpression(e1);
e1.setParent(ambExpr);
e1.setPropertyInParent(IASTAmbiguousExpression.SUBEXPRESSION);
ambExpr.addExpression(e2);
e2.setParent(ambExpr);
e2.setPropertyInParent(IASTAmbiguousExpression.SUBEXPRESSION);
((ASTNode) ambExpr).setOffsetAndLength((ASTNode) e2);
return ambExpr;
default:
}
throwBacktrack(LA(1));
return null;
}
} }

View file

@ -51,9 +51,12 @@ public abstract class CASTAmbiguity extends CASTNode {
* @param j * @param j
* @throws DOMException * @throws DOMException
*/ */
protected void clearCache(IASTName[] names, int j) throws DOMException { protected void clearCache(IASTName[] names, int j) {
IScope scope = CPPVisitor.getContainingScope( names[j] ); IScope scope = CPPVisitor.getContainingScope( names[j] );
scope.flushCache(); try {
scope.flushCache();
} catch (DOMException e) {
}
} }
/** /**
@ -64,11 +67,12 @@ public abstract class CASTAmbiguity extends CASTNode {
*/ */
protected boolean reduceAmbiguity(ASTVisitor visitor, IASTNode[] nodes, int bestIndex) { protected boolean reduceAmbiguity(ASTVisitor visitor, IASTNode[] nodes, int bestIndex) {
IASTAmbiguityParent owner = (IASTAmbiguityParent) getParent(); IASTAmbiguityParent owner = (IASTAmbiguityParent) getParent();
IASTNode s = nodes[bestIndex ]; IASTNode s = nodes[bestIndex];
owner.replace( this, nodes[bestIndex] ); owner.replace(this, nodes[bestIndex]);
if( !s.accept( visitor ) ) return false; if (!s.accept(visitor))
return false;
return true; return true;
} }
protected abstract IASTNode [] getNodes(); protected abstract IASTNode [] getNodes();

View file

@ -0,0 +1,36 @@
/**********************************************************************
* Copyright (c) 2004 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* IBM - Initial API and implementation
**********************************************************************/
package org.eclipse.cdt.internal.core.dom.parser.c;
import org.eclipse.cdt.core.dom.ast.IASTExpression;
import org.eclipse.cdt.core.dom.ast.IASTNode;
import org.eclipse.cdt.core.parser.util.ArrayUtil;
import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguousExpression;
public class CASTAmbiguousExpression extends CASTAmbiguity implements
IASTAmbiguousExpression {
private IASTExpression [] expressions = new IASTExpression[2];
public void addExpression(IASTExpression e) {
expressions = (IASTExpression[]) ArrayUtil.append( IASTExpression.class, expressions, e );
}
public IASTExpression[] getExpressions() {
return (IASTExpression[]) ArrayUtil.removeNulls( IASTExpression.class, expressions );
}
protected IASTNode[] getNodes() {
return getExpressions();
}
}

View file

@ -101,6 +101,7 @@ import org.eclipse.cdt.core.parser.util.CharArrayUtils;
import org.eclipse.cdt.internal.core.dom.parser.ASTNode; import org.eclipse.cdt.internal.core.dom.parser.ASTNode;
import org.eclipse.cdt.internal.core.dom.parser.AbstractGNUSourceCodeParser; import org.eclipse.cdt.internal.core.dom.parser.AbstractGNUSourceCodeParser;
import org.eclipse.cdt.internal.core.dom.parser.BacktrackException; import org.eclipse.cdt.internal.core.dom.parser.BacktrackException;
import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguousExpression;
import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguousStatement; import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguousStatement;
/** /**
@ -799,7 +800,7 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser {
// If this isn't a type name, then we shouldn't be here // If this isn't a type name, then we shouldn't be here
try { try {
try { try {
typeId = typeId(false, false); typeId = typeId(false);
consume(IToken.tRPAREN); consume(IToken.tRPAREN);
castExpression = castExpression(); castExpression = castExpression();
} catch (BacktrackException bte) { } catch (BacktrackException bte) {
@ -849,7 +850,7 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser {
if (LT(1) == IToken.tLPAREN) { if (LT(1) == IToken.tLPAREN) {
try { try {
consume(IToken.tLPAREN); consume(IToken.tLPAREN);
typeId = typeId(false, false); typeId = typeId(false);
lastOffset = consume(IToken.tRPAREN).getEndOffset(); lastOffset = consume(IToken.tRPAREN).getEndOffset();
} catch (BacktrackException bt) { } catch (BacktrackException bt) {
backup(mark); backup(mark);
@ -924,7 +925,7 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser {
IToken m = mark(); IToken m = mark();
try { try {
int offset = consume(IToken.tLPAREN).getOffset(); int offset = consume(IToken.tLPAREN).getOffset();
IASTTypeId t = typeId(false, false); IASTTypeId t = typeId(false);
consume(IToken.tRPAREN).getEndOffset(); consume(IToken.tRPAREN).getEndOffset();
IASTInitializer i = cInitializerClause(Collections.EMPTY_LIST); IASTInitializer i = cInitializerClause(Collections.EMPTY_LIST);
firstExpression = buildTypeIdInitializerExpression(t, i, firstExpression = buildTypeIdInitializerExpression(t, i,
@ -1194,8 +1195,7 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser {
return new CASTIdExpression(); return new CASTIdExpression();
} }
protected IASTTypeId typeId(boolean skipArrayModifiers, protected IASTTypeId typeId(boolean forNewExpression) throws EndOfFileException,
boolean forNewExpression) throws EndOfFileException,
BacktrackException { BacktrackException {
IToken mark = mark(); IToken mark = mark();
int startingOffset = mark.getOffset(); int startingOffset = mark.getOffset();
@ -2595,50 +2595,9 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser {
return new CASTAmbiguousStatement(); return new CASTAmbiguousStatement();
} }
// static class HeuristicTypeDetector extends CASTVisitor protected IASTAmbiguousExpression createAmbiguousExpression() {
// { return new CASTAmbiguousExpression();
// private final char[] lookingForName; }
// boolean result = false;
//
// {
// shouldVisitDeclarations = true;
// }
//
// public HeuristicTypeDetector( char [] name )
// {
// this.lookingForName = name;
// }
//
// public int visit(IASTDeclaration declaration) {
// if( declaration instanceof IASTSimpleDeclaration )
// {
// IASTSimpleDeclaration sd = (IASTSimpleDeclaration) declaration;
// if( sd.getDeclSpecifier().getStorageClass() == IASTDeclSpecifier.sc_typedef )
// {
// IASTDeclarator [] declarators = sd.getDeclarators();
// for( int i = 0; i < declarators.length; ++i )
// if( CharArrayUtils.equals( declarators[i].getName().toCharArray(), lookingForName ) )
// {
// result = true;
// return PROCESS_ABORT;
// }
// }
// }
// return PROCESS_CONTINUE;
// }
//
// public boolean getAnswer()
// {
// return result;
// }
//
// }
//
// protected boolean queryIsTypeName(IASTName name) {
// HeuristicTypeDetector nc = new HeuristicTypeDetector( name.toCharArray() );
// translationUnit.accept(nc);
// return nc.result;
// }
} }

View file

@ -70,7 +70,7 @@ public class CPPUnknownBinding implements ICPPInternalUnknown {
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalBinding#createDelegate(org.eclipse.cdt.core.dom.ast.IASTName) * @see org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalBinding#createDelegate(org.eclipse.cdt.core.dom.ast.IASTName)
*/ */
public ICPPDelegate createDelegate( IASTName name ) { public ICPPDelegate createDelegate( IASTName name1 ) {
return null; return null;
} }

View file

@ -26,7 +26,6 @@ import org.eclipse.cdt.core.parser.util.CharArrayObjectMap;
* @author aniefer * @author aniefer
*/ */
public class CPPUnknownScope implements ICPPScope { public class CPPUnknownScope implements ICPPScope {
private ICPPScope parentScope = null;
private IBinding binding = null; private IBinding binding = null;
private IASTName scopeName = null; private IASTName scopeName = null;
private CharArrayObjectMap map = null; private CharArrayObjectMap map = null;
@ -78,7 +77,7 @@ public class CPPUnknownScope implements ICPPScope {
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.dom.ast.IScope#removeBinding(org.eclipse.cdt.core.dom.ast.IBinding) * @see org.eclipse.cdt.core.dom.ast.IScope#removeBinding(org.eclipse.cdt.core.dom.ast.IBinding)
*/ */
public void removeBinding( IBinding binding ) { public void removeBinding( IBinding binding1 ) {
} }