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

Updated Factory infrastructure, constructors, etc.

Introduced Preprocessor class for transitive closure calc. client.
This commit is contained in:
John Camelon 2003-06-23 18:05:31 +00:00
parent b8059d7f27
commit f61006c9fe
38 changed files with 686 additions and 227 deletions

View file

@ -1,3 +1,6 @@
2003-06-23 John Camelon
Factory/constructor signature updates.
2003-06-17 Victor Mozgin
Added MacroTests.java (invocation in AllCoreTests).
Added MacroTests.c to resources.

View file

@ -14,6 +14,7 @@ package org.eclipse.cdt.core.parser.tests;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStreamReader;
import java.util.NoSuchElementException;
import java.util.StringTokenizer;
@ -21,7 +22,8 @@ import junit.framework.AssertionFailedError;
import junit.framework.Test;
import org.eclipse.cdt.core.parser.IParser;
import org.eclipse.cdt.internal.core.parser.Parser;
import org.eclipse.cdt.core.parser.ParserFactory;
import org.eclipse.cdt.core.parser.ParserMode;
import org.eclipse.core.runtime.Path;
@ -51,12 +53,8 @@ public class AutomatedTest extends AutomatedFramework {
FileInputStream stream = new FileInputStream( file );
String filePath = file.getCanonicalPath();
String nature = (String)natures.get( filePath );
boolean cppNature = nature.equalsIgnoreCase("cpp");
parser = new Parser( stream, nullCallback, true);
parser.setCppNature( cppNature );
parser = ParserFactory.createParser( ParserFactory.createScanner( new InputStreamReader (stream), filePath, null, null, ParserMode.QUICK_PARSE ), nullCallback, ParserMode.QUICK_PARSE);
parser.setCppNature( ((String)natures.get( filePath )).equalsIgnoreCase("cpp") );
parser.mapLineNumbers(true);
assertTrue( parser.parse() );

View file

@ -10,12 +10,15 @@
******************************************************************************/
package org.eclipse.cdt.core.parser.tests;
import java.io.StringReader;
import junit.framework.TestCase;
import org.eclipse.cdt.core.parser.IParser;
import org.eclipse.cdt.core.parser.ParserFactory;
import org.eclipse.cdt.core.parser.ParserMode;
import org.eclipse.cdt.internal.core.dom.DOMBuilder;
import org.eclipse.cdt.internal.core.dom.TranslationUnit;
import org.eclipse.cdt.internal.core.parser.Parser;
import org.eclipse.cdt.internal.core.parser.ParserException;
/**
@ -36,7 +39,8 @@ public class BaseDOMTest extends TestCase {
public TranslationUnit parse(String code, boolean quickParse, boolean throwOnError ) throws Exception {
DOMBuilder domBuilder = new DOMBuilder();
IParser parser = new Parser(code, domBuilder, quickParse );
ParserMode mode = quickParse ? ParserMode.QUICK_PARSE : ParserMode.COMPLETE_PARSE;
IParser parser = ParserFactory.createParser(ParserFactory.createScanner( new StringReader( code ), null, null, null, mode ), domBuilder, mode );
if( ! parser.parse() )
if( throwOnError ) throw new ParserException( "Parse failure" );
else domBuilder.getTranslationUnit().setParseSuccessful( false );

View file

@ -15,10 +15,11 @@ import java.io.StringReader;
import junit.framework.TestCase;
import org.eclipse.cdt.core.parser.IScanner;
import org.eclipse.cdt.core.parser.IToken;
import org.eclipse.cdt.core.parser.ParserFactory;
import org.eclipse.cdt.core.parser.ScannerException;
import org.eclipse.cdt.internal.core.parser.Parser;
import org.eclipse.cdt.internal.core.parser.Scanner;
/**
* @author jcamelon
@ -26,7 +27,7 @@ import org.eclipse.cdt.internal.core.parser.Scanner;
*/
public class BaseScannerTest extends TestCase {
protected Scanner scanner;
protected IScanner scanner;
public BaseScannerTest( String x )
{
@ -35,8 +36,7 @@ public class BaseScannerTest extends TestCase {
public void initializeScanner(String input)
{
scanner= new Scanner();
scanner.initialize( new StringReader(input),"TEXT");
scanner= ParserFactory.createScanner( new StringReader(input),"TEXT", null, null, null );
}
public int fullyTokenize() throws Exception

View file

@ -1,12 +1,14 @@
package org.eclipse.cdt.core.parser.tests;
import java.io.StringReader;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
import org.eclipse.cdt.core.parser.IParser;
import org.eclipse.cdt.core.parser.ParserFactory;
import org.eclipse.cdt.internal.core.parser.ExpressionEvaluator;
import org.eclipse.cdt.internal.core.parser.Parser;
public class ExprEvalTest extends TestCase {
@ -20,7 +22,7 @@ public class ExprEvalTest extends TestCase {
public void runTest(String code, int expectedValue) throws Exception {
ExpressionEvaluator evaluator = new ExpressionEvaluator();
IParser parser = new Parser(code, evaluator);
IParser parser = ParserFactory.createParser(ParserFactory.createScanner( new StringReader( code ), null, null, null, null ), evaluator, null);
parser.expression(null);
assertEquals(expectedValue, ((Integer)evaluator.getResult()).intValue());
}

View file

@ -15,13 +15,16 @@ import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;
import java.util.NoSuchElementException;
import java.util.StringTokenizer;
import junit.framework.Test;
import org.eclipse.cdt.internal.core.parser.Parser;
import org.eclipse.cdt.core.parser.IParser;
import org.eclipse.cdt.core.parser.ParserFactory;
import org.eclipse.cdt.core.parser.ParserMode;
import org.eclipse.core.runtime.Path;
/**
@ -234,7 +237,8 @@ public class FractionalAutomatedTest extends AutomatedFramework {
public void run(){
try{
result = null;
Parser parser = new Parser( code, nullCallback, true);
IParser parser = ParserFactory.createParser(
ParserFactory.createScanner( new StringReader( code ), null, null, null, ParserMode.QUICK_PARSE ), nullCallback, ParserMode.QUICK_PARSE);
parser.setCppNature( cppNature );
parser.mapLineNumbers(true);
parser.parse();

View file

@ -13,14 +13,17 @@ package org.eclipse.cdt.core.parser.tests;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.Reader;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.util.List;
import junit.framework.TestCase;
import org.eclipse.cdt.core.parser.IParser;
import org.eclipse.cdt.core.parser.IScanner;
import org.eclipse.cdt.core.parser.IToken;
import org.eclipse.cdt.core.parser.ParserFactory;
import org.eclipse.cdt.core.parser.ParserMode;
import org.eclipse.cdt.internal.core.dom.ClassSpecifier;
import org.eclipse.cdt.internal.core.dom.DOMBuilder;
import org.eclipse.cdt.internal.core.dom.EnumerationSpecifier;
@ -29,7 +32,6 @@ import org.eclipse.cdt.internal.core.dom.NamespaceDefinition;
import org.eclipse.cdt.internal.core.dom.SimpleDeclaration;
import org.eclipse.cdt.internal.core.dom.TemplateDeclaration;
import org.eclipse.cdt.internal.core.parser.Parser;
import org.eclipse.cdt.internal.core.parser.Scanner;
import org.eclipse.core.runtime.Path;
/**
@ -53,9 +55,7 @@ public class LineNumberTest extends TestCase {
public void testLineNos() throws Exception
{
Scanner scanner = new Scanner();
Reader reader = new StringReader( "int x = 3;\n foo\nfire\nfoe ");
scanner.initialize( reader, "string");
IScanner scanner = ParserFactory.createScanner( new StringReader( "int x = 3;\n foo\nfire\nfoe " ), "string", null, null, null );
scanner.mapLineNumbers(true);
IToken t = scanner.nextToken();
assertEquals( t.getType(), IToken.t_int );
@ -92,7 +92,7 @@ public class LineNumberTest extends TestCase {
public void testDOMLineNos() throws Exception
{
DOMBuilder domBuilder = new DOMBuilder();
IParser parser = new Parser( fileIn, domBuilder, true );
IParser parser = ParserFactory.createParser( ParserFactory.createScanner( new InputStreamReader( fileIn ), null, null, null, ParserMode.QUICK_PARSE ), domBuilder, ParserMode.QUICK_PARSE );
parser.mapLineNumbers(true);
if( ! parser.parse() ) fail( "Parse of file failed");

View file

@ -33,6 +33,7 @@ public class ParserTestSuite extends TestCase {
suite.addTestSuite(ParserSymbolTableTest.class);
suite.addTestSuite(CModelElementsTests.class);
suite.addTestSuite(MacroTests.class);
suite.addTestSuite( PreprocessorTest.class );
return suite;
}

View file

@ -0,0 +1,345 @@
/**********************************************************************
* 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.List;
import java.util.Map;
import junit.framework.TestCase;
import org.eclipse.cdt.core.parser.IPreprocessor;
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.IASTClassSpecifier;
import org.eclipse.cdt.core.parser.ast.IASTCompilationUnit;
import org.eclipse.cdt.core.parser.ast.IASTConstructor;
import org.eclipse.cdt.core.parser.ast.IASTEnumerationSpecifier;
import org.eclipse.cdt.core.parser.ast.IASTField;
import org.eclipse.cdt.core.parser.ast.IASTFunction;
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.IASTNamespaceDefinition;
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.IASTTypedef;
import org.eclipse.cdt.core.parser.ast.IASTUsingDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTUsingDirective;
import org.eclipse.cdt.core.parser.ast.IASTVariable;
/**
* @author jcamelon
*
*/
public class PreprocessorTest extends TestCase {
public static class Callback implements ISourceElementRequestor
{
private List enteredInc = new ArrayList(), exitedInc = new ArrayList();
public boolean asExpected( int balance )
{
return( ( enteredInc.size() - exitedInc.size() ) == balance );
}
/* (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#acceptVariable(org.eclipse.cdt.core.parser.ast.IASTVariable)
*/
public void acceptVariable(IASTVariable variable) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptFunctionDeclaration(org.eclipse.cdt.core.parser.ast.IASTFunction)
*/
public void acceptFunctionDeclaration(IASTFunction function) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptUsingDirective(org.eclipse.cdt.core.parser.ast.IASTUsingDirective)
*/
public void acceptUsingDirective(IASTUsingDirective usageDirective) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptUsingDeclaration(org.eclipse.cdt.core.parser.ast.IASTUsingDeclaration)
*/
public void acceptUsingDeclaration(IASTUsingDeclaration usageDeclaration) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptASMDefinition(org.eclipse.cdt.core.parser.ast.IASTASMDefinition)
*/
public void acceptASMDefinition(IASTASMDefinition asmDefinition) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptTypedef(org.eclipse.cdt.core.parser.ast.IASTTypedef)
*/
public void acceptTypedef(IASTTypedef typedef) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptEnumerationSpecifier(org.eclipse.cdt.core.parser.ast.IASTEnumerationSpecifier)
*/
public void acceptEnumerationSpecifier(IASTEnumerationSpecifier enumeration) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterFunctionBody(org.eclipse.cdt.core.parser.ast.IASTFunction)
*/
public void enterFunctionBody(IASTFunction function) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitFunctionBody(org.eclipse.cdt.core.parser.ast.IASTFunction)
*/
public void exitFunctionBody(IASTFunction function) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterCompilationUnit(org.eclipse.cdt.core.parser.ast.IASTCompilationUnit)
*/
public void enterCompilationUnit(IASTCompilationUnit compilationUnit) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterInclusion(org.eclipse.cdt.core.parser.ast.IASTInclusion)
*/
public void enterInclusion(IASTInclusion inclusion) {
enteredInc.add( inclusion );
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterNamespaceDefinition(org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition)
*/
public void enterNamespaceDefinition(IASTNamespaceDefinition namespaceDefinition) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterClassSpecifier(org.eclipse.cdt.core.parser.ast.IASTClassSpecifier)
*/
public void enterClassSpecifier(IASTClassSpecifier classSpecification) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterLinkageSpecification(org.eclipse.cdt.core.parser.ast.IASTLinkageSpecification)
*/
public void enterLinkageSpecification(IASTLinkageSpecification linkageSpec) {
// TODO Auto-generated method stub
}
/* (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#enterTemplateExplicitInstantiation(org.eclipse.cdt.core.parser.ast.IASTTemplateInstantiation)
*/
public void enterTemplateExplicitInstantiation(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) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterMethodBody(org.eclipse.cdt.core.parser.ast.IASTMethod)
*/
public void enterMethodBody(IASTMethod method) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitMethodBody(org.eclipse.cdt.core.parser.ast.IASTMethod)
*/
public void exitMethodBody(IASTMethod method) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptField(org.eclipse.cdt.core.parser.ast.IASTField)
*/
public void acceptField(IASTField field) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptConstructor(org.eclipse.cdt.core.parser.ast.IASTConstructor)
*/
public void acceptConstructor(IASTConstructor constructor) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptClassReference(org.eclipse.cdt.core.parser.ast.IASTClassSpecifier, int)
*/
public void acceptClassReference(IASTClassSpecifier classSpecifier, int referenceOffset) {
// TODO Auto-generated method stub
}
/* (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) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitClassSpecifier(org.eclipse.cdt.core.parser.ast.IASTClassSpecifier)
*/
public void exitClassSpecifier(IASTClassSpecifier classSpecification) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitNamespaceDefinition(org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition)
*/
public void exitNamespaceDefinition(IASTNamespaceDefinition namespaceDefinition) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitInclusion(org.eclipse.cdt.core.parser.ast.IASTInclusion)
*/
public void exitInclusion(IASTInclusion inclusion) {
exitedInc.add( inclusion );
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitCompilationUnit(org.eclipse.cdt.core.parser.ast.IASTCompilationUnit)
*/
public void exitCompilationUnit(IASTCompilationUnit compilationUnit) {
// TODO Auto-generated method stub
}
}
public PreprocessorTest( String name )
{
super( name );
}
public void testSimpleExample()
{
Callback c = new Callback();
IPreprocessor p = setupPreprocessor( "#include <stdio.h>",
null, // NOTE -- to demonstrate simple example, this should be set up with the info from the
// build properties
null, c );
p.process();
c.asExpected(0);
}
public IPreprocessor setupPreprocessor( String text, List includePaths, Map defns, ISourceElementRequestor rq )
{
IPreprocessor p = ParserFactory.createPreprocesor( new StringReader( text ), "test", defns, includePaths, ParserMode.COMPLETE_PARSE );
p.setRequestor( rq );
return p;
}
}

View file

@ -6,6 +6,7 @@ import java.util.List;
import org.eclipse.cdt.core.parser.IMacroDescriptor;
import org.eclipse.cdt.core.parser.IToken;
import org.eclipse.cdt.core.parser.ParserMode;
import org.eclipse.cdt.core.parser.ScannerException;
import org.eclipse.cdt.internal.core.parser.Parser;
import org.eclipse.cdt.internal.core.parser.Token;
@ -851,7 +852,7 @@ public class ScannerTestCase extends BaseScannerTest
try
{
initializeScanner( "#if X + 5 < 7\n int found = 1;\n#endif" );
scanner.setQuickScan( true );
scanner.setMode( ParserMode.QUICK_PARSE );
validateToken( IToken.t_int );
validateIdentifier( "found" );
validateToken( IToken.tASSIGN );
@ -868,7 +869,7 @@ public class ScannerTestCase extends BaseScannerTest
try
{
initializeScanner( "#if 0\n int error = 666;\n#endif" );
scanner.setQuickScan( true );
scanner.setMode( ParserMode.COMPLETE_PARSE );
validateEOF();
}
catch( ScannerException se )
@ -905,11 +906,7 @@ public class ScannerTestCase extends BaseScannerTest
initializeScanner("#include <Windows.h>");
prepareForWindowsH();
int count= fullyTokenize();
if (verbose)
System.out.println(
"For Windows.h, Scanner produced "
+ scanner.getCount()
+ " tokens");
validateBalance();
}
@ -919,11 +916,6 @@ public class ScannerTestCase extends BaseScannerTest
prepareForWindowsRH();
validateEOF();
validateBalance();
if (verbose)
System.out.println(
"For WinUser.rh, Scanner produced "
+ scanner.getCount()
+ " tokens");
}
}
catch (Exception e)

View file

@ -14,6 +14,7 @@ import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;
import java.util.NoSuchElementException;
import java.util.StringTokenizer;
@ -22,8 +23,9 @@ import junit.framework.AssertionFailedError;
import junit.framework.Test;
import org.eclipse.cdt.core.parser.IParser;
import org.eclipse.cdt.core.parser.ParserFactory;
import org.eclipse.cdt.core.parser.ParserMode;
import org.eclipse.cdt.internal.core.dom.DOMBuilder;
import org.eclipse.cdt.internal.core.parser.Parser;
import org.eclipse.core.runtime.Path;
@ -200,8 +202,9 @@ public class TortureTest extends FractionalAutomatedTest {
public void run(){
try {
DOMBuilder domBuilder = new DOMBuilder();
parser = new Parser(code.toString(), domBuilder, quickParse);
IParser parser = ParserFactory.createParser(
ParserFactory.createScanner( new StringReader( code ), null, null, null, ParserMode.QUICK_PARSE ), nullCallback, ParserMode.QUICK_PARSE);
parser.setCppNature(cppNature);
parser.mapLineNumbers(true);

View file

@ -0,0 +1 @@
TortureTest.properties

View file

@ -35,7 +35,7 @@ public class Name {
}
public String toString() {
Token t = nameStart;
IToken t = nameStart;
StringBuffer buffer = new StringBuffer();
buffer.append( t.getImage() );
if( t.getType() == IToken.t_operator )

View file

@ -12,6 +12,7 @@ package org.eclipse.cdt.internal.core.model;
* Rational Software - initial implementation
******************************************************************************/
import java.io.StringReader;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
@ -25,6 +26,8 @@ import org.eclipse.cdt.core.model.IStructure;
import org.eclipse.cdt.core.model.ITemplate;
import org.eclipse.cdt.core.model.ITranslationUnit;
import org.eclipse.cdt.core.parser.IParser;
import org.eclipse.cdt.core.parser.ParserFactory;
import org.eclipse.cdt.core.parser.ParserMode;
import org.eclipse.cdt.internal.core.dom.ArrayQualifier;
import org.eclipse.cdt.internal.core.dom.ClassKey;
import org.eclipse.cdt.internal.core.dom.ClassSpecifier;
@ -50,7 +53,6 @@ import org.eclipse.cdt.internal.core.dom.TemplateParameter;
import org.eclipse.cdt.internal.core.dom.TranslationUnit;
import org.eclipse.cdt.internal.core.dom.TypeSpecifier;
import org.eclipse.cdt.internal.core.parser.Name;
import org.eclipse.cdt.internal.core.parser.Parser;
import org.eclipse.core.resources.IProject;
@ -68,8 +70,7 @@ public class CModelBuilder {
// Note - if a CModel client wishes to have a CModel with valid line numbers
// DOMFactory.createDOMBuilder should be given the parameter 'true'
DOMBuilder domBuilder = new DOMBuilder();
String code = translationUnit.getBuffer().getContents();
IParser parser = new Parser(code, domBuilder, true);
IParser parser = ParserFactory.createParser(ParserFactory.createScanner( new StringReader( translationUnit.getBuffer().getContents() ), null, null, null, ParserMode.QUICK_PARSE ), domBuilder, ParserMode.QUICK_PARSE);
parser.mapLineNumbers(requiresLineNumbers);
if( translationUnit.getCProject() != null )
{

View file

@ -1,3 +1,7 @@
2003-06-23 John Camelon
Updated Factory infrastructure, constructors, etc.
Introduced Preprocessor class for transitive closure calc. client.
2003-06-20 Victor Mozgin
Fixed PR 36463 : Offsets of macros are incorrect.

View file

@ -8,23 +8,15 @@
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.internal.core.parser;
package org.eclipse.cdt.core.parser;
import org.eclipse.cdt.core.parser.ast.IASTFactory;
import org.eclipse.cdt.internal.core.parser.ast.full.FullParseASTFactory;
import org.eclipse.cdt.internal.core.parser.ast.quick.QuickParseASTFactory;
/**
* @author jcamelon
*
*/
public class ParserFactory {
public interface IPreprocessor extends IScanner {
public void process();
public static IASTFactory createASTFactory( boolean quickParse )
{
if( quickParse )
return new QuickParseASTFactory();
else
return new FullParseASTFactory();
}
}

View file

@ -1,6 +1,5 @@
package org.eclipse.cdt.core.parser;
import java.io.Reader;
import java.util.List;
import org.eclipse.cdt.core.parser.ast.IASTFactory;
@ -10,27 +9,37 @@ import org.eclipse.cdt.internal.core.parser.Parser;
* @author jcamelon
*
*/
public interface IScanner {
public interface IScanner {
public static final int tPOUNDPOUND = -6;
public static final int tPOUND = -7;
public IScanner initialize( Reader sourceToBeRead, String fileName );
public void setASTFactory( IASTFactory f );
public void addDefinition(String key, IMacroDescriptor macroToBeAdded );
public void addDefinition(String key, String value);
public Object getDefinition(String key);
public Object[] getIncludePaths();
public void addIncludePath(String includePath);
public void overwriteIncludePath( List newIncludePaths );
public void setRequestor( ISourceElementRequestor r );
public IToken nextToken() throws ScannerException, Parser.EndOfFile;
public IToken nextToken( boolean next ) throws ScannerException, Parser.EndOfFile;
public int getLineNumberForOffset(int offset) throws NoSuchMethodException;
public void setCppNature( boolean value );
public void mapLineNumbers( boolean value );
public void setQuickScan(boolean qs);
public void setMode(ParserMode mode);
public void setCallback(IParserCallback c);
public void setRequestor( ISourceElementRequestor r );
public void setASTFactory( IASTFactory f );
public int getCount();
public int getDepth();
/**
* @return
*/
public IToken nextTokenForStringizing() throws ScannerException, Parser.EndOfFile;
/**
* @param b
*/
public void setTokenizingMacroReplacementList(boolean b);
}

View file

@ -20,12 +20,13 @@ public interface IToken {
public abstract String toString();
public abstract int getType();
public abstract String getImage();
public void setImage( String i );
public abstract int getOffset();
public abstract int getLength();
public abstract int getEndOffset();
public abstract int getDelta(IToken other);
public abstract Token getNext();
public abstract void setNext(Token t);
public abstract IToken getNext();
public abstract void setNext(IToken t);
public abstract boolean looksLikeExpression();
public abstract boolean isPointer();
public abstract boolean isOperator();

View file

@ -0,0 +1,63 @@
/**********************************************************************
* 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;
import java.io.Reader;
import java.util.Map;
import java.util.List;
import org.eclipse.cdt.core.parser.ast.IASTFactory;
import org.eclipse.cdt.internal.core.parser.NullSourceElementRequestor;
import org.eclipse.cdt.internal.core.parser.Parser;
import org.eclipse.cdt.internal.core.parser.Preprocessor;
import org.eclipse.cdt.internal.core.parser.Scanner;
import org.eclipse.cdt.internal.core.parser.ast.full.FullParseASTFactory;
import org.eclipse.cdt.internal.core.parser.ast.quick.QuickParseASTFactory;
/**
* @author jcamelon
*
*/
public class ParserFactory {
public static IASTFactory createASTFactory( ParserMode mode )
{
if( mode == ParserMode.QUICK_PARSE )
return new QuickParseASTFactory();
else
return new FullParseASTFactory();
}
public static IParser createParser( IScanner scanner, IParserCallback callback, ParserMode mode )
{
ParserMode ourMode = ( (mode == null )? ParserMode.COMPLETE_PARSE : mode );
IParserCallback ourCallback = (( callback == null) ? new NullSourceElementRequestor() : callback );
return new Parser( scanner, ourCallback, ourMode );
}
public static IScanner createScanner( Reader input, String fileName, Map defns, List inclusions, ParserMode mode )
{
ParserMode ourMode = ( (mode == null )? ParserMode.COMPLETE_PARSE : mode );
IScanner s = new Scanner( input, fileName, defns );
s.setMode( ourMode );
s.overwriteIncludePath(inclusions);
return s;
}
public static IPreprocessor createPreprocesor( Reader input, String fileName, Map defns, List inclusions, ParserMode mode )
{
ParserMode ourMode = ( (mode == null )? ParserMode.COMPLETE_PARSE : mode );
IPreprocessor s = new Preprocessor( input, fileName, defns );
s.setMode( ourMode );
s.overwriteIncludePath(inclusions);
return s;
}
}

View file

@ -0,0 +1,34 @@
/**********************************************************************
* 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;
/**
* @author jcamelon
*
*/
public class ParserMode {
// follow inclusions, parse function/method bodies
public static final ParserMode COMPLETE_PARSE = new ParserMode( 1 );
// follow inclusions, do not parse function/method bodies
public static final ParserMode STRUCTURAL_PARSE = new ParserMode( 2 );
// do not follow inclusions, do not parse function/method bodies
public static final ParserMode QUICK_PARSE = new ParserMode( 3 );
private ParserMode( int value )
{
this.value = value;
}
private final int value;
}

View file

@ -24,6 +24,6 @@ public interface IASTClassSpecifier extends IASTTypeSpecifier, IASTScope, IASTOf
public Iterator getBaseClauses();
public AccessVisibility getCurrentVisiblity();
public AccessVisibility getCurrentVisibilityMode();
}

View file

@ -11,15 +11,13 @@
package org.eclipse.cdt.internal.core.parser;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.StringReader;
import org.eclipse.cdt.core.parser.IParser;
import org.eclipse.cdt.core.parser.IParserCallback;
import org.eclipse.cdt.core.parser.IScanner;
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.IToken;
import org.eclipse.cdt.core.parser.ParserFactory;
import org.eclipse.cdt.core.parser.ParserMode;
import org.eclipse.cdt.core.parser.ScannerException;
import org.eclipse.cdt.core.parser.ast.AccessVisibility;
import org.eclipse.cdt.core.parser.ast.ClassKind;
@ -49,7 +47,7 @@ public class Parser implements IParser {
private static int DEFAULT_OFFSET = -1; // sentinel initial value for offsets
private int firstErrorOffset = DEFAULT_OFFSET; // offset where the first parse error occurred
private IParserCallback callback; // the parser callback that was registered with us
private boolean quickParse = false; // are we doing the high-level parse, or an in depth parse?
private ParserMode mode = ParserMode.COMPLETE_PARSE; // are we doing the high-level parse, or an in depth parse?
private boolean parsePassed = true; // did the parse pass?
private boolean cppNature = true; // true for C++, false for C
private ISourceElementRequestor requestor = null; // new callback mechanism
@ -77,86 +75,18 @@ public class Parser implements IParser {
* @param c IParserCallback instance that will receive callbacks as we parse
* @param quick Are we asking for a high level parse or not?
*/
public Parser(IScanner s, IParserCallback c, boolean quick) {
public Parser(IScanner s, IParserCallback c, ParserMode m) {
callback = c;
scanner = s;
if( c instanceof ISourceElementRequestor )
setRequestor( (ISourceElementRequestor)c );
quickParse = quick;
astFactory = ParserFactory.createASTFactory( quick );
scanner.setQuickScan(quick);
mode = m;
astFactory = ParserFactory.createASTFactory( m );
scanner.setMode( m );
scanner.setCallback(c);
scanner.setASTFactory( astFactory );
}
/**
* An additional constructor provided for ease of use and tezting.
*
* @param s IScanner instance that has been initialized to the code input
* @param c IParserCallback instance that will receive callbacks as we parse
*/
public Parser(IScanner s, IParserCallback c) {
this(s, c, false);
}
/**
* An additional constructor provided for ease of use and tezting.
*
* @param s IScanner instance that has been initialized to the code input
*/
public Parser( IScanner s) {
this(s, new NullSourceElementRequestor(), false);
}
/**
* An additional constructor provided for ease of use and tezting.
*
* * @param code The code that we wish to parse
*/
public Parser(String code) {
this(new Scanner().initialize( new StringReader( code ), null
));
}
/**
* An additional constructor provided for ease of use and tezting.
*
* @param code The code that we wish to parse
* @param c IParserCallback instance that will receive callbacks as we parse
*/
public Parser(String code, IParserCallback c) {
this(new Scanner().initialize( new StringReader( code ), null
), c, false);
}
/**
* An additional constructor provided for ease of use and tezting.
*
* @param code The code that we wish to parse
* @param c IParserCallback instance that will receive callbacks as we parse
* @param quickParse Are we asking for a high level parse or not?
*/
public Parser(String code, IParserCallback c, boolean quickParse ) {
this(new Scanner().initialize( new StringReader( code ), null
), c, quickParse);
}
/**
* An additional constructor provided for ease of use and tezting.
*
* @param stream An InputStream represnting the code that we wish to parse
* @param c IParserCallback instance that will receive callbacks as we parse
* @param quickParse Are we asking for a high level parse or not?
*/
public Parser(InputStream stream, IParserCallback c, boolean quickParse) {
this(new Scanner().initialize( new InputStreamReader(stream), null ),
c, quickParse);
}
private static int parseCount = 0; // counter that keeps track of the number of times Parser.parse() is called
@ -788,7 +718,8 @@ c, quickParse);
if (forKR) throw backtrack;
Object function = null;
try{ function = callback.functionBodyBegin(simpleDecl ); } catch( Exception e ) {}
if (quickParse) {
if ( mode == ParserMode.QUICK_PARSE ) {
// speed up the parser by skiping the body
// simply look for matching brace and return
consume(IToken.tLBRACE);
@ -868,7 +799,7 @@ c, quickParse);
catch( Backtrack bt )
{
try { callback.constructorChainAbort( constructorChain );} catch( Exception e ) {}
if( ! quickParse )
if( mode != ParserMode.QUICK_PARSE )
throw backtrack;
}

View file

@ -0,0 +1,50 @@
/**********************************************************************
* 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 java.io.Reader;
import java.util.Map;
import org.eclipse.cdt.core.parser.IPreprocessor;
import org.eclipse.cdt.core.parser.ScannerException;
/**
* @author jcamelon
*
*/
public class Preprocessor extends Scanner implements IPreprocessor {
/**
* @param reader
* @param filename
* @param defns
*/
public Preprocessor(Reader reader, String filename, Map defns) {
super(reader, filename, defns);
}
public void process()
{
try
{
while( true )
nextToken();
}
catch( ScannerException se )
{
// callback IProblem here
}
catch( Parser.EndOfFile eof )
{
// expected
}
}
}

View file

@ -21,6 +21,7 @@ import java.util.HashMap;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;
import java.util.Vector;
@ -31,6 +32,8 @@ import org.eclipse.cdt.core.parser.IScanner;
import org.eclipse.cdt.core.parser.IScannerContext;
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.IToken;
import org.eclipse.cdt.core.parser.ParserFactory;
import org.eclipse.cdt.core.parser.ParserMode;
import org.eclipse.cdt.core.parser.ScannerException;
import org.eclipse.cdt.core.parser.ast.IASTFactory;
import org.eclipse.cdt.core.parser.ast.IASTInclusion;
@ -44,12 +47,7 @@ import org.eclipse.cdt.core.parser.ast.IASTMacro;
public class Scanner implements IScanner {
public IScanner initialize(Reader reader, String filename) {
init(reader, filename);
return this;
}
protected void init(Reader reader, String filename) {
public Scanner(Reader reader, String filename, Map defns) {
try {
//this is a hack to get around a sudden EOF experience
contextStack.push(
@ -65,14 +63,8 @@ public class Scanner implements IScanner {
} catch( ScannerException se ) {
//won't happen since we aren't adding an include or a macro
}
}
public Scanner() {
}
protected Scanner(Reader reader, String filename, Hashtable defns) {
initialize(reader, filename);
definitions = defns;
if( defns != null )
definitions.putAll( defns );
}
@ -83,6 +75,7 @@ public class Scanner implements IScanner {
}
public void overwriteIncludePath(List newIncludePaths) {
if( newIncludePaths == null ) return;
includePathNames = null;
includePaths = null;
includePathNames = new ArrayList();
@ -223,7 +216,7 @@ public class Scanner implements IScanner {
}
}
private void setCurrentToken(Token t) {
private void setCurrentToken(IToken t) {
if (currentToken != null)
currentToken.setNext(t);
currentToken = t;
@ -235,12 +228,12 @@ public class Scanner implements IScanner {
storageBuffer = null;
}
protected Token newToken(int t, String i, IScannerContext c) {
protected IToken newToken(int t, String i, IScannerContext c) {
setCurrentToken(new Token(t, i, c));
return currentToken;
}
protected Token newToken(int t, String i) {
protected IToken newToken(int t, String i) {
setCurrentToken(new Token(t, i));
return currentToken;
}
@ -345,8 +338,8 @@ public class Scanner implements IScanner {
private static HashMap cKeywords = new HashMap();
private static HashMap ppDirectives = new HashMap();
private Token currentToken = null;
private Token cachedToken = null;
private IToken currentToken = null;
private IToken cachedToken = null;
private boolean passOnToClient = true;
private BranchTracker branches = new BranchTracker();
@ -368,9 +361,10 @@ public class Scanner implements IScanner {
tokenizingMacroReplacementList = mr;
}
private boolean quickScan = false;
public void setQuickScan(boolean qs) {
quickScan = qs;
private ParserMode mode = ParserMode.COMPLETE_PARSE;
public void setMode(ParserMode mode) {
this.mode = mode;
}
private IParserCallback callback;
@ -485,7 +479,7 @@ public class Scanner implements IScanner {
}
protected Token nextToken( boolean pasting ) throws ScannerException, Parser.EndOfFile
public IToken nextToken( boolean pasting ) throws ScannerException, Parser.EndOfFile
{
if( cachedToken != null ){
setCurrentToken( cachedToken );
@ -569,16 +563,16 @@ public class Scanner implements IScanner {
//If the next token is going to be a string as well, we need to concatenate
//it with this token.
Token returnToken = newToken( type, buff.toString(), contextStack.getCurrentContext());
Token next = null;
IToken returnToken = newToken( type, buff.toString(), contextStack.getCurrentContext());
IToken next = null;
try{
next = nextToken( true );
} catch( Parser.EndOfFile e ){
next = null;
}
while( next != null && next.type == returnToken.type ){
returnToken.image += next.image;
while( next != null && next.getType() == returnToken.getType() ){
returnToken.setImage( returnToken.getImage() + next.getImage() );
returnToken.setNext( null );
currentToken = returnToken;
try{
@ -895,7 +889,7 @@ public class Scanner implements IScanner {
// definition
String toBeUndefined = getNextIdentifier();
if( ( definitions.remove(toBeUndefined) == null ) && ! quickScan )
if( ( definitions.remove(toBeUndefined) == null ) && mode == ParserMode.COMPLETE_PARSE )
throw new ScannerException( "Attempt to #undef symbol " + toBeUndefined + " when it was never defined");
skipOverTextUntilNewline();
@ -993,7 +987,7 @@ public class Scanner implements IScanner {
String error = getRestOfPreprocessorLine();
if (!quickScan) {
if (mode == ParserMode.COMPLETE_PARSE) {
throw new ScannerException("#error " + error);
}
c = getChar();
@ -1379,7 +1373,7 @@ public class Scanner implements IScanner {
// the static instance we always use
protected static endOfMacroTokenException endOfMacroToken = new endOfMacroTokenException();
protected IToken nextTokenForStringizing() throws ScannerException, Parser.EndOfFile
public IToken nextTokenForStringizing() throws ScannerException, Parser.EndOfFile
{
int c = getChar();
StringBuffer tokenImage = new StringBuffer();
@ -1648,7 +1642,7 @@ public class Scanner implements IScanner {
protected boolean evaluateExpression(String expression )
throws ScannerException {
if( quickScan )
if( mode == ParserMode.QUICK_PARSE )
{
if( expression.trim().equals( "0" ) )
return false;
@ -1659,13 +1653,13 @@ public class Scanner implements IScanner {
Object expressionEvalResult = null;
try {
ExpressionEvaluator evaluator = new ExpressionEvaluator();
Scanner trial =
new Scanner(
// Semicolon makes this valid C (hopefully)
IScanner trial =
ParserFactory.createScanner(
new StringReader(expression + ";"),
EXPRESSION,
definitions);
IParser parser = new Parser(trial, evaluator);
definitions,
null, ParserMode.COMPLETE_PARSE );
IParser parser = ParserFactory.createParser(trial, evaluator, ParserMode.COMPLETE_PARSE );
parser.expression(null);
expressionEvalResult = evaluator.getResult();
@ -1792,7 +1786,7 @@ public class Scanner implements IScanner {
String f = fileName.toString();
offset = contextStack.getCurrentContext().getOffset() - f.length() - 1; // -1 for the end quote
if( quickScan )
if( mode == ParserMode.QUICK_PARSE )
{
if( callback != null )
{
@ -1818,7 +1812,7 @@ public class Scanner implements IScanner {
String key = getNextIdentifier();
int offset = contextStack.getCurrentContext().getOffset() - key.length() - contextStack.getCurrentContext().undoStackSize();
if (!quickScan) {
if (mode == ParserMode.COMPLETE_PARSE) {
String checkForRedefinition = (String) definitions.get(key);
if (checkForRedefinition != null) {
throw new ScannerException(
@ -1884,21 +1878,18 @@ public class Scanner implements IScanner {
if( ! replacementString.equals( "" ) )
{
Scanner helperScanner = new Scanner();
helperScanner.initialize(
new StringReader(replacementString),
null);
IScanner helperScanner = ParserFactory.createScanner( new StringReader(replacementString), null, null, null, mode );
helperScanner.setTokenizingMacroReplacementList( true );
Token t = helperScanner.nextToken(false);
IToken t = helperScanner.nextToken(false);
try {
while (true) {
//each # preprocessing token in the replacement list shall be followed
//by a parameter as the next reprocessing token in the list
if( t.type == tPOUND ){
if( t.getType() == tPOUND ){
macroReplacementTokens.add( t );
t = helperScanner.nextToken(false);
int index = parameterIdentifiers.indexOf(t.image);
int index = parameterIdentifiers.indexOf(t.getImage());
if (index == -1 ) {
//not found
if (throwExceptionOnBadPreprocessorSyntax)
@ -1985,7 +1976,7 @@ public class Scanner implements IScanner {
protected Vector getMacroParameters (String params, boolean forStringizing) throws ScannerException {
Scanner tokenizer = new Scanner(new StringReader(params), TEXT, definitions);
IScanner tokenizer = ParserFactory.createScanner(new StringReader(params), TEXT, definitions, null, mode );
Vector parameterValues = new Vector();
Token t = null;
String str = new String();

View file

@ -61,9 +61,9 @@ public class Token implements IToken {
return other.getOffset() + other.getLength() - getOffset();
}
private Token next;
public Token getNext() { return next; }
public void setNext(Token t) { next = t; }
private IToken next;
public IToken getNext() { return next; }
public void setNext(IToken t) { next = t; }
public boolean looksLikeExpression()
{
@ -141,4 +141,11 @@ public class Token implements IToken {
}
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.IToken#setImage()
*/
public void setImage( String i ) {
image = i;
}
}

View file

@ -138,7 +138,7 @@ public class ASTClassSpecifier implements IASTFClassSpecifier, IPSTSymbolExtensi
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTClassSpecifier#getCurrentVisiblity()
*/
public AccessVisibility getCurrentVisiblity() {
public AccessVisibility getCurrentVisibilityMode() {
// TODO Auto-generated method stub
return null;
}

View file

@ -76,7 +76,7 @@ public class ASTClassSpecifier extends ASTDeclaration implements IASTQClassSpeci
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTClassSpecifier#getCurrentVisiblity()
*/
public AccessVisibility getCurrentVisiblity() {
public AccessVisibility getCurrentVisibilityMode() {
return access;
}

View file

@ -1,3 +1,7 @@
2003-06-23 John Camelon
Updated Factory infrastructure, constructors, etc.
Introduced Preprocessor class for transitive closure calc. client.
2003-06-20 Sean Evoy
Moved the ManagedBuildInfo extension point to the plugin file in org.eclipse.cdt.core.tests

View file

@ -14,6 +14,7 @@ package org.eclipse.cdt.core.parser.tests;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStreamReader;
import java.util.NoSuchElementException;
import java.util.StringTokenizer;
@ -21,7 +22,8 @@ import junit.framework.AssertionFailedError;
import junit.framework.Test;
import org.eclipse.cdt.core.parser.IParser;
import org.eclipse.cdt.internal.core.parser.Parser;
import org.eclipse.cdt.core.parser.ParserFactory;
import org.eclipse.cdt.core.parser.ParserMode;
import org.eclipse.core.runtime.Path;
@ -51,14 +53,10 @@ public class AutomatedTest extends AutomatedFramework {
FileInputStream stream = new FileInputStream( file );
String filePath = file.getCanonicalPath();
String nature = (String)natures.get( filePath );
boolean cppNature = nature.equalsIgnoreCase("cpp");
parser = new Parser( stream, nullCallback, true);
parser.setCppNature( cppNature );
parser = ParserFactory.createParser( ParserFactory.createScanner( new InputStreamReader (stream), filePath, null, null, ParserMode.QUICK_PARSE ), nullCallback, ParserMode.QUICK_PARSE);
parser.setCppNature( ((String)natures.get( filePath )).equalsIgnoreCase("cpp") );
parser.mapLineNumbers(true);
assertTrue( parser.parse() );
}
catch( Throwable e )

View file

@ -10,12 +10,15 @@
******************************************************************************/
package org.eclipse.cdt.core.parser.tests;
import java.io.StringReader;
import junit.framework.TestCase;
import org.eclipse.cdt.core.parser.IParser;
import org.eclipse.cdt.core.parser.ParserFactory;
import org.eclipse.cdt.core.parser.ParserMode;
import org.eclipse.cdt.internal.core.dom.DOMBuilder;
import org.eclipse.cdt.internal.core.dom.TranslationUnit;
import org.eclipse.cdt.internal.core.parser.Parser;
import org.eclipse.cdt.internal.core.parser.ParserException;
/**
@ -36,7 +39,8 @@ public class BaseDOMTest extends TestCase {
public TranslationUnit parse(String code, boolean quickParse, boolean throwOnError ) throws Exception {
DOMBuilder domBuilder = new DOMBuilder();
IParser parser = new Parser(code, domBuilder, quickParse );
ParserMode mode = quickParse ? ParserMode.QUICK_PARSE : ParserMode.COMPLETE_PARSE;
IParser parser = ParserFactory.createParser(ParserFactory.createScanner( new StringReader( code ), null, null, null, mode ), domBuilder, mode );
if( ! parser.parse() )
if( throwOnError ) throw new ParserException( "Parse failure" );
else domBuilder.getTranslationUnit().setParseSuccessful( false );

View file

@ -15,10 +15,12 @@ import java.io.StringReader;
import junit.framework.TestCase;
import org.eclipse.cdt.core.parser.IScanner;
import org.eclipse.cdt.core.parser.IToken;
import org.eclipse.cdt.core.parser.ParserFactory;
import org.eclipse.cdt.core.parser.ParserMode;
import org.eclipse.cdt.core.parser.ScannerException;
import org.eclipse.cdt.internal.core.parser.Parser;
import org.eclipse.cdt.internal.core.parser.Scanner;
/**
* @author jcamelon
@ -26,7 +28,7 @@ import org.eclipse.cdt.internal.core.parser.Scanner;
*/
public class BaseScannerTest extends TestCase {
protected Scanner scanner;
protected IScanner scanner;
public BaseScannerTest( String x )
{
@ -35,8 +37,7 @@ public class BaseScannerTest extends TestCase {
public void initializeScanner(String input)
{
scanner= new Scanner();
scanner.initialize( new StringReader(input),"TEXT");
scanner= ParserFactory.createScanner( new StringReader(input),"TEXT", null, null, ParserMode.COMPLETE_PARSE );
}
public int fullyTokenize() throws Exception

View file

@ -1,12 +1,14 @@
package org.eclipse.cdt.core.parser.tests;
import java.io.StringReader;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
import org.eclipse.cdt.core.parser.IParser;
import org.eclipse.cdt.core.parser.ParserFactory;
import org.eclipse.cdt.internal.core.parser.ExpressionEvaluator;
import org.eclipse.cdt.internal.core.parser.Parser;
public class ExprEvalTest extends TestCase {
@ -20,7 +22,7 @@ public class ExprEvalTest extends TestCase {
public void runTest(String code, int expectedValue) throws Exception {
ExpressionEvaluator evaluator = new ExpressionEvaluator();
IParser parser = new Parser(code, evaluator);
IParser parser = ParserFactory.createParser(ParserFactory.createScanner( new StringReader( code ), null, null, null, null ), evaluator, null);;
parser.expression(null);
assertEquals(expectedValue, ((Integer)evaluator.getResult()).intValue());
}

View file

@ -15,13 +15,16 @@ import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;
import java.util.NoSuchElementException;
import java.util.StringTokenizer;
import junit.framework.Test;
import org.eclipse.cdt.internal.core.parser.Parser;
import org.eclipse.cdt.core.parser.IParser;
import org.eclipse.cdt.core.parser.ParserFactory;
import org.eclipse.cdt.core.parser.ParserMode;
import org.eclipse.core.runtime.Path;
/**
@ -234,7 +237,8 @@ public class FractionalAutomatedTest extends AutomatedFramework {
public void run(){
try{
result = null;
Parser parser = new Parser( code, nullCallback, true);
IParser parser = ParserFactory.createParser(
ParserFactory.createScanner( new StringReader( code ), null, null, null, ParserMode.QUICK_PARSE ), nullCallback, ParserMode.QUICK_PARSE);
parser.setCppNature( cppNature );
parser.mapLineNumbers(true);
parser.parse();

View file

@ -13,14 +13,17 @@ package org.eclipse.cdt.core.parser.tests;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.Reader;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.util.List;
import junit.framework.TestCase;
import org.eclipse.cdt.core.parser.IParser;
import org.eclipse.cdt.core.parser.IScanner;
import org.eclipse.cdt.core.parser.IToken;
import org.eclipse.cdt.core.parser.ParserFactory;
import org.eclipse.cdt.core.parser.ParserMode;
import org.eclipse.cdt.internal.core.dom.ClassSpecifier;
import org.eclipse.cdt.internal.core.dom.DOMBuilder;
import org.eclipse.cdt.internal.core.dom.EnumerationSpecifier;
@ -29,7 +32,6 @@ import org.eclipse.cdt.internal.core.dom.NamespaceDefinition;
import org.eclipse.cdt.internal.core.dom.SimpleDeclaration;
import org.eclipse.cdt.internal.core.dom.TemplateDeclaration;
import org.eclipse.cdt.internal.core.parser.Parser;
import org.eclipse.cdt.internal.core.parser.Scanner;
import org.eclipse.core.runtime.Path;
/**
@ -53,9 +55,7 @@ public class LineNumberTest extends TestCase {
public void testLineNos() throws Exception
{
Scanner scanner = new Scanner();
Reader reader = new StringReader( "int x = 3;\n foo\nfire\nfoe ");
scanner.initialize( reader, "string");
IScanner scanner = ParserFactory.createScanner( new StringReader( "int x = 3;\n foo\nfire\nfoe " ), "string", null, null, null );
scanner.mapLineNumbers(true);
IToken t = scanner.nextToken();
assertEquals( t.getType(), IToken.t_int );
@ -92,7 +92,7 @@ public class LineNumberTest extends TestCase {
public void testDOMLineNos() throws Exception
{
DOMBuilder domBuilder = new DOMBuilder();
IParser parser = new Parser( fileIn, domBuilder, true );
IParser parser = ParserFactory.createParser( ParserFactory.createScanner( new InputStreamReader( fileIn ), null, null, null, ParserMode.QUICK_PARSE ), domBuilder, ParserMode.QUICK_PARSE );
parser.mapLineNumbers(true);
if( ! parser.parse() ) fail( "Parse of file failed");

View file

@ -6,6 +6,7 @@ import java.util.List;
import org.eclipse.cdt.core.parser.IMacroDescriptor;
import org.eclipse.cdt.core.parser.IToken;
import org.eclipse.cdt.core.parser.ParserMode;
import org.eclipse.cdt.core.parser.ScannerException;
import org.eclipse.cdt.internal.core.parser.Parser;
import org.eclipse.cdt.internal.core.parser.Token;
@ -851,7 +852,7 @@ public class ScannerTestCase extends BaseScannerTest
try
{
initializeScanner( "#if X + 5 < 7\n int found = 1;\n#endif" );
scanner.setQuickScan( true );
scanner.setMode( ParserMode.QUICK_PARSE );
validateToken( IToken.t_int );
validateIdentifier( "found" );
validateToken( IToken.tASSIGN );
@ -868,7 +869,7 @@ public class ScannerTestCase extends BaseScannerTest
try
{
initializeScanner( "#if 0\n int error = 666;\n#endif" );
scanner.setQuickScan( true );
scanner.setMode( ParserMode.COMPLETE_PARSE );
validateEOF();
}
catch( ScannerException se )

View file

@ -14,6 +14,7 @@ import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;
import java.util.NoSuchElementException;
import java.util.StringTokenizer;
@ -22,8 +23,9 @@ import junit.framework.AssertionFailedError;
import junit.framework.Test;
import org.eclipse.cdt.core.parser.IParser;
import org.eclipse.cdt.core.parser.ParserFactory;
import org.eclipse.cdt.core.parser.ParserMode;
import org.eclipse.cdt.internal.core.dom.DOMBuilder;
import org.eclipse.cdt.internal.core.parser.Parser;
import org.eclipse.core.runtime.Path;
@ -200,7 +202,8 @@ public class TortureTest extends FractionalAutomatedTest {
public void run(){
try {
DOMBuilder domBuilder = new DOMBuilder();
parser = new Parser(code.toString(), domBuilder, quickParse);
IParser parser = ParserFactory.createParser(
ParserFactory.createScanner( new StringReader( code ), null, null, null, ParserMode.QUICK_PARSE ), nullCallback, ParserMode.QUICK_PARSE);
parser.setCppNature(cppNature);
parser.mapLineNumbers(true);

View file

@ -1,3 +1,7 @@
2003-06-23 John Camelon
Updated Factory infrastructure, constructors, etc.
Introduced Preprocessor class for transitive closure calc. client.
2003-06-20 Sean Evoy
Added (again) the icons required for the new managed project wizard and property pages
* icons/full/build16/config-command.gif

View file

@ -11,10 +11,14 @@
package org.eclipse.cdt.internal.ui.compare;
import java.io.StringReader;
import java.util.Iterator;
import java.util.List;
import org.eclipse.cdt.core.model.ICElement;
import org.eclipse.cdt.core.parser.IParser;
import org.eclipse.cdt.core.parser.ParserFactory;
import org.eclipse.cdt.core.parser.ParserMode;
import org.eclipse.cdt.internal.core.dom.ClassKey;
import org.eclipse.cdt.internal.core.dom.ClassSpecifier;
import org.eclipse.cdt.internal.core.dom.DOMBuilder;
@ -31,7 +35,6 @@ import org.eclipse.cdt.internal.core.dom.TemplateDeclaration;
import org.eclipse.cdt.internal.core.dom.TranslationUnit;
import org.eclipse.cdt.internal.core.dom.TypeSpecifier;
import org.eclipse.cdt.internal.core.parser.Name;
import org.eclipse.cdt.internal.core.parser.Parser;
import org.eclipse.cdt.internal.parser.IStructurizerCallback;
/**
@ -54,8 +57,7 @@ public class ComparatorModelBuilder {
public void parse() {
DOMBuilder domBuilder = new DOMBuilder();
try {
Parser parser = new Parser(code, domBuilder, true);
IParser parser = ParserFactory.createParser(ParserFactory.createScanner( new StringReader( code ), null, null, null, ParserMode.QUICK_PARSE ), domBuilder, ParserMode.QUICK_PARSE);
parser.parse();
} catch (Exception e) {
callback.reportError(e);