1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-06-09 10:46:02 +02:00

Made as many built-in Scanner-internal macros constants as possible.

This commit is contained in:
John Camelon 2004-05-11 14:51:59 +00:00
parent d3e35385a3
commit a92b1a4015
2 changed files with 72 additions and 57 deletions

View file

@ -36,33 +36,11 @@ import org.eclipse.cdt.internal.core.parser.util.TraceUtil;
*/
public class GCCScannerExtension implements IScannerExtension {
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$
private static final String __CONST = "__const"; //$NON-NLS-1$
private static final String __INLINE__ = "__inline__"; //$NON-NLS-1$
private static final String __VOLATILE__ = "__volatile__"; //$NON-NLS-1$
private static final String __SIGNED__ = "__signed__"; //$NON-NLS-1$
private static final String __RESTRICT = "__restrict"; //$NON-NLS-1$
private static final String __RESTRICT__ = "__restrict__"; //$NON-NLS-1$
private static final String __ASM__ = "__asm__"; //$NON-NLS-1$
private static final String __TYPEOF__ = "__typeof__"; //$NON-NLS-1$
private static final String __ATTRIBUTE__ = "__attribute__"; //$NON-NLS-1$
private static final String __DECLSPEC = "__declspec"; //$NON-NLS-1$
private static final List EMPTY_LIST = new ArrayList();
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 List simpleIdentifiersDeclSpec;
private static final List simpleIdentifiersAttribute;
private static final String __EXTENSION__ = "__extension__"; //$NON-NLS-1$
private static final String EMPTY_STRING = ""; //$NON-NLS-1$
static
{
simpleIdentifiersDeclSpec = new ArrayList( 1 );
@ -71,6 +49,41 @@ public class GCCScannerExtension implements IScannerExtension {
simpleIdentifiersAttribute = new ArrayList( 1 );
simpleIdentifiersAttribute.add( "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 List EMPTY_LIST = new ArrayList();
protected static final FunctionMacroDescriptor DECLSPEC_MACRO = new FunctionMacroDescriptor( __ATTRIBUTE__, simpleIdentifiersDeclSpec, EMPTY_LIST, "" ); //$NON-NLS-1$
protected static final FunctionMacroDescriptor ATTRIBUTE_MACRO = new FunctionMacroDescriptor( __ATTRIBUTE__, simpleIdentifiersAttribute, EMPTY_LIST, "" ); //$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)
*/
@ -87,48 +100,46 @@ public class GCCScannerExtension implements IScannerExtension {
if( scannerData.getLanguage() == ParserLanguage.CPP )
if( scannerData.getScanner().getDefinition( IScanner.__CPLUSPLUS ) == null )
scannerData.getScanner().addDefinition( IScanner.__CPLUSPLUS, new ObjectMacroDescriptor( IScanner.__CPLUSPLUS, "1")); //$NON-NLS-1$
scannerData.getScanner().addDefinition( IScanner.__CPLUSPLUS, CPLUSPLUS_MACRO);
if( scannerData.getScanner().getDefinition(IScanner.__STDC_HOSTED__) == null )
scannerData.getScanner().addDefinition(IScanner.__STDC_HOSTED__, new ObjectMacroDescriptor( IScanner.__STDC_HOSTED__, "0")); //$NON-NLS-1$
scannerData.getScanner().addDefinition(IScanner.__STDC_HOSTED__, STDC_HOSTED_MACRO);
if( scannerData.getScanner().getDefinition( IScanner.__STDC_VERSION__) == null )
scannerData.getScanner().addDefinition( IScanner.__STDC_VERSION__, new ObjectMacroDescriptor( IScanner.__STDC_VERSION__, "199001L")); //$NON-NLS-1$
scannerData.getScanner().addDefinition( IScanner.__STDC_VERSION__, STDC_VERSION_MACRO);
//TODO - these macros should not be visible as macros in the scanner's definition list
//need to make a public/private table i think
// add these to private table
if( scannerData.getScanner().getDefinition( __ATTRIBUTE__) == null )
scannerData.getPrivateDefinitions().put( __ATTRIBUTE__, new FunctionMacroDescriptor( __ATTRIBUTE__, simpleIdentifiersDeclSpec, EMPTY_LIST, "" )); //$NON-NLS-1$ $NON-NLS-2$
scannerData.getPrivateDefinitions().put( __ATTRIBUTE__, ATTRIBUTE_MACRO);
if( scannerData.getScanner().getDefinition( __DECLSPEC) == null )
scannerData.getPrivateDefinitions().put( __DECLSPEC, new FunctionMacroDescriptor( __ATTRIBUTE__, simpleIdentifiersDeclSpec, EMPTY_LIST, "" )); //$NON-NLS-1$ $NON-NLS-2$
scannerData.getPrivateDefinitions().put( __DECLSPEC, DECLSPEC_MACRO );
if( scannerData.getScanner().getDefinition( __EXTENSION__ ) == null )
scannerData.getPrivateDefinitions().put( __EXTENSION__, new ObjectMacroDescriptor( __EXTENSION__, EMPTY_STRING ));
scannerData.getPrivateDefinitions().put( __EXTENSION__, EXTENSION_MACRO);
setupAlternativeKeyword(scannerData, __CONST__, Keywords.CONST);
setupAlternativeKeyword(scannerData, __CONST, Keywords.CONST);
setupAlternativeKeyword(scannerData, __INLINE__, Keywords.INLINE);
setupAlternativeKeyword(scannerData, __SIGNED__, Keywords.SIGNED);
setupAlternativeKeyword(scannerData, __VOLATILE__, Keywords.VOLATILE);
setupAlternativeKeyword( scannerData, __RESTRICT, Keywords.RESTRICT);
setupAlternativeKeyword( scannerData, __RESTRICT__, Keywords.RESTRICT);
setupAlternativeKeyword( scannerData, __TYPEOF__, GCCKeywords.TYPEOF );
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 )
setupAlternativeKeyword( scannerData, __ASM__, Keywords.ASM );
if( scannerData.getScanner().getDefinition( __ASM__ ) == null )
scannerData.getPrivateDefinitions().put( __ASM__, __ASM__MACRO);
}
/**
* @param scannerData TODO
*
*/
protected void setupAlternativeKeyword(IScannerData scannerData, String keyword, String mapping) {
// alternate keyword forms
// TODO - make this more efficient - update TokenFactory to avoid a context push for these token to token cases
if( scannerData.getScanner().getDefinition( keyword ) == null )
scannerData.getPrivateDefinitions().put( keyword, new ObjectMacroDescriptor( __CONST__, mapping )); //$NON-NLS-1$
}
private static final Set directives;
static
{

View file

@ -69,6 +69,10 @@ import org.eclipse.cdt.internal.core.parser.util.TraceUtil;
public class Scanner implements IScanner {
private static final ObjectMacroDescriptor CPLUSPLUS_MACRO = new ObjectMacroDescriptor( __CPLUSPLUS, "199711L"); //$NON-NLS-1$
private static final ObjectMacroDescriptor STDC_VERSION_MACRO = new ObjectMacroDescriptor( __STDC_VERSION__, "199001L"); //$NON-NLS-1$
protected static final ObjectMacroDescriptor STDC_HOSTED_MACRO = new ObjectMacroDescriptor( __STDC_HOSTED__, "0"); //$NON-NLS-1$
protected static final ObjectMacroDescriptor STDC_MACRO = new ObjectMacroDescriptor( __STDC__, "1"); //$NON-NLS-1$
private static final NullSourceElementRequestor NULL_REQUESTOR = new NullSourceElementRequestor();
private final static String SCRATCH = "<scratch>"; //$NON-NLS-1$
protected final IScannerData scannerData;
@ -181,18 +185,18 @@ public class Scanner implements IScanner {
scannerExtension.setupBuiltInMacros(scannerData);
if( getDefinition(__STDC__) == null )
addDefinition( __STDC__, new ObjectMacroDescriptor( __STDC__, "1") ); //$NON-NLS-1$
addDefinition( __STDC__, STDC_MACRO );
if( scannerData.getLanguage() == ParserLanguage.C )
{
if( getDefinition(__STDC_HOSTED__) == null )
addDefinition( __STDC_HOSTED__, new ObjectMacroDescriptor( __STDC_HOSTED__, "0")); //$NON-NLS-1$
addDefinition( __STDC_HOSTED__, STDC_HOSTED_MACRO);
if( getDefinition( __STDC_VERSION__) == null )
addDefinition( __STDC_VERSION__, new ObjectMacroDescriptor( __STDC_VERSION__, "199001L")); //$NON-NLS-1$
addDefinition( __STDC_VERSION__, STDC_VERSION_MACRO);
}
else
if( getDefinition( __CPLUSPLUS ) == null )
addDefinition( __CPLUSPLUS, new ObjectMacroDescriptor( __CPLUSPLUS, "199711L")); //$NON-NLS-1$
addDefinition( __CPLUSPLUS, CPLUSPLUS_MACRO); //$NON-NLS-1$
if( getDefinition(__FILE__) == null )
addDefinition( __FILE__,