mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
CORE
Fixed bug39526 - Parser doesn't handle initializers correctly. Fixed bug41520 - FullParse : Constructor Initializer is mistaken as function prototype TESTS Moved testBug39526() from ASTFailedTests.java to QuickParseASTTests.java. Moved testBug41520() from FullParseFailedTests.java to CompleteParseASTTest.java
This commit is contained in:
parent
d6a7d069a1
commit
4f65c461c3
11 changed files with 664 additions and 693 deletions
|
@ -1,3 +1,7 @@
|
||||||
|
2003-08-25 John Camelon
|
||||||
|
Moved testBug39526() from ASTFailedTests.java to QuickParseASTTests.java.
|
||||||
|
Moved testBug41520() from FullParseFailedTests.java to CompleteParseASTTest.java
|
||||||
|
|
||||||
2003-08-25 John Camelon
|
2003-08-25 John Camelon
|
||||||
Updated TranslationUnitTests to not include K&R testing.
|
Updated TranslationUnitTests to not include K&R testing.
|
||||||
|
|
||||||
|
|
|
@ -1,57 +0,0 @@
|
||||||
/**********************************************************************
|
|
||||||
* Copyright (c) 2002,2003 Rational Software Corporation and others.
|
|
||||||
* All rights reserved. This program and the accompanying materials
|
|
||||||
* are made available under the terms of the Common Public License v0.5
|
|
||||||
* which accompanies this distribution, and is available at
|
|
||||||
* http://www.eclipse.org/legal/cpl-v05.html
|
|
||||||
*
|
|
||||||
* Contributors:
|
|
||||||
* IBM Rational Software - Initial API and implementation
|
|
||||||
***********************************************************************/
|
|
||||||
package org.eclipse.cdt.core.model.failedTests;
|
|
||||||
|
|
||||||
import org.eclipse.cdt.core.model.CModelException;
|
|
||||||
import org.eclipse.cdt.core.model.IFunction;
|
|
||||||
import org.eclipse.cdt.core.model.ITranslationUnit;
|
|
||||||
import org.eclipse.cdt.core.model.tests.TranslationUnitBaseTest;
|
|
||||||
import org.eclipse.cdt.testplugin.CProjectHelper;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author jcamelon
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public class FailedTranslationUnitTests extends TranslationUnitBaseTest
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public FailedTranslationUnitTests()
|
|
||||||
{
|
|
||||||
super();
|
|
||||||
// TODO Auto-generated constructor stub
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* @param name
|
|
||||||
*/
|
|
||||||
public FailedTranslationUnitTests(String name)
|
|
||||||
{
|
|
||||||
super(name);
|
|
||||||
// TODO Auto-generated constructor stub
|
|
||||||
}
|
|
||||||
|
|
||||||
/***
|
|
||||||
* Simple sanity test for old K&R-style C function declaration
|
|
||||||
*/
|
|
||||||
public void testKRFunctionDeclarations() throws CModelException
|
|
||||||
{
|
|
||||||
ITranslationUnit myTranslationUnit = CProjectHelper.findTranslationUnit(testProject,"exetest.c");
|
|
||||||
|
|
||||||
assertTrue(myTranslationUnit.getElement("KRFunction") instanceof IFunction);
|
|
||||||
IFunction myKRFunction = (IFunction)myTranslationUnit.getElement("KRFunction");
|
|
||||||
// reverse both these assertions to pass the test
|
|
||||||
assertNotSame(myKRFunction.getSignature(), "KRFunction(const char*, int(*)(float), parm3)");
|
|
||||||
assertNotSame(myKRFunction.getReturnType(), "bool");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
|
@ -39,14 +39,7 @@ public class ASTFailedTests extends BaseASTTest
|
||||||
}
|
}
|
||||||
public void testBug39504A() throws Exception
|
public void testBug39504A() throws Exception
|
||||||
{
|
{
|
||||||
try
|
assertCodeFailsParse("int y = sizeof(x[0]);");
|
||||||
{
|
|
||||||
IASTVariable variable = (IASTVariable)parse("int y = sizeof(x[0]);").getDeclarations().next();
|
|
||||||
}
|
|
||||||
catch( ClassCastException cce )
|
|
||||||
{
|
|
||||||
assertFalse( "We should not get a cast error here", false );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
public void testBug39504B() throws Exception
|
public void testBug39504B() throws Exception
|
||||||
{
|
{
|
||||||
|
@ -65,10 +58,7 @@ public class ASTFailedTests extends BaseASTTest
|
||||||
{
|
{
|
||||||
assertCodeFailsParse("C &(C::*DD)(const C &x) = &C::operator=;");
|
assertCodeFailsParse("C &(C::*DD)(const C &x) = &C::operator=;");
|
||||||
}
|
}
|
||||||
public void testBug39526() throws Exception
|
|
||||||
{
|
|
||||||
assertCodeFailsParse("UnitList unit_list (String(\"keV\"));");
|
|
||||||
}
|
|
||||||
public void testBug39528() throws Exception
|
public void testBug39528() throws Exception
|
||||||
{
|
{
|
||||||
Writer code = new StringWriter();
|
Writer code = new StringWriter();
|
||||||
|
@ -254,8 +244,7 @@ public class ASTFailedTests extends BaseASTTest
|
||||||
}
|
}
|
||||||
public void testBug39698A() throws Exception
|
public void testBug39698A() throws Exception
|
||||||
{
|
{
|
||||||
Iterator declarations = parse("int c = a <? b;").getDeclarations();
|
assertCodeFailsParse("int c = a <? b;");
|
||||||
assertFalse( "Should be 1 declaration, not 0", declarations.hasNext() );
|
|
||||||
}
|
}
|
||||||
public void testBug39698B() throws Exception
|
public void testBug39698B() throws Exception
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,66 +0,0 @@
|
||||||
/*******************************************************************************
|
|
||||||
* Copyright (c) 2003 IBM Corporation and others.
|
|
||||||
* All rights reserved. This program and the accompanying materials
|
|
||||||
* are made available under the terms of the Common Public License v0.5
|
|
||||||
* which accompanies this distribution, and is available at
|
|
||||||
* http://www.eclipse.org/legal/cpl-v05.html
|
|
||||||
*
|
|
||||||
* Contributors:
|
|
||||||
* IBM Corp. - Rational Software - initial implementation
|
|
||||||
******************************************************************************/
|
|
||||||
/*
|
|
||||||
* Created on Jul 28, 2003
|
|
||||||
*/
|
|
||||||
package org.eclipse.cdt.core.parser.failedTests;
|
|
||||||
|
|
||||||
import java.util.Iterator;
|
|
||||||
|
|
||||||
import junit.framework.Test;
|
|
||||||
import junit.framework.TestSuite;
|
|
||||||
|
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTVariable;
|
|
||||||
import org.eclipse.cdt.core.parser.tests.CompleteParseASTTest;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author aniefer
|
|
||||||
*
|
|
||||||
* To change the template for this generated type comment go to
|
|
||||||
* Window>Preferences>Java>Code Generation>Code and Comments
|
|
||||||
*/
|
|
||||||
public class FullParseFailedTests extends CompleteParseASTTest {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param a
|
|
||||||
*/
|
|
||||||
public FullParseFailedTests(String name) {
|
|
||||||
super(name);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Test suite() {
|
|
||||||
TestSuite suite = new TestSuite(FullParseFailedTests.class.getName());
|
|
||||||
return suite;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testBug41520() throws Exception
|
|
||||||
{
|
|
||||||
Iterator i = parse( "int x = 666; int y ( x );").getDeclarations();
|
|
||||||
IASTVariable variableX = (IASTVariable)i.next();
|
|
||||||
try
|
|
||||||
{
|
|
||||||
IASTVariable variableY = (IASTVariable)i.next();
|
|
||||||
failedAsExpected();
|
|
||||||
}catch( ClassCastException cce )
|
|
||||||
{
|
|
||||||
//this is bad
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
private void failedAsExpected()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
|
@ -10,22 +10,10 @@
|
||||||
***********************************************************************/
|
***********************************************************************/
|
||||||
package org.eclipse.cdt.core.parser.tests;
|
package org.eclipse.cdt.core.parser.tests;
|
||||||
|
|
||||||
import java.io.StringReader;
|
|
||||||
import java.io.StringWriter;
|
import java.io.StringWriter;
|
||||||
import java.io.Writer;
|
import java.io.Writer;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Hashtable;
|
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Stack;
|
|
||||||
|
|
||||||
import junit.framework.TestCase;
|
|
||||||
|
|
||||||
import org.eclipse.cdt.core.parser.IParser;
|
|
||||||
import org.eclipse.cdt.core.parser.IProblem;
|
|
||||||
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
|
|
||||||
import org.eclipse.cdt.core.parser.ParserFactory;
|
|
||||||
import org.eclipse.cdt.core.parser.ParserMode;
|
|
||||||
import org.eclipse.cdt.core.parser.ast.ASTAccessVisibility;
|
import org.eclipse.cdt.core.parser.ast.ASTAccessVisibility;
|
||||||
import org.eclipse.cdt.core.parser.ast.ASTClassKind;
|
import org.eclipse.cdt.core.parser.ast.ASTClassKind;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTASMDefinition;
|
import org.eclipse.cdt.core.parser.ast.IASTASMDefinition;
|
||||||
|
@ -33,516 +21,32 @@ import org.eclipse.cdt.core.parser.ast.IASTAbstractTypeSpecifierDeclaration;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTBaseSpecifier;
|
import org.eclipse.cdt.core.parser.ast.IASTBaseSpecifier;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTClassReference;
|
import org.eclipse.cdt.core.parser.ast.IASTClassReference;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier;
|
import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTCompilationUnit;
|
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTDeclaration;
|
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTElaboratedTypeSpecifier;
|
import org.eclipse.cdt.core.parser.ast.IASTElaboratedTypeSpecifier;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTEnumerationReference;
|
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTEnumerationSpecifier;
|
import org.eclipse.cdt.core.parser.ast.IASTEnumerationSpecifier;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTEnumerator;
|
import org.eclipse.cdt.core.parser.ast.IASTEnumerator;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTField;
|
import org.eclipse.cdt.core.parser.ast.IASTField;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTFieldReference;
|
import org.eclipse.cdt.core.parser.ast.IASTFieldReference;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTFunction;
|
import org.eclipse.cdt.core.parser.ast.IASTFunction;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTFunctionReference;
|
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTInclusion;
|
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTLinkageSpecification;
|
import org.eclipse.cdt.core.parser.ast.IASTLinkageSpecification;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTMacro;
|
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTMethod;
|
import org.eclipse.cdt.core.parser.ast.IASTMethod;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTMethodReference;
|
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition;
|
import org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTNamespaceReference;
|
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTReference;
|
import org.eclipse.cdt.core.parser.ast.IASTReference;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTScope;
|
import org.eclipse.cdt.core.parser.ast.IASTScope;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTSimpleTypeSpecifier;
|
import org.eclipse.cdt.core.parser.ast.IASTSimpleTypeSpecifier;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTTemplateDeclaration;
|
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTTemplateInstantiation;
|
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTTemplateSpecialization;
|
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTTypedefDeclaration;
|
import org.eclipse.cdt.core.parser.ast.IASTTypedefDeclaration;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTTypedefReference;
|
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTUsingDeclaration;
|
import org.eclipse.cdt.core.parser.ast.IASTUsingDeclaration;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTUsingDirective;
|
import org.eclipse.cdt.core.parser.ast.IASTUsingDirective;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTVariable;
|
import org.eclipse.cdt.core.parser.ast.IASTVariable;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTVariableReference;
|
import org.eclipse.cdt.core.parser.ast.IASTVariableReference;
|
||||||
import org.eclipse.cdt.internal.core.parser.ParserException;
|
|
||||||
import org.eclipse.cdt.internal.core.parser.ScannerInfo;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author jcamelon
|
* @author jcamelon
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class CompleteParseASTTest extends TestCase
|
public class CompleteParseASTTest extends CompleteParseBaseTest
|
||||||
{
|
{
|
||||||
public class Scope implements IASTScope
|
/**
|
||||||
{
|
|
||||||
private List decls = new ArrayList();
|
|
||||||
private final IASTScope scope;
|
|
||||||
public Scope( IASTScope scope )
|
|
||||||
{
|
|
||||||
this.scope = scope;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void addDeclaration( IASTDeclaration d )
|
|
||||||
{
|
|
||||||
decls.add(d);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Iterator getDeclarations()
|
|
||||||
{
|
|
||||||
return decls.iterator();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public IASTScope getScope()
|
|
||||||
{
|
|
||||||
|
|
||||||
return scope;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public class FullParseCallback implements ISourceElementRequestor
|
|
||||||
{
|
|
||||||
private List references = new ArrayList();
|
|
||||||
private List forewardDecls = new ArrayList();
|
|
||||||
private Stack inclusions = new Stack();
|
|
||||||
private Scope compilationUnit;
|
|
||||||
|
|
||||||
public IASTScope getCompilationUnit()
|
|
||||||
{
|
|
||||||
return compilationUnit;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptVariable(org.eclipse.cdt.core.parser.ast.IASTVariable)
|
|
||||||
*/
|
|
||||||
public void acceptVariable(IASTVariable variable)
|
|
||||||
{
|
|
||||||
getCurrentScope().addDeclaration( variable );
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptFunctionDeclaration(org.eclipse.cdt.core.parser.ast.IASTFunction)
|
|
||||||
*/
|
|
||||||
public void acceptFunctionDeclaration(IASTFunction function)
|
|
||||||
{
|
|
||||||
getCurrentScope().addDeclaration(function);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptUsingDirective(org.eclipse.cdt.core.parser.ast.IASTUsingDirective)
|
|
||||||
*/
|
|
||||||
public void acceptUsingDirective(IASTUsingDirective usageDirective)
|
|
||||||
{
|
|
||||||
getCurrentScope().addDeclaration(usageDirective);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptUsingDeclaration(org.eclipse.cdt.core.parser.ast.IASTUsingDeclaration)
|
|
||||||
*/
|
|
||||||
public void acceptUsingDeclaration(IASTUsingDeclaration usageDeclaration)
|
|
||||||
{
|
|
||||||
getCurrentScope().addDeclaration(usageDeclaration);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptASMDefinition(org.eclipse.cdt.core.parser.ast.IASTASMDefinition)
|
|
||||||
*/
|
|
||||||
public void acceptASMDefinition(IASTASMDefinition asmDefinition)
|
|
||||||
{
|
|
||||||
getCurrentScope().addDeclaration(asmDefinition);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptTypedefDeclaration(org.eclipse.cdt.core.parser.ast.IASTTypedefDeclaration)
|
|
||||||
*/
|
|
||||||
public void acceptTypedefDeclaration(IASTTypedefDeclaration typedef)
|
|
||||||
{
|
|
||||||
getCurrentScope().addDeclaration(typedef);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptEnumerationSpecifier(org.eclipse.cdt.core.parser.ast.IASTEnumerationSpecifier)
|
|
||||||
*/
|
|
||||||
public void acceptEnumerationSpecifier(IASTEnumerationSpecifier enumeration)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptAbstractTypeSpecDeclaration(org.eclipse.cdt.core.parser.ast.IASTAbstractTypeSpecifierDeclaration)
|
|
||||||
*/
|
|
||||||
public void acceptAbstractTypeSpecDeclaration(IASTAbstractTypeSpecifierDeclaration abstractDeclaration)
|
|
||||||
{
|
|
||||||
getCurrentScope().addDeclaration( abstractDeclaration );
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterFunctionBody(org.eclipse.cdt.core.parser.ast.IASTFunction)
|
|
||||||
*/
|
|
||||||
public void enterFunctionBody(IASTFunction function)
|
|
||||||
{
|
|
||||||
pushScope( function );
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitFunctionBody(org.eclipse.cdt.core.parser.ast.IASTFunction)
|
|
||||||
*/
|
|
||||||
public void exitFunctionBody(IASTFunction function)
|
|
||||||
{
|
|
||||||
popScope();
|
|
||||||
getCurrentScope().addDeclaration(function);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterCompilationUnit(org.eclipse.cdt.core.parser.ast.IASTCompilationUnit)
|
|
||||||
*/
|
|
||||||
public void enterCompilationUnit(IASTCompilationUnit compilationUnit)
|
|
||||||
{
|
|
||||||
pushScope( compilationUnit );
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterInclusion(org.eclipse.cdt.core.parser.ast.IASTInclusion)
|
|
||||||
*/
|
|
||||||
public void enterInclusion(IASTInclusion inclusion)
|
|
||||||
{
|
|
||||||
pushInclusion( inclusion );
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param inclusion
|
|
||||||
*/
|
|
||||||
private void pushInclusion(IASTInclusion inclusion)
|
|
||||||
{
|
|
||||||
inclusions.push( inclusion );
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterNamespaceDefinition(org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition)
|
|
||||||
*/
|
|
||||||
public void enterNamespaceDefinition(IASTNamespaceDefinition namespaceDefinition)
|
|
||||||
{
|
|
||||||
pushScope( namespaceDefinition );
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#entesrClassSpecifier(org.eclipse.cdt.core.parser.ast.IASTClassSpecifier)
|
|
||||||
*/
|
|
||||||
public void enterClassSpecifier(IASTClassSpecifier classSpecification)
|
|
||||||
{
|
|
||||||
pushScope( classSpecification );
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterLinkageSpecification(org.eclipse.cdt.core.parser.ast.IASTLinkageSpecification)
|
|
||||||
*/
|
|
||||||
public void enterLinkageSpecification(IASTLinkageSpecification linkageSpec)
|
|
||||||
{
|
|
||||||
pushScope( linkageSpec );
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterTemplateDeclaration(org.eclipse.cdt.core.parser.ast.IASTTemplateDeclaration)
|
|
||||||
*/
|
|
||||||
public void enterTemplateDeclaration(IASTTemplateDeclaration declaration)
|
|
||||||
{
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterTemplateSpecialization(org.eclipse.cdt.core.parser.ast.IASTTemplateSpecialization)
|
|
||||||
*/
|
|
||||||
public void enterTemplateSpecialization(IASTTemplateSpecialization specialization)
|
|
||||||
{
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterTemplateInstantiation(org.eclipse.cdt.core.parser.ast.IASTTemplateInstantiation)
|
|
||||||
*/
|
|
||||||
public void enterTemplateInstantiation(IASTTemplateInstantiation instantiation)
|
|
||||||
{
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptMethodDeclaration(org.eclipse.cdt.core.parser.ast.IASTMethod)
|
|
||||||
*/
|
|
||||||
public void acceptMethodDeclaration(IASTMethod method)
|
|
||||||
{
|
|
||||||
getCurrentScope().addDeclaration( method );
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterMethodBody(org.eclipse.cdt.core.parser.ast.IASTMethod)
|
|
||||||
*/
|
|
||||||
public void enterMethodBody(IASTMethod method)
|
|
||||||
{
|
|
||||||
pushScope(method);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitMethodBody(org.eclipse.cdt.core.parser.ast.IASTMethod)
|
|
||||||
*/
|
|
||||||
public void exitMethodBody(IASTMethod method)
|
|
||||||
{
|
|
||||||
popScope();
|
|
||||||
getCurrentScope().addDeclaration(method);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptField(org.eclipse.cdt.core.parser.ast.IASTField)
|
|
||||||
*/
|
|
||||||
public void acceptField(IASTField field)
|
|
||||||
{
|
|
||||||
getCurrentScope().addDeclaration(field);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitTemplateDeclaration(org.eclipse.cdt.core.parser.ast.IASTTemplateDeclaration)
|
|
||||||
*/
|
|
||||||
public void exitTemplateDeclaration(IASTTemplateDeclaration declaration)
|
|
||||||
{
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitTemplateSpecialization(org.eclipse.cdt.core.parser.ast.IASTTemplateSpecialization)
|
|
||||||
*/
|
|
||||||
public void exitTemplateSpecialization(IASTTemplateSpecialization specialization)
|
|
||||||
{
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitTemplateExplicitInstantiation(org.eclipse.cdt.core.parser.ast.IASTTemplateInstantiation)
|
|
||||||
*/
|
|
||||||
public void exitTemplateExplicitInstantiation(IASTTemplateInstantiation instantiation)
|
|
||||||
{
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitLinkageSpecification(org.eclipse.cdt.core.parser.ast.IASTLinkageSpecification)
|
|
||||||
*/
|
|
||||||
public void exitLinkageSpecification(IASTLinkageSpecification linkageSpec)
|
|
||||||
{
|
|
||||||
popScope();
|
|
||||||
getCurrentScope().addDeclaration(linkageSpec);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitClassSpecifier(org.eclipse.cdt.core.parser.ast.IASTClassSpecifier)
|
|
||||||
*/
|
|
||||||
public void exitClassSpecifier(IASTClassSpecifier classSpecification)
|
|
||||||
{
|
|
||||||
popScope();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitNamespaceDefinition(org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition)
|
|
||||||
*/
|
|
||||||
public void exitNamespaceDefinition(IASTNamespaceDefinition namespaceDefinition)
|
|
||||||
{
|
|
||||||
popScope();
|
|
||||||
getCurrentScope().addDeclaration(namespaceDefinition);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitInclusion(org.eclipse.cdt.core.parser.ast.IASTInclusion)
|
|
||||||
*/
|
|
||||||
public void exitInclusion(IASTInclusion inclusion)
|
|
||||||
{
|
|
||||||
popInclusion();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
private void popInclusion()
|
|
||||||
{
|
|
||||||
inclusions.pop();
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitCompilationUnit(org.eclipse.cdt.core.parser.ast.IASTCompilationUnit)
|
|
||||||
*/
|
|
||||||
public void exitCompilationUnit(IASTCompilationUnit compilationUnit)
|
|
||||||
{
|
|
||||||
this.compilationUnit = popScope();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private Stack scopes = new Stack();
|
|
||||||
protected Scope getCurrentScope()
|
|
||||||
{
|
|
||||||
return (Scope)scopes.peek();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected Scope popScope()
|
|
||||||
{
|
|
||||||
Scope s = (Scope)scopes.pop();
|
|
||||||
h.put( s.getScope(), s );
|
|
||||||
return s;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void pushScope( IASTScope scope )
|
|
||||||
{
|
|
||||||
scopes.push( new Scope( scope ));
|
|
||||||
}
|
|
||||||
|
|
||||||
Hashtable h = new Hashtable();
|
|
||||||
|
|
||||||
public Scope lookup( IASTScope s)
|
|
||||||
{
|
|
||||||
return (Scope)h.get(s);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptProblem(org.eclipse.cdt.core.parser.IProblem)
|
|
||||||
*/
|
|
||||||
public void acceptProblem(IProblem problem)
|
|
||||||
{
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptMacro(org.eclipse.cdt.core.parser.ast.IASTMacro)
|
|
||||||
*/
|
|
||||||
public void acceptMacro(IASTMacro macro)
|
|
||||||
{
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptClassReference(org.eclipse.cdt.core.parser.ast.IASTClassReference)
|
|
||||||
*/
|
|
||||||
public void acceptClassReference(IASTClassReference reference)
|
|
||||||
{
|
|
||||||
references.add( reference );
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptTypedefReference(org.eclipse.cdt.core.parser.ast.IASTTypedefReference)
|
|
||||||
*/
|
|
||||||
public void acceptTypedefReference(IASTTypedefReference reference)
|
|
||||||
{
|
|
||||||
references.add( reference );
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptNamespaceReference(org.eclipse.cdt.core.parser.ast.IASTNamespaceReference)
|
|
||||||
*/
|
|
||||||
public void acceptNamespaceReference(IASTNamespaceReference reference)
|
|
||||||
{
|
|
||||||
references.add( reference );
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptEnumerationReference(org.eclipse.cdt.core.parser.ast.IASTEnumerationReference)
|
|
||||||
*/
|
|
||||||
public void acceptEnumerationReference(IASTEnumerationReference reference)
|
|
||||||
{
|
|
||||||
references.add( reference );
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptVariableReference(org.eclipse.cdt.core.parser.ast.IASTVariableReference)
|
|
||||||
*/
|
|
||||||
public void acceptVariableReference(IASTVariableReference reference)
|
|
||||||
{
|
|
||||||
references.add( reference );
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptFunctionReference(org.eclipse.cdt.core.parser.ast.IASTFunctionReference)
|
|
||||||
*/
|
|
||||||
public void acceptFunctionReference(IASTFunctionReference reference)
|
|
||||||
{
|
|
||||||
references.add( reference );
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptFieldReference(org.eclipse.cdt.core.parser.ast.IASTFieldReference)
|
|
||||||
*/
|
|
||||||
public void acceptFieldReference(IASTFieldReference reference)
|
|
||||||
{
|
|
||||||
references.add( reference );
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptMethodReference(org.eclipse.cdt.core.parser.ast.IASTMethodReference)
|
|
||||||
*/
|
|
||||||
public void acceptMethodReference(IASTMethodReference reference)
|
|
||||||
{
|
|
||||||
references.add( reference );
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public List getReferences()
|
|
||||||
{
|
|
||||||
return references;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptElaboratedForewardDeclaration(org.eclipse.cdt.core.parser.ast.IASTElaboratedTypeSpecifier)
|
|
||||||
*/
|
|
||||||
public void acceptElaboratedForewardDeclaration(IASTElaboratedTypeSpecifier elaboratedType)
|
|
||||||
{
|
|
||||||
forewardDecls.add( elaboratedType );
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public List getForewardDecls()
|
|
||||||
{
|
|
||||||
return forewardDecls;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
protected Iterator getDeclarations( IASTScope scope )
|
|
||||||
{
|
|
||||||
Scope s = callback.lookup( scope );
|
|
||||||
if( s != null )
|
|
||||||
return s.getDeclarations();
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
protected FullParseCallback callback;
|
|
||||||
|
|
||||||
protected IASTScope parse( String code )throws ParserException
|
|
||||||
{
|
|
||||||
callback = new FullParseCallback();
|
|
||||||
IParser parser = ParserFactory.createParser(
|
|
||||||
ParserFactory.createScanner( new StringReader( code ), "test-code", new ScannerInfo(),
|
|
||||||
ParserMode.COMPLETE_PARSE, callback ), callback, ParserMode.COMPLETE_PARSE
|
|
||||||
);
|
|
||||||
if( ! parser.parse() ) throw new ParserException( "FAILURE");
|
|
||||||
return callback.getCompilationUnit();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param a
|
* @param a
|
||||||
*/
|
*/
|
||||||
public CompleteParseASTTest(String a)
|
public CompleteParseASTTest(String a)
|
||||||
|
@ -1000,4 +504,12 @@ public class CompleteParseASTTest extends TestCase
|
||||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), variableA );
|
assertEquals( ((IASTReference)references.next()).getReferencedElement(), variableA );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testBug41520() throws Exception
|
||||||
|
{
|
||||||
|
Iterator i = parse( "const int x = 666, y( x );").getDeclarations();
|
||||||
|
IASTVariable variableX = (IASTVariable)i.next();
|
||||||
|
IASTVariable variableY = (IASTVariable)i.next();
|
||||||
|
assertFalse( i.hasNext() );
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,546 @@
|
||||||
|
/**********************************************************************
|
||||||
|
* Copyright (c) 2002,2003 Rational Software Corporation and others.
|
||||||
|
* All rights reserved. This program and the accompanying materials
|
||||||
|
* are made available under the terms of the Common Public License v0.5
|
||||||
|
* which accompanies this distribution, and is available at
|
||||||
|
* http://www.eclipse.org/legal/cpl-v05.html
|
||||||
|
*
|
||||||
|
* Contributors:
|
||||||
|
* IBM Rational Software - Initial API and implementation
|
||||||
|
***********************************************************************/
|
||||||
|
package org.eclipse.cdt.core.parser.tests;
|
||||||
|
|
||||||
|
import java.io.StringReader;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Hashtable;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Stack;
|
||||||
|
|
||||||
|
import junit.framework.TestCase;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.core.parser.IParser;
|
||||||
|
import org.eclipse.cdt.core.parser.IProblem;
|
||||||
|
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
|
||||||
|
import org.eclipse.cdt.core.parser.ParserFactory;
|
||||||
|
import org.eclipse.cdt.core.parser.ParserMode;
|
||||||
|
import org.eclipse.cdt.core.parser.ast.IASTASMDefinition;
|
||||||
|
import org.eclipse.cdt.core.parser.ast.IASTAbstractTypeSpecifierDeclaration;
|
||||||
|
import org.eclipse.cdt.core.parser.ast.IASTClassReference;
|
||||||
|
import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier;
|
||||||
|
import org.eclipse.cdt.core.parser.ast.IASTCompilationUnit;
|
||||||
|
import org.eclipse.cdt.core.parser.ast.IASTDeclaration;
|
||||||
|
import org.eclipse.cdt.core.parser.ast.IASTElaboratedTypeSpecifier;
|
||||||
|
import org.eclipse.cdt.core.parser.ast.IASTEnumerationReference;
|
||||||
|
import org.eclipse.cdt.core.parser.ast.IASTEnumerationSpecifier;
|
||||||
|
import org.eclipse.cdt.core.parser.ast.IASTField;
|
||||||
|
import org.eclipse.cdt.core.parser.ast.IASTFieldReference;
|
||||||
|
import org.eclipse.cdt.core.parser.ast.IASTFunction;
|
||||||
|
import org.eclipse.cdt.core.parser.ast.IASTFunctionReference;
|
||||||
|
import org.eclipse.cdt.core.parser.ast.IASTInclusion;
|
||||||
|
import org.eclipse.cdt.core.parser.ast.IASTLinkageSpecification;
|
||||||
|
import org.eclipse.cdt.core.parser.ast.IASTMacro;
|
||||||
|
import org.eclipse.cdt.core.parser.ast.IASTMethod;
|
||||||
|
import org.eclipse.cdt.core.parser.ast.IASTMethodReference;
|
||||||
|
import org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition;
|
||||||
|
import org.eclipse.cdt.core.parser.ast.IASTNamespaceReference;
|
||||||
|
import org.eclipse.cdt.core.parser.ast.IASTScope;
|
||||||
|
import org.eclipse.cdt.core.parser.ast.IASTTemplateDeclaration;
|
||||||
|
import org.eclipse.cdt.core.parser.ast.IASTTemplateInstantiation;
|
||||||
|
import org.eclipse.cdt.core.parser.ast.IASTTemplateSpecialization;
|
||||||
|
import org.eclipse.cdt.core.parser.ast.IASTTypedefDeclaration;
|
||||||
|
import org.eclipse.cdt.core.parser.ast.IASTTypedefReference;
|
||||||
|
import org.eclipse.cdt.core.parser.ast.IASTUsingDeclaration;
|
||||||
|
import org.eclipse.cdt.core.parser.ast.IASTUsingDirective;
|
||||||
|
import org.eclipse.cdt.core.parser.ast.IASTVariable;
|
||||||
|
import org.eclipse.cdt.core.parser.ast.IASTVariableReference;
|
||||||
|
import org.eclipse.cdt.internal.core.parser.ParserException;
|
||||||
|
import org.eclipse.cdt.internal.core.parser.ScannerInfo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author jcamelon
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class CompleteParseBaseTest extends TestCase
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public CompleteParseBaseTest()
|
||||||
|
{
|
||||||
|
super();
|
||||||
|
// TODO Auto-generated constructor stub
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @param name
|
||||||
|
*/
|
||||||
|
public CompleteParseBaseTest(String name)
|
||||||
|
{
|
||||||
|
super(name);
|
||||||
|
// TODO Auto-generated constructor stub
|
||||||
|
}
|
||||||
|
public static class Scope implements IASTScope
|
||||||
|
{
|
||||||
|
private List decls = new ArrayList();
|
||||||
|
private final IASTScope scope;
|
||||||
|
public Scope( IASTScope scope )
|
||||||
|
{
|
||||||
|
this.scope = scope;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addDeclaration( IASTDeclaration d )
|
||||||
|
{
|
||||||
|
decls.add(d);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Iterator getDeclarations()
|
||||||
|
{
|
||||||
|
return decls.iterator();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public IASTScope getScope()
|
||||||
|
{
|
||||||
|
|
||||||
|
return scope;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public static class FullParseCallback implements ISourceElementRequestor
|
||||||
|
{
|
||||||
|
private List references = new ArrayList();
|
||||||
|
private List forewardDecls = new ArrayList();
|
||||||
|
private Stack inclusions = new Stack();
|
||||||
|
private Scope compilationUnit;
|
||||||
|
|
||||||
|
public IASTScope getCompilationUnit()
|
||||||
|
{
|
||||||
|
return compilationUnit;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptVariable(org.eclipse.cdt.core.parser.ast.IASTVariable)
|
||||||
|
*/
|
||||||
|
public void acceptVariable(IASTVariable variable)
|
||||||
|
{
|
||||||
|
getCurrentScope().addDeclaration( variable );
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptFunctionDeclaration(org.eclipse.cdt.core.parser.ast.IASTFunction)
|
||||||
|
*/
|
||||||
|
public void acceptFunctionDeclaration(IASTFunction function)
|
||||||
|
{
|
||||||
|
getCurrentScope().addDeclaration(function);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptUsingDirective(org.eclipse.cdt.core.parser.ast.IASTUsingDirective)
|
||||||
|
*/
|
||||||
|
public void acceptUsingDirective(IASTUsingDirective usageDirective)
|
||||||
|
{
|
||||||
|
getCurrentScope().addDeclaration(usageDirective);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptUsingDeclaration(org.eclipse.cdt.core.parser.ast.IASTUsingDeclaration)
|
||||||
|
*/
|
||||||
|
public void acceptUsingDeclaration(IASTUsingDeclaration usageDeclaration)
|
||||||
|
{
|
||||||
|
getCurrentScope().addDeclaration(usageDeclaration);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptASMDefinition(org.eclipse.cdt.core.parser.ast.IASTASMDefinition)
|
||||||
|
*/
|
||||||
|
public void acceptASMDefinition(IASTASMDefinition asmDefinition)
|
||||||
|
{
|
||||||
|
getCurrentScope().addDeclaration(asmDefinition);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptTypedefDeclaration(org.eclipse.cdt.core.parser.ast.IASTTypedefDeclaration)
|
||||||
|
*/
|
||||||
|
public void acceptTypedefDeclaration(IASTTypedefDeclaration typedef)
|
||||||
|
{
|
||||||
|
getCurrentScope().addDeclaration(typedef);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptEnumerationSpecifier(org.eclipse.cdt.core.parser.ast.IASTEnumerationSpecifier)
|
||||||
|
*/
|
||||||
|
public void acceptEnumerationSpecifier(IASTEnumerationSpecifier enumeration)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptAbstractTypeSpecDeclaration(org.eclipse.cdt.core.parser.ast.IASTAbstractTypeSpecifierDeclaration)
|
||||||
|
*/
|
||||||
|
public void acceptAbstractTypeSpecDeclaration(IASTAbstractTypeSpecifierDeclaration abstractDeclaration)
|
||||||
|
{
|
||||||
|
getCurrentScope().addDeclaration( abstractDeclaration );
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterFunctionBody(org.eclipse.cdt.core.parser.ast.IASTFunction)
|
||||||
|
*/
|
||||||
|
public void enterFunctionBody(IASTFunction function)
|
||||||
|
{
|
||||||
|
pushScope( function );
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitFunctionBody(org.eclipse.cdt.core.parser.ast.IASTFunction)
|
||||||
|
*/
|
||||||
|
public void exitFunctionBody(IASTFunction function)
|
||||||
|
{
|
||||||
|
popScope();
|
||||||
|
getCurrentScope().addDeclaration(function);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterCompilationUnit(org.eclipse.cdt.core.parser.ast.IASTCompilationUnit)
|
||||||
|
*/
|
||||||
|
public void enterCompilationUnit(IASTCompilationUnit compilationUnit)
|
||||||
|
{
|
||||||
|
pushScope( compilationUnit );
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterInclusion(org.eclipse.cdt.core.parser.ast.IASTInclusion)
|
||||||
|
*/
|
||||||
|
public void enterInclusion(IASTInclusion inclusion)
|
||||||
|
{
|
||||||
|
pushInclusion( inclusion );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param inclusion
|
||||||
|
*/
|
||||||
|
private void pushInclusion(IASTInclusion inclusion)
|
||||||
|
{
|
||||||
|
inclusions.push( inclusion );
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterNamespaceDefinition(org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition)
|
||||||
|
*/
|
||||||
|
public void enterNamespaceDefinition(IASTNamespaceDefinition namespaceDefinition)
|
||||||
|
{
|
||||||
|
pushScope( namespaceDefinition );
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#entesrClassSpecifier(org.eclipse.cdt.core.parser.ast.IASTClassSpecifier)
|
||||||
|
*/
|
||||||
|
public void enterClassSpecifier(IASTClassSpecifier classSpecification)
|
||||||
|
{
|
||||||
|
pushScope( classSpecification );
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterLinkageSpecification(org.eclipse.cdt.core.parser.ast.IASTLinkageSpecification)
|
||||||
|
*/
|
||||||
|
public void enterLinkageSpecification(IASTLinkageSpecification linkageSpec)
|
||||||
|
{
|
||||||
|
pushScope( linkageSpec );
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterTemplateDeclaration(org.eclipse.cdt.core.parser.ast.IASTTemplateDeclaration)
|
||||||
|
*/
|
||||||
|
public void enterTemplateDeclaration(IASTTemplateDeclaration declaration)
|
||||||
|
{
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterTemplateSpecialization(org.eclipse.cdt.core.parser.ast.IASTTemplateSpecialization)
|
||||||
|
*/
|
||||||
|
public void enterTemplateSpecialization(IASTTemplateSpecialization specialization)
|
||||||
|
{
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterTemplateInstantiation(org.eclipse.cdt.core.parser.ast.IASTTemplateInstantiation)
|
||||||
|
*/
|
||||||
|
public void enterTemplateInstantiation(IASTTemplateInstantiation instantiation)
|
||||||
|
{
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptMethodDeclaration(org.eclipse.cdt.core.parser.ast.IASTMethod)
|
||||||
|
*/
|
||||||
|
public void acceptMethodDeclaration(IASTMethod method)
|
||||||
|
{
|
||||||
|
getCurrentScope().addDeclaration( method );
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterMethodBody(org.eclipse.cdt.core.parser.ast.IASTMethod)
|
||||||
|
*/
|
||||||
|
public void enterMethodBody(IASTMethod method)
|
||||||
|
{
|
||||||
|
pushScope(method);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitMethodBody(org.eclipse.cdt.core.parser.ast.IASTMethod)
|
||||||
|
*/
|
||||||
|
public void exitMethodBody(IASTMethod method)
|
||||||
|
{
|
||||||
|
popScope();
|
||||||
|
getCurrentScope().addDeclaration(method);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptField(org.eclipse.cdt.core.parser.ast.IASTField)
|
||||||
|
*/
|
||||||
|
public void acceptField(IASTField field)
|
||||||
|
{
|
||||||
|
getCurrentScope().addDeclaration(field);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitTemplateDeclaration(org.eclipse.cdt.core.parser.ast.IASTTemplateDeclaration)
|
||||||
|
*/
|
||||||
|
public void exitTemplateDeclaration(IASTTemplateDeclaration declaration)
|
||||||
|
{
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitTemplateSpecialization(org.eclipse.cdt.core.parser.ast.IASTTemplateSpecialization)
|
||||||
|
*/
|
||||||
|
public void exitTemplateSpecialization(IASTTemplateSpecialization specialization)
|
||||||
|
{
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitTemplateExplicitInstantiation(org.eclipse.cdt.core.parser.ast.IASTTemplateInstantiation)
|
||||||
|
*/
|
||||||
|
public void exitTemplateExplicitInstantiation(IASTTemplateInstantiation instantiation)
|
||||||
|
{
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitLinkageSpecification(org.eclipse.cdt.core.parser.ast.IASTLinkageSpecification)
|
||||||
|
*/
|
||||||
|
public void exitLinkageSpecification(IASTLinkageSpecification linkageSpec)
|
||||||
|
{
|
||||||
|
popScope();
|
||||||
|
getCurrentScope().addDeclaration(linkageSpec);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitClassSpecifier(org.eclipse.cdt.core.parser.ast.IASTClassSpecifier)
|
||||||
|
*/
|
||||||
|
public void exitClassSpecifier(IASTClassSpecifier classSpecification)
|
||||||
|
{
|
||||||
|
popScope();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitNamespaceDefinition(org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition)
|
||||||
|
*/
|
||||||
|
public void exitNamespaceDefinition(IASTNamespaceDefinition namespaceDefinition)
|
||||||
|
{
|
||||||
|
popScope();
|
||||||
|
getCurrentScope().addDeclaration(namespaceDefinition);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitInclusion(org.eclipse.cdt.core.parser.ast.IASTInclusion)
|
||||||
|
*/
|
||||||
|
public void exitInclusion(IASTInclusion inclusion)
|
||||||
|
{
|
||||||
|
popInclusion();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private void popInclusion()
|
||||||
|
{
|
||||||
|
inclusions.pop();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitCompilationUnit(org.eclipse.cdt.core.parser.ast.IASTCompilationUnit)
|
||||||
|
*/
|
||||||
|
public void exitCompilationUnit(IASTCompilationUnit compilationUnit)
|
||||||
|
{
|
||||||
|
this.compilationUnit = popScope();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private Stack scopes = new Stack();
|
||||||
|
protected Scope getCurrentScope()
|
||||||
|
{
|
||||||
|
return (Scope)scopes.peek();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected Scope popScope()
|
||||||
|
{
|
||||||
|
Scope s = (Scope)scopes.pop();
|
||||||
|
h.put( s.getScope(), s );
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void pushScope( IASTScope scope )
|
||||||
|
{
|
||||||
|
scopes.push( new Scope( scope ));
|
||||||
|
}
|
||||||
|
|
||||||
|
Hashtable h = new Hashtable();
|
||||||
|
|
||||||
|
public Scope lookup( IASTScope s)
|
||||||
|
{
|
||||||
|
return (Scope)h.get(s);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptProblem(org.eclipse.cdt.core.parser.IProblem)
|
||||||
|
*/
|
||||||
|
public void acceptProblem(IProblem problem)
|
||||||
|
{
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptMacro(org.eclipse.cdt.core.parser.ast.IASTMacro)
|
||||||
|
*/
|
||||||
|
public void acceptMacro(IASTMacro macro)
|
||||||
|
{
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptClassReference(org.eclipse.cdt.core.parser.ast.IASTClassReference)
|
||||||
|
*/
|
||||||
|
public void acceptClassReference(IASTClassReference reference)
|
||||||
|
{
|
||||||
|
references.add( reference );
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptTypedefReference(org.eclipse.cdt.core.parser.ast.IASTTypedefReference)
|
||||||
|
*/
|
||||||
|
public void acceptTypedefReference(IASTTypedefReference reference)
|
||||||
|
{
|
||||||
|
references.add( reference );
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptNamespaceReference(org.eclipse.cdt.core.parser.ast.IASTNamespaceReference)
|
||||||
|
*/
|
||||||
|
public void acceptNamespaceReference(IASTNamespaceReference reference)
|
||||||
|
{
|
||||||
|
references.add( reference );
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptEnumerationReference(org.eclipse.cdt.core.parser.ast.IASTEnumerationReference)
|
||||||
|
*/
|
||||||
|
public void acceptEnumerationReference(IASTEnumerationReference reference)
|
||||||
|
{
|
||||||
|
references.add( reference );
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptVariableReference(org.eclipse.cdt.core.parser.ast.IASTVariableReference)
|
||||||
|
*/
|
||||||
|
public void acceptVariableReference(IASTVariableReference reference)
|
||||||
|
{
|
||||||
|
references.add( reference );
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptFunctionReference(org.eclipse.cdt.core.parser.ast.IASTFunctionReference)
|
||||||
|
*/
|
||||||
|
public void acceptFunctionReference(IASTFunctionReference reference)
|
||||||
|
{
|
||||||
|
references.add( reference );
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptFieldReference(org.eclipse.cdt.core.parser.ast.IASTFieldReference)
|
||||||
|
*/
|
||||||
|
public void acceptFieldReference(IASTFieldReference reference)
|
||||||
|
{
|
||||||
|
references.add( reference );
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptMethodReference(org.eclipse.cdt.core.parser.ast.IASTMethodReference)
|
||||||
|
*/
|
||||||
|
public void acceptMethodReference(IASTMethodReference reference)
|
||||||
|
{
|
||||||
|
references.add( reference );
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public List getReferences()
|
||||||
|
{
|
||||||
|
return references;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptElaboratedForewardDeclaration(org.eclipse.cdt.core.parser.ast.IASTElaboratedTypeSpecifier)
|
||||||
|
*/
|
||||||
|
public void acceptElaboratedForewardDeclaration(IASTElaboratedTypeSpecifier elaboratedType)
|
||||||
|
{
|
||||||
|
forewardDecls.add( elaboratedType );
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public List getForewardDecls()
|
||||||
|
{
|
||||||
|
return forewardDecls;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
protected Iterator getDeclarations(IASTScope scope)
|
||||||
|
{
|
||||||
|
Scope s = callback.lookup( scope );
|
||||||
|
if( s != null )
|
||||||
|
return s.getDeclarations();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
protected FullParseCallback callback;
|
||||||
|
protected IASTScope parse(String code) throws ParserException
|
||||||
|
{
|
||||||
|
callback = new FullParseCallback();
|
||||||
|
IParser parser = ParserFactory.createParser(
|
||||||
|
ParserFactory.createScanner( new StringReader( code ), "test-code", new ScannerInfo(),
|
||||||
|
ParserMode.COMPLETE_PARSE, callback ), callback, ParserMode.COMPLETE_PARSE
|
||||||
|
);
|
||||||
|
if( ! parser.parse() ) throw new ParserException( "FAILURE");
|
||||||
|
return callback.getCompilationUnit();
|
||||||
|
}
|
||||||
|
}
|
|
@ -1769,4 +1769,10 @@ public class QuickParseASTTests extends BaseASTTest
|
||||||
parse( "X sPassed(-1)");
|
parse( "X sPassed(-1)");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testBug39526() throws Exception
|
||||||
|
{
|
||||||
|
parse("UnitList unit_list (String(\"keV\"));");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
|
@ -27,7 +27,6 @@ import org.eclipse.cdt.core.model.tests.BinaryTests;
|
||||||
import org.eclipse.cdt.core.model.tests.ElementDeltaTests;
|
import org.eclipse.cdt.core.model.tests.ElementDeltaTests;
|
||||||
import org.eclipse.cdt.core.model.tests.WorkingCopyTests;
|
import org.eclipse.cdt.core.model.tests.WorkingCopyTests;
|
||||||
import org.eclipse.cdt.core.parser.failedTests.ASTFailedTests;
|
import org.eclipse.cdt.core.parser.failedTests.ASTFailedTests;
|
||||||
import org.eclipse.cdt.core.parser.failedTests.FullParseFailedTests;
|
|
||||||
import org.eclipse.cdt.core.parser.failedTests.LokiFailures;
|
import org.eclipse.cdt.core.parser.failedTests.LokiFailures;
|
||||||
import org.eclipse.cdt.core.parser.failedTests.STLFailedTests;
|
import org.eclipse.cdt.core.parser.failedTests.STLFailedTests;
|
||||||
import org.eclipse.cdt.core.parser.tests.ParserTestSuite;
|
import org.eclipse.cdt.core.parser.tests.ParserTestSuite;
|
||||||
|
@ -103,7 +102,6 @@ public class AutomatedIntegrationSuite extends TestSuite
|
||||||
suite.addTestSuite(LokiFailures.class);
|
suite.addTestSuite(LokiFailures.class);
|
||||||
suite.addTestSuite(STLFailedTests.class);
|
suite.addTestSuite(STLFailedTests.class);
|
||||||
suite.addTestSuite(CModelElementsFailedTests.class);
|
suite.addTestSuite(CModelElementsFailedTests.class);
|
||||||
suite.addTest(FullParseFailedTests.suite());
|
|
||||||
|
|
||||||
// Last test to trigger report generation
|
// Last test to trigger report generation
|
||||||
suite.addTest(suite.new GenerateReport("generateReport"));
|
suite.addTest(suite.new GenerateReport("generateReport"));
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
|
2003-08-25 John Camelon
|
||||||
|
Fixed bug39526 - Parser doesn't handle initializers correctly.
|
||||||
|
Fixed bug41520 - FullParse : Constructor Initializer is mistaken as function prototype
|
||||||
|
|
||||||
2003-08-25 John Camelon
|
2003-08-25 John Camelon
|
||||||
Fixed Bug 39530 - More problems with initializers.
|
Fixed Bug 39530 - More problems with initializers.
|
||||||
Fixed Bug 37424 - Crash when opening big files
|
Fixed Bug 37424 - Crash when opening big files
|
||||||
|
|
|
@ -667,27 +667,47 @@ public class Parser implements IParser
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
default :
|
default :
|
||||||
IToken mark = mark();
|
simpleDeclarationStrategyUnion(scope, ownerTemplate);
|
||||||
try
|
}
|
||||||
{
|
}
|
||||||
simpleDeclaration(
|
protected void simpleDeclarationStrategyUnion(
|
||||||
true,
|
IASTScope scope,
|
||||||
false,
|
IASTTemplate ownerTemplate)
|
||||||
scope,
|
throws EndOfFile, Backtrack
|
||||||
ownerTemplate);
|
{
|
||||||
// try it first with the original strategy
|
IToken mark = mark();
|
||||||
}
|
try
|
||||||
catch (Backtrack bt)
|
{
|
||||||
{
|
simpleDeclaration(
|
||||||
// did not work
|
SimpleDeclarationStrategy.TRY_CONSTRUCTOR,
|
||||||
backup(mark);
|
false,
|
||||||
simpleDeclaration(
|
scope,
|
||||||
false,
|
ownerTemplate);
|
||||||
false,
|
// try it first with the original strategy
|
||||||
scope,
|
}
|
||||||
ownerTemplate);
|
catch (Backtrack bt)
|
||||||
// try it again with the second strategy
|
{
|
||||||
}
|
// did not work
|
||||||
|
backup(mark);
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
simpleDeclaration(
|
||||||
|
SimpleDeclarationStrategy.TRY_FUNCTION,
|
||||||
|
false,
|
||||||
|
scope,
|
||||||
|
ownerTemplate);
|
||||||
|
}
|
||||||
|
catch( Backtrack bt2 )
|
||||||
|
{
|
||||||
|
backup( mark );
|
||||||
|
|
||||||
|
simpleDeclaration(
|
||||||
|
SimpleDeclarationStrategy.TRY_VARIABLE,
|
||||||
|
false,
|
||||||
|
scope,
|
||||||
|
ownerTemplate);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
|
@ -784,7 +804,7 @@ public class Parser implements IParser
|
||||||
* @throws Backtrack request a backtrack
|
* @throws Backtrack request a backtrack
|
||||||
*/
|
*/
|
||||||
protected void simpleDeclaration(
|
protected void simpleDeclaration(
|
||||||
boolean tryConstructor,
|
SimpleDeclarationStrategy strategy,
|
||||||
boolean forKR,
|
boolean forKR,
|
||||||
IASTScope scope,
|
IASTScope scope,
|
||||||
IASTTemplate ownerTemplate)
|
IASTTemplate ownerTemplate)
|
||||||
|
@ -793,7 +813,7 @@ public class Parser implements IParser
|
||||||
DeclarationWrapper sdw =
|
DeclarationWrapper sdw =
|
||||||
new DeclarationWrapper(scope, LA(1).getOffset(), ownerTemplate);
|
new DeclarationWrapper(scope, LA(1).getOffset(), ownerTemplate);
|
||||||
|
|
||||||
declSpecifierSeq(false, tryConstructor, sdw, forKR );
|
declSpecifierSeq(false, strategy == SimpleDeclarationStrategy.TRY_CONSTRUCTOR, sdw, forKR );
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (sdw.getTypeSpecifier() == null && sdw.getSimpleType() != IASTSimpleTypeSpecifier.Type.UNSPECIFIED )
|
if (sdw.getTypeSpecifier() == null && sdw.getSimpleType() != IASTSimpleTypeSpecifier.Type.UNSPECIFIED )
|
||||||
|
@ -814,27 +834,17 @@ public class Parser implements IParser
|
||||||
|
|
||||||
Declarator declarator = null;
|
Declarator declarator = null;
|
||||||
if (LT(1) != IToken.tSEMI)
|
if (LT(1) != IToken.tSEMI)
|
||||||
try
|
{
|
||||||
{
|
declarator = initDeclarator(sdw, forKR, strategy);
|
||||||
declarator = initDeclarator(sdw, forKR);
|
|
||||||
|
|
||||||
while (LT(1) == IToken.tCOMMA)
|
while (LT(1) == IToken.tCOMMA)
|
||||||
{
|
|
||||||
consume();
|
|
||||||
try
|
|
||||||
{
|
|
||||||
initDeclarator(sdw, forKR);
|
|
||||||
}
|
|
||||||
catch (Backtrack b)
|
|
||||||
{
|
|
||||||
throw b;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Backtrack b)
|
|
||||||
{
|
{
|
||||||
// allowed to be empty
|
consume();
|
||||||
|
initDeclarator(sdw, forKR, strategy);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
boolean done = false;
|
boolean done = false;
|
||||||
boolean hasFunctionBody = false;
|
boolean hasFunctionBody = false;
|
||||||
switch (LT(1))
|
switch (LT(1))
|
||||||
|
@ -1027,19 +1037,12 @@ public class Parser implements IParser
|
||||||
sdw.isUnsigned(), sdw.isTypeNamed()));
|
sdw.isUnsigned(), sdw.isTypeNamed()));
|
||||||
}
|
}
|
||||||
catch( ASTSemanticException se ) {
|
catch( ASTSemanticException se ) {
|
||||||
failParse();
|
|
||||||
throw backtrack;
|
throw backtrack;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (LT(1) != IToken.tSEMI)
|
if (LT(1) != IToken.tSEMI)
|
||||||
try
|
initDeclarator(sdw, false, SimpleDeclarationStrategy.TRY_FUNCTION );
|
||||||
{
|
|
||||||
initDeclarator(sdw, false);
|
|
||||||
}
|
|
||||||
catch (Backtrack b)
|
|
||||||
{
|
|
||||||
// allowed to be empty
|
|
||||||
}
|
|
||||||
if (current == LA(1))
|
if (current == LA(1))
|
||||||
throw backtrack;
|
throw backtrack;
|
||||||
collection.addParameter(sdw);
|
collection.addParameter(sdw);
|
||||||
|
@ -1713,10 +1716,10 @@ public class Parser implements IParser
|
||||||
* @throws Backtrack request a backtrack
|
* @throws Backtrack request a backtrack
|
||||||
*/
|
*/
|
||||||
protected Declarator initDeclarator(
|
protected Declarator initDeclarator(
|
||||||
DeclarationWrapper sdw, boolean forKR )
|
DeclarationWrapper sdw, boolean forKR, SimpleDeclarationStrategy strategy )
|
||||||
throws Backtrack
|
throws Backtrack
|
||||||
{
|
{
|
||||||
Declarator d = declarator(sdw, sdw.getScope(), forKR );
|
Declarator d = declarator(sdw, sdw.getScope(), forKR, strategy );
|
||||||
// handle = initializerClause
|
// handle = initializerClause
|
||||||
if (LT(1) == IToken.tASSIGN)
|
if (LT(1) == IToken.tASSIGN)
|
||||||
{
|
{
|
||||||
|
@ -1811,7 +1814,7 @@ public class Parser implements IParser
|
||||||
* @throws Backtrack request a backtrack
|
* @throws Backtrack request a backtrack
|
||||||
*/
|
*/
|
||||||
protected Declarator declarator(
|
protected Declarator declarator(
|
||||||
IDeclaratorOwner owner, IASTScope scope, boolean forKR )
|
IDeclaratorOwner owner, IASTScope scope, boolean forKR, SimpleDeclarationStrategy strategy )
|
||||||
throws Backtrack
|
throws Backtrack
|
||||||
{
|
{
|
||||||
Declarator d = null;
|
Declarator d = null;
|
||||||
|
@ -1825,7 +1828,7 @@ public class Parser implements IParser
|
||||||
if (LT(1) == IToken.tLPAREN)
|
if (LT(1) == IToken.tLPAREN)
|
||||||
{
|
{
|
||||||
consume();
|
consume();
|
||||||
declarator(d, scope, forKR);
|
declarator(d, scope, forKR, strategy );
|
||||||
consume(IToken.tRPAREN);
|
consume(IToken.tRPAREN);
|
||||||
}
|
}
|
||||||
else if (LT(1) == IToken.t_operator)
|
else if (LT(1) == IToken.t_operator)
|
||||||
|
@ -1875,7 +1878,7 @@ public class Parser implements IParser
|
||||||
throw backtrack;
|
throw backtrack;
|
||||||
|
|
||||||
// temporary fix for initializer/function declaration ambiguity
|
// temporary fix for initializer/function declaration ambiguity
|
||||||
if (!LA(2).looksLikeExpression() )
|
if (!LA(2).looksLikeExpression() && strategy != SimpleDeclarationStrategy.TRY_VARIABLE )
|
||||||
{
|
{
|
||||||
// parameterDeclarationClause
|
// parameterDeclarationClause
|
||||||
d.setIsFunction(true);
|
d.setIsFunction(true);
|
||||||
|
@ -2018,7 +2021,7 @@ public class Parser implements IParser
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
simpleDeclaration(
|
simpleDeclaration(
|
||||||
false,
|
null,
|
||||||
true,
|
true,
|
||||||
sdw.getScope(),
|
sdw.getScope(),
|
||||||
sdw.getOwnerTemplate());
|
sdw.getOwnerTemplate());
|
||||||
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
/**********************************************************************
|
||||||
|
* Copyright (c) 2002,2003 Rational Software Corporation and others.
|
||||||
|
* All rights reserved. This program and the accompanying materials
|
||||||
|
* are made available under the terms of the Common Public License v0.5
|
||||||
|
* which accompanies this distribution, and is available at
|
||||||
|
* http://www.eclipse.org/legal/cpl-v05.html
|
||||||
|
*
|
||||||
|
* Contributors:
|
||||||
|
* IBM Rational Software - Initial API and implementation
|
||||||
|
***********************************************************************/
|
||||||
|
package org.eclipse.cdt.internal.core.parser;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.core.parser.Enum;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author jcamelon
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class SimpleDeclarationStrategy extends Enum
|
||||||
|
{
|
||||||
|
public static final SimpleDeclarationStrategy TRY_CONSTRUCTOR = new SimpleDeclarationStrategy( 1 );
|
||||||
|
public static final SimpleDeclarationStrategy TRY_FUNCTION = new SimpleDeclarationStrategy( 2 );
|
||||||
|
public static final SimpleDeclarationStrategy TRY_VARIABLE = new SimpleDeclarationStrategy( 3 );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param enumValue
|
||||||
|
*/
|
||||||
|
public SimpleDeclarationStrategy(int enumValue)
|
||||||
|
{
|
||||||
|
super(enumValue);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue