diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/scanner2/BaseScanner2Test.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/scanner2/BaseScanner2Test.java index 347a827ddb8..78ba08074ef 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/scanner2/BaseScanner2Test.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/scanner2/BaseScanner2Test.java @@ -29,9 +29,7 @@ import org.eclipse.cdt.core.parser.ParserFactoryError; import org.eclipse.cdt.core.parser.ParserLanguage; import org.eclipse.cdt.core.parser.ParserMode; import org.eclipse.cdt.core.parser.ScannerInfo; -import org.eclipse.cdt.core.parser.extension.ExtensionDialect; import org.eclipse.cdt.core.parser.util.CharArrayUtils; -import org.eclipse.cdt.internal.core.parser.ParserExtensionFactory; import org.eclipse.cdt.internal.core.parser.scanner2.GCCScannerConfiguration; import org.eclipse.cdt.internal.core.parser.scanner2.GPPScannerConfiguration; import org.eclipse.cdt.internal.core.parser.scanner2.IScannerConfiguration; @@ -85,7 +83,7 @@ public class BaseScanner2Test extends TestCase { configuration = new GCCScannerConfiguration(); else configuration = new GPPScannerConfiguration(); - return new Scanner2( code, config, ourRequestor, ourMode, language, logService, new ParserExtensionFactory( ExtensionDialect.GCC ).createScannerExtension(), workingCopies, configuration ); + return new Scanner2( code, config, ourRequestor, ourMode, language, logService, workingCopies, configuration ); } public int fullyTokenize() throws Exception diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/scanner2/SpeedTest2.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/scanner2/SpeedTest2.java index 1cd66711873..7d4acf872ac 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/scanner2/SpeedTest2.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/scanner2/SpeedTest2.java @@ -19,8 +19,6 @@ import org.eclipse.cdt.core.parser.ParserFactoryError; import org.eclipse.cdt.core.parser.ParserLanguage; import org.eclipse.cdt.core.parser.ParserMode; import org.eclipse.cdt.core.parser.ScannerInfo; -import org.eclipse.cdt.core.parser.extension.ExtensionDialect; -import org.eclipse.cdt.internal.core.parser.ParserExtensionFactory; import org.eclipse.cdt.internal.core.parser.scanner2.GCCScannerConfiguration; import org.eclipse.cdt.internal.core.parser.scanner2.GPPScannerConfiguration; import org.eclipse.cdt.internal.core.parser.scanner2.IScannerConfiguration; @@ -91,7 +89,7 @@ public class SpeedTest2 extends TestCase { configuration = new GCCScannerConfiguration(); else configuration = new GPPScannerConfiguration(); - return new Scanner2( code, config, ourRequestor, ourMode, language, logService, new ParserExtensionFactory( ExtensionDialect.GCC ).createScannerExtension(), workingCopies, configuration ); + return new Scanner2( code, config, ourRequestor, ourMode, language, logService, workingCopies, configuration ); } private static final ISourceElementRequestor CALLBACK = new NullSourceElementRequestor(); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ParserFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ParserFactory.java index 131357207d8..2748bd98265 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ParserFactory.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ParserFactory.java @@ -93,7 +93,7 @@ public class ParserFactory { else configuration = new GPPScannerConfiguration(); - return new Scanner2( code, config, ourRequestor, ourMode, language, logService, extensionFactory.createScannerExtension(), workingCopies, configuration ); + return new Scanner2( code, config, ourRequestor, ourMode, language, logService, workingCopies, configuration ); } public static IScanner createScanner( String fileName, IScannerInfo config, ParserMode mode, ParserLanguage language, ISourceElementRequestor requestor, IParserLogService log, List workingCopies ) throws ParserFactoryError, IOException diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/extension/IParserExtensionFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/extension/IParserExtensionFactory.java index dd7bb62a535..a46653ed873 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/extension/IParserExtensionFactory.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/extension/IParserExtensionFactory.java @@ -18,8 +18,7 @@ import org.eclipse.cdt.core.parser.ParserMode; * @author jcamelon */ public interface IParserExtensionFactory { - - public IScannerExtension createScannerExtension() throws ParserFactoryError; + public IParserExtension createParserExtension() throws ParserFactoryError; public IASTFactoryExtension createASTExtension(ParserMode mode); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/extension/IScannerExtension.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/extension/IScannerExtension.java deleted file mode 100644 index dae1f0c00d0..00000000000 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/extension/IScannerExtension.java +++ /dev/null @@ -1,29 +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.parser.extension; - -import org.eclipse.cdt.core.parser.IToken; -import org.eclipse.cdt.core.parser.ParserLanguage; -import org.eclipse.cdt.internal.core.parser.scanner2.IScannerData; - -/** - * @author jcamelon - */ -public interface IScannerExtension { - - public void setupBuiltInMacros(IScannerData scannerData); - - public boolean isExtensionKeyword(ParserLanguage language, char[] tokenImage); - public boolean isExtensionOperator(ParserLanguage language, char[] query); - - public IToken createExtensionToken(IScannerData scannerData, char[] image); - -} diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ParserExtensionFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ParserExtensionFactory.java index 56aa3630e01..a8f9d2570e9 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ParserExtensionFactory.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ParserExtensionFactory.java @@ -16,9 +16,7 @@ import org.eclipse.cdt.core.parser.extension.ExtensionDialect; import org.eclipse.cdt.core.parser.extension.IASTFactoryExtension; import org.eclipse.cdt.core.parser.extension.IParserExtension; import org.eclipse.cdt.core.parser.extension.IParserExtensionFactory; -import org.eclipse.cdt.core.parser.extension.IScannerExtension; import org.eclipse.cdt.internal.core.parser.ast.GCCASTExtension; -import org.eclipse.cdt.internal.core.parser.scanner2.GCCScannerExtension; /** * @author jcamelon @@ -34,15 +32,6 @@ public class ParserExtensionFactory implements IParserExtensionFactory { this.dialect = dialect; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.parser.extension.IParserExtensionFactory#createScannerExtension() - */ - public IScannerExtension createScannerExtension() throws ParserFactoryError { - if( dialect == ExtensionDialect.GCC ) - return new GCCScannerExtension(); - throw new ParserFactoryError( ParserFactoryError.Kind.BAD_DIALECT ); - } - /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.extension.IParserExtensionFactory#createParserExtension() */ diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/DOMScanner.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/DOMScanner.java index 4b2a786bf29..cc9a2ffa2ba 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/DOMScanner.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/DOMScanner.java @@ -17,7 +17,6 @@ import org.eclipse.cdt.core.parser.IParserLogService; import org.eclipse.cdt.core.parser.IScannerInfo; import org.eclipse.cdt.core.parser.ParserLanguage; import org.eclipse.cdt.core.parser.ParserMode; -import org.eclipse.cdt.core.parser.extension.IScannerExtension; /** * @author jcamelon @@ -27,16 +26,15 @@ public class DOMScanner extends Scanner2 { /** * @param reader * @param info - * @param requestor * @param parserMode * @param language * @param log - * @param extension * @param workingCopies + * @param requestor */ - public DOMScanner(CodeReader reader, IScannerInfo info, ParserMode parserMode, ParserLanguage language, IParserLogService log, IScannerExtension extension, List workingCopies, IScannerConfiguration configuration) { - super(reader, info, null, parserMode, language, log, extension, - workingCopies, configuration); + public DOMScanner(CodeReader reader, IScannerInfo info, ParserMode parserMode, ParserLanguage language, IParserLogService log, List workingCopies, IScannerConfiguration configuration) { + super(reader, info, null, parserMode, language, log, workingCopies, + configuration); } /* (non-Javadoc) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/GCCScannerConfiguration.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/GCCScannerConfiguration.java index 36738b29993..ce64d19e842 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/GCCScannerConfiguration.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/GCCScannerConfiguration.java @@ -10,7 +10,10 @@ **********************************************************************/ package org.eclipse.cdt.internal.core.parser.scanner2; +import org.eclipse.cdt.core.parser.GCCKeywords; +import org.eclipse.cdt.core.parser.IGCCToken; import org.eclipse.cdt.core.parser.util.CharArrayIntMap; +import org.eclipse.cdt.core.parser.util.CharArrayObjectMap; /** * @author jcamelon @@ -23,13 +26,48 @@ public class GCCScannerConfiguration extends GNUScannerConfiguration implements public boolean supportMinAndMaxOperators() { return false; } + + private static final FunctionStyleMacro _Pragma = new FunctionStyleMacro( + "_Pragma".toCharArray(), //$NON-NLS-1$ + emptyCharArray, + new char[][] { "arg".toCharArray() } ); //$NON-NLS-1$ + + private final DynamicFunctionStyleMacro __builtin_choose_expr = + new DynamicFunctionStyleMacro( "__builtin_choose_expr".toCharArray(), //$NON-NLS-1$ + new char[][] { "const_exp".toCharArray(), "exp1".toCharArray(), "exp2".toCharArray() } ) //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + { + public char [] execute( CharArrayObjectMap argmap ){ + ExpressionEvaluator evaluator = new ExpressionEvaluator(); + char[] const_exp = (char[]) argmap.get( arglist[0] ); + long exp = 0; + if( const_exp != null) + exp = evaluator.evaluate( const_exp, 0, const_exp.length, CharArrayObjectMap.EMPTY_MAP ); + + if( exp != 0 ) + return (char[])argmap.get( arglist[1] ); + return (char[])argmap.get( arglist[2] ); + } + }; + + + /* (non-Javadoc) + * @see org.eclipse.cdt.internal.core.parser.scanner2.IScannerConfiguration#getAdditionalMacros() + */ + public CharArrayObjectMap getAdditionalMacros() { + CharArrayObjectMap result = super.getAdditionalMacros(); + result.put(_Pragma.name, _Pragma ); + result.put( __builtin_choose_expr.name, __builtin_choose_expr ); + return result; + } /* (non-Javadoc) * @see org.eclipse.cdt.internal.core.parser.scanner2.IScannerConfiguration#getAdditionalKeywords() */ public CharArrayIntMap getAdditionalKeywords() { - // TODO Auto-generated method stub - return null; + CharArrayIntMap result = new CharArrayIntMap( 4, -1 ); + result.put( GCCKeywords.cp__ALIGNOF__, IGCCToken.t___alignof__ ); + result.put( GCCKeywords.cpTYPEOF, IGCCToken.t_typeof ); + return result; } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/GCCScannerExtension.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/GCCScannerExtension.java deleted file mode 100644 index 208ad34cd08..00000000000 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/GCCScannerExtension.java +++ /dev/null @@ -1,215 +0,0 @@ -/********************************************************************** - * Copyright (c) 2002,2004 IBM Rational Software 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.scanner2; - -import org.eclipse.cdt.core.parser.GCCKeywords; -import org.eclipse.cdt.core.parser.IGCCToken; -import org.eclipse.cdt.core.parser.IToken; -import org.eclipse.cdt.core.parser.Keywords; -import org.eclipse.cdt.core.parser.ParserLanguage; -import org.eclipse.cdt.core.parser.extension.IScannerExtension; -import org.eclipse.cdt.core.parser.util.CharArrayIntMap; -import org.eclipse.cdt.core.parser.util.CharArrayObjectMap; -import org.eclipse.cdt.internal.core.parser.token.ImagedToken; - -/** - * @author jcamelon - */ -public class GCCScannerExtension implements IScannerExtension { - - private static final String [] simpleIdentifiersDeclSpec; - private static final String [] simpleIdentifiersAttribute; - static - { - simpleIdentifiersDeclSpec = new String[ 1 ]; - simpleIdentifiersDeclSpec[0]= "x"; //$NON-NLS-1$ - - simpleIdentifiersAttribute = new String[ 1 ]; - simpleIdentifiersAttribute[0] = "xyz"; //$NON-NLS-1$ - } - - - private static final char [] emptyCharArray = "".toCharArray(); //$NON-NLS-1$ - // gcc built-ins - private static final ObjectStyleMacro __inline__ - = new ObjectStyleMacro("__inline__".toCharArray(), "inline".toCharArray()); //$NON-NLS-1$ //$NON-NLS-2$ - private static final ObjectStyleMacro __extension__ - = new ObjectStyleMacro("__extension__".toCharArray(), emptyCharArray); //$NON-NLS-1$ - private static final ObjectStyleMacro __asm__ - = new ObjectStyleMacro("__asm__".toCharArray(), "asm".toCharArray()); //$NON-NLS-1$ //$NON-NLS-2$ - private static final ObjectStyleMacro __restrict__ - = new ObjectStyleMacro("__restrict__".toCharArray(), "restrict".toCharArray()); //$NON-NLS-1$ //$NON-NLS-2$ - private static final ObjectStyleMacro __restrict - = new ObjectStyleMacro("__restrict".toCharArray(), "restrict".toCharArray()); //$NON-NLS-1$ //$NON-NLS-2$ - private static final ObjectStyleMacro __volatile__ - = new ObjectStyleMacro("__volatile__".toCharArray(), "volatile".toCharArray()); //$NON-NLS-1$ //$NON-NLS-2$ - private static final ObjectStyleMacro __const__ - = new ObjectStyleMacro("__const__".toCharArray(), "const".toCharArray()); //$NON-NLS-1$ //$NON-NLS-2$ - private static final ObjectStyleMacro __const - = new ObjectStyleMacro("__const".toCharArray(), "const".toCharArray()); //$NON-NLS-1$ //$NON-NLS-2$ - private static final ObjectStyleMacro __signed__ - = new ObjectStyleMacro("__signed__".toCharArray(), "signed".toCharArray()); //$NON-NLS-1$ //$NON-NLS-2$ - private static final ObjectStyleMacro __cdecl = new - ObjectStyleMacro( "__cdecl".toCharArray(), emptyCharArray ); //$NON-NLS-1$ - private static final ObjectStyleMacro __complex__ = - new ObjectStyleMacro( "__complex__".toCharArray(), "_Complex".toCharArray()); //$NON-NLS-1$ //$NON-NLS-2$ - private static final ObjectStyleMacro __real__ = - new ObjectStyleMacro( "__real__".toCharArray(), "(int)".toCharArray()); //$NON-NLS-1$ //$NON-NLS-2$ - private static final ObjectStyleMacro __imag__ = - new ObjectStyleMacro( "__imag__".toCharArray(), "(int)".toCharArray()); //$NON-NLS-1$ //$NON-NLS-2$ - - - private static final FunctionStyleMacro __attribute__ - = new FunctionStyleMacro( - "__attribute__".toCharArray(), //$NON-NLS-1$ - emptyCharArray, - new char[][] { "arg".toCharArray() }); //$NON-NLS-1$ - private static final FunctionStyleMacro __declspec - = new FunctionStyleMacro( - "__declspec".toCharArray(), //$NON-NLS-1$ - emptyCharArray, - new char[][] { "arg".toCharArray() }); //$NON-NLS-1$ - - private static final FunctionStyleMacro _Pragma = new FunctionStyleMacro( - "_Pragma".toCharArray(), //$NON-NLS-1$ - emptyCharArray, - new char[][] { "arg".toCharArray() } ); //$NON-NLS-1$ - - private static final FunctionStyleMacro __builtin_va_arg - = new FunctionStyleMacro( - "__builtin_va_arg".toCharArray(), //$NON-NLS-1$ - "*(type *)ap".toCharArray(), //$NON-NLS-1$ - new char[][] { "ap".toCharArray(), "type".toCharArray() } ); //$NON-NLS-1$//$NON-NLS-2$ - - private static final FunctionStyleMacro __builtin_constant_p - = new FunctionStyleMacro( - "__builtin_constant_p".toCharArray(), //$NON-NLS-1$ - "0".toCharArray(), //$NON-NLS-1$ - new char[][] {"exp".toCharArray()} ); //$NON-NLS-1$//$NON-NLS-2$ - - private final DynamicFunctionStyleMacro __builtin_choose_expr = - new DynamicFunctionStyleMacro( "__builtin_choose_expr".toCharArray(), //$NON-NLS-1$ - new char[][] { "const_exp".toCharArray(), "exp1".toCharArray(), "exp2".toCharArray() } ) //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - { - public char [] execute( CharArrayObjectMap argmap ){ - ExpressionEvaluator evaluator = new ExpressionEvaluator(); - char[] const_exp = (char[]) argmap.get( arglist[0] ); - long exp = 0; - if( const_exp != null) - exp = evaluator.evaluate( const_exp, 0, const_exp.length, CharArrayObjectMap.EMPTY_MAP ); - - if( exp != 0 ) - return (char[])argmap.get( arglist[1] ); - return (char[])argmap.get( arglist[2] ); - } - }; - - /* (non-Javadoc) - * @see org.eclipse.cdt.core.parser.IScannerExtension#setupBuiltInMacros() - */ - public void setupBuiltInMacros(IScannerData scannerData) { - // gcc extensions - CharArrayObjectMap realDefinitions = scannerData.getRealDefinitions(); - realDefinitions.put(__inline__.name, __inline__); - realDefinitions.put(__cdecl.name, __cdecl ); - realDefinitions.put( __const__.name, __const__ ); - realDefinitions.put( __const.name, __const ); - realDefinitions.put(__extension__.name, __extension__); - realDefinitions.put(__attribute__.name, __attribute__); - realDefinitions.put( __declspec.name, __declspec ); - realDefinitions.put(__restrict__.name, __restrict__); - realDefinitions.put(__restrict.name, __restrict); - realDefinitions.put(__volatile__.name, __volatile__); - realDefinitions.put(__signed__.name, __signed__ ); - realDefinitions.put(__complex__.name, __complex__ ); - realDefinitions.put(__imag__.name, __imag__ ); - realDefinitions.put(__real__.name, __real__ ); - realDefinitions.put( __builtin_va_arg.name, __builtin_va_arg ); - realDefinitions.put( __builtin_constant_p.name, __builtin_constant_p ); - if( scannerData.getLanguage() == ParserLanguage.CPP ) - realDefinitions.put(__asm__.name, __asm__); - else{ - realDefinitions.put(_Pragma.name, _Pragma ); - realDefinitions.put( __builtin_choose_expr.name, __builtin_choose_expr ); - } - } - - private static final CharArrayIntMap additionalCPPKeywords; - private static final CharArrayIntMap additionalCKeywords; - private static final CharArrayIntMap additionalCPPOperators; - private static final CharArrayIntMap additionalCOperators; - private static final char [] MAX_OPERATOR = ">?".toCharArray(); //$NON-NLS-1$ - private static final char [] MIN_OPERATOR = "