mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
Completed Quickparse expression representation.
Updated ExpressionEvaluation and associated tests.
This commit is contained in:
parent
6fa5a87930
commit
bc44d5b65f
26 changed files with 1202 additions and 1213 deletions
|
@ -1,3 +1,7 @@
|
|||
2003-06-28 John Camelon
|
||||
Completed Quickparse expression representation.
|
||||
Updated ExpressionEvaluation and associated tests.
|
||||
|
||||
2003-06-26 John Camelon
|
||||
Update IASTExpression.
|
||||
Move Parser.Backtrack and Parser.EndOfFile to external interface.
|
||||
|
|
|
@ -1130,7 +1130,6 @@ public class DOMTests extends BaseDOMTest {
|
|||
writer.write( "A(const A&);\n" );
|
||||
writer.write( "};\n" );
|
||||
writer.write( "A::A(const A&v) : x(v.x) { }\n" );
|
||||
TranslationUnit tu = parse( writer.toString() );
|
||||
}
|
||||
|
||||
public void testBug36288() throws Exception
|
||||
|
@ -1536,6 +1535,11 @@ public class DOMTests extends BaseDOMTest {
|
|||
assertNotNull( enumerator.getExpression() );
|
||||
}
|
||||
|
||||
public void testWeirdExpression() throws Exception
|
||||
{
|
||||
parse( "int x = rhs.spImpl_.get();");
|
||||
}
|
||||
|
||||
public void testBug36690() throws Exception {
|
||||
TranslationUnit tu = parse("Functor(const Functor& rhs) : spImpl_(Impl::Clone(rhs.spImpl_.get())){}");
|
||||
assertEquals( tu.getDeclarations().size(), 1 );
|
||||
|
|
|
@ -8,7 +8,9 @@ import junit.framework.TestSuite;
|
|||
|
||||
import org.eclipse.cdt.core.parser.IParser;
|
||||
import org.eclipse.cdt.core.parser.ParserFactory;
|
||||
import org.eclipse.cdt.internal.core.parser.ExpressionEvaluator;
|
||||
import org.eclipse.cdt.core.parser.ParserMode;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTExpression;
|
||||
import org.eclipse.cdt.internal.core.parser.NullSourceElementRequestor;
|
||||
|
||||
public class ExprEvalTest extends TestCase {
|
||||
|
||||
|
@ -21,14 +23,55 @@ public class ExprEvalTest extends TestCase {
|
|||
}
|
||||
|
||||
public void runTest(String code, int expectedValue) throws Exception {
|
||||
ExpressionEvaluator evaluator = new ExpressionEvaluator();
|
||||
IParser parser = ParserFactory.createParser(ParserFactory.createScanner( new StringReader( code ), null, null, null, null ), evaluator, null);
|
||||
parser.expression(null);
|
||||
assertEquals(expectedValue, ((Integer)evaluator.getResult()).intValue());
|
||||
|
||||
IParser parser = ParserFactory.createParser(ParserFactory.createScanner( new StringReader( code ), null, null, null, null ), new NullSourceElementRequestor(), ParserMode.QUICK_PARSE);
|
||||
IASTExpression expression = parser.expression(null);
|
||||
assertEquals(expectedValue, expression.evaluateExpression());
|
||||
}
|
||||
|
||||
public void testInteger() throws Exception {
|
||||
runTest("5;", 5);
|
||||
runTest( "33;", 33 );
|
||||
}
|
||||
|
||||
public void testNot() throws Exception
|
||||
{
|
||||
runTest( "!1;", 0 );
|
||||
runTest( "!0;", 1 );
|
||||
runTest( "!4;", 0 );
|
||||
runTest( "!!4;", 1 );
|
||||
}
|
||||
|
||||
public void testMultiplicational() throws Exception
|
||||
{
|
||||
runTest( "3 * 4;", 12 );
|
||||
runTest( "55 * 2;", 110 );
|
||||
runTest( "4 / 3;", 1 );
|
||||
runTest( "100/4;", 25 );
|
||||
runTest( "8 % 2;", 0 );
|
||||
runTest( "8 % 3;", 2 );
|
||||
}
|
||||
|
||||
public void testAdditive() throws Exception
|
||||
{
|
||||
runTest( "4 + 4;", 8 );
|
||||
runTest( "4 - 4;", 0 );
|
||||
}
|
||||
|
||||
public void testLogicalAnd() throws Exception
|
||||
{
|
||||
runTest( "4 && 5;", 1 );
|
||||
runTest( "0 && 5;", 0 );
|
||||
runTest( "5 && 0;", 0 );
|
||||
runTest( "0 && 0;", 0 );
|
||||
}
|
||||
|
||||
public void testLogicalOr() throws Exception
|
||||
{
|
||||
runTest( "4 || 5;", 1 );
|
||||
runTest( "0 || 5;", 1 );
|
||||
runTest( "5 || 0;", 1 );
|
||||
runTest( "0 || 0;", 0 );
|
||||
}
|
||||
|
||||
public void testRelational() throws Exception {
|
||||
|
|
|
@ -337,7 +337,7 @@ public class DeltaProcessor {
|
|||
// get the workspace delta, and start processing there.
|
||||
IResourceDelta[] deltas = changes.getAffectedChildren();
|
||||
ICElementDelta[] translatedDeltas = new CElementDelta[deltas.length];
|
||||
System.out.println("delta.length: " + deltas.length);
|
||||
//System.out.println("delta.length: " + deltas.length);
|
||||
for (int i = 0; i < deltas.length; i++) {
|
||||
IResourceDelta delta = deltas[i];
|
||||
fCurrentDelta = new CElementDelta(root);
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
2003-06-28 John Camelon
|
||||
Completed Quickparse expression representation.
|
||||
Updated ExpressionEvaluation and associated tests.
|
||||
|
||||
2003-06-26 John Camelon
|
||||
Update IASTExpression.
|
||||
Move Parser.Backtrack and Parser.EndOfFile to external interface.
|
||||
|
|
|
@ -10,6 +10,8 @@
|
|||
***********************************************************************/
|
||||
package org.eclipse.cdt.core.parser;
|
||||
|
||||
import org.eclipse.cdt.core.parser.ast.IASTExpression;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
|
@ -38,7 +40,7 @@ public interface IParser {
|
|||
* @throws Backtrack thrown if the Scanner/Stream provided does not yield a valid
|
||||
* expression
|
||||
*/
|
||||
public void expression(Object expression) throws Backtrack;
|
||||
public IASTExpression expression(Object expression) throws Backtrack;
|
||||
|
||||
/**
|
||||
* Is the parser configured for ANSI C or ANSI C++?
|
||||
|
|
|
@ -0,0 +1,31 @@
|
|||
/**********************************************************************
|
||||
* Copyright (c) 2002,2003 Rational Software Corporation and others.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Common Public License v0.5
|
||||
* which accompanies this distribution, and is available at
|
||||
* http://www.eclipse.org/legal/cpl-v05.html
|
||||
*
|
||||
* Contributors:
|
||||
* IBM Rational Software - Initial API and implementation
|
||||
***********************************************************************/
|
||||
package org.eclipse.cdt.core.parser;
|
||||
|
||||
import java.util.Iterator;
|
||||
|
||||
|
||||
/**
|
||||
* @author jcamelon
|
||||
*/
|
||||
public interface ITokenDuple {
|
||||
/**
|
||||
* @return
|
||||
*/
|
||||
public abstract IToken getFirstToken();
|
||||
/**
|
||||
* @return
|
||||
*/
|
||||
public abstract IToken getLastToken();
|
||||
public abstract Iterator iterator();
|
||||
public abstract String toString();
|
||||
public abstract boolean isIdentifier();
|
||||
}
|
|
@ -83,4 +83,5 @@ public class ParserFactory {
|
|||
return new LineOffsetReconciler( input );
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -18,90 +18,122 @@ import org.eclipse.cdt.core.parser.Enum;
|
|||
*/
|
||||
public interface IASTExpression
|
||||
{
|
||||
public class ExpressionKind extends Enum
|
||||
public class Kind extends Enum
|
||||
{
|
||||
public static final ExpressionKind PRIMARY_INTEGER_LITERAL = new ExpressionKind( 0 );
|
||||
public static final ExpressionKind PRIMARY_CHAR_LITERAL = new ExpressionKind( 1 );
|
||||
public static final ExpressionKind PRIMARY_FLOAT_LITERAL = new ExpressionKind( 2 );
|
||||
public static final ExpressionKind PRIMARY_STRING_LITERAL = new ExpressionKind( 3 );
|
||||
public static final ExpressionKind PRIMARY_BOOLEAN_LITERAL = new ExpressionKind( 4 );
|
||||
public static final ExpressionKind PRIMARY_THIS = new ExpressionKind( 5 );
|
||||
public static final ExpressionKind PRIMARY_BRACKETED_EXPRESSION = new ExpressionKind( 6 );
|
||||
public static final ExpressionKind ID_EXPRESSION = new ExpressionKind( 7 );
|
||||
public static final ExpressionKind POSTFIX_ARRAY = new ExpressionKind( 8 );
|
||||
public static final ExpressionKind POSTFIX_CONSTRUCT = new ExpressionKind( 9 );
|
||||
public static final ExpressionKind POSTFIX_SIMPLETYPE_CONSTRUCT = new ExpressionKind( 10 );
|
||||
public static final ExpressionKind POSTFIX_TYPENAME_IDENTIFIER = new ExpressionKind( 11 );
|
||||
public static final ExpressionKind POSTFIX_TYPENAME_TEMPLATEID = new ExpressionKind( 12 );
|
||||
public static final ExpressionKind POSTFIX_DOT_IDEXPRESSION = new ExpressionKind( 13 );
|
||||
public static final ExpressionKind POSTFIX_ARROW_IDEXPRESSION = new ExpressionKind( 14 );
|
||||
public static final ExpressionKind POSTFIX_DOT_DESTRUCTOR = new ExpressionKind( 15 );
|
||||
public static final ExpressionKind POSTFIX_ARROW_DESTRUCTOR = new ExpressionKind( 16 );
|
||||
public static final ExpressionKind POSTFIX_INCREMENT = new ExpressionKind( 17 );
|
||||
public static final ExpressionKind POSTFIX_DECREMENT = new ExpressionKind( 18 );
|
||||
public static final ExpressionKind POSTFIX_DYNAMIC_CAST = new ExpressionKind( 19 );
|
||||
public static final ExpressionKind POSTFIX_REINTERPRET_CAST = new ExpressionKind( 20 );
|
||||
public static final ExpressionKind POSTFIX_STATIC_CAST = new ExpressionKind( 21 );
|
||||
public static final ExpressionKind POSTFIX_CONST_CAST = new ExpressionKind( 22 );
|
||||
public static final ExpressionKind POSTFIX_TYPEID_EXPRESSION = new ExpressionKind( 23 );
|
||||
public static final ExpressionKind POSTFIX_TYPEID_TYPEID = new ExpressionKind( 24 );
|
||||
public static final ExpressionKind UNARY_INCREMENT = new ExpressionKind( 25 );
|
||||
public static final ExpressionKind UNARY_DECREMENT = new ExpressionKind( 26 );
|
||||
public static final ExpressionKind UNARY_STAR_CASTEXPRESSION = new ExpressionKind( 27 );
|
||||
public static final ExpressionKind UNARY_AMPSND_CASTEXPRESSION = new ExpressionKind( 28 );
|
||||
public static final ExpressionKind UNARY_PLUS_CASTEXPRESSION = new ExpressionKind( 29 );
|
||||
public static final ExpressionKind UNARY_MINUS_CASTEXPRESSION = new ExpressionKind( 30 );
|
||||
public static final ExpressionKind UNARY_NOT_CASTEXPRESSION = new ExpressionKind( 31 );
|
||||
public static final ExpressionKind UNARY_TILDE_CASTEXPRESSION = new ExpressionKind( 32 );
|
||||
public static final ExpressionKind UNARY_SIZEOF_UNARYEXPRESSION = new ExpressionKind( 33 );
|
||||
public static final ExpressionKind UNARY_SIZEOF_TYPEID = new ExpressionKind( 34 );
|
||||
public static final ExpressionKind NEW_NEWTYPEID = new ExpressionKind( 35 );
|
||||
public static final ExpressionKind NEW_TYPEID = new ExpressionKind( 36 );
|
||||
public static final ExpressionKind DELETE_CASTEXPRESSION = new ExpressionKind( 37 );
|
||||
public static final ExpressionKind DELETE_VECTORCASTEXPRESSION = new ExpressionKind( 38 );
|
||||
public static final ExpressionKind CASTEXPRESSION = new ExpressionKind( 39 );
|
||||
public static final ExpressionKind PM_DOTSTAR = new ExpressionKind( 40 );
|
||||
public static final ExpressionKind PM_ARROWSTAR = new ExpressionKind( 41 );
|
||||
public static final ExpressionKind MULTIPLICATIVE_MULTIPLY = new ExpressionKind( 42 );
|
||||
public static final ExpressionKind MULTIPLICATIVE_DIVIDE = new ExpressionKind( 43 );
|
||||
public static final ExpressionKind MULTIPLICATIVE_MODULUS = new ExpressionKind( 44 );
|
||||
public static final ExpressionKind ADDITIVE_PLUS = new ExpressionKind( 45 );
|
||||
public static final ExpressionKind ADDITIVE_MINUS = new ExpressionKind( 46 );
|
||||
public static final ExpressionKind SHIFT_LEFT = new ExpressionKind( 47 );
|
||||
public static final ExpressionKind SHIFT_RIGHT = new ExpressionKind( 48 );
|
||||
public static final ExpressionKind RELATIONAL_LESSTHAN = new ExpressionKind( 49 );
|
||||
public static final ExpressionKind RELATIONAL_GREATERTHAN = new ExpressionKind( 50 );
|
||||
public static final ExpressionKind RELATIONAL_LESSTHANEQUALTO = new ExpressionKind( 51 );
|
||||
public static final ExpressionKind RELATIONAL_GREATERTHANEQUALTO= new ExpressionKind( 52 );
|
||||
public static final ExpressionKind EQUALITY_EQUALS = new ExpressionKind( 53 );
|
||||
public static final ExpressionKind EQUALITY_NOTEQUALS = new ExpressionKind( 54 );
|
||||
public static final ExpressionKind ANDEXPRESSION = new ExpressionKind( 55 );
|
||||
public static final ExpressionKind EXCLUSIVEOREXPRESSION = new ExpressionKind( 56 );
|
||||
public static final ExpressionKind INCLUSIVEOREXPRESSION = new ExpressionKind( 57 );
|
||||
public static final ExpressionKind LOGICALANDEXPRESSION = new ExpressionKind( 58 );
|
||||
public static final ExpressionKind LOGICALOREXPRESSION = new ExpressionKind( 59 );
|
||||
public static final ExpressionKind CONDITIONALEXPRESSION = new ExpressionKind( 60 );
|
||||
public static final ExpressionKind THROWEXPRESSION = new ExpressionKind( 61 );
|
||||
public static final ExpressionKind ASSIGNMENTEXPRESSION = new ExpressionKind( 62 );
|
||||
public static final ExpressionKind EXPRESSIONLIST = new ExpressionKind( 63 );
|
||||
public static final Kind PRIMARY_EMPTY = new Kind( -1 );
|
||||
public static final Kind PRIMARY_INTEGER_LITERAL = new Kind( 0 );
|
||||
public static final Kind PRIMARY_CHAR_LITERAL = new Kind( 1 );
|
||||
public static final Kind PRIMARY_FLOAT_LITERAL = new Kind( 2 );
|
||||
public static final Kind PRIMARY_STRING_LITERAL = new Kind( 3 );
|
||||
public static final Kind PRIMARY_BOOLEAN_LITERAL = new Kind( 4 );
|
||||
public static final Kind PRIMARY_THIS = new Kind( 5 );
|
||||
public static final Kind PRIMARY_BRACKETED_EXPRESSION = new Kind( 6 );
|
||||
public static final Kind ID_EXPRESSION = new Kind( 7 );
|
||||
public static final Kind POSTFIX_SUBSCRIPT = new Kind( 8 );
|
||||
public static final Kind POSTFIX_FUNCTIONCALL = new Kind( 9 );
|
||||
public static final Kind POSTFIX_SIMPLETYPE_INT = new Kind( 10 );
|
||||
public static final Kind POSTFIX_SIMPLETYPE_SHORT = new Kind( 11 );
|
||||
public static final Kind POSTFIX_SIMPLETYPE_DOUBLE = new Kind( 12 );
|
||||
public static final Kind POSTFIX_SIMPLETYPE_FLOAT = new Kind( 13 );
|
||||
public static final Kind POSTFIX_SIMPLETYPE_CHAR = new Kind( 14 );
|
||||
public static final Kind POSTFIX_SIMPLETYPE_WCHART = new Kind( 15 );
|
||||
public static final Kind POSTFIX_SIMPLETYPE_SIGNED = new Kind( 16 );
|
||||
public static final Kind POSTFIX_SIMPLETYPE_UNSIGNED = new Kind( 17 );
|
||||
public static final Kind POSTFIX_SIMPLETYPE_BOOL = new Kind( 18 );
|
||||
public static final Kind POSTFIX_SIMPLETYPE_LONG = new Kind( 19 );
|
||||
public static final Kind POSTFIX_TYPENAME_IDENTIFIER = new Kind( 20 );
|
||||
public static final Kind POSTFIX_TYPENAME_TEMPLATEID = new Kind( 21 );
|
||||
public static final Kind POSTFIX_DOT_IDEXPRESSION = new Kind( 22 );
|
||||
public static final Kind POSTFIX_ARROW_IDEXPRESSION = new Kind( 23 );
|
||||
public static final Kind POSTFIX_DOT_TEMPL_IDEXPRESS = new Kind( 24 );
|
||||
public static final Kind POSTFIX_ARROW_TEMPL_IDEXP = new Kind( 25 );
|
||||
public static final Kind POSTFIX_DOT_DESTRUCTOR = new Kind( 26 );
|
||||
public static final Kind POSTFIX_ARROW_DESTRUCTOR = new Kind( 27 );
|
||||
public static final Kind POSTFIX_INCREMENT = new Kind( 28 );
|
||||
public static final Kind POSTFIX_DECREMENT = new Kind( 29 );
|
||||
public static final Kind POSTFIX_DYNAMIC_CAST = new Kind( 30 );
|
||||
public static final Kind POSTFIX_REINTERPRET_CAST = new Kind( 31 );
|
||||
public static final Kind POSTFIX_STATIC_CAST = new Kind( 32 );
|
||||
public static final Kind POSTFIX_CONST_CAST = new Kind( 33 );
|
||||
public static final Kind POSTFIX_TYPEID_EXPRESSION = new Kind( 34 );
|
||||
public static final Kind POSTFIX_TYPEID_TYPEID = new Kind( 35 );
|
||||
public static final Kind UNARY_INCREMENT = new Kind( 36 );
|
||||
public static final Kind UNARY_DECREMENT = new Kind( 37 );
|
||||
public static final Kind UNARY_STAR_CASTEXPRESSION = new Kind( 38 );
|
||||
public static final Kind UNARY_AMPSND_CASTEXPRESSION = new Kind( 39 );
|
||||
public static final Kind UNARY_PLUS_CASTEXPRESSION = new Kind( 40 );
|
||||
public static final Kind UNARY_MINUS_CASTEXPRESSION = new Kind( 41 );
|
||||
public static final Kind UNARY_NOT_CASTEXPRESSION = new Kind( 42 );
|
||||
public static final Kind UNARY_TILDE_CASTEXPRESSION = new Kind( 43 );
|
||||
public static final Kind UNARY_SIZEOF_UNARYEXPRESSION = new Kind( 44 );
|
||||
public static final Kind UNARY_SIZEOF_TYPEID = new Kind( 45 );
|
||||
public static final Kind NEW_NEWTYPEID = new Kind( 46 );
|
||||
public static final Kind NEW_TYPEID = new Kind( 47 );
|
||||
public static final Kind DELETE_CASTEXPRESSION = new Kind( 48 );
|
||||
public static final Kind DELETE_VECTORCASTEXPRESSION = new Kind( 49 );
|
||||
public static final Kind CASTEXPRESSION = new Kind( 50 );
|
||||
public static final Kind PM_DOTSTAR = new Kind( 51 );
|
||||
public static final Kind PM_ARROWSTAR = new Kind( 52 );
|
||||
public static final Kind MULTIPLICATIVE_MULTIPLY = new Kind( 53 );
|
||||
public static final Kind MULTIPLICATIVE_DIVIDE = new Kind( 54 );
|
||||
public static final Kind MULTIPLICATIVE_MODULUS = new Kind( 55 );
|
||||
public static final Kind ADDITIVE_PLUS = new Kind( 56 );
|
||||
public static final Kind ADDITIVE_MINUS = new Kind( 57 );
|
||||
public static final Kind SHIFT_LEFT = new Kind( 58 );
|
||||
public static final Kind SHIFT_RIGHT = new Kind( 59 );
|
||||
public static final Kind RELATIONAL_LESSTHAN = new Kind( 60 );
|
||||
public static final Kind RELATIONAL_GREATERTHAN = new Kind( 61 );
|
||||
public static final Kind RELATIONAL_LESSTHANEQUALTO = new Kind( 62 );
|
||||
public static final Kind RELATIONAL_GREATERTHANEQUALTO= new Kind( 63 );
|
||||
public static final Kind EQUALITY_EQUALS = new Kind( 64 );
|
||||
public static final Kind EQUALITY_NOTEQUALS = new Kind( 65 );
|
||||
public static final Kind ANDEXPRESSION = new Kind( 66 );
|
||||
public static final Kind EXCLUSIVEOREXPRESSION = new Kind( 67 );
|
||||
public static final Kind INCLUSIVEOREXPRESSION = new Kind( 68 );
|
||||
public static final Kind LOGICALANDEXPRESSION = new Kind( 69 );
|
||||
public static final Kind LOGICALOREXPRESSION = new Kind( 70 );
|
||||
public static final Kind CONDITIONALEXPRESSION_SIMPLE = new Kind( 71 );
|
||||
public static final Kind CONDITIONALEXPRESSION_HARD = new Kind( 72 );
|
||||
public static final Kind THROWEXPRESSION = new Kind( 72 );
|
||||
public static final Kind ASSIGNMENTEXPRESSION_NORMAL = new Kind( 73 );
|
||||
public static final Kind ASSIGNMENTEXPRESSION_PLUS = new Kind( 74 );
|
||||
public static final Kind ASSIGNMENTEXPRESSION_MINUS = new Kind( 75 );
|
||||
public static final Kind ASSIGNMENTEXPRESSION_MULT = new Kind( 76 );
|
||||
public static final Kind ASSIGNMENTEXPRESSION_DIV = new Kind( 77 );
|
||||
public static final Kind ASSIGNMENTEXPRESSION_MOD = new Kind( 78 );
|
||||
public static final Kind ASSIGNMENTEXPRESSION_LSHIFT = new Kind( 79 );
|
||||
public static final Kind ASSIGNMENTEXPRESSION_RSHIFT = new Kind( 80 );
|
||||
public static final Kind ASSIGNMENTEXPRESSION_AND = new Kind( 81 );
|
||||
public static final Kind ASSIGNMENTEXPRESSION_OR = new Kind( 82 );
|
||||
public static final Kind ASSIGNMENTEXPRESSION_XOR = new Kind( 83 );
|
||||
public static final Kind EXPRESSIONLIST = new Kind( 84 );
|
||||
|
||||
|
||||
/**
|
||||
* @param enumValue
|
||||
*/
|
||||
private ExpressionKind(int enumValue)
|
||||
private Kind(int enumValue)
|
||||
{
|
||||
super(enumValue);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public ExpressionKind getExpressionKind();
|
||||
public interface IASTNewExpressionDescriptor
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
public Kind getExpressionKind();
|
||||
public IASTExpression getLHSExpression();
|
||||
public IASTExpression getRHSExpression();
|
||||
public IASTExpression getThirdExpression();
|
||||
public String getLiteralString();
|
||||
public String getTypeId();
|
||||
public String getId();
|
||||
public IASTNewExpressionDescriptor getNewExpressionDescriptor();
|
||||
|
||||
public int evaluateExpression() throws ExpressionEvaluationException;
|
||||
|
||||
|
|
|
@ -10,9 +10,12 @@
|
|||
***********************************************************************/
|
||||
package org.eclipse.cdt.core.parser.ast;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.eclipse.cdt.core.parser.Backtrack;
|
||||
import org.eclipse.cdt.core.parser.ITokenDuple;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier.ClassNameType;
|
||||
import org.eclipse.cdt.internal.core.parser.TokenDuple;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTExpression.IASTNewExpressionDescriptor;
|
||||
|
||||
/**
|
||||
* @author jcamelon
|
||||
|
@ -25,13 +28,13 @@ public interface IASTFactory {
|
|||
|
||||
public IASTUsingDirective createUsingDirective(
|
||||
IASTScope scope,
|
||||
TokenDuple duple)
|
||||
ITokenDuple duple)
|
||||
throws Backtrack;
|
||||
|
||||
public IASTUsingDeclaration createUsingDeclaration(
|
||||
IASTScope scope,
|
||||
boolean isTypeName,
|
||||
TokenDuple name );
|
||||
ITokenDuple name );
|
||||
|
||||
|
||||
public IASTASMDefinition createASMDefinition(
|
||||
|
@ -68,4 +71,10 @@ public interface IASTFactory {
|
|||
public IASTEnumerationSpecifier createEnumerationSpecifier(String name, int startingOffset, int nameOffset );
|
||||
public void addEnumerator(IASTEnumerationSpecifier enumeration, String string, int startingOffset, int endingOffset);
|
||||
|
||||
public IASTExpression createExpression( IASTExpression.Kind kind, IASTExpression lhs, IASTExpression rhs, IASTExpression thirdExpression, String id, String typeId, String literal, IASTNewExpressionDescriptor newDescriptor );
|
||||
|
||||
public IASTExpression.IASTNewExpressionDescriptor createNewDescriptor();
|
||||
|
||||
public IASTInitializerClause createIASTInitializerClause(IASTInitializerClause.Kind kind, IASTExpression assignmentExpression, List initializerClauses);
|
||||
|
||||
}
|
|
@ -0,0 +1,40 @@
|
|||
/**********************************************************************
|
||||
* 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.ast;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.eclipse.cdt.core.parser.Enum;
|
||||
|
||||
/**
|
||||
* @author jcamelon
|
||||
*/
|
||||
public interface IASTInitializerClause {
|
||||
|
||||
public class Kind extends Enum
|
||||
{
|
||||
public static final Kind ASSIGNMENT_EXPRESSION = new Kind( 1 );
|
||||
public static final Kind INITIALIZER_LIST = new Kind( 2 );
|
||||
public static final Kind EMPTY = new Kind( 3 );
|
||||
|
||||
/**
|
||||
* @param enumValue
|
||||
*/
|
||||
protected Kind(int enumValue) {
|
||||
super(enumValue);
|
||||
}
|
||||
}
|
||||
|
||||
public Kind getKind();
|
||||
public List getInitializerList();
|
||||
public IASTExpression getAssigmentExpression();
|
||||
|
||||
}
|
|
@ -19,7 +19,6 @@ import java.util.LinkedList;
|
|||
import java.util.Set;
|
||||
import java.util.Stack;
|
||||
|
||||
import org.eclipse.cdt.core.parser.IScannerContext;
|
||||
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
|
||||
import org.eclipse.cdt.core.parser.ScannerException;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTInclusion;
|
||||
|
|
|
@ -14,7 +14,7 @@ import java.util.ArrayList;
|
|||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import org.eclipse.cdt.core.parser.ast.IASTExpression;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTInitializerClause;
|
||||
|
||||
/**
|
||||
* @author jcamelon
|
||||
|
@ -25,7 +25,7 @@ public class Declarator implements IParameterCollection
|
|||
private final DeclarationWrapper owner1;
|
||||
private final Declarator owner2;
|
||||
private String name;
|
||||
private IASTExpression initialValueExpression;
|
||||
private IASTInitializerClause initializerClause;
|
||||
private List ptrOps = new ArrayList();
|
||||
private List parameters = new ArrayList();
|
||||
|
||||
|
@ -133,17 +133,17 @@ public class Declarator implements IParameterCollection
|
|||
/**
|
||||
* @return
|
||||
*/
|
||||
public IASTExpression getInitialValueExpression()
|
||||
public IASTInitializerClause getInitializerClause()
|
||||
{
|
||||
return initialValueExpression;
|
||||
return initializerClause;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param expression
|
||||
*/
|
||||
public void setInitialValueExpression(IASTExpression expression)
|
||||
public void setInitializerClause(IASTInitializerClause expression)
|
||||
{
|
||||
initialValueExpression = expression;
|
||||
initializerClause = expression;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,40 @@
|
|||
/**********************************************************************
|
||||
* Copyright (c) 2002,2003 Rational Software Corporation and others.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Common Public License v0.5
|
||||
* which accompanies this distribution, and is available at
|
||||
* http://www.eclipse.org/legal/cpl-v05.html
|
||||
*
|
||||
* Contributors:
|
||||
* IBM Rational Software - Initial API and implementation
|
||||
***********************************************************************/
|
||||
package org.eclipse.cdt.internal.core.parser;
|
||||
|
||||
/**
|
||||
* @author jcamelon
|
||||
*/
|
||||
public class DeclaratorDuple {
|
||||
|
||||
public DeclaratorDuple( Object o, Declarator d )
|
||||
{
|
||||
object = o;
|
||||
declarator = d;
|
||||
}
|
||||
|
||||
private final Declarator declarator;
|
||||
private final Object object;
|
||||
/**
|
||||
* @return
|
||||
*/
|
||||
public Declarator getDeclarator() {
|
||||
return declarator;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return
|
||||
*/
|
||||
public Object getObject() {
|
||||
return object;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,754 +0,0 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2001 Rational Software Corp. 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:
|
||||
* Rational Software - initial implementation
|
||||
******************************************************************************/
|
||||
package org.eclipse.cdt.internal.core.parser;
|
||||
|
||||
import java.util.EmptyStackException;
|
||||
import java.util.Stack;
|
||||
|
||||
import org.eclipse.cdt.core.parser.IParser;
|
||||
import org.eclipse.cdt.core.parser.IParserCallback;
|
||||
import org.eclipse.cdt.core.parser.IToken;
|
||||
|
||||
|
||||
public class ExpressionEvaluator implements IParserCallback {
|
||||
|
||||
public class ExpressionException extends Exception {
|
||||
public ExpressionException(String msg) {
|
||||
super(msg);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private Stack stack = new Stack();
|
||||
|
||||
private int popInt() {
|
||||
return ((Integer)stack.pop()).intValue();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.eclipse.cdt.core.newparser.IParserCallback#expressionOperator(Token)
|
||||
*/
|
||||
public void expressionOperator(Object expression, IToken operator) {
|
||||
|
||||
int second = popInt();
|
||||
int first;
|
||||
switch (operator.getType()) {
|
||||
|
||||
case IToken.tPLUS:
|
||||
first = popInt();
|
||||
stack.push(new Integer(first + second));
|
||||
break;
|
||||
case IToken.tMINUS:
|
||||
first = popInt();
|
||||
stack.push(new Integer(first - second));
|
||||
break;
|
||||
case IToken.tSTAR:
|
||||
first = popInt();
|
||||
stack.push(new Integer(first * second));
|
||||
break;
|
||||
case IToken.tDIV:
|
||||
first = popInt();
|
||||
stack.push(new Integer(first / second));
|
||||
break;
|
||||
case IToken.tLT:
|
||||
first = popInt();
|
||||
stack.push(new Integer(first < second ? 1 : 0));
|
||||
break;
|
||||
case IToken.tLTEQUAL:
|
||||
first = popInt();
|
||||
stack.push(new Integer(first <= second ? 1 : 0));
|
||||
break;
|
||||
case IToken.tGT:
|
||||
first = popInt();
|
||||
stack.push(new Integer(first > second ? 1 : 0));
|
||||
break;
|
||||
case IToken.tGTEQUAL:
|
||||
first = popInt();
|
||||
stack.push(new Integer(first >= second ? 1 : 0));
|
||||
break;
|
||||
case IToken.tEQUAL:
|
||||
first = popInt();
|
||||
stack.push(new Integer(first == second ? 1 : 0));
|
||||
break;
|
||||
case IToken.tNOTEQUAL:
|
||||
first = popInt();
|
||||
stack.push(new Integer(first != second ? 1 : 0));
|
||||
break;
|
||||
case IToken.tAND:
|
||||
first = popInt();
|
||||
stack.push( new Integer( ( ( first != 0 ) && ( second != 0 ) ) ? 1 : 0 ) );
|
||||
break;
|
||||
case IToken.tOR:
|
||||
first = popInt();
|
||||
stack.push( new Integer( ( ( first != 0 ) || ( second != 0 ) ) ? 1 : 0 ) );
|
||||
break;
|
||||
case IToken.tNOT:
|
||||
stack.push( new Integer( ( second == 0 ) ? 1 : 0 ) );
|
||||
break;
|
||||
default:
|
||||
// throw new ExpressionException("Unhandled operator: " + operator );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.eclipse.cdt.core.newparser.IParserCallback#expressionTerminal(Token)
|
||||
*/
|
||||
public void expressionTerminal(Object expression, IToken terminal) {
|
||||
switch (terminal.getType()) {
|
||||
case IToken.tINTEGER:
|
||||
stack.push(new Integer(terminal.getImage()));
|
||||
break;
|
||||
default:
|
||||
// throw new ExpressionException("Unhandled terminal: " + terminal.getImage());
|
||||
}
|
||||
}
|
||||
|
||||
public Object getResult() throws EmptyStackException {
|
||||
return stack.peek();
|
||||
}
|
||||
/**
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#translationUnitBegin()
|
||||
*/
|
||||
public Object translationUnitBegin() {
|
||||
return null;
|
||||
}
|
||||
/**
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#translationUnitEnd(java.lang.Object)
|
||||
*/
|
||||
public void translationUnitEnd(Object unit) {
|
||||
}
|
||||
/**
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#inclusionBegin(java.lang.String, int)
|
||||
*/
|
||||
public Object inclusionBegin(String includeFile, int offset, int inclusionBeginOffset, boolean local) {
|
||||
return null;
|
||||
}
|
||||
/**
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#inclusionEnd()
|
||||
*/
|
||||
public void inclusionEnd(Object inclusion) {
|
||||
}
|
||||
/**
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#macro(java.lang.String, int)
|
||||
*/
|
||||
public Object macro(String macroName, int offset, int macroBeginOffset, int macroEndOffset) {
|
||||
return null;
|
||||
}
|
||||
/**
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#simpleDeclarationBegin(java.lang.Object)
|
||||
*/
|
||||
public Object simpleDeclarationBegin(Object Container, IToken firstToken) {
|
||||
return null;
|
||||
}
|
||||
/**
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#simpleDeclarationEnd(java.lang.Object)
|
||||
*/
|
||||
public void simpleDeclarationEnd(Object declaration, IToken lastToken) {
|
||||
}
|
||||
/**
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#parameterDeclarationBegin(java.lang.Object)
|
||||
*/
|
||||
public Object parameterDeclarationBegin(Object Container) {
|
||||
return null;
|
||||
}
|
||||
/**
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#parameterDeclarationEnd(java.lang.Object)
|
||||
*/
|
||||
public void parameterDeclarationEnd(Object declaration) {
|
||||
}
|
||||
/**
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#simpleDeclSpecifier(java.lang.Object, org.eclipse.cdt.internal.core.parser.Token)
|
||||
*/
|
||||
public void simpleDeclSpecifier(Object Container, IToken specifier) {
|
||||
}
|
||||
/**
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#declaratorBegin(java.lang.Object)
|
||||
*/
|
||||
public Object declaratorBegin(Object container) {
|
||||
return null;
|
||||
}
|
||||
/**
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#declaratorId(java.lang.Object)
|
||||
*/
|
||||
public void declaratorId(Object declarator) {
|
||||
}
|
||||
/**
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#declaratorAbort(java.lang.Object, java.lang.Object)
|
||||
*/
|
||||
public void declaratorAbort(Object declarator) {
|
||||
}
|
||||
/**
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#declaratorEnd(java.lang.Object)
|
||||
*/
|
||||
public void declaratorEnd(Object declarator) {
|
||||
}
|
||||
/**
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#argumentsBegin(java.lang.Object)
|
||||
*/
|
||||
public Object argumentsBegin(Object declarator) {
|
||||
return null;
|
||||
}
|
||||
/**
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#argumentsEnd(java.lang.Object)
|
||||
*/
|
||||
public void argumentsEnd(Object parameterDeclarationClause) {
|
||||
}
|
||||
/**
|
||||
* @see org.eclipse.cdt.internal.core.newparser.IParserCallback#oldKRParametersBegin()
|
||||
*/
|
||||
public Object oldKRParametersBegin( Object parameterDeclarationClause ) {
|
||||
return null;
|
||||
}
|
||||
/**
|
||||
* @see org.eclipse.cdt.internal.core.newparser.IParserCallback#oldKRParametersEnd()
|
||||
*/
|
||||
public void oldKRParametersEnd(Object oldKRParameterDeclarationClause) {
|
||||
}
|
||||
/**
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#functionBodyBegin()
|
||||
*/
|
||||
public Object functionBodyBegin(Object declaration) {
|
||||
return null;
|
||||
}
|
||||
/**
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#functionBodyEnd()
|
||||
*/
|
||||
public void functionBodyEnd(Object functionBody ) {
|
||||
}
|
||||
/**
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#classSpecifierBegin(java.lang.Object, org.eclipse.cdt.internal.core.parser.Token)
|
||||
*/
|
||||
public Object classSpecifierBegin(Object container, IToken classKey) {
|
||||
return null;
|
||||
}
|
||||
/**
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#classSpecifierName(java.lang.Object)
|
||||
*/
|
||||
public void classSpecifierName(Object classSpecifier) {
|
||||
}
|
||||
/**
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#classSpecifierEnd(java.lang.Object)
|
||||
*/
|
||||
public void classSpecifierEnd(Object classSpecifier, IToken closingBrace) {
|
||||
}
|
||||
/**
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#baseSpecifierBegin(java.lang.Object)
|
||||
*/
|
||||
public Object baseSpecifierBegin(Object containingClassSpec) {
|
||||
return null;
|
||||
}
|
||||
/**
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#baseSpecifierName(java.lang.Object)
|
||||
*/
|
||||
public void baseSpecifierName(Object baseSpecifier) {
|
||||
}
|
||||
/**
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#baseSpecifierVisibility(java.lang.Object, org.eclipse.cdt.internal.core.parser.Token)
|
||||
*/
|
||||
public void baseSpecifierVisibility(
|
||||
Object baseSpecifier,
|
||||
IToken visibility) {
|
||||
}
|
||||
/**
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#baseSpecifierVirtual(java.lang.Object, boolean)
|
||||
*/
|
||||
public void baseSpecifierVirtual(Object baseSpecifier, boolean virtual) {
|
||||
}
|
||||
/**
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#baseSpecifierEnd(java.lang.Object)
|
||||
*/
|
||||
public void baseSpecifierEnd(Object baseSpecifier) {
|
||||
}
|
||||
/**
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#expressionBegin(java.lang.Object)
|
||||
*/
|
||||
public Object expressionBegin(Object container) {
|
||||
return null;
|
||||
}
|
||||
/**
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#expressionEnd(java.lang.Object)
|
||||
*/
|
||||
public void expressionEnd(Object expression) {
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#classSpecifierAbort(java.lang.Object)
|
||||
*/
|
||||
public void classSpecifierAbort(Object classSpecifier) {
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#elaboratedTypeSpecifierBegin(java.lang.Object)
|
||||
*/
|
||||
public Object elaboratedTypeSpecifierBegin(Object container, IToken classKey) {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#elaboratedTypeSpecifierEnd(java.lang.Object)
|
||||
*/
|
||||
public void elaboratedTypeSpecifierEnd(Object elab) {
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#elaboratedTypeSpecifierName(java.lang.Object)
|
||||
*/
|
||||
public void elaboratedTypeSpecifierName(Object container) {
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#simpleDeclSpecifierName(java.lang.Object)
|
||||
*/
|
||||
public void simpleDeclSpecifierName(Object declaration) {
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#expressionAbort(java.lang.Object)
|
||||
*/
|
||||
public void expressionAbort(Object expression) {
|
||||
|
||||
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#classMemberVisibility(java.lang.Object, org.eclipse.cdt.internal.core.parser.Token)
|
||||
*/
|
||||
public void classMemberVisibility(Object classSpecifier, IToken visibility) {
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#pointerOperatorBegin(java.lang.Object, org.eclipse.cdt.internal.core.parser.Token)
|
||||
*/
|
||||
public Object pointerOperatorBegin(Object container) {
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#pointerOperatorEnd(java.lang.Object)
|
||||
*/
|
||||
public void pointerOperatorEnd(Object ptrOperator) {
|
||||
|
||||
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#pointerOperatorName(java.lang.Object)
|
||||
*/
|
||||
public void pointerOperatorName(Object ptrOperator) {
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#pointerOperatorType(java.lang.Object, org.eclipse.cdt.internal.core.parser.Token)
|
||||
*/
|
||||
public void pointerOperatorType(Object ptrOperator, IToken type) {
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#pointerOperatorCVModifier(java.lang.Object, org.eclipse.cdt.internal.core.parser.Token)
|
||||
*/
|
||||
public void pointerOperatorCVModifier(Object ptrOperator, IToken modifier) {
|
||||
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#declaratorCVModifier(java.lang.Object, org.eclipse.cdt.internal.core.parser.Token)
|
||||
*/
|
||||
public void declaratorCVModifier(Object declarator, IToken modifier) {
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#arrayBegin(java.lang.Object)
|
||||
*/
|
||||
public Object arrayDeclaratorBegin(Object declarator) {
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#arrayEnd(java.lang.Object)
|
||||
*/
|
||||
public void arrayDeclaratorEnd(Object arrayQualifier ) {
|
||||
;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#exceptionSpecificationTypename(java.lang.Object)
|
||||
*/
|
||||
public void declaratorThrowExceptionName(Object declarator) {
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#declaratorThrowsException(java.lang.Object)
|
||||
*/
|
||||
public void declaratorThrowsException(Object declarator) {
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#namespaceDeclarationBegin(java.lang.Object)
|
||||
*/
|
||||
public Object namespaceDefinitionBegin(Object container, IToken namespace) {
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#namespaceDeclarationId(java.lang.Object)
|
||||
*/
|
||||
public void namespaceDefinitionId(Object namespace) {
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#namespaceDeclarationAbort(java.lang.Object)
|
||||
*/
|
||||
public void namespaceDefinitionAbort(Object namespace) {
|
||||
|
||||
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#namespaceDeclarationEnd(java.lang.Object)
|
||||
*/
|
||||
public void namespaceDefinitionEnd(Object namespace, IToken closingBrace) {
|
||||
|
||||
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#linkageSpecificationBegin(java.lang.Object, java.lang.String)
|
||||
*/
|
||||
public Object linkageSpecificationBegin(Object container, String literal) {
|
||||
return null;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#linkageSpecificationEnd(java.lang.Object)
|
||||
*/
|
||||
public void linkageSpecificationEnd(Object linkageSpec) {
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#usingDirectiveBegin(java.lang.Object)
|
||||
*/
|
||||
public Object usingDirectiveBegin(Object container) {
|
||||
return null;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#usingDirectiveNamespaceId(java.lang.Object)
|
||||
*/
|
||||
public void usingDirectiveNamespaceId(Object container) {
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#usingDirectiveEnd(java.lang.Object)
|
||||
*/
|
||||
public void usingDirectiveEnd(Object directive) {
|
||||
|
||||
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#usingDeclarationBegin(java.lang.Object)
|
||||
*/
|
||||
public Object usingDeclarationBegin(Object container) {
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#usingDeclarationMapping(java.lang.Object)
|
||||
*/
|
||||
public void usingDeclarationMapping(Object container, boolean isTypename) {
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#usingDeclarationEnd(java.lang.Object)
|
||||
*/
|
||||
public void usingDeclarationEnd(Object directive) {
|
||||
|
||||
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#usingDirectiveAbort(java.lang.Object)
|
||||
*/
|
||||
public void usingDirectiveAbort(Object directive) {
|
||||
|
||||
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#usingDeclarationAbort(java.lang.Object)
|
||||
*/
|
||||
public void usingDeclarationAbort(Object declaration) {
|
||||
|
||||
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumSpecifierBegin(java.lang.Object)
|
||||
*/
|
||||
public Object enumSpecifierBegin(Object container, IToken enumKey) {
|
||||
return null;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumSpecifierId(java.lang.Object)
|
||||
*/
|
||||
public void enumSpecifierId(Object enumSpec) {
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumSpecifierAbort(java.lang.Object)
|
||||
*/
|
||||
public void enumSpecifierAbort(Object enumSpec) {
|
||||
|
||||
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumSpecifierEnd(java.lang.Object)
|
||||
*/
|
||||
public void enumSpecifierEnd(Object enumSpec, IToken closingBrace) {
|
||||
|
||||
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumDefinitionBegin(java.lang.Object)
|
||||
*/
|
||||
public Object enumeratorBegin(Object enumSpec) {
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumDefinitionId(java.lang.Object)
|
||||
*/
|
||||
public void enumeratorId(Object enumDefn) {
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumDefinitionEnd(java.lang.Object)
|
||||
*/
|
||||
public void enumeratorEnd(Object enumDefn, IToken lastToken) {
|
||||
|
||||
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#asmDefinition(java.lang.String)
|
||||
*/
|
||||
public void asmDefinition(Object container, String assemblyCode) {
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#constructorChainBegin(java.lang.Object)
|
||||
*/
|
||||
public Object constructorChainBegin(Object declarator) {
|
||||
return null;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#constructorChainAbort(java.lang.Object)
|
||||
*/
|
||||
public void constructorChainAbort(Object ctor) {
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#constructorChainEnd(java.lang.Object)
|
||||
*/
|
||||
public void constructorChainEnd(Object ctor) {
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#constructorChainElementBegin(java.lang.Object)
|
||||
*/
|
||||
public Object constructorChainElementBegin(Object ctor) {
|
||||
return null;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#constructorChainElementEnd(java.lang.Object)
|
||||
*/
|
||||
public void constructorChainElementEnd(Object element) {
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#constructorChainId(java.lang.Object)
|
||||
*/
|
||||
public void constructorChainElementId(Object ctor) {
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#constructorChainElementExpressionListElementBegin(java.lang.Object)
|
||||
*/
|
||||
public Object constructorChainElementExpressionListElementBegin(Object element) {
|
||||
return null;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#constructorChainElementExpressionListElementEnd(java.lang.Object)
|
||||
*/
|
||||
public void constructorChainElementExpressionListElementEnd(Object expression) {
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#explicitInstantiationBegin(java.lang.Object)
|
||||
*/
|
||||
public Object explicitInstantiationBegin(Object container) {
|
||||
return null;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#explicitInstantiationEnd(java.lang.Object)
|
||||
*/
|
||||
public void explicitInstantiationEnd(Object instantiation) {
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#explicitSpecializationBegin(java.lang.Object)
|
||||
*/
|
||||
public Object explicitSpecializationBegin(Object container) {
|
||||
return null;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#explicitSpecializationEnd(java.lang.Object)
|
||||
*/
|
||||
public void explicitSpecializationEnd(Object instantiation) {
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#declaratorPureVirtual(java.lang.Object)
|
||||
*/
|
||||
public void declaratorPureVirtual(Object declarator) {
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#templateDeclarationBegin(java.lang.Object, boolean)
|
||||
*/
|
||||
public Object templateDeclarationBegin(Object container, IToken exported) {
|
||||
return null;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#templateDeclarationAbort(java.lang.Object)
|
||||
*/
|
||||
public void templateDeclarationAbort(Object templateDecl) {
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#templateDeclarationEnd(java.lang.Object)
|
||||
*/
|
||||
public void templateDeclarationEnd(Object templateDecl, IToken lastToken) {
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#templateTypeParameterBegin(java.lang.Object, org.eclipse.cdt.internal.core.parser.Token)
|
||||
*/
|
||||
public Object templateTypeParameterBegin(Object templDecl, IToken kind) {
|
||||
return null;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#templateTypeParameterName(java.lang.Object)
|
||||
*/
|
||||
public void templateTypeParameterName(Object typeParm) {
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#templateTypeInitialTypeId(java.lang.Object)
|
||||
*/
|
||||
public void templateTypeParameterInitialTypeId(Object typeParm) {
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#templateTypeParameterEnd(java.lang.Object)
|
||||
*/
|
||||
public void templateTypeParameterEnd(Object typeParm) {
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#templateTypeParameterAbort(java.lang.Object)
|
||||
*/
|
||||
public void templateTypeParameterAbort(Object typeParm) {
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#pointerOperatorAbort(java.lang.Object)
|
||||
*/
|
||||
public void pointerOperatorAbort(Object ptrOperator) {
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#templateParameterListBegin(java.lang.Object)
|
||||
*/
|
||||
public Object templateParameterListBegin(Object declaration) {
|
||||
return null;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#templateParameterListEnd(java.lang.Object)
|
||||
*/
|
||||
public void templateParameterListEnd(Object parameterList) {
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#setParser(org.eclipse.cdt.internal.core.parser.IParser)
|
||||
*/
|
||||
public void setParser(IParser parser) {
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#expressionName(java.lang.Object)
|
||||
*/
|
||||
public void expressionName(Object expression) {
|
||||
stack.push( currName );
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.eclipse.cdt.internal.core.newparser.IParserCallback#nameBegin(org.eclipse.cdt.internal.core.newparser.Token)
|
||||
*/
|
||||
public void nameBegin(IToken firstToken) {
|
||||
currName = new Name(firstToken);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.eclipse.cdt.internal.core.newparser.IParserCallback#nameEnd(org.eclipse.cdt.internal.core.newparser.Token)
|
||||
*/
|
||||
public void nameEnd(IToken lastToken) {
|
||||
currName.setEnd(lastToken);
|
||||
}
|
||||
|
||||
Name currName = null;
|
||||
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#startBitfield(java.lang.Object)
|
||||
*/
|
||||
public Object startBitfield(Object declarator) {
|
||||
return null;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#endBitfield(java.lang.Object)
|
||||
*/
|
||||
public void endBitfield(Object bitfield) {
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#simpleDeclSpecifierType(java.lang.Object, java.lang.Object)
|
||||
*/
|
||||
public void simpleDeclSpecifierType(Object declaration, Object type) {
|
||||
}
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
package org.eclipse.cdt.core.parser;
|
||||
package org.eclipse.cdt.internal.core.parser;
|
||||
import java.io.IOException;
|
||||
import java.io.Reader;
|
||||
|
||||
|
@ -6,11 +6,6 @@ import org.eclipse.cdt.core.parser.ast.IASTInclusion;
|
|||
/**
|
||||
* @author jcamelon
|
||||
*
|
||||
* To change this generated comment edit the template variable
|
||||
"typecomment":
|
||||
* Window>Preferences>Java>Templates.
|
||||
* To enable and disable the creation of type comments go to
|
||||
* Window>Preferences>Java>Code Generation.
|
||||
*/
|
||||
public interface IScannerContext {
|
||||
|
||||
|
@ -24,10 +19,9 @@ public interface IScannerContext {
|
|||
*
|
||||
* @param macroOffset Offset of the expanding macro
|
||||
* @param macroLength Length of the macro identifier
|
||||
* @param line Initial line counter for the context
|
||||
* @return
|
||||
*/
|
||||
public IScannerContext initialize(Reader r, String f, int k, IASTInclusion i, int macroOffset, int macroLength, int line);
|
||||
public IScannerContext initialize(Reader r, String f, int k, IASTInclusion i, int macroOffset, int macroLength, int line );
|
||||
|
||||
public IScannerContext initialize(Reader r, String f, int k, IASTInclusion i);
|
||||
public int read() throws IOException;
|
||||
|
@ -57,12 +51,6 @@ public interface IScannerContext {
|
|||
*/
|
||||
public int getRelativeOffset();
|
||||
|
||||
/**
|
||||
* Returns current line counter.
|
||||
* @return int
|
||||
*/
|
||||
public int getLine();
|
||||
|
||||
public Reader getReader();
|
||||
|
||||
public int undoStackSize();
|
||||
|
@ -75,4 +63,9 @@ public interface IScannerContext {
|
|||
public IASTInclusion getExtension();
|
||||
public void setExtension( IASTInclusion ext );
|
||||
|
||||
/**
|
||||
* @return
|
||||
*/
|
||||
public int getLine();
|
||||
|
||||
}
|
File diff suppressed because it is too large
Load diff
|
@ -25,20 +25,22 @@ import java.util.Map;
|
|||
import java.util.StringTokenizer;
|
||||
import java.util.Vector;
|
||||
|
||||
import org.eclipse.cdt.core.parser.Backtrack;
|
||||
import org.eclipse.cdt.core.parser.EndOfFile;
|
||||
import org.eclipse.cdt.core.parser.IMacroDescriptor;
|
||||
import org.eclipse.cdt.core.parser.IParser;
|
||||
import org.eclipse.cdt.core.parser.IParserCallback;
|
||||
import org.eclipse.cdt.core.parser.IProblemReporter;
|
||||
import org.eclipse.cdt.core.parser.IScanner;
|
||||
import org.eclipse.cdt.core.parser.IScannerContext;
|
||||
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
|
||||
import org.eclipse.cdt.core.parser.IToken;
|
||||
import org.eclipse.cdt.core.parser.ITranslationResult;
|
||||
import org.eclipse.cdt.core.parser.ITranslationOptions;
|
||||
import org.eclipse.cdt.core.parser.ITranslationResult;
|
||||
import org.eclipse.cdt.core.parser.ParserFactory;
|
||||
import org.eclipse.cdt.core.parser.ParserMode;
|
||||
import org.eclipse.cdt.core.parser.ScannerException;
|
||||
import org.eclipse.cdt.core.parser.ast.ExpressionEvaluationException;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTExpression;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTFactory;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTInclusion;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTMacro;
|
||||
|
@ -1652,53 +1654,37 @@ public class Scanner implements IScanner {
|
|||
}
|
||||
else
|
||||
{
|
||||
Object expressionEvalResult = null;
|
||||
try {
|
||||
ExpressionEvaluator evaluator = new ExpressionEvaluator();
|
||||
IScanner trial =
|
||||
ParserFactory.createScanner(
|
||||
new StringReader(expression + ";"),
|
||||
IScanner trial =
|
||||
ParserFactory.createScanner(
|
||||
new StringReader(expression + ";"),
|
||||
EXPRESSION,
|
||||
definitions,
|
||||
null, ParserMode.COMPLETE_PARSE,
|
||||
problemReporter, translationResult );
|
||||
IParser parser = ParserFactory.createParser(trial, evaluator, ParserMode.COMPLETE_PARSE, problemReporter, translationResult );
|
||||
parser.expression(null);
|
||||
null, ParserMode.QUICK_PARSE );
|
||||
IParser parser = ParserFactory.createParser(trial, new NullSourceElementRequestor(), ParserMode.QUICK_PARSE );
|
||||
|
||||
expressionEvalResult = evaluator.getResult();
|
||||
|
||||
} catch (Exception e ) {
|
||||
throw new ScannerException(
|
||||
"Expression "
|
||||
+ expression
|
||||
+ " evaluates to an undefined value");
|
||||
} finally
|
||||
{
|
||||
if (expressionEvalResult == null)
|
||||
throw new ScannerException(
|
||||
"Expression "
|
||||
+ expression
|
||||
+ " evaluates to an undefined value");
|
||||
}
|
||||
|
||||
|
||||
if (expressionEvalResult instanceof Integer ) {
|
||||
int i = ((Integer) expressionEvalResult).intValue();
|
||||
if (i == 0) {
|
||||
try {
|
||||
IASTExpression exp = parser.expression(null);
|
||||
if( exp.evaluateExpression() == 0 )
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
} else if (
|
||||
expressionEvalResult instanceof Boolean ) {
|
||||
return ((Boolean) expressionEvalResult).booleanValue();
|
||||
} else {
|
||||
throw new ScannerException(
|
||||
"Unexpected expression type - we do not expect "
|
||||
+ expressionEvalResult.getClass().getName());
|
||||
} catch( Backtrack b )
|
||||
{
|
||||
throwExpressionEvaluationError(expression);
|
||||
}
|
||||
catch (ExpressionEvaluationException e) {
|
||||
throwExpressionEvaluationError(expression);
|
||||
}
|
||||
return true;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
protected void throwExpressionEvaluationError(String expression) throws ScannerException {
|
||||
throw new ScannerException(
|
||||
"Expression "
|
||||
+ expression
|
||||
+ " evaluates to an undefined value");
|
||||
}
|
||||
|
||||
protected void skipOverSinglelineComment() throws ScannerException {
|
||||
|
||||
StringBuffer comment = new StringBuffer("//");
|
||||
|
|
|
@ -14,7 +14,6 @@ import java.io.IOException;
|
|||
import java.io.Reader;
|
||||
import java.util.Stack;
|
||||
|
||||
import org.eclipse.cdt.core.parser.IScannerContext;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTInclusion;
|
||||
|
||||
public class ScannerContext implements IScannerContext
|
||||
|
|
|
@ -10,7 +10,6 @@
|
|||
******************************************************************************/
|
||||
package org.eclipse.cdt.internal.core.parser;
|
||||
|
||||
import org.eclipse.cdt.core.parser.IScannerContext;
|
||||
import org.eclipse.cdt.core.parser.IToken;
|
||||
|
||||
public class Token implements IToken {
|
||||
|
|
|
@ -12,13 +12,14 @@ package org.eclipse.cdt.internal.core.parser;
|
|||
|
||||
import java.util.Iterator;
|
||||
|
||||
import org.eclipse.cdt.core.parser.*;
|
||||
import org.eclipse.cdt.core.parser.IToken;
|
||||
|
||||
/**
|
||||
* @author jcamelon
|
||||
*
|
||||
*/
|
||||
public class TokenDuple {
|
||||
public class TokenDuple implements ITokenDuple {
|
||||
|
||||
public TokenDuple( IToken first, IToken last )
|
||||
{
|
||||
|
|
|
@ -11,9 +11,11 @@
|
|||
package org.eclipse.cdt.internal.core.parser.ast.full;
|
||||
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
import org.eclipse.cdt.core.parser.Backtrack;
|
||||
import org.eclipse.cdt.core.parser.IToken;
|
||||
import org.eclipse.cdt.core.parser.ITokenDuple;
|
||||
import org.eclipse.cdt.core.parser.ast.AccessVisibility;
|
||||
import org.eclipse.cdt.core.parser.ast.ClassKind;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTASMDefinition;
|
||||
|
@ -21,7 +23,9 @@ import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier;
|
|||
import org.eclipse.cdt.core.parser.ast.IASTCompilationUnit;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTElaboratedTypeSpecifier;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTEnumerationSpecifier;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTExpression;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTFactory;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTInitializerClause;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTLinkageSpecification;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTScope;
|
||||
|
@ -29,7 +33,8 @@ import org.eclipse.cdt.core.parser.ast.IASTTemplateDeclaration;
|
|||
import org.eclipse.cdt.core.parser.ast.IASTUsingDeclaration;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTUsingDirective;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier.ClassNameType;
|
||||
import org.eclipse.cdt.internal.core.parser.TokenDuple;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTExpression.Kind;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTExpression.IASTNewExpressionDescriptor;
|
||||
import org.eclipse.cdt.internal.core.parser.ast.BaseASTFactory;
|
||||
import org.eclipse.cdt.internal.core.parser.pst.IContainerSymbol;
|
||||
import org.eclipse.cdt.internal.core.parser.pst.ISymbol;
|
||||
|
@ -46,7 +51,7 @@ public class FullParseASTFactory extends BaseASTFactory implements IASTFactory {
|
|||
|
||||
public IASTUsingDirective createUsingDirective(
|
||||
IASTScope scope,
|
||||
TokenDuple duple)
|
||||
ITokenDuple duple)
|
||||
throws Backtrack {
|
||||
Iterator iter = duple.iterator();
|
||||
IToken t1 = (IToken)iter.next();
|
||||
|
@ -147,7 +152,7 @@ public class FullParseASTFactory extends BaseASTFactory implements IASTFactory {
|
|||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTFactory#createUsingDeclaration(org.eclipse.cdt.core.parser.ast.IASTScope, boolean, org.eclipse.cdt.internal.core.parser.TokenDuple)
|
||||
*/
|
||||
public IASTUsingDeclaration createUsingDeclaration(IASTScope scope, boolean isTypeName, TokenDuple name) {
|
||||
public IASTUsingDeclaration createUsingDeclaration(IASTScope scope, boolean isTypeName, ITokenDuple name) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
@ -195,4 +200,28 @@ public class FullParseASTFactory extends BaseASTFactory implements IASTFactory {
|
|||
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTFactory#createExpression(org.eclipse.cdt.core.parser.ast.IASTExpression.ExpressionKind, org.eclipse.cdt.core.parser.ast.IASTExpression, org.eclipse.cdt.core.parser.ast.IASTExpression, java.lang.String, java.lang.String, java.lang.String)
|
||||
*/
|
||||
public IASTExpression createExpression(Kind kind, IASTExpression lhs, IASTExpression rhs, IASTExpression thirdExpression, String id, String typeId, String literal, IASTNewExpressionDescriptor newDescriptor) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTFactory#createNewDescriptor()
|
||||
*/
|
||||
public IASTNewExpressionDescriptor createNewDescriptor() {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTFactory#createIASTInitializerClause()
|
||||
*/
|
||||
public IASTInitializerClause createIASTInitializerClause(IASTInitializerClause.Kind kind, IASTExpression assignmentExpression, List initializerClauses) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,167 @@
|
|||
/*
|
||||
* Created on Jun 26, 2003
|
||||
*
|
||||
* To change the template for this generated file go to
|
||||
* Window>Preferences>Java>Code Generation>Code and Comments
|
||||
*/
|
||||
package org.eclipse.cdt.internal.core.parser.ast.quick;
|
||||
|
||||
import org.eclipse.cdt.core.parser.ast.ExpressionEvaluationException;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTExpression;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @author jcamelon
|
||||
*
|
||||
* To change the template for this generated type comment go to
|
||||
* Window>Preferences>Java>Code Generation>Code and Comments
|
||||
*/
|
||||
public class ASTExpression implements IASTExpression {
|
||||
|
||||
private final Kind kind;
|
||||
private final IASTExpression lhs, rhs, third;
|
||||
private final String id, typeId, literal;
|
||||
private final IASTNewExpressionDescriptor newDescriptor;
|
||||
|
||||
/**
|
||||
* @param kind
|
||||
* @param lhs
|
||||
* @param rhs
|
||||
* @param id
|
||||
* @param typeId
|
||||
* @param literal
|
||||
*/
|
||||
public ASTExpression(Kind kind, IASTExpression lhs, IASTExpression rhs, IASTExpression third, String id, String typeId, String literal, IASTNewExpressionDescriptor newDescriptor) {
|
||||
this.kind = kind;
|
||||
this.lhs =lhs;
|
||||
this.rhs = rhs;
|
||||
this.third = third;
|
||||
this.typeId = typeId;
|
||||
this.id = id;
|
||||
this.literal = literal;
|
||||
this.newDescriptor = newDescriptor;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTExpression#getExpressionKind()
|
||||
*/
|
||||
public Kind getExpressionKind() {
|
||||
return kind;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTExpression#getLHSExpression()
|
||||
*/
|
||||
public IASTExpression getLHSExpression() {
|
||||
return lhs;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTExpression#getRHSExpression()
|
||||
*/
|
||||
public IASTExpression getRHSExpression() {
|
||||
return rhs;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTExpression#getLiteralString()
|
||||
*/
|
||||
public String getLiteralString() {
|
||||
return literal;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTExpression#getTypeId()
|
||||
*/
|
||||
public String getTypeId() {
|
||||
return typeId;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTExpression#getId()
|
||||
*/
|
||||
public String getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTExpression#getNewExpressionDescriptor()
|
||||
*/
|
||||
public IASTNewExpressionDescriptor getNewExpressionDescriptor() {
|
||||
return newDescriptor;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTExpression#getThirdExpression()
|
||||
*/
|
||||
public IASTExpression getThirdExpression() {
|
||||
return third;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTExpression#evaluateExpression()
|
||||
*/
|
||||
public int evaluateExpression() throws ExpressionEvaluationException {
|
||||
// primary expressions
|
||||
if( getExpressionKind() == IASTExpression.Kind.PRIMARY_INTEGER_LITERAL )
|
||||
return Integer.parseInt( getLiteralString() );
|
||||
if( getExpressionKind() == IASTExpression.Kind.PRIMARY_BRACKETED_EXPRESSION )
|
||||
return getLHSExpression().evaluateExpression();
|
||||
// unary not
|
||||
if( getExpressionKind() == IASTExpression.Kind.UNARY_NOT_CASTEXPRESSION )
|
||||
return ( ( getLHSExpression().evaluateExpression() == 0 ) ? 1 : 0 );
|
||||
|
||||
// multiplicative expressions
|
||||
if( getExpressionKind() == IASTExpression.Kind.MULTIPLICATIVE_MULTIPLY )
|
||||
return ( getLHSExpression().evaluateExpression() * getRHSExpression().evaluateExpression()) ;
|
||||
if( getExpressionKind() == IASTExpression.Kind.MULTIPLICATIVE_DIVIDE )
|
||||
return ( getLHSExpression().evaluateExpression() / getRHSExpression().evaluateExpression()) ;
|
||||
if( getExpressionKind() == IASTExpression.Kind.MULTIPLICATIVE_MODULUS )
|
||||
return ( getLHSExpression().evaluateExpression() % getRHSExpression().evaluateExpression()) ;
|
||||
// additives
|
||||
if( getExpressionKind() == IASTExpression.Kind.ADDITIVE_PLUS )
|
||||
return ( getLHSExpression().evaluateExpression() + getRHSExpression().evaluateExpression()) ;
|
||||
if( getExpressionKind() == IASTExpression.Kind.ADDITIVE_MINUS )
|
||||
return ( getLHSExpression().evaluateExpression() - getRHSExpression().evaluateExpression()) ;
|
||||
// shift expression
|
||||
if( getExpressionKind() == IASTExpression.Kind.SHIFT_LEFT )
|
||||
return ( getLHSExpression().evaluateExpression() << getRHSExpression().evaluateExpression()) ;
|
||||
if( getExpressionKind() == IASTExpression.Kind.SHIFT_RIGHT )
|
||||
return ( getLHSExpression().evaluateExpression() >> getRHSExpression().evaluateExpression()) ;
|
||||
// relational
|
||||
if( getExpressionKind() == IASTExpression.Kind.RELATIONAL_LESSTHAN )
|
||||
return ( getLHSExpression().evaluateExpression() < getRHSExpression().evaluateExpression() ? 1 : 0 ) ;
|
||||
if( getExpressionKind() == IASTExpression.Kind.RELATIONAL_GREATERTHAN )
|
||||
return ( getLHSExpression().evaluateExpression() > getRHSExpression().evaluateExpression() ? 1 : 0 ) ;
|
||||
if( getExpressionKind() == IASTExpression.Kind.RELATIONAL_LESSTHANEQUALTO )
|
||||
return ( getLHSExpression().evaluateExpression() <= getRHSExpression().evaluateExpression() ? 1 : 0 ) ;
|
||||
if( getExpressionKind() == IASTExpression.Kind.RELATIONAL_GREATERTHANEQUALTO )
|
||||
return ( getLHSExpression().evaluateExpression() >= getRHSExpression().evaluateExpression() ? 1 : 0 ) ;
|
||||
// equality
|
||||
if( getExpressionKind() == IASTExpression.Kind.EQUALITY_EQUALS )
|
||||
return ( getLHSExpression().evaluateExpression() == getRHSExpression().evaluateExpression() ? 1 : 0 ) ;
|
||||
if( getExpressionKind() == IASTExpression.Kind.EQUALITY_NOTEQUALS )
|
||||
return ( getLHSExpression().evaluateExpression() != getRHSExpression().evaluateExpression() ? 1 : 0 ) ;
|
||||
// and
|
||||
if( getExpressionKind() == IASTExpression.Kind.ANDEXPRESSION )
|
||||
return ( getLHSExpression().evaluateExpression() & getRHSExpression().evaluateExpression() ) ;
|
||||
// xor
|
||||
if( getExpressionKind() == IASTExpression.Kind.EXCLUSIVEOREXPRESSION )
|
||||
return ( getLHSExpression().evaluateExpression() ^ getRHSExpression().evaluateExpression() ) ;
|
||||
// or
|
||||
if( getExpressionKind() == IASTExpression.Kind.INCLUSIVEOREXPRESSION )
|
||||
return ( getLHSExpression().evaluateExpression() | getRHSExpression().evaluateExpression() ) ;
|
||||
// logical and
|
||||
if( getExpressionKind() == IASTExpression.Kind.LOGICALANDEXPRESSION )
|
||||
return( ( getLHSExpression().evaluateExpression() != 0 ) && ( getRHSExpression().evaluateExpression() != 0 ) ) ? 1 : 0 ;
|
||||
// logical or
|
||||
if( getExpressionKind() == IASTExpression.Kind.LOGICALOREXPRESSION )
|
||||
return( ( getLHSExpression().evaluateExpression() != 0 ) || ( getRHSExpression().evaluateExpression() != 0 ) ) ? 1 : 0 ;
|
||||
|
||||
throw new ExpressionEvaluationException();
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,58 @@
|
|||
/**********************************************************************
|
||||
* Copyright (c) 2002,2003 Rational Software Corporation and others.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Common Public License v0.5
|
||||
* which accompanies this distribution, and is available at
|
||||
* http://www.eclipse.org/legal/cpl-v05.html
|
||||
*
|
||||
* Contributors:
|
||||
* IBM Rational Software - Initial API and implementation
|
||||
***********************************************************************/
|
||||
package org.eclipse.cdt.internal.core.parser.ast.quick;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.eclipse.cdt.core.parser.ast.IASTExpression;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTInitializerClause;
|
||||
|
||||
/**
|
||||
* @author jcamelon
|
||||
*/
|
||||
public class ASTInitializerClause implements IASTInitializerClause {
|
||||
|
||||
private final IASTInitializerClause.Kind kind;
|
||||
private final IASTExpression assignmentExpression;
|
||||
private final List initializerClauses;
|
||||
/**
|
||||
* @param kind
|
||||
* @param assignmentExpression
|
||||
* @param initializerClauses
|
||||
*/
|
||||
public ASTInitializerClause(Kind kind, IASTExpression assignmentExpression, List initializerClauses) {
|
||||
this.kind = kind;
|
||||
this.assignmentExpression = assignmentExpression;
|
||||
this.initializerClauses = initializerClauses;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTInitializerClause#getKind()
|
||||
*/
|
||||
public Kind getKind() {
|
||||
return kind;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTInitializerClause#getInitializerList()
|
||||
*/
|
||||
public List getInitializerList() {
|
||||
return initializerClauses;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTInitializerClause#getAssigmentExpression()
|
||||
*/
|
||||
public IASTExpression getAssigmentExpression() {
|
||||
return assignmentExpression;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,20 @@
|
|||
/**********************************************************************
|
||||
* Copyright (c) 2002,2003 Rational Software Corporation and others.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Common Public License v0.5
|
||||
* which accompanies this distribution, and is available at
|
||||
* http://www.eclipse.org/legal/cpl-v05.html
|
||||
*
|
||||
* Contributors:
|
||||
* IBM Rational Software - Initial API and implementation
|
||||
***********************************************************************/
|
||||
package org.eclipse.cdt.internal.core.parser.ast.quick;
|
||||
|
||||
import org.eclipse.cdt.core.parser.ast.IASTExpression.IASTNewExpressionDescriptor;
|
||||
|
||||
/**
|
||||
* @author jcamelon
|
||||
*/
|
||||
public class ASTNewDescriptor implements IASTNewExpressionDescriptor {
|
||||
|
||||
}
|
|
@ -10,7 +10,10 @@
|
|||
***********************************************************************/
|
||||
package org.eclipse.cdt.internal.core.parser.ast.quick;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.eclipse.cdt.core.parser.Backtrack;
|
||||
import org.eclipse.cdt.core.parser.ITokenDuple;
|
||||
import org.eclipse.cdt.core.parser.ast.AccessVisibility;
|
||||
import org.eclipse.cdt.core.parser.ast.ClassKind;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTASMDefinition;
|
||||
|
@ -20,7 +23,9 @@ import org.eclipse.cdt.core.parser.ast.IASTCompilationUnit;
|
|||
import org.eclipse.cdt.core.parser.ast.IASTElaboratedTypeSpecifier;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTEnumerationSpecifier;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTEnumerator;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTExpression;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTFactory;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTInitializerClause;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTLinkageSpecification;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTScope;
|
||||
|
@ -28,7 +33,8 @@ import org.eclipse.cdt.core.parser.ast.IASTTemplateDeclaration;
|
|||
import org.eclipse.cdt.core.parser.ast.IASTUsingDeclaration;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTUsingDirective;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier.ClassNameType;
|
||||
import org.eclipse.cdt.internal.core.parser.TokenDuple;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTExpression.Kind;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTExpression.IASTNewExpressionDescriptor;
|
||||
import org.eclipse.cdt.internal.core.parser.ast.BaseASTFactory;
|
||||
|
||||
/**
|
||||
|
@ -40,7 +46,7 @@ public class QuickParseASTFactory extends BaseASTFactory implements IASTFactory
|
|||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.ast.IASTFactory#createUsingDirective(org.eclipse.cdt.internal.core.parser.ast.IASTScope, org.eclipse.cdt.internal.core.parser.TokenDuple)
|
||||
*/
|
||||
public IASTUsingDirective createUsingDirective(IASTScope scope, TokenDuple duple) throws Backtrack {
|
||||
public IASTUsingDirective createUsingDirective(IASTScope scope, ITokenDuple duple) throws Backtrack {
|
||||
return new ASTUsingDirective( scope, duple.toString() );
|
||||
}
|
||||
|
||||
|
@ -81,7 +87,7 @@ public class QuickParseASTFactory extends BaseASTFactory implements IASTFactory
|
|||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTFactory#createUsingDeclaration(org.eclipse.cdt.core.parser.ast.IASTScope, boolean, org.eclipse.cdt.internal.core.parser.TokenDuple)
|
||||
*/
|
||||
public IASTUsingDeclaration createUsingDeclaration(IASTScope scope, boolean isTypeName, TokenDuple name) {
|
||||
public IASTUsingDeclaration createUsingDeclaration(IASTScope scope, boolean isTypeName, ITokenDuple name) {
|
||||
return new ASTUsingDeclaration( scope, isTypeName, name.toString() );
|
||||
}
|
||||
|
||||
|
@ -127,4 +133,25 @@ public class QuickParseASTFactory extends BaseASTFactory implements IASTFactory
|
|||
IASTEnumerator enumerator = new ASTEnumerator( enumeration, string, startingOffset, endingOffset );
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTFactory#createExpression(org.eclipse.cdt.core.parser.ast.IASTExpression.ExpressionKind, org.eclipse.cdt.core.parser.ast.IASTExpression, org.eclipse.cdt.core.parser.ast.IASTExpression, java.lang.String, java.lang.String, java.lang.String)
|
||||
*/
|
||||
public IASTExpression createExpression(Kind kind, IASTExpression lhs, IASTExpression rhs, IASTExpression thirdExpression, String id, String typeId, String literal, IASTNewExpressionDescriptor newDescriptor) {
|
||||
return new ASTExpression( kind, lhs, rhs, thirdExpression, id, typeId, literal, newDescriptor );
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTFactory#createNewDescriptor()
|
||||
*/
|
||||
public IASTNewExpressionDescriptor createNewDescriptor() {
|
||||
return new ASTNewDescriptor();
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTFactory#createIASTInitializerClause()
|
||||
*/
|
||||
public IASTInitializerClause createIASTInitializerClause(IASTInitializerClause.Kind kind, IASTExpression assignmentExpression, List initializerClauses) {
|
||||
return new ASTInitializerClause( kind, assignmentExpression, initializerClauses );
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue