mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-07-31 21:05:37 +02:00
Fix for Bug 120607 - C/C++ Indexer rejects valid pre-processor directive
This commit is contained in:
parent
2786bd52fb
commit
3f7444610f
21 changed files with 397 additions and 106 deletions
|
@ -61,6 +61,7 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNamedTypeSpecifier;
|
||||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNamespaceDefinition;
|
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNamespaceDefinition;
|
||||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNewExpression;
|
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNewExpression;
|
||||||
import org.eclipse.cdt.core.parser.ParserLanguage;
|
import org.eclipse.cdt.core.parser.ParserLanguage;
|
||||||
|
import org.eclipse.cdt.internal.core.dom.parser.ASTNode;
|
||||||
import org.eclipse.cdt.internal.core.parser.ParserException;
|
import org.eclipse.cdt.internal.core.parser.ParserException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -195,6 +196,7 @@ public class DOMLocationTests extends AST2BaseTest {
|
||||||
* @param length
|
* @param length
|
||||||
*/
|
*/
|
||||||
private void assertSoleLocation(IASTNode n, int offset, int length) {
|
private void assertSoleLocation(IASTNode n, int offset, int length) {
|
||||||
|
assertEquals(length, ((ASTNode)n).getLength());
|
||||||
IASTNodeLocation[] locations = n.getNodeLocations();
|
IASTNodeLocation[] locations = n.getNodeLocations();
|
||||||
assertEquals(1, locations.length);
|
assertEquals(1, locations.length);
|
||||||
IASTNodeLocation nodeLocation = locations[0];
|
IASTNodeLocation nodeLocation = locations[0];
|
||||||
|
@ -695,4 +697,29 @@ public class DOMLocationTests extends AST2BaseTest {
|
||||||
assertTrue(expr instanceof IASTTypeIdExpression);
|
assertTrue(expr instanceof IASTTypeIdExpression);
|
||||||
assertSoleLocation(expr, buffer.indexOf("sizeof"), "sizeof(int)".length());
|
assertSoleLocation(expr, buffer.indexOf("sizeof"), "sizeof(int)".length());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testBug120607() throws Exception {
|
||||||
|
// C/C++ Indexer rejects valid pre-processor directive
|
||||||
|
// https://bugs.eclipse.org/bugs/show_bug.cgi?id=120607
|
||||||
|
StringBuffer buffer = new StringBuffer();
|
||||||
|
buffer.append("#import \"include_once.h\"\n");
|
||||||
|
buffer.append("#warning \"deprecated include\"\n");
|
||||||
|
buffer.append("#line 5\n");
|
||||||
|
buffer.append("# 5 \"foo.h\"\n");
|
||||||
|
buffer.append("#ident \"version 1.0\"\n");
|
||||||
|
buffer.append("#assert thisIsTrue(value)\n");
|
||||||
|
buffer.append("#unassert thisIsTrue(value)\n");
|
||||||
|
buffer.append("#invalid");
|
||||||
|
String code= buffer.toString();
|
||||||
|
IASTTranslationUnit tu = parse(code, ParserLanguage.CPP, true, false);
|
||||||
|
|
||||||
|
IASTProblem[] problems= tu.getPreprocessorProblems();
|
||||||
|
assertEquals(3, problems.length);
|
||||||
|
assertEquals(IASTProblem.PREPROCESSOR_INCLUSION_NOT_FOUND, problems[0].getID());
|
||||||
|
assertEquals(IASTProblem.PREPROCESSOR_POUND_WARNING, problems[1].getID());
|
||||||
|
assertEquals(IASTProblem.PREPROCESSOR_INVALID_DIRECTIVE, problems[2].getID());
|
||||||
|
assertSoleLocation(problems[0], code, "#import \"include_once.h\"");
|
||||||
|
assertSoleLocation(problems[1], code, "\"deprecated include\"");
|
||||||
|
assertSoleLocation(problems[2], code, "invalid");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -147,6 +147,12 @@ public interface IASTProblem extends IASTNode {
|
||||||
public final static String A_PREPROC_POUND_ERROR = ParserMessages
|
public final static String A_PREPROC_POUND_ERROR = ParserMessages
|
||||||
.getString("IProblem.preproc.poundError"); //$NON-NLS-1$
|
.getString("IProblem.preproc.poundError"); //$NON-NLS-1$
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The text that follows a #warning preprocessor directive
|
||||||
|
*/
|
||||||
|
public final static String A_PREPROC_POUND_WARNING = ParserMessages
|
||||||
|
.getString("IProblem.preproc.poundWarning"); //$NON-NLS-1$
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The filename that failed somehow in an preprocessor include directive
|
* The filename that failed somehow in an preprocessor include directive
|
||||||
*/
|
*/
|
||||||
|
@ -400,6 +406,14 @@ public interface IASTProblem extends IASTNode {
|
||||||
*/
|
*/
|
||||||
public final static int PREPROCESSOR_INVALID_VA_ARGS = PREPROCESSOR_RELATED | 0x00D;
|
public final static int PREPROCESSOR_INVALID_VA_ARGS = PREPROCESSOR_RELATED | 0x00D;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* #warning encountered by Preprocessor. Required attributes:
|
||||||
|
* A_PREPROC_POUND_WARNING
|
||||||
|
*
|
||||||
|
* @see #A_PREPROC_POUND_WARNING
|
||||||
|
*/
|
||||||
|
public final static int PREPROCESSOR_POUND_WARNING = PREPROCESSOR_RELATED | 0x00E;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Parser Syntactic Problems
|
* Parser Syntactic Problems
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Copyright (c) 2002, 2006 IBM Corporation and others.
|
* Copyright (c) 2002, 2007 IBM Corporation and others.
|
||||||
* All rights reserved. This program and the accompanying materials
|
* All rights reserved. This program and the accompanying materials
|
||||||
* are made available under the terms of the Eclipse Public License v1.0
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
* which accompanies this distribution, and is available at
|
* which accompanies this distribution, and is available at
|
||||||
|
@ -16,4 +16,5 @@ package org.eclipse.cdt.core.parser;
|
||||||
*/
|
*/
|
||||||
public class EndOfFileException extends Exception
|
public class EndOfFileException extends Exception
|
||||||
{
|
{
|
||||||
|
private static final long serialVersionUID= 1607883323361197919L;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,103 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2007 Wind River Systems, Inc. and others.
|
||||||
|
* All rights reserved. This program and the accompanying materials
|
||||||
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
|
* which accompanies this distribution, and is available at
|
||||||
|
* http://www.eclipse.org/legal/epl-v10.html
|
||||||
|
*
|
||||||
|
* Contributors:
|
||||||
|
* Anton Leherbauer (Wind River Systems) - initial API and implementation
|
||||||
|
*******************************************************************************/
|
||||||
|
package org.eclipse.cdt.core.parser;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constants for supported preprocessor directive types.
|
||||||
|
*
|
||||||
|
* @since 4.0
|
||||||
|
*/
|
||||||
|
public interface IPreprocessorDirective {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Special constant indicating to ignore the preprocessor directive.
|
||||||
|
*/
|
||||||
|
public static final int ppIgnore= -2;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Special constant indicating to mark the preprocessor directive as invalid.
|
||||||
|
*/
|
||||||
|
public static final int ppInvalid= -1;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Standard preprocessor directive <code>#if</code>.
|
||||||
|
*/
|
||||||
|
public static final int ppIf= 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Standard preprocessor directive <code>#ifdef</code>.
|
||||||
|
*/
|
||||||
|
public static final int ppIfdef= 1;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Standard preprocessor directive <code>#ifndef</code>.
|
||||||
|
*/
|
||||||
|
public static final int ppIfndef= 2;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Standard preprocessor directive <code>#elif</code>.
|
||||||
|
*/
|
||||||
|
public static final int ppElif= 3;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Standard preprocessor directive <code>#else</code>.
|
||||||
|
*/
|
||||||
|
public static final int ppElse= 4;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Standard preprocessor directive <code>#endif</code>.
|
||||||
|
*/
|
||||||
|
public static final int ppEndif= 5;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Standard preprocessor directive <code>#include</code>.
|
||||||
|
*/
|
||||||
|
public static final int ppInclude= 6;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Standard preprocessor directive <code>#define</code>.
|
||||||
|
*/
|
||||||
|
public static final int ppDefine= 7;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Standard preprocessor directive <code>#undef</code>.
|
||||||
|
*/
|
||||||
|
public static final int ppUndef= 8;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Standard preprocessor directive <code>#error</code>.
|
||||||
|
*/
|
||||||
|
public static final int ppError= 9;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Standard preprocessor directive <code>#pragma</code>.
|
||||||
|
*/
|
||||||
|
public static final int ppPragma= 10;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GNU preprocessor extension <code>#include_next</code>.
|
||||||
|
* Search include file after the directory of the current file.
|
||||||
|
*/
|
||||||
|
public static final int ppInclude_next= 11;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GNU preprocessor extension <code>#import</code>.
|
||||||
|
* Include only once.
|
||||||
|
*/
|
||||||
|
public static final int ppImport= 12;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GNU preprocessor extension <code>#warning</code>.
|
||||||
|
* Similar to <code>#error</code>.
|
||||||
|
*/
|
||||||
|
public static final int ppWarning= 13;
|
||||||
|
|
||||||
|
}
|
|
@ -166,6 +166,10 @@ public interface IProblem
|
||||||
* The text that follows a #error preprocessor directive
|
* The text that follows a #error preprocessor directive
|
||||||
*/
|
*/
|
||||||
public final static String A_PREPROC_POUND_ERROR = ParserMessages.getString("IProblem.preproc.poundError"); //$NON-NLS-1$
|
public final static String A_PREPROC_POUND_ERROR = ParserMessages.getString("IProblem.preproc.poundError"); //$NON-NLS-1$
|
||||||
|
/**
|
||||||
|
* The text that follows a #warning preprocessor directive
|
||||||
|
*/
|
||||||
|
public final static String A_PREPROC_POUND_WARNING = ParserMessages.getString("IProblem.preproc.poundWarning"); //$NON-NLS-1$
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The filename that failed somehow in an preprocessor include directive
|
* The filename that failed somehow in an preprocessor include directive
|
||||||
|
@ -411,6 +415,13 @@ public interface IProblem
|
||||||
*/
|
*/
|
||||||
public final static int PREPROCESSOR_INVALID_VA_ARGS = PREPROCESSOR_RELATED | 0x00D;
|
public final static int PREPROCESSOR_INVALID_VA_ARGS = PREPROCESSOR_RELATED | 0x00D;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* #warning encountered by Preprocessor.
|
||||||
|
* Required attributes: A_PREPROC_POUND_WARNING
|
||||||
|
* @see #A_PREPROC_POUND_WARNING
|
||||||
|
*/
|
||||||
|
public final static int PREPROCESSOR_POUND_WARNING = PREPROCESSOR_RELATED | 0x00E;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Parser Syntactic Problems
|
* Parser Syntactic Problems
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -20,12 +20,12 @@ import org.eclipse.cdt.internal.core.parser.scanner2.ILocationResolver;
|
||||||
* @author jcamelon
|
* @author jcamelon
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public interface IScanner {
|
public interface IScanner {
|
||||||
|
|
||||||
public static final int tPOUNDPOUND = -6;
|
public static final int tPOUNDPOUND = -6;
|
||||||
public static final int tPOUND = -7;
|
public static final int tPOUND = -7;
|
||||||
|
|
||||||
public void setOffsetBoundary( int offset );
|
public void setOffsetBoundary( int offset );
|
||||||
public void setContentAssistMode( int offset );
|
public void setContentAssistMode( int offset );
|
||||||
public void setASTFactory( IASTFactory f );
|
public void setASTFactory( IASTFactory f );
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Copyright (c) 2002, 2006 IBM Corporation and others.
|
* Copyright (c) 2002, 2007 IBM Corporation and others.
|
||||||
* All rights reserved. This program and the accompanying materials
|
* All rights reserved. This program and the accompanying materials
|
||||||
* are made available under the terms of the Eclipse Public License v1.0
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
* which accompanies this distribution, and is available at
|
* which accompanies this distribution, and is available at
|
||||||
|
@ -7,6 +7,7 @@
|
||||||
*
|
*
|
||||||
* Contributors:
|
* Contributors:
|
||||||
* IBM Rational Software - Initial API and implementation
|
* IBM Rational Software - Initial API and implementation
|
||||||
|
* Anton Leherbauer (Wind River Systems)
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
package org.eclipse.cdt.core.parser;
|
package org.eclipse.cdt.core.parser;
|
||||||
|
|
||||||
|
@ -242,6 +243,15 @@ public class Keywords {
|
||||||
public static final char[] cDEFINE = "define".toCharArray(); //$NON-NLS-1$
|
public static final char[] cDEFINE = "define".toCharArray(); //$NON-NLS-1$
|
||||||
public static final char[] cUNDEF = "undef".toCharArray(); //$NON-NLS-1$
|
public static final char[] cUNDEF = "undef".toCharArray(); //$NON-NLS-1$
|
||||||
public static final char[] cERROR = "error".toCharArray(); //$NON-NLS-1$
|
public static final char[] cERROR = "error".toCharArray(); //$NON-NLS-1$
|
||||||
public static final char[] cINCLUDE_NEXT = "include_next".toCharArray(); //$NON-NLS-1$
|
|
||||||
public static final char[] cPRAGMA = "pragma".toCharArray(); //$NON-NLS-1$
|
public static final char[] cPRAGMA = "pragma".toCharArray(); //$NON-NLS-1$
|
||||||
|
public static final char[] cLINE = "line".toCharArray(); //$NON-NLS-1$
|
||||||
|
|
||||||
|
// preprocessor extensions (supported by GCC)
|
||||||
|
public static final char[] cINCLUDE_NEXT = "include_next".toCharArray(); //$NON-NLS-1$
|
||||||
|
public static final char[] cIMPORT = "import".toCharArray(); //$NON-NLS-1$
|
||||||
|
public static final char[] cIDENT = "ident".toCharArray(); //$NON-NLS-1$
|
||||||
|
public static final char[] cSCCS = "sccs".toCharArray(); //$NON-NLS-1$
|
||||||
|
public static final char[] cWARNING = "warning".toCharArray(); //$NON-NLS-1$
|
||||||
|
public static final char[] cASSERT = "assert".toCharArray(); //$NON-NLS-1$
|
||||||
|
public static final char[] cUNASSERT = "unassert".toCharArray(); //$NON-NLS-1$
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Copyright (c) 2002, 2006 IBM Corporation and others.
|
* Copyright (c) 2002, 2007 IBM Corporation and others.
|
||||||
* All rights reserved. This program and the accompanying materials
|
* All rights reserved. This program and the accompanying materials
|
||||||
* are made available under the terms of the Eclipse Public License v1.0
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
* which accompanies this distribution, and is available at
|
* which accompanies this distribution, and is available at
|
||||||
|
@ -17,6 +17,8 @@ import org.eclipse.cdt.core.parser.ast.IASTCompletionNode;
|
||||||
*/
|
*/
|
||||||
public class OffsetLimitReachedException extends EndOfFileException {
|
public class OffsetLimitReachedException extends EndOfFileException {
|
||||||
|
|
||||||
|
private static final long serialVersionUID= -4315255081891716385L;
|
||||||
|
|
||||||
private final IASTCompletionNode node;
|
private final IASTCompletionNode node;
|
||||||
private final IToken finalToken;
|
private final IToken finalToken;
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Copyright (c) 2002, 2006 IBM Corporation and others.
|
* Copyright (c) 2002, 2007 IBM Corporation and others.
|
||||||
* All rights reserved. This program and the accompanying materials
|
* All rights reserved. This program and the accompanying materials
|
||||||
* are made available under the terms of the Eclipse Public License v1.0
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
* which accompanies this distribution, and is available at
|
* which accompanies this distribution, and is available at
|
||||||
|
@ -15,6 +15,8 @@ package org.eclipse.cdt.core.parser;
|
||||||
*/
|
*/
|
||||||
public class ParseError extends Error {
|
public class ParseError extends Error {
|
||||||
|
|
||||||
|
private static final long serialVersionUID= -3626877473345356953L;
|
||||||
|
|
||||||
private final ParseErrorKind errorKind;
|
private final ParseErrorKind errorKind;
|
||||||
|
|
||||||
public static class ParseErrorKind extends Enum
|
public static class ParseErrorKind extends Enum
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Copyright (c) 2002, 2006 IBM Corporation and others.
|
* Copyright (c) 2002, 2007 IBM Corporation and others.
|
||||||
* All rights reserved. This program and the accompanying materials
|
* All rights reserved. This program and the accompanying materials
|
||||||
* are made available under the terms of the Eclipse Public License v1.0
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
* which accompanies this distribution, and is available at
|
* which accompanies this distribution, and is available at
|
||||||
|
@ -16,6 +16,8 @@ package org.eclipse.cdt.core.parser;
|
||||||
*/
|
*/
|
||||||
public class ParserFactoryError extends Error {
|
public class ParserFactoryError extends Error {
|
||||||
|
|
||||||
|
private static final long serialVersionUID= -2692315766161768983L;
|
||||||
|
|
||||||
public static class Kind extends Enum {
|
public static class Kind extends Enum {
|
||||||
|
|
||||||
public static final Kind NULL_READER = new Kind( 1 );
|
public static final Kind NULL_READER = new Kind( 1 );
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Copyright (c) 2004, 2006 IBM Corporation and others.
|
* Copyright (c) 2004, 2007 IBM Corporation and others.
|
||||||
* All rights reserved. This program and the accompanying materials
|
* All rights reserved. This program and the accompanying materials
|
||||||
* are made available under the terms of the Eclipse Public License v1.0
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
* which accompanies this distribution, and is available at
|
* which accompanies this distribution, and is available at
|
||||||
|
@ -8,6 +8,7 @@
|
||||||
* Contributors:
|
* Contributors:
|
||||||
* IBM - Initial API and implementation
|
* IBM - Initial API and implementation
|
||||||
* Yuan Zhang / Beth Tibbitts (IBM Research)
|
* Yuan Zhang / Beth Tibbitts (IBM Research)
|
||||||
|
* Anton Leherbauer (Wind River Systems)
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
package org.eclipse.cdt.internal.core.dom.parser.c;
|
package org.eclipse.cdt.internal.core.dom.parser.c;
|
||||||
|
|
||||||
|
@ -120,6 +121,8 @@ public class CASTProblem extends CASTNode implements IASTProblem {
|
||||||
new Integer(IASTProblem.PREPROCESSOR_POUND_ERROR),
|
new Integer(IASTProblem.PREPROCESSOR_POUND_ERROR),
|
||||||
ParserMessages
|
ParserMessages
|
||||||
.getString("ScannerProblemFactory.error.preproc.error")); //$NON-NLS-1$
|
.getString("ScannerProblemFactory.error.preproc.error")); //$NON-NLS-1$
|
||||||
|
errorMessages.put(new Integer(IASTProblem.PREPROCESSOR_POUND_WARNING), ParserMessages
|
||||||
|
.getString("ScannerProblemFactory.error.preproc.warning")); //$NON-NLS-1$
|
||||||
errorMessages
|
errorMessages
|
||||||
.put(
|
.put(
|
||||||
new Integer(IASTProblem.PREPROCESSOR_INCLUSION_NOT_FOUND),
|
new Integer(IASTProblem.PREPROCESSOR_INCLUSION_NOT_FOUND),
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
*
|
*
|
||||||
* Contributors:
|
* Contributors:
|
||||||
* IBM - Initial API and implementation
|
* IBM - Initial API and implementation
|
||||||
|
* Anton Leherbauer (Wind River Systems)
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
package org.eclipse.cdt.internal.core.dom.parser.cpp;
|
package org.eclipse.cdt.internal.core.dom.parser.cpp;
|
||||||
|
|
||||||
|
@ -118,6 +119,8 @@ public class CPPASTProblem extends CPPASTNode implements IASTProblem {
|
||||||
new Integer(IASTProblem.PREPROCESSOR_POUND_ERROR),
|
new Integer(IASTProblem.PREPROCESSOR_POUND_ERROR),
|
||||||
ParserMessages
|
ParserMessages
|
||||||
.getString("ScannerProblemFactory.error.preproc.error")); //$NON-NLS-1$
|
.getString("ScannerProblemFactory.error.preproc.error")); //$NON-NLS-1$
|
||||||
|
errorMessages.put(new Integer(IASTProblem.PREPROCESSOR_POUND_WARNING), ParserMessages
|
||||||
|
.getString("ScannerProblemFactory.error.preproc.warning")); //$NON-NLS-1$
|
||||||
errorMessages
|
errorMessages
|
||||||
.put(
|
.put(
|
||||||
new Integer(IASTProblem.PREPROCESSOR_INCLUSION_NOT_FOUND),
|
new Integer(IASTProblem.PREPROCESSOR_INCLUSION_NOT_FOUND),
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# Copyright (c) 2005, 2006 IBM Corporation and others.
|
# Copyright (c) 2005, 2007 IBM Corporation and others.
|
||||||
# All rights reserved. This program and the accompanying materials
|
# All rights reserved. This program and the accompanying materials
|
||||||
# are made available under the terms of the Eclipse Public License v1.0
|
# are made available under the terms of the Eclipse Public License v1.0
|
||||||
# which accompanies this distribution, and is available at
|
# which accompanies this distribution, and is available at
|
||||||
|
@ -7,10 +7,12 @@
|
||||||
#
|
#
|
||||||
# Contributors:
|
# Contributors:
|
||||||
# IBM Rational Software - Initial API and implementation
|
# IBM Rational Software - Initial API and implementation
|
||||||
|
# Anton Leherbauer (Wind River Systems)
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
||||||
IProblem.unknownFileName=<unknown>
|
IProblem.unknownFileName=<unknown>
|
||||||
IProblem.preproc.poundError=#error text
|
IProblem.preproc.poundError=#error text
|
||||||
|
IProblem.preproc.poundWarning=#warning text
|
||||||
IProblem.preproc.include=include file
|
IProblem.preproc.include=include file
|
||||||
IProblem.preproc.macro=macro name
|
IProblem.preproc.macro=macro name
|
||||||
IProblem.preproc.condition=preprocessor condition
|
IProblem.preproc.condition=preprocessor condition
|
||||||
|
@ -23,6 +25,7 @@ IProblem.typeName=type name
|
||||||
QuickParseCallback.exception.constIterator=OffsetableIterator is a const iterator
|
QuickParseCallback.exception.constIterator=OffsetableIterator is a const iterator
|
||||||
|
|
||||||
ScannerProblemFactory.error.preproc.error=#error encountered with text: {0}
|
ScannerProblemFactory.error.preproc.error=#error encountered with text: {0}
|
||||||
|
ScannerProblemFactory.error.preproc.warning=#warning encountered with text: {0}
|
||||||
ScannerProblemFactory.error.preproc.inclusionNotFound=Preprocessor Inclusion not found: {0}
|
ScannerProblemFactory.error.preproc.inclusionNotFound=Preprocessor Inclusion not found: {0}
|
||||||
ScannerProblemFactory.error.preproc.definitionNotFound=Macro definition not found: {0}
|
ScannerProblemFactory.error.preproc.definitionNotFound=Macro definition not found: {0}
|
||||||
ScannerProblemFactory.error.preproc.invalidMacroDefn=Macro definition malformed for macro: {0}
|
ScannerProblemFactory.error.preproc.invalidMacroDefn=Macro definition malformed for macro: {0}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Copyright (c) 2002, 2006 IBM Corporation and others.
|
* Copyright (c) 2002, 2007 IBM Corporation and others.
|
||||||
* All rights reserved. This program and the accompanying materials
|
* All rights reserved. This program and the accompanying materials
|
||||||
* are made available under the terms of the Eclipse Public License v1.0
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
* which accompanies this distribution, and is available at
|
* which accompanies this distribution, and is available at
|
||||||
|
@ -7,6 +7,7 @@
|
||||||
*
|
*
|
||||||
* Contributors:
|
* Contributors:
|
||||||
* IBM Rational Software - Initial API and implementation
|
* IBM Rational Software - Initial API and implementation
|
||||||
|
* Anton Leherbauer (Wind River Systems)
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
package org.eclipse.cdt.internal.core.parser.problem;
|
package org.eclipse.cdt.internal.core.parser.problem;
|
||||||
|
|
||||||
|
@ -154,6 +155,8 @@ public class Problem implements IProblem {
|
||||||
errorMessages.put(
|
errorMessages.put(
|
||||||
new Integer(IProblem.PREPROCESSOR_POUND_ERROR),
|
new Integer(IProblem.PREPROCESSOR_POUND_ERROR),
|
||||||
ParserMessages.getString("ScannerProblemFactory.error.preproc.error")); //$NON-NLS-1$
|
ParserMessages.getString("ScannerProblemFactory.error.preproc.error")); //$NON-NLS-1$
|
||||||
|
errorMessages.put(new Integer(IProblem.PREPROCESSOR_POUND_WARNING), ParserMessages
|
||||||
|
.getString("ScannerProblemFactory.error.preproc.warning")); //$NON-NLS-1$
|
||||||
errorMessages.put(
|
errorMessages.put(
|
||||||
new Integer(IProblem.PREPROCESSOR_INCLUSION_NOT_FOUND),
|
new Integer(IProblem.PREPROCESSOR_INCLUSION_NOT_FOUND),
|
||||||
ParserMessages.getString("ScannerProblemFactory.error.preproc.inclusionNotFound")); //$NON-NLS-1$
|
ParserMessages.getString("ScannerProblemFactory.error.preproc.inclusionNotFound")); //$NON-NLS-1$
|
||||||
|
|
|
@ -28,6 +28,7 @@ import org.eclipse.cdt.core.parser.IExtendedScannerInfo;
|
||||||
import org.eclipse.cdt.core.parser.IGCCToken;
|
import org.eclipse.cdt.core.parser.IGCCToken;
|
||||||
import org.eclipse.cdt.core.parser.IMacro;
|
import org.eclipse.cdt.core.parser.IMacro;
|
||||||
import org.eclipse.cdt.core.parser.IParserLogService;
|
import org.eclipse.cdt.core.parser.IParserLogService;
|
||||||
|
import org.eclipse.cdt.core.parser.IPreprocessorDirective;
|
||||||
import org.eclipse.cdt.core.parser.IProblem;
|
import org.eclipse.cdt.core.parser.IProblem;
|
||||||
import org.eclipse.cdt.core.parser.IScanner;
|
import org.eclipse.cdt.core.parser.IScanner;
|
||||||
import org.eclipse.cdt.core.parser.IScannerInfo;
|
import org.eclipse.cdt.core.parser.IScannerInfo;
|
||||||
|
@ -41,6 +42,7 @@ import org.eclipse.cdt.core.parser.ParserMode;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTCompletionNode;
|
import org.eclipse.cdt.core.parser.ast.IASTCompletionNode;
|
||||||
import org.eclipse.cdt.core.parser.util.CharArrayIntMap;
|
import org.eclipse.cdt.core.parser.util.CharArrayIntMap;
|
||||||
import org.eclipse.cdt.core.parser.util.CharArrayObjectMap;
|
import org.eclipse.cdt.core.parser.util.CharArrayObjectMap;
|
||||||
|
import org.eclipse.cdt.core.parser.util.CharArraySet;
|
||||||
import org.eclipse.cdt.core.parser.util.CharArrayUtils;
|
import org.eclipse.cdt.core.parser.util.CharArrayUtils;
|
||||||
import org.eclipse.cdt.core.parser.util.CharTable;
|
import org.eclipse.cdt.core.parser.util.CharTable;
|
||||||
import org.eclipse.cdt.internal.core.parser.ast.ASTCompletionNode;
|
import org.eclipse.cdt.internal.core.parser.ast.ASTCompletionNode;
|
||||||
|
@ -70,16 +72,18 @@ abstract class BaseScanner implements IScanner {
|
||||||
protected static class InclusionData {
|
protected static class InclusionData {
|
||||||
|
|
||||||
public final Object inclusion;
|
public final Object inclusion;
|
||||||
|
|
||||||
public final CodeReader reader;
|
public final CodeReader reader;
|
||||||
|
public final boolean includeOnce;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param reader
|
* @param reader
|
||||||
* @param inclusion
|
* @param inclusion
|
||||||
|
* @param includeOnce
|
||||||
*/
|
*/
|
||||||
public InclusionData(CodeReader reader, Object inclusion) {
|
public InclusionData(CodeReader reader, Object inclusion, boolean includeOnce) {
|
||||||
this.reader = reader;
|
this.reader = reader;
|
||||||
this.inclusion = inclusion;
|
this.inclusion = inclusion;
|
||||||
|
this.includeOnce= includeOnce;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String toString() {
|
public String toString() {
|
||||||
|
@ -120,6 +124,9 @@ abstract class BaseScanner implements IScanner {
|
||||||
protected String[] stdIncludePaths;
|
protected String[] stdIncludePaths;
|
||||||
protected String[] locIncludePaths = null;
|
protected String[] locIncludePaths = null;
|
||||||
|
|
||||||
|
/** Set of already included files */
|
||||||
|
protected CharArraySet includedFiles= new CharArraySet(32);
|
||||||
|
|
||||||
int count;
|
int count;
|
||||||
|
|
||||||
protected ExpressionEvaluator expressionEvaluator;
|
protected ExpressionEvaluator expressionEvaluator;
|
||||||
|
@ -177,6 +184,8 @@ abstract class BaseScanner implements IScanner {
|
||||||
|
|
||||||
protected final CharArrayIntMap additionalKeywords;
|
protected final CharArrayIntMap additionalKeywords;
|
||||||
|
|
||||||
|
protected final CharArrayIntMap additionalPPKeywords;
|
||||||
|
|
||||||
protected static class ExpressionEvaluator {
|
protected static class ExpressionEvaluator {
|
||||||
|
|
||||||
private static char[] emptyCharArray = new char[0];
|
private static char[] emptyCharArray = new char[0];
|
||||||
|
@ -1257,6 +1266,16 @@ abstract class BaseScanner implements IScanner {
|
||||||
keywords = cppkeywords;
|
keywords = cppkeywords;
|
||||||
|
|
||||||
additionalKeywords = configuration.getAdditionalKeywords();
|
additionalKeywords = configuration.getAdditionalKeywords();
|
||||||
|
// additionalPPKeywords= configuration.getAdditionalPreprocessorKeywords();
|
||||||
|
// add default GNU extensions (will be paramameterized)
|
||||||
|
additionalPPKeywords= new CharArrayIntMap(8, IPreprocessorDirective.ppInvalid);
|
||||||
|
additionalPPKeywords.put(Keywords.cINCLUDE_NEXT, IPreprocessorDirective.ppInclude_next);
|
||||||
|
additionalPPKeywords.put(Keywords.cIMPORT, IPreprocessorDirective.ppImport);
|
||||||
|
additionalPPKeywords.put(Keywords.cWARNING, IPreprocessorDirective.ppWarning);
|
||||||
|
additionalPPKeywords.put(Keywords.cIDENT, IPreprocessorDirective.ppIgnore);
|
||||||
|
additionalPPKeywords.put(Keywords.cSCCS, IPreprocessorDirective.ppIgnore);
|
||||||
|
additionalPPKeywords.put(Keywords.cASSERT, IPreprocessorDirective.ppIgnore);
|
||||||
|
additionalPPKeywords.put(Keywords.cUNASSERT, IPreprocessorDirective.ppIgnore);
|
||||||
|
|
||||||
setupBuiltInMacros(configuration);
|
setupBuiltInMacros(configuration);
|
||||||
|
|
||||||
|
@ -1379,8 +1398,12 @@ abstract class BaseScanner implements IScanner {
|
||||||
|
|
||||||
protected void pushContext(char[] buffer, Object data) {
|
protected void pushContext(char[] buffer, Object data) {
|
||||||
if (data instanceof InclusionData) {
|
if (data instanceof InclusionData) {
|
||||||
if (isCircularInclusion( (InclusionData)data ))
|
InclusionData inclusionData= (InclusionData)data;
|
||||||
|
if (isCircularInclusion( inclusionData ))
|
||||||
return;
|
return;
|
||||||
|
if (inclusionData.includeOnce && isRepeatedInclusion(inclusionData))
|
||||||
|
return;
|
||||||
|
includedFiles.put(inclusionData.reader.filename);
|
||||||
}
|
}
|
||||||
pushContext(buffer);
|
pushContext(buffer);
|
||||||
bufferData[bufferStackPos] = data;
|
bufferData[bufferStackPos] = data;
|
||||||
|
@ -1405,6 +1428,17 @@ abstract class BaseScanner implements IScanner {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if the given inclusion was already included before.
|
||||||
|
*
|
||||||
|
* @param inclusionData
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private boolean isRepeatedInclusion(InclusionData inclusionData) {
|
||||||
|
return includedFiles.containsKey(inclusionData.reader.filename);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
protected Object popContext() {
|
protected Object popContext() {
|
||||||
//NOTE - do not set counters to 0 or -1 or something
|
//NOTE - do not set counters to 0 or -1 or something
|
||||||
//Subclasses may require those values in their popContext()
|
//Subclasses may require those values in their popContext()
|
||||||
|
@ -1434,7 +1468,7 @@ abstract class BaseScanner implements IScanner {
|
||||||
int l = getLineNumber(o);
|
int l = getLineNumber(o);
|
||||||
Object i = createInclusionConstruct(r.filename, r.filename, false, o,
|
Object i = createInclusionConstruct(r.filename, r.filename, false, o,
|
||||||
l, o, o, l, o, l, true);
|
l, o, o, l, o, l, true);
|
||||||
InclusionData d = new InclusionData(r, i);
|
InclusionData d = new InclusionData(r, i, false);
|
||||||
pushContext(r.buffer, d);
|
pushContext(r.buffer, d);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2633,27 +2667,33 @@ abstract class BaseScanner implements IScanner {
|
||||||
|
|
||||||
int end;
|
int end;
|
||||||
int type = ppKeywords.get(buffer, start, len);
|
int type = ppKeywords.get(buffer, start, len);
|
||||||
if (type != ppKeywords.undefined) {
|
if (type == ppKeywords.undefined) {
|
||||||
|
type= additionalPPKeywords.get(buffer, start, len);
|
||||||
|
}
|
||||||
|
if (type != IPreprocessorDirective.ppInvalid) {
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case ppInclude:
|
case IPreprocessorDirective.ppInclude:
|
||||||
handlePPInclude(pos, false, startingLineNumber, true);
|
handlePPInclude(pos, false, startingLineNumber, true);
|
||||||
return;
|
return;
|
||||||
case ppInclude_next:
|
case IPreprocessorDirective.ppInclude_next:
|
||||||
handlePPInclude(pos, true, startingLineNumber, true);
|
handlePPInclude(pos, true, startingLineNumber, true);
|
||||||
return;
|
return;
|
||||||
case ppDefine:
|
case IPreprocessorDirective.ppImport:
|
||||||
|
handlePPInclude(pos, false, startingLineNumber, true);
|
||||||
|
return;
|
||||||
|
case IPreprocessorDirective.ppDefine:
|
||||||
handlePPDefine(pos, startingLineNumber);
|
handlePPDefine(pos, startingLineNumber);
|
||||||
return;
|
return;
|
||||||
case ppUndef:
|
case IPreprocessorDirective.ppUndef:
|
||||||
handlePPUndef(pos);
|
handlePPUndef(pos);
|
||||||
return;
|
return;
|
||||||
case ppIfdef:
|
case IPreprocessorDirective.ppIfdef:
|
||||||
handlePPIfdef(pos, true);
|
handlePPIfdef(pos, true);
|
||||||
return;
|
return;
|
||||||
case ppIfndef:
|
case IPreprocessorDirective.ppIfndef:
|
||||||
handlePPIfdef(pos, false);
|
handlePPIfdef(pos, false);
|
||||||
return;
|
return;
|
||||||
case ppIf:
|
case IPreprocessorDirective.ppIf:
|
||||||
start = bufferPos[bufferStackPos]+1;
|
start = bufferPos[bufferStackPos]+1;
|
||||||
skipToNewLine();
|
skipToNewLine();
|
||||||
end= bufferPos[bufferStackPos]+1;
|
end= bufferPos[bufferStackPos]+1;
|
||||||
|
@ -2675,13 +2715,13 @@ abstract class BaseScanner implements IScanner {
|
||||||
processIf(pos, end, true);
|
processIf(pos, end, true);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
case ppElse:
|
case IPreprocessorDirective.ppElse:
|
||||||
case ppElif:
|
case IPreprocessorDirective.ppElif:
|
||||||
// Condition must have been true, skip over the rest
|
// Condition must have been true, skip over the rest
|
||||||
|
|
||||||
if (branchState(type == ppElse ? BRANCH_ELSE : BRANCH_ELIF)) {
|
if (branchState(type == IPreprocessorDirective.ppElse ? BRANCH_ELSE : BRANCH_ELIF)) {
|
||||||
skipToNewLine();
|
skipToNewLine();
|
||||||
if (type == ppElse)
|
if (type == IPreprocessorDirective.ppElse)
|
||||||
processElse(pos, bufferPos[bufferStackPos] + 1,
|
processElse(pos, bufferPos[bufferStackPos] + 1,
|
||||||
false);
|
false);
|
||||||
else
|
else
|
||||||
|
@ -2697,16 +2737,19 @@ abstract class BaseScanner implements IScanner {
|
||||||
if (isLimitReached())
|
if (isLimitReached())
|
||||||
handleInvalidCompletion();
|
handleInvalidCompletion();
|
||||||
return;
|
return;
|
||||||
case ppError:
|
case IPreprocessorDirective.ppError:
|
||||||
|
case IPreprocessorDirective.ppWarning:
|
||||||
skipOverWhiteSpace();
|
skipOverWhiteSpace();
|
||||||
start = bufferPos[bufferStackPos] + 1;
|
start = bufferPos[bufferStackPos] + 1;
|
||||||
skipToNewLine();
|
skipToNewLine();
|
||||||
end= bufferPos[bufferStackPos] + 1;
|
end= bufferPos[bufferStackPos] + 1;
|
||||||
handleProblem(IProblem.PREPROCESSOR_POUND_ERROR, start,
|
boolean isWarning= type == IPreprocessorDirective.ppWarning;
|
||||||
|
handleProblem(isWarning ? IProblem.PREPROCESSOR_POUND_WARNING : IProblem.PREPROCESSOR_POUND_ERROR, start,
|
||||||
CharArrayUtils.extract(buffer, start, end-start));
|
CharArrayUtils.extract(buffer, start, end-start));
|
||||||
processError(pos, end);
|
processError(pos, end);
|
||||||
|
processWarning(pos, end);
|
||||||
return;
|
return;
|
||||||
case ppEndif:
|
case IPreprocessorDirective.ppEndif:
|
||||||
skipToNewLine();
|
skipToNewLine();
|
||||||
if (branchState(BRANCH_END)) {
|
if (branchState(BRANCH_END)) {
|
||||||
processEndif(pos, bufferPos[bufferStackPos] + 1);
|
processEndif(pos, bufferPos[bufferStackPos] + 1);
|
||||||
|
@ -2717,16 +2760,40 @@ abstract class BaseScanner implements IScanner {
|
||||||
start, ppKeywords.findKey(buffer, start, len));
|
start, ppKeywords.findKey(buffer, start, len));
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
case ppPragma:
|
case IPreprocessorDirective.ppPragma:
|
||||||
skipToNewLine();
|
skipToNewLine();
|
||||||
processPragma(pos, bufferPos[bufferStackPos]+1);
|
processPragma(pos, bufferPos[bufferStackPos]+1);
|
||||||
return;
|
return;
|
||||||
|
case IPreprocessorDirective.ppIgnore:
|
||||||
|
skipToNewLine();
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
|
// ignore preprocessor output lines of the form
|
||||||
// directive was not handled, create a problem
|
// # <linenum> "<filename>" flags
|
||||||
handleProblem(IProblem.PREPROCESSOR_INVALID_DIRECTIVE, start, null);
|
if (c >= '0' && c <= '9' && start > pos+1) {
|
||||||
|
while (++bufferPos[bufferStackPos] < limit) {
|
||||||
|
c = buffer[bufferPos[bufferStackPos]];
|
||||||
|
if ((c >= '0' && c <= '9'))
|
||||||
|
continue;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (bufferPos[bufferStackPos] < limit) {
|
||||||
|
c = buffer[bufferPos[bufferStackPos]];
|
||||||
|
if (c == ' ' || c == '\t') {
|
||||||
|
// now we have # <linenum>
|
||||||
|
// skip the rest
|
||||||
|
skipToNewLine();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
--bufferPos[bufferStackPos];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// directive was not handled, create a problem
|
||||||
|
handleProblem(IProblem.PREPROCESSOR_INVALID_DIRECTIVE, start,
|
||||||
|
new String(buffer, start, getCurrentOffset() - start + 1).toCharArray());
|
||||||
skipToNewLine();
|
skipToNewLine();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2748,6 +2815,16 @@ abstract class BaseScanner implements IScanner {
|
||||||
*/
|
*/
|
||||||
protected abstract void processError(int startPos, int endPos);
|
protected abstract void processError(int startPos, int endPos);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Process #warning directive.
|
||||||
|
*
|
||||||
|
* @param startPos
|
||||||
|
* @param endPos
|
||||||
|
*/
|
||||||
|
protected void processWarning(int startPos, int endPos) {
|
||||||
|
// default: do nothing
|
||||||
|
}
|
||||||
|
|
||||||
protected abstract void processElsif(int startPos, int endPos, boolean taken);
|
protected abstract void processElsif(int startPos, int endPos, boolean taken);
|
||||||
|
|
||||||
protected abstract void processElse(int startPos, int endPos, boolean taken);
|
protected abstract void processElse(int startPos, int endPos, boolean taken);
|
||||||
|
@ -2877,7 +2954,7 @@ abstract class BaseScanner implements IScanner {
|
||||||
if (filename == null || filename == EMPTY_STRING) {
|
if (filename == null || filename == EMPTY_STRING) {
|
||||||
if (active) {
|
if (active) {
|
||||||
handleProblem(IProblem.PREPROCESSOR_INVALID_DIRECTIVE, startOffset,
|
handleProblem(IProblem.PREPROCESSOR_INVALID_DIRECTIVE, startOffset,
|
||||||
null);
|
new String(buffer, startOffset, nameEndOffset - startOffset).toCharArray());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
filename= new String(buffer, nameOffset, nameEndOffset - nameOffset);
|
filename= new String(buffer, nameOffset, nameEndOffset - nameOffset);
|
||||||
|
@ -2889,7 +2966,7 @@ abstract class BaseScanner implements IScanner {
|
||||||
skipToNewLine();
|
skipToNewLine();
|
||||||
|
|
||||||
if (active) {
|
if (active) {
|
||||||
findAndPushInclusion(filename, fileNameArray, local, include_next, startOffset, nameOffset, nameEndOffset, endOffset, startingLineNumber, nameLine, endLine);
|
findAndPushInclusion(filename, fileNameArray, local, include_next, false, startOffset, nameOffset, nameEndOffset, endOffset, startingLineNumber, nameLine, endLine);
|
||||||
} else {
|
} else {
|
||||||
processInclude(fileNameArray, local, active, startOffset, nameOffset, nameEndOffset, endOffset, startingLineNumber, nameLine, endLine);
|
processInclude(fileNameArray, local, active, startOffset, nameOffset, nameEndOffset, endOffset, startingLineNumber, nameLine, endLine);
|
||||||
}
|
}
|
||||||
|
@ -2916,18 +2993,19 @@ abstract class BaseScanner implements IScanner {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param filename
|
* @param filename
|
||||||
* @param fileNameArray
|
* @param fileNameArray
|
||||||
* @param local
|
* @param local
|
||||||
* @param include_next
|
* @param include_next
|
||||||
* @param startOffset
|
* @param includeOnce
|
||||||
* @param nameOffset
|
* @param startOffset
|
||||||
* @param nameEndOffset
|
* @param nameOffset
|
||||||
* @param endOffset
|
* @param nameEndOffset
|
||||||
* @param startingLine
|
* @param endOffset
|
||||||
* @param nameLine
|
* @param startingLine
|
||||||
* @param endLine
|
* @param nameLine
|
||||||
|
* @param endLine
|
||||||
*/
|
*/
|
||||||
protected void findAndPushInclusion(String filename, char[] fileNameArray, boolean local, boolean include_next, int startOffset, int nameOffset, int nameEndOffset, int endOffset, int startingLine, int nameLine, int endLine) {
|
protected void findAndPushInclusion(String filename, char[] fileNameArray, boolean local, boolean include_next, boolean includeOnce, int startOffset, int nameOffset, int nameEndOffset, int endOffset, int startingLine, int nameLine, int endLine) {
|
||||||
if (parserMode == ParserMode.QUICK_PARSE) {
|
if (parserMode == ParserMode.QUICK_PARSE) {
|
||||||
Object inclusion = createInclusionConstruct(fileNameArray,
|
Object inclusion = createInclusionConstruct(fileNameArray,
|
||||||
EMPTY_CHAR_ARRAY, local, startOffset, startingLine,
|
EMPTY_CHAR_ARRAY, local, startOffset, startingLine,
|
||||||
|
@ -2947,7 +3025,7 @@ abstract class BaseScanner implements IScanner {
|
||||||
reader.filename, local, startOffset,
|
reader.filename, local, startOffset,
|
||||||
startingLine, nameOffset,
|
startingLine, nameOffset,
|
||||||
nameEndOffset, nameLine, endOffset,
|
nameEndOffset, nameLine, endOffset,
|
||||||
endLine, false)));
|
endLine, false), includeOnce));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
processInclude(fileNameArray, local, true, startOffset, nameOffset, nameEndOffset, endOffset, startingLine, nameLine, endLine);
|
processInclude(fileNameArray, local, true, startOffset, nameOffset, nameEndOffset, endOffset, startingLine, nameLine, endLine);
|
||||||
|
@ -2975,7 +3053,7 @@ abstract class BaseScanner implements IScanner {
|
||||||
reader.filename, local, startOffset,
|
reader.filename, local, startOffset,
|
||||||
startingLine, nameOffset,
|
startingLine, nameOffset,
|
||||||
nameEndOffset, nameLine, endOffset,
|
nameEndOffset, nameLine, endOffset,
|
||||||
endLine, false)));
|
endLine, false), includeOnce));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3005,7 +3083,7 @@ abstract class BaseScanner implements IScanner {
|
||||||
reader.filename, local, startOffset,
|
reader.filename, local, startOffset,
|
||||||
startingLine, nameOffset,
|
startingLine, nameOffset,
|
||||||
nameEndOffset, nameLine, endOffset,
|
nameEndOffset, nameLine, endOffset,
|
||||||
endLine, false)));
|
endLine, false), includeOnce));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3015,7 +3093,7 @@ abstract class BaseScanner implements IScanner {
|
||||||
fileNameArray);
|
fileNameArray);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected abstract CodeReader createReader(String path, String fileName);
|
protected abstract CodeReader createReader(String path, String fileName);
|
||||||
|
|
||||||
|
|
||||||
private int findIncludePos(String[] paths, File currentDirectory) {
|
private int findIncludePos(String[] paths, File currentDirectory) {
|
||||||
|
@ -3494,23 +3572,23 @@ abstract class BaseScanner implements IScanner {
|
||||||
int type = ppKeywords.get(buffer, start, len);
|
int type = ppKeywords.get(buffer, start, len);
|
||||||
if (type != ppKeywords.undefined) {
|
if (type != ppKeywords.undefined) {
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case ppIfdef:
|
case IPreprocessorDirective.ppIfdef:
|
||||||
case ppIfndef:
|
case IPreprocessorDirective.ppIfndef:
|
||||||
case ppIf:
|
case IPreprocessorDirective.ppIf:
|
||||||
++nesting;
|
++nesting;
|
||||||
branchState(BRANCH_IF);
|
branchState(BRANCH_IF);
|
||||||
skipToNewLine();
|
skipToNewLine();
|
||||||
if (type == ppIfdef)
|
if (type == IPreprocessorDirective.ppIfdef)
|
||||||
processIfdef(startPos,
|
processIfdef(startPos,
|
||||||
bufferPos[bufferStackPos]+1, true, false);
|
bufferPos[bufferStackPos]+1, true, false);
|
||||||
else if (type == ppIfndef)
|
else if (type == IPreprocessorDirective.ppIfndef)
|
||||||
processIfdef(startPos,
|
processIfdef(startPos,
|
||||||
bufferPos[bufferStackPos]+1, false, false);
|
bufferPos[bufferStackPos]+1, false, false);
|
||||||
else
|
else
|
||||||
processIf(startPos, bufferPos[bufferStackPos]+1,
|
processIf(startPos, bufferPos[bufferStackPos]+1,
|
||||||
false);
|
false);
|
||||||
break;
|
break;
|
||||||
case ppElse:
|
case IPreprocessorDirective.ppElse:
|
||||||
if (branchState(BRANCH_ELSE)) {
|
if (branchState(BRANCH_ELSE)) {
|
||||||
skipToNewLine();
|
skipToNewLine();
|
||||||
if (checkelse && nesting == 0) {
|
if (checkelse && nesting == 0) {
|
||||||
|
@ -3529,7 +3607,7 @@ abstract class BaseScanner implements IScanner {
|
||||||
skipToNewLine();
|
skipToNewLine();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ppElif:
|
case IPreprocessorDirective.ppElif:
|
||||||
if (branchState(BRANCH_ELIF)) {
|
if (branchState(BRANCH_ELIF)) {
|
||||||
if (checkelse && nesting == 0) {
|
if (checkelse && nesting == 0) {
|
||||||
// check the condition
|
// check the condition
|
||||||
|
@ -3563,7 +3641,7 @@ abstract class BaseScanner implements IScanner {
|
||||||
skipToNewLine();
|
skipToNewLine();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ppEndif:
|
case IPreprocessorDirective.ppEndif:
|
||||||
if (branchState(BRANCH_END)) {
|
if (branchState(BRANCH_END)) {
|
||||||
processEndif(startPos,
|
processEndif(startPos,
|
||||||
bufferPos[bufferStackPos] + 1);
|
bufferPos[bufferStackPos] + 1);
|
||||||
|
@ -3582,10 +3660,13 @@ abstract class BaseScanner implements IScanner {
|
||||||
skipToNewLine();
|
skipToNewLine();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ppInclude:
|
case IPreprocessorDirective.ppInclude:
|
||||||
handlePPInclude(startPos, false, getLineNumber(startPos), false);
|
handlePPInclude(startPos, false, getLineNumber(startPos), false);
|
||||||
break;
|
break;
|
||||||
case ppInclude_next:
|
case IPreprocessorDirective.ppInclude_next:
|
||||||
|
handlePPInclude(startPos, true, getLineNumber(startPos), false);
|
||||||
|
break;
|
||||||
|
case IPreprocessorDirective.ppImport:
|
||||||
handlePPInclude(startPos, true, getLineNumber(startPos), false);
|
handlePPInclude(startPos, true, getLineNumber(startPos), false);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -4818,30 +4899,6 @@ abstract class BaseScanner implements IScanner {
|
||||||
|
|
||||||
protected static CharArrayIntMap ppKeywords;
|
protected static CharArrayIntMap ppKeywords;
|
||||||
|
|
||||||
protected static final int ppIf = 0;
|
|
||||||
|
|
||||||
protected static final int ppIfdef = 1;
|
|
||||||
|
|
||||||
protected static final int ppIfndef = 2;
|
|
||||||
|
|
||||||
protected static final int ppElif = 3;
|
|
||||||
|
|
||||||
protected static final int ppElse = 4;
|
|
||||||
|
|
||||||
protected static final int ppEndif = 5;
|
|
||||||
|
|
||||||
protected static final int ppInclude = 6;
|
|
||||||
|
|
||||||
protected static final int ppDefine = 7;
|
|
||||||
|
|
||||||
protected static final int ppUndef = 8;
|
|
||||||
|
|
||||||
protected static final int ppError = 9;
|
|
||||||
|
|
||||||
protected static final int ppInclude_next = 10;
|
|
||||||
|
|
||||||
protected static final int ppPragma = 11;
|
|
||||||
|
|
||||||
protected static final char[] TAB = { '\t' };
|
protected static final char[] TAB = { '\t' };
|
||||||
|
|
||||||
protected static final char[] SPACE = { ' ' };
|
protected static final char[] SPACE = { ' ' };
|
||||||
|
@ -4940,19 +4997,19 @@ abstract class BaseScanner implements IScanner {
|
||||||
cppkeywords.put(Keywords.cXOR_EQ, IToken.t_xor_eq);
|
cppkeywords.put(Keywords.cXOR_EQ, IToken.t_xor_eq);
|
||||||
|
|
||||||
// Preprocessor keywords
|
// Preprocessor keywords
|
||||||
ppKeywords = new CharArrayIntMap(16, -1);
|
ppKeywords = new CharArrayIntMap(16, IPreprocessorDirective.ppInvalid);
|
||||||
ppKeywords.put(Keywords.cIF, ppIf);
|
ppKeywords.put(Keywords.cIF, IPreprocessorDirective.ppIf);
|
||||||
ppKeywords.put(Keywords.cIFDEF, ppIfdef);
|
ppKeywords.put(Keywords.cIFDEF, IPreprocessorDirective.ppIfdef);
|
||||||
ppKeywords.put(Keywords.cIFNDEF, ppIfndef);
|
ppKeywords.put(Keywords.cIFNDEF, IPreprocessorDirective.ppIfndef);
|
||||||
ppKeywords.put(Keywords.cELIF, ppElif);
|
ppKeywords.put(Keywords.cELIF, IPreprocessorDirective.ppElif);
|
||||||
ppKeywords.put(Keywords.cELSE, ppElse);
|
ppKeywords.put(Keywords.cELSE, IPreprocessorDirective.ppElse);
|
||||||
ppKeywords.put(Keywords.cENDIF, ppEndif);
|
ppKeywords.put(Keywords.cENDIF, IPreprocessorDirective.ppEndif);
|
||||||
ppKeywords.put(Keywords.cINCLUDE, ppInclude);
|
ppKeywords.put(Keywords.cINCLUDE, IPreprocessorDirective.ppInclude);
|
||||||
ppKeywords.put(Keywords.cDEFINE, ppDefine);
|
ppKeywords.put(Keywords.cDEFINE, IPreprocessorDirective.ppDefine);
|
||||||
ppKeywords.put(Keywords.cUNDEF, ppUndef);
|
ppKeywords.put(Keywords.cUNDEF, IPreprocessorDirective.ppUndef);
|
||||||
ppKeywords.put(Keywords.cERROR, ppError);
|
ppKeywords.put(Keywords.cERROR, IPreprocessorDirective.ppError);
|
||||||
ppKeywords.put(Keywords.cINCLUDE_NEXT, ppInclude_next);
|
ppKeywords.put(Keywords.cPRAGMA, IPreprocessorDirective.ppPragma);
|
||||||
ppKeywords.put(Keywords.cPRAGMA, ppPragma);
|
ppKeywords.put(Keywords.cLINE, IPreprocessorDirective.ppIgnore);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -461,6 +461,14 @@ public class DOMScanner extends BaseScanner {
|
||||||
getGlobalOffset(endPos));
|
getGlobalOffset(endPos));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @see org.eclipse.cdt.internal.core.parser.scanner2.BaseScanner#processWarning(int, int)
|
||||||
|
*/
|
||||||
|
protected void processWarning(int startPos, int endPos) {
|
||||||
|
locationMap.encounterPoundWarning(getGlobalOffset(startPos),
|
||||||
|
getGlobalOffset(endPos));
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* (non-Javadoc)
|
* (non-Javadoc)
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Copyright (c) 2004, 2006 IBM Corporation and others.
|
* Copyright (c) 2004, 2007 IBM Corporation and others.
|
||||||
* All rights reserved. This program and the accompanying materials
|
* All rights reserved. This program and the accompanying materials
|
||||||
* are made available under the terms of the Eclipse Public License v1.0
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
* which accompanies this distribution, and is available at
|
* which accompanies this distribution, and is available at
|
||||||
|
@ -8,6 +8,7 @@
|
||||||
* Contributors:
|
* Contributors:
|
||||||
* IBM - Initial API and implementation
|
* IBM - Initial API and implementation
|
||||||
* Markus Schorn (Wind River Systems)
|
* Markus Schorn (Wind River Systems)
|
||||||
|
* Anton Leherbauer (Wind River Systems)
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
package org.eclipse.cdt.internal.core.parser.scanner2;
|
package org.eclipse.cdt.internal.core.parser.scanner2;
|
||||||
|
|
||||||
|
@ -71,6 +72,8 @@ public interface IScannerPreprocessorLog {
|
||||||
|
|
||||||
public void encounterPoundError(int startOffset, int endOffset);
|
public void encounterPoundError(int startOffset, int endOffset);
|
||||||
|
|
||||||
|
public void encounterPoundWarning(int startOffset, int endOffset);
|
||||||
|
|
||||||
public void encounterPoundUndef(int startOffset, int endOffset,
|
public void encounterPoundUndef(int startOffset, int endOffset,
|
||||||
char[] symbol, int nameOffset, IMacroDefinition macroDefinition);
|
char[] symbol, int nameOffset, IMacroDefinition macroDefinition);
|
||||||
|
|
||||||
|
|
|
@ -256,6 +256,10 @@ public class LocationMap implements ILocationResolver, IScannerPreprocessorLog {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class ASTWarning extends ASTNode implements
|
||||||
|
IASTPreprocessorErrorStatement {
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author jcamelon
|
* @author jcamelon
|
||||||
*/
|
*/
|
||||||
|
@ -384,6 +388,12 @@ public class LocationMap implements ILocationResolver, IScannerPreprocessorLog {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected static class _Warning extends _Context implements _IPreprocessorDirective {
|
||||||
|
public _Warning(_CompositeContext parent, int startOffset, int endOffset) {
|
||||||
|
super(parent, startOffset, endOffset);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author jcamelon
|
* @author jcamelon
|
||||||
*/
|
*/
|
||||||
|
@ -1658,6 +1668,8 @@ public class LocationMap implements ILocationResolver, IScannerPreprocessorLog {
|
||||||
result = createASTPragma((_Pragma) context);
|
result = createASTPragma((_Pragma) context);
|
||||||
else if (context instanceof _Error)
|
else if (context instanceof _Error)
|
||||||
result = createASTError((_Error) context);
|
result = createASTError((_Error) context);
|
||||||
|
else if (context instanceof _Warning)
|
||||||
|
result = createASTWarning((_Warning) context);
|
||||||
else if (context instanceof _If)
|
else if (context instanceof _If)
|
||||||
result = createASTIf((_If) context);
|
result = createASTIf((_If) context);
|
||||||
else if (context instanceof _Ifdef)
|
else if (context instanceof _Ifdef)
|
||||||
|
@ -1758,6 +1770,18 @@ public class LocationMap implements ILocationResolver, IScannerPreprocessorLog {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param warning
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private IASTPreprocessorStatement createASTWarning(_Warning warning) {
|
||||||
|
IASTPreprocessorErrorStatement result = new ASTWarning();
|
||||||
|
((ASTNode) result).setOffsetAndLength(warning.context_directive_start, warning.getDirectiveLength());
|
||||||
|
result.setParent(rootNode);
|
||||||
|
result.setPropertyInParent(IASTTranslationUnit.PREPROCESSOR_STATEMENT);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param pragma
|
* @param pragma
|
||||||
* @return
|
* @return
|
||||||
|
@ -2177,6 +2201,14 @@ public class LocationMap implements ILocationResolver, IScannerPreprocessorLog {
|
||||||
endOffset));
|
endOffset));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @see org.eclipse.cdt.internal.core.parser.scanner2.IScannerPreprocessorLog#encounterPoundWarning(int, int)
|
||||||
|
*/
|
||||||
|
public void encounterPoundWarning(int startOffset, int endOffset) {
|
||||||
|
currentContext.addSubContext(new _Warning(currentContext, startOffset,
|
||||||
|
endOffset));
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* (non-Javadoc)
|
* (non-Javadoc)
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Copyright (c) 2004, 2005 IBM Corporation and others.
|
* Copyright (c) 2004, 2007 IBM Corporation and others.
|
||||||
* All rights reserved. This program and the accompanying materials
|
* All rights reserved. This program and the accompanying materials
|
||||||
* are made available under the terms of the Eclipse Public License v1.0
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
* which accompanies this distribution, and is available at
|
* which accompanies this distribution, and is available at
|
||||||
|
@ -7,6 +7,7 @@
|
||||||
*
|
*
|
||||||
* Contributors:
|
* Contributors:
|
||||||
* IBM - Initial API and implementation
|
* IBM - Initial API and implementation
|
||||||
|
* Anton Leherbauer (Wind River Systems)
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
package org.eclipse.cdt.internal.core.parser.scanner2;
|
package org.eclipse.cdt.internal.core.parser.scanner2;
|
||||||
|
|
||||||
|
@ -148,7 +149,7 @@ public class Scanner2 extends BaseScanner {
|
||||||
* @see org.eclipse.cdt.internal.core.parser.scanner2.BaseScanner#quickParsePushPopInclusion(java.lang.Object)
|
* @see org.eclipse.cdt.internal.core.parser.scanner2.BaseScanner#quickParsePushPopInclusion(java.lang.Object)
|
||||||
*/
|
*/
|
||||||
protected void quickParsePushPopInclusion(Object inclusion) {
|
protected void quickParsePushPopInclusion(Object inclusion) {
|
||||||
callbackManager.pushCallback(new InclusionData(null, inclusion));
|
callbackManager.pushCallback(new InclusionData(null, inclusion, false));
|
||||||
callbackManager.pushCallback(inclusion);
|
callbackManager.pushCallback(inclusion);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Copyright (c) 2004, 2005 IBM Corporation and others.
|
* Copyright (c) 2004, 2007 IBM Corporation and others.
|
||||||
* All rights reserved. This program and the accompanying materials
|
* All rights reserved. This program and the accompanying materials
|
||||||
* are made available under the terms of the Eclipse Public License v1.0
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
* which accompanies this distribution, and is available at
|
* which accompanies this distribution, and is available at
|
||||||
|
@ -7,6 +7,7 @@
|
||||||
*
|
*
|
||||||
* Contributors:
|
* Contributors:
|
||||||
* IBM - Initial API and implementation
|
* IBM - Initial API and implementation
|
||||||
|
* Anton Leherbauer (Wind River Systems)
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
package org.eclipse.cdt.internal.core.parser.scanner2;
|
package org.eclipse.cdt.internal.core.parser.scanner2;
|
||||||
|
|
||||||
|
@ -61,6 +62,8 @@ public class ScannerASTProblem extends ASTNode implements IASTProblem {
|
||||||
new Integer(IASTProblem.PREPROCESSOR_POUND_ERROR),
|
new Integer(IASTProblem.PREPROCESSOR_POUND_ERROR),
|
||||||
ParserMessages
|
ParserMessages
|
||||||
.getString("ScannerProblemFactory.error.preproc.error")); //$NON-NLS-1$
|
.getString("ScannerProblemFactory.error.preproc.error")); //$NON-NLS-1$
|
||||||
|
errorMessages.put(new Integer(IASTProblem.PREPROCESSOR_POUND_WARNING), ParserMessages
|
||||||
|
.getString("ScannerProblemFactory.error.preproc.warning")); //$NON-NLS-1$
|
||||||
errorMessages
|
errorMessages
|
||||||
.put(
|
.put(
|
||||||
new Integer(IASTProblem.PREPROCESSOR_INCLUSION_NOT_FOUND),
|
new Integer(IASTProblem.PREPROCESSOR_INCLUSION_NOT_FOUND),
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Copyright (c) 2002, 2006 IBM Corporation and others.
|
* Copyright (c) 2002, 2007 IBM Corporation and others.
|
||||||
* All rights reserved. This program and the accompanying materials
|
* All rights reserved. This program and the accompanying materials
|
||||||
* are made available under the terms of the Eclipse Public License v1.0
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
* which accompanies this distribution, and is available at
|
* which accompanies this distribution, and is available at
|
||||||
|
@ -7,6 +7,7 @@
|
||||||
*
|
*
|
||||||
* Contributors:
|
* Contributors:
|
||||||
* IBM Rational Software - Initial API and implementation
|
* IBM Rational Software - Initial API and implementation
|
||||||
|
* Anton Leherbauer (Wind River Systems)
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
package org.eclipse.cdt.internal.core.parser.scanner2;
|
package org.eclipse.cdt.internal.core.parser.scanner2;
|
||||||
|
|
||||||
|
@ -60,6 +61,8 @@ public class ScannerProblemFactory extends BaseProblemFactory implements IProble
|
||||||
{
|
{
|
||||||
case IProblem.PREPROCESSOR_POUND_ERROR :
|
case IProblem.PREPROCESSOR_POUND_ERROR :
|
||||||
return IProblem.A_PREPROC_POUND_ERROR;
|
return IProblem.A_PREPROC_POUND_ERROR;
|
||||||
|
case IProblem.PREPROCESSOR_POUND_WARNING :
|
||||||
|
return IProblem.A_PREPROC_POUND_WARNING;
|
||||||
case IProblem.PREPROCESSOR_INCLUSION_NOT_FOUND :
|
case IProblem.PREPROCESSOR_INCLUSION_NOT_FOUND :
|
||||||
return IProblem.A_PREPROC_INCLUDE_FILENAME;
|
return IProblem.A_PREPROC_INCLUDE_FILENAME;
|
||||||
case IProblem.PREPROCESSOR_DEFINITION_NOT_FOUND :
|
case IProblem.PREPROCESSOR_DEFINITION_NOT_FOUND :
|
||||||
|
|
Loading…
Add table
Reference in a new issue