Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/GCCScannerExtension.java')
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/GCCScannerExtension.java311
1 files changed, 0 insertions, 311 deletions
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/GCCScannerExtension.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/GCCScannerExtension.java
deleted file mode 100644
index ff885aacc86..00000000000
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/GCCScannerExtension.java
+++ /dev/null
@@ -1,311 +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.scanner;
-
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-
-import org.eclipse.cdt.core.parser.CodeReader;
-import org.eclipse.cdt.core.parser.GCCKeywords;
-import org.eclipse.cdt.core.parser.IGCCToken;
-import org.eclipse.cdt.core.parser.IScanner;
-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.ast.IASTInclusion;
-import org.eclipse.cdt.core.parser.extension.IScannerExtension;
-import org.eclipse.cdt.internal.core.parser.scanner.ScannerUtility.InclusionParseException;
-import org.eclipse.cdt.internal.core.parser.token.TokenFactory;
-import org.eclipse.cdt.internal.core.parser.util.TraceUtil;
-
-/**
- * @author jcamelon
- */
-public class GCCScannerExtension implements IScannerExtension {
-
- protected static final ObjectMacroDescriptor STDC_VERSION_MACRO = new ObjectMacroDescriptor( IScanner.__STDC_VERSION__, "199001L"); //$NON-NLS-1$
- protected static final ObjectMacroDescriptor STDC_HOSTED_MACRO = new ObjectMacroDescriptor( IScanner.__STDC_HOSTED__, "0"); //$NON-NLS-1$
- protected static final ObjectMacroDescriptor CPLUSPLUS_MACRO = new ObjectMacroDescriptor( IScanner.__CPLUSPLUS, "1"); //$NON-NLS-1$
- 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$
- }
-
-
- protected static final String POUND_IDENT = "#ident"; //$NON-NLS-1$
- protected static final String POUND_WARNING = "#warning"; //$NON-NLS-1$
- protected static final String POUND_INCLUDE_NEXT = "#include_next"; //$NON-NLS-1$
-
- private static final String __CONST__ = "__const__"; //$NON-NLS-1$
- protected static final ObjectMacroDescriptor __CONST__MACRO = new ObjectMacroDescriptor( __CONST__, Keywords.CONST );
- private static final String __CONST = "__const"; //$NON-NLS-1$
- protected static final ObjectMacroDescriptor __CONST_MACRO = new ObjectMacroDescriptor( __CONST, Keywords.CONST );
- private static final String __INLINE__ = "__inline__"; //$NON-NLS-1$
- protected static final ObjectMacroDescriptor __INLINE__MACRO = new ObjectMacroDescriptor( __INLINE__, Keywords.INLINE );
- private static final String __VOLATILE__ = "__volatile__"; //$NON-NLS-1$
- protected static final ObjectMacroDescriptor __VOLATILE__MACRO = new ObjectMacroDescriptor( __VOLATILE__, Keywords.VOLATILE );
- private static final String __SIGNED__ = "__signed__"; //$NON-NLS-1$
- private static final ObjectMacroDescriptor __SIGNED__MACRO = new ObjectMacroDescriptor( __SIGNED__, Keywords.SIGNED );
- private static final String __RESTRICT = "__restrict"; //$NON-NLS-1$
- private static final String __RESTRICT__ = "__restrict__"; //$NON-NLS-1$
- private static final ObjectMacroDescriptor __RESTRICT__MACRO = new ObjectMacroDescriptor( __RESTRICT__, Keywords.RESTRICT );
- private static final String __ASM__ = "__asm__"; //$NON-NLS-1$
- protected static final ObjectMacroDescriptor __ASM__MACRO = new ObjectMacroDescriptor( __ASM__, Keywords.ASM );
- private static final String __TYPEOF__ = "__typeof__"; //$NON-NLS-1$
- protected static final ObjectMacroDescriptor __TYPEOF__MACRO = new ObjectMacroDescriptor( __TYPEOF__, GCCKeywords.TYPEOF );
-
-
- private static final String __ATTRIBUTE__ = "__attribute__"; //$NON-NLS-1$
- private static final String __DECLSPEC = "__declspec"; //$NON-NLS-1$
- private static final IToken [] EMPTY_TOKEN_ARRAY = new IToken[0];
- protected static final FunctionMacroDescriptor DECLSPEC_MACRO = new FunctionMacroDescriptor( __ATTRIBUTE__, simpleIdentifiersDeclSpec, EMPTY_TOKEN_ARRAY, "" ); //$NON-NLS-1$
-
- protected static final FunctionMacroDescriptor ATTRIBUTE_MACRO = new FunctionMacroDescriptor( __ATTRIBUTE__, simpleIdentifiersAttribute, EMPTY_TOKEN_ARRAY, "" ); //$NON-NLS-1$
-
- private static final String __EXTENSION__ = "__extension__"; //$NON-NLS-1$
- private static final String EMPTY_STRING = ""; //$NON-NLS-1$
- protected static final ObjectMacroDescriptor EXTENSION_MACRO = new ObjectMacroDescriptor( __EXTENSION__, EMPTY_STRING );
-
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.parser.IScannerExtension#initializeMacroValue(java.lang.String)
- */
- public String initializeMacroValue(IScannerData scannerData, String original) {
- if( original == null || original.trim().equals( "") ) //$NON-NLS-1$
- return "1"; //$NON-NLS-1$
- return original;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.parser.IScannerExtension#setupBuiltInMacros()
- */
- public void setupBuiltInMacros(IScannerData scannerData) {
-
- if( scannerData.getLanguage() == ParserLanguage.CPP )
- if( scannerData.getScanner().getDefinition( IScanner.__CPLUSPLUS ) == null )
- scannerData.getScanner().addDefinition( IScanner.__CPLUSPLUS, CPLUSPLUS_MACRO);
-
- if( scannerData.getScanner().getDefinition(IScanner.__STDC_HOSTED__) == null )
- scannerData.getScanner().addDefinition(IScanner.__STDC_HOSTED__, STDC_HOSTED_MACRO);
- if( scannerData.getScanner().getDefinition( IScanner.__STDC_VERSION__) == null )
- scannerData.getScanner().addDefinition( IScanner.__STDC_VERSION__, STDC_VERSION_MACRO);
-
- // add these to private table
- if( scannerData.getScanner().getDefinition( __ATTRIBUTE__) == null )
- scannerData.getPrivateDefinitions().put( __ATTRIBUTE__, ATTRIBUTE_MACRO);
-
- if( scannerData.getScanner().getDefinition( __DECLSPEC) == null )
- scannerData.getPrivateDefinitions().put( __DECLSPEC, DECLSPEC_MACRO );
-
- if( scannerData.getScanner().getDefinition( __EXTENSION__ ) == null )
- scannerData.getPrivateDefinitions().put( __EXTENSION__, EXTENSION_MACRO);
-
- if( scannerData.getScanner().getDefinition( __CONST__ ) == null )
- scannerData.getPrivateDefinitions().put( __CONST__, __CONST__MACRO);
- if( scannerData.getScanner().getDefinition( __CONST ) == null )
- scannerData.getPrivateDefinitions().put( __CONST, __CONST_MACRO);
- if( scannerData.getScanner().getDefinition( __INLINE__ ) == null )
- scannerData.getPrivateDefinitions().put( __INLINE__, __INLINE__MACRO);
- if( scannerData.getScanner().getDefinition( __SIGNED__ ) == null )
- scannerData.getPrivateDefinitions().put( __SIGNED__, __SIGNED__MACRO);
- if( scannerData.getScanner().getDefinition( __VOLATILE__ ) == null )
- scannerData.getPrivateDefinitions().put( __VOLATILE__, __VOLATILE__MACRO);
- ObjectMacroDescriptor __RESTRICT_MACRO = new ObjectMacroDescriptor( __RESTRICT, Keywords.RESTRICT );
- if( scannerData.getScanner().getDefinition( __RESTRICT ) == null )
- scannerData.getPrivateDefinitions().put( __RESTRICT, __RESTRICT_MACRO);
- if( scannerData.getScanner().getDefinition( __RESTRICT__ ) == null )
- scannerData.getPrivateDefinitions().put( __RESTRICT__, __RESTRICT__MACRO);
- if( scannerData.getScanner().getDefinition( __TYPEOF__ ) == null )
- scannerData.getPrivateDefinitions().put( __TYPEOF__, __TYPEOF__MACRO);
- if( scannerData.getLanguage() == ParserLanguage.CPP )
- if( scannerData.getScanner().getDefinition( __ASM__ ) == null )
- scannerData.getPrivateDefinitions().put( __ASM__, __ASM__MACRO);
-
- }
-
- private static final Set directives;
- static
- {
- directives = new HashSet();
- directives.add( POUND_INCLUDE_NEXT );
- directives.add( POUND_WARNING);
- directives.add( POUND_IDENT);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.parser.extension.IScannerExtension#canHandlePreprocessorDirective(java.lang.String)
- */
- public boolean canHandlePreprocessorDirective(String directive) {
- return directives.contains( directive );
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.parser.extension.IScannerExtension#handlePreprocessorDirective(java.lang.String, java.lang.String)
- */
- public void handlePreprocessorDirective(IScannerData iscanner, String directive, String restOfLine) {
- if( directive.equals(POUND_INCLUDE_NEXT) )
- {
- TraceUtil.outputTrace(iscanner.getLogService(), "GCCScannerExtension handling #include_next directive", null, null, null, null); //$NON-NLS-1$
- // figure out the name of the current file and its path
- IScannerContext context = iscanner.getContextStack().getCurrentContext();
- if( context == null || context.getKind() != IScannerContext.ContextKind.INCLUSION )
- return;
-
- String fullInclusionPath = context.getContextName();
- IASTInclusion inclusion = ((ScannerContextInclusion)context).getExtension();
-
- Iterator iter = iscanner.getIncludePathNames().iterator();
-
- while (iter.hasNext()) {
- String path = (String)iter.next();
- String completePath = ScannerUtility.createReconciledPath(path, inclusion.getName() );
- if( completePath.equals( fullInclusionPath ) )
- break;
- }
-
- ScannerUtility.InclusionDirective parsedDirective = null;
- try {
- parsedDirective = iscanner.parseInclusionDirective( restOfLine, iscanner.getContextStack().getCurrentContext().getOffset() );
- } catch (InclusionParseException e) {
- return;
- }
- CodeReader duple = null;
- // search through include paths
- while (iter.hasNext()) {
- String path = (String)iter.next();
- String finalPath = ScannerUtility.createReconciledPath(path, parsedDirective.getFilename());
- duple = (CodeReader)iscanner.getFileCache().get(finalPath);
- if (duple == null) {
- duple = ScannerUtility.createReaderDuple( finalPath, iscanner.getClientRequestor(), iscanner.getWorkingCopies() );
- if (duple != null && duple.isFile())
- iscanner.getFileCache().put(duple.filename, duple);
- }
- if( duple != null )
- break;
- }
-
- if( duple != null )
- {
- try
- {
- iscanner.getContextStack().updateInclusionContext(duple, inclusion, iscanner.getClientRequestor() );
- TraceUtil.outputTrace( iscanner.getLogService(), "GCCScannerExtension handling #include_next directive successfully pushed on new include file" ); //$NON-NLS-1$
- }
- catch (ContextException e1)
- {
- return;
- }
- }
-
- }
- else if( directive.equals( POUND_WARNING) || directive.equals(POUND_IDENT))
- return; // good enough -- the rest of the line has been consumed
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.parser.extension.IScannerExtension#offersDifferentIdentifierCharacters()
- */
- public boolean offersDifferentIdentifierCharacters() {
- return true;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.parser.extension.IScannerExtension#isValidIdentifierStartCharacter(int)
- */
- public boolean isValidIdentifierStartCharacter(int c) {
- return Character.isLetter((char)c) || ( c == '_') || ( c == '$' );
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.parser.extension.IScannerExtension#isValidIdentifierCharacter(int)
- */
- public boolean isValidIdentifierCharacter(int c) {
- return ((c >= 'a') && (c <= 'z'))
- || ((c >= 'A') && (c <= 'Z'))
- || ((c >= '0') && (c <= '9'))
- || (c == '_') || ( c== '$' ) ||
- Character.isUnicodeIdentifierPart( (char)c);
- }
-
- private static final Map additionalCPPKeywords;
- private static final Map additionalCKeywords;
- private static final Map additionalCPPOperators;
- private static final Map additionalCOperators;
- private static final String MAX_OPERATOR = ">?"; //$NON-NLS-1$
- private static final String MIN_OPERATOR = "<?"; //$NON-NLS-1$
-
- static
- {
- additionalCKeywords = new HashMap();
- additionalCKeywords.put( GCCKeywords.__ALIGNOF__, new Integer( IGCCToken.t___alignof__ ));
- additionalCKeywords.put( GCCKeywords.TYPEOF, new Integer( IGCCToken.t_typeof ));
- additionalCPPKeywords = new HashMap(additionalCKeywords);
- additionalCPPKeywords.put( Keywords.RESTRICT, new Integer( IToken.t_restrict ));
-
- additionalCOperators = new HashMap();
-
- additionalCPPOperators = new HashMap();
- additionalCPPOperators.put( MAX_OPERATOR, new Integer( IGCCToken.tMAX ) );
- additionalCPPOperators.put( MIN_OPERATOR, new Integer( IGCCToken.tMIN ) );
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.parser.extension.IScannerExtension#isExtensionKeyword()
- */
- public boolean isExtensionKeyword(ParserLanguage language, String tokenImage) {
- if( language == ParserLanguage.CPP )
- return ( additionalCPPKeywords.get( tokenImage ) != null );
- else if( language == ParserLanguage.C )
- return ( additionalCKeywords.get( tokenImage ) != null );
- return false;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.parser.extension.IScannerExtension#createExtensionToken()
- */
- public IToken createExtensionToken(IScannerData scannerData, String image) {
- Integer get = null;
- if( scannerData.getLanguage() == ParserLanguage.CPP )
- {
- get = (Integer) additionalCPPKeywords.get( image );
- if( get == null )
- get = (Integer) additionalCPPOperators.get( image );
- }
- else if( scannerData.getLanguage() == ParserLanguage.C )
- {
- get = (Integer) additionalCKeywords.get( image );
- if( get == null )
- get = (Integer) additionalCOperators.get( image );
- }
- if( get == null ) return null;
- return TokenFactory.createUniquelyImagedToken(get.intValue(),image,scannerData);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.parser.extension.IScannerExtension#isExtensionOperator(java.lang.String)
- */
- public boolean isExtensionOperator(ParserLanguage language, String query) {
- if( language == ParserLanguage.CPP )
- return ( additionalCPPOperators.get( query ) != null );
- else if (language == ParserLanguage.C )
- return ( additionalCOperators.get( query ) != null );
- return false;
- }
-
-}

Back to the top