mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
Fixed Bug 100408 [ProblemBinding] invalid ProblemBinding on (x)*3;
This commit is contained in:
parent
3915950c5d
commit
1b6e13f52d
7 changed files with 61 additions and 15 deletions
|
@ -4756,4 +4756,11 @@ public class AST2CPPTests extends AST2BaseTest {
|
||||||
assertTrue(((IASTIdExpression)((IASTFunctionCallExpression)((IASTReturnStatement)((IASTCompoundStatement)((IASTFunctionDefinition)tu.getDeclarations()[1]).getBody()).getStatements()[0]).getReturnValue()).getFunctionNameExpression()).getName().resolveBinding() instanceof IFunction);
|
assertTrue(((IASTIdExpression)((IASTFunctionCallExpression)((IASTReturnStatement)((IASTCompoundStatement)((IASTFunctionDefinition)tu.getDeclarations()[1]).getBody()).getStatements()[0]).getReturnValue()).getFunctionNameExpression()).getName().resolveBinding() instanceof IFunction);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testBug100408() throws Exception {
|
||||||
|
IASTTranslationUnit tu = parse( "int foo() { int x=1; (x)*3; }", ParserLanguage.CPP );
|
||||||
|
CPPNameCollector col = new CPPNameCollector();
|
||||||
|
tu.accept( col );
|
||||||
|
assertNoProblemBindings( col );
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -3195,4 +3195,12 @@ public class AST2Tests extends AST2BaseTest {
|
||||||
assertSame( a1, a2 );
|
assertSame( a1, a2 );
|
||||||
assertNotSame( a2, a3 );
|
assertNotSame( a2, a3 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testBug100408() throws Exception {
|
||||||
|
IASTTranslationUnit tu = parse( "int foo() { int x=1; (x)*3; }", ParserLanguage.C );
|
||||||
|
CNameCollector col = new CNameCollector();
|
||||||
|
tu.accept( col );
|
||||||
|
assertNoProblemBindings( col );
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
#Thu Jun 16 13:15:47 EDT 2005
|
||||||
|
eclipse.preferences.version=1
|
||||||
|
org.eclipse.jdt.core.codeComplete.argumentPrefixes=
|
||||||
|
org.eclipse.jdt.core.codeComplete.argumentSuffixes=
|
||||||
|
org.eclipse.jdt.core.codeComplete.fieldPrefixes=
|
||||||
|
org.eclipse.jdt.core.codeComplete.fieldSuffixes=
|
||||||
|
org.eclipse.jdt.core.codeComplete.localPrefixes=
|
||||||
|
org.eclipse.jdt.core.codeComplete.localSuffixes=
|
||||||
|
org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=
|
||||||
|
org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
|
|
@ -0,0 +1,6 @@
|
||||||
|
#Thu Jun 16 13:15:47 EDT 2005
|
||||||
|
eclipse.preferences.version=1
|
||||||
|
internal.default.compliance=default
|
||||||
|
org.eclipse.jdt.ui.exception.name=e
|
||||||
|
org.eclipse.jdt.ui.gettersetter.use.is=true
|
||||||
|
org.eclipse.jdt.ui.overrideannotation=true
|
|
@ -37,7 +37,6 @@ import org.eclipse.cdt.core.dom.ast.IASTGotoStatement;
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTIdExpression;
|
import org.eclipse.cdt.core.dom.ast.IASTIdExpression;
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTIfStatement;
|
import org.eclipse.cdt.core.dom.ast.IASTIfStatement;
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTLabelStatement;
|
import org.eclipse.cdt.core.dom.ast.IASTLabelStatement;
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTLiteralExpression;
|
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTName;
|
import org.eclipse.cdt.core.dom.ast.IASTName;
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTNamedTypeSpecifier;
|
import org.eclipse.cdt.core.dom.ast.IASTNamedTypeSpecifier;
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTNode;
|
import org.eclipse.cdt.core.dom.ast.IASTNode;
|
||||||
|
@ -893,20 +892,6 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser {
|
||||||
*/
|
*/
|
||||||
protected abstract IASTConditionalExpression createConditionalExpression();
|
protected abstract IASTConditionalExpression createConditionalExpression();
|
||||||
|
|
||||||
protected IASTExpression unaryOperatorCastExpression(int operator)
|
|
||||||
throws EndOfFileException, BacktrackException {
|
|
||||||
IToken mark = mark();
|
|
||||||
int offset = consume().getOffset();
|
|
||||||
IASTExpression castExpression = castExpression();
|
|
||||||
if( castExpression instanceof IASTLiteralExpression && operator == IASTUnaryExpression.op_amper )
|
|
||||||
{
|
|
||||||
backup( mark );
|
|
||||||
throwBacktrack( mark );
|
|
||||||
}
|
|
||||||
return buildUnaryExpression(operator, castExpression, offset,
|
|
||||||
calculateEndOffset(castExpression));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param operator
|
* @param operator
|
||||||
* @param operand
|
* @param operand
|
||||||
|
|
|
@ -2778,5 +2778,18 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected IASTExpression unaryOperatorCastExpression(int operator) throws EndOfFileException, BacktrackException {
|
||||||
|
IToken mark = mark();
|
||||||
|
int offset = consume().getOffset();
|
||||||
|
IASTExpression castExpression = castExpression();
|
||||||
|
if( castExpression instanceof IASTLiteralExpression && ( operator == IASTUnaryExpression.op_amper || operator == IASTUnaryExpression.op_star ) )
|
||||||
|
{
|
||||||
|
backup( mark );
|
||||||
|
throwBacktrack( mark );
|
||||||
|
}
|
||||||
|
return buildUnaryExpression(operator, castExpression, offset,
|
||||||
|
calculateEndOffset(castExpression));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
|
@ -5311,4 +5311,21 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
|
||||||
protected IASTDeclaration simpleDeclaration() throws BacktrackException, EndOfFileException {
|
protected IASTDeclaration simpleDeclaration() throws BacktrackException, EndOfFileException {
|
||||||
return simpleDeclarationStrategyUnion();
|
return simpleDeclarationStrategyUnion();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected IASTExpression unaryOperatorCastExpression(int operator) throws EndOfFileException, BacktrackException {
|
||||||
|
IToken mark = mark();
|
||||||
|
int offset = consume().getOffset();
|
||||||
|
IASTExpression castExpression = castExpression();
|
||||||
|
if( castExpression instanceof IASTLiteralExpression && ( operator == IASTUnaryExpression.op_amper || operator == IASTUnaryExpression.op_star ) )
|
||||||
|
{
|
||||||
|
IASTLiteralExpression literal = (IASTLiteralExpression) castExpression;
|
||||||
|
if( literal.getKind() != ICPPASTLiteralExpression.lk_this )
|
||||||
|
{
|
||||||
|
backup( mark );
|
||||||
|
throwBacktrack( mark );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return buildUnaryExpression(operator, castExpression, offset,
|
||||||
|
calculateEndOffset(castExpression));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue