From 2c9b2f90fa95f8e3df3debab6328cd1571072165 Mon Sep 17 00:00:00 2001 From: John Camelon Date: Wed, 5 May 2004 20:10:46 +0000 Subject: [PATCH] Cleaned up EXPRESSION_PARSE style expressions in the AST to be more space efficient. --- .../core/parser/ast/GCCASTExtension.java | 34 ++++++++- .../ast/expression/ASTBinaryExpression.java | 40 +++++++++++ .../expression/ASTConditionalExpression.java | 41 +++++++++++ .../ast/expression/ASTEmptyExpression.java | 28 ++++++++ .../parser/ast/expression/ASTExpression.java | 34 +++------ .../ast/expression/ASTIdExpression.java | 40 +++++++++++ .../ast/expression/ASTLiteralExpression.java | 36 ++++++++++ .../ast/expression/ASTNewExpression.java | 47 ++++++++++++ .../ast/expression/ASTTypeIdExpression.java | 42 +++++++++++ .../ast/expression/ASTUnaryExpression.java | 37 ++++++++++ .../expression/ASTUnaryTypeIdExpression.java | 43 +++++++++++ .../ast/expression/ExpressionFactory.java | 71 +++++++++++++++++++ .../expression/ExpressionParseASTFactory.java | 10 +-- .../ast/expression/gcc/ASTGCCExpression.java | 47 ------------ .../ast/quick/QuickParseASTFactory.java | 16 ++--- 15 files changed, 472 insertions(+), 94 deletions(-) create mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ASTBinaryExpression.java create mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ASTConditionalExpression.java create mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ASTEmptyExpression.java create mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ASTIdExpression.java create mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ASTLiteralExpression.java create mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ASTNewExpression.java create mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ASTTypeIdExpression.java create mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ASTUnaryExpression.java create mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ASTUnaryTypeIdExpression.java create mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ExpressionFactory.java delete mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/gcc/ASTGCCExpression.java diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/GCCASTExtension.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/GCCASTExtension.java index 138596d7dc0..ee308a7c3f8 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/GCCASTExtension.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/GCCASTExtension.java @@ -18,6 +18,7 @@ import java.util.Map; import org.eclipse.cdt.core.parser.IToken; import org.eclipse.cdt.core.parser.ITokenDuple; import org.eclipse.cdt.core.parser.ParserMode; +import org.eclipse.cdt.core.parser.ast.ASTExpressionEvaluationException; import org.eclipse.cdt.core.parser.ast.IASTDesignator; import org.eclipse.cdt.core.parser.ast.IASTExpression; import org.eclipse.cdt.core.parser.ast.IASTScope; @@ -34,7 +35,8 @@ import org.eclipse.cdt.core.parser.extension.IASTFactoryExtension; import org.eclipse.cdt.internal.core.parser.ast.complete.ASTExpression; import org.eclipse.cdt.internal.core.parser.ast.complete.ASTTypeId; import org.eclipse.cdt.internal.core.parser.ast.complete.gcc.ASTGCCSimpleTypeSpecifier; -import org.eclipse.cdt.internal.core.parser.ast.expression.gcc.ASTGCCExpression; +import org.eclipse.cdt.internal.core.parser.ast.expression.ASTIdExpression; +import org.eclipse.cdt.internal.core.parser.ast.expression.ExpressionFactory; import org.eclipse.cdt.internal.core.parser.ast.gcc.ASTGCCDesignator; import org.eclipse.cdt.internal.core.parser.pst.ISymbol; import org.eclipse.cdt.internal.core.parser.pst.ParserSymbolTable; @@ -62,6 +64,34 @@ public class GCCASTExtension implements IASTFactoryExtension { return true; return false; } + + + /** + * @param kind + * @param lhs + * @param rhs + * @param thirdExpression + * @param typeId + * @param string + * @param literal + * @param newDescriptor + * @return + */ + protected static IASTExpression createExpression(Kind kind, IASTExpression lhs, IASTExpression rhs, IASTExpression thirdExpression, IASTTypeId typeId, String idExpression, String literal, IASTNewExpressionDescriptor newDescriptor) { + if( !idExpression.equals( EMPTY_STRING ) && literal.equals( EMPTY_STRING )) + return new ASTIdExpression( kind, idExpression ) + { + public int evaluateExpression() throws ASTExpressionEvaluationException { + if( getExpressionKind() == Kind.ID_EXPRESSION ) + return 0; + return super.evaluateExpression(); + } + }; + + return ExpressionFactory.createExpression( kind, lhs, rhs, thirdExpression, typeId, idExpression, literal, newDescriptor ); + } + + /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.extension.IASTFactoryExtension#createExpression(org.eclipse.cdt.core.parser.ast.IASTScope, org.eclipse.cdt.core.parser.ast.IASTExpression.Kind, org.eclipse.cdt.core.parser.ast.IASTExpression, org.eclipse.cdt.core.parser.ast.IASTExpression, org.eclipse.cdt.core.parser.ast.IASTExpression, org.eclipse.cdt.core.parser.ast.IASTTypeId, org.eclipse.cdt.core.parser.ITokenDuple, java.lang.String, org.eclipse.cdt.core.parser.ast.IASTExpression.IASTNewExpressionDescriptor) */ @@ -71,7 +101,7 @@ public class GCCASTExtension implements IASTFactoryExtension { ITokenDuple idExpression, String literal, IASTNewExpressionDescriptor newDescriptor) { - return new ASTGCCExpression( kind, lhs, rhs, thirdExpression, typeId, idExpression == null ? "" : idExpression.toString(), literal, newDescriptor );//$NON-NLS-1$ + return createExpression( kind, lhs, rhs, thirdExpression, typeId, (idExpression == null ) ? EMPTY_STRING : idExpression.toString(), literal, newDescriptor ); } /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.extension.IASTFactoryExtension#canHandleExpressionKind(org.eclipse.cdt.core.parser.ast.IASTExpression.Kind) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ASTBinaryExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ASTBinaryExpression.java new file mode 100644 index 00000000000..37a117d1985 --- /dev/null +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ASTBinaryExpression.java @@ -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.ast.expression; + +import org.eclipse.cdt.core.parser.ast.IASTExpression; + +/** + * @author jcamelon + * + */ +public class ASTBinaryExpression extends ASTUnaryExpression + implements + IASTExpression { + + private final IASTExpression rhs; + + /** + * @param kind + * @param lhs + * @param rhs + */ + public ASTBinaryExpression(Kind kind, IASTExpression lhs, IASTExpression rhs) { + super( kind, lhs ); + this.rhs = rhs; + } + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTExpression#getRHSExpression() + */ + public IASTExpression getRHSExpression() { + return rhs; + } +} diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ASTConditionalExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ASTConditionalExpression.java new file mode 100644 index 00000000000..595d5a8f863 --- /dev/null +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ASTConditionalExpression.java @@ -0,0 +1,41 @@ +/********************************************************************** + * 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.expression; + +import org.eclipse.cdt.core.parser.ast.IASTExpression; + +/** + * @author jcamelon + * + */ +public class ASTConditionalExpression extends ASTBinaryExpression + implements + IASTExpression { + + private final IASTExpression thirdExpression; + + /** + * @param kind + * @param lhs + * @param rhs + * @param thirdExpression + */ + public ASTConditionalExpression(Kind kind, IASTExpression lhs, IASTExpression rhs, IASTExpression thirdExpression) { + super( kind, lhs, rhs ); + this.thirdExpression = thirdExpression; + } + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTExpression#getThirdExpression() + */ + public IASTExpression getThirdExpression() { + return thirdExpression; + } +} diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ASTEmptyExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ASTEmptyExpression.java new file mode 100644 index 00000000000..33179093438 --- /dev/null +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ASTEmptyExpression.java @@ -0,0 +1,28 @@ +/********************************************************************** + * 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.expression; + +import org.eclipse.cdt.core.parser.ast.IASTExpression; + +/** + * @author jcamelon + * + */ +public class ASTEmptyExpression extends ASTExpression implements IASTExpression { + + /** + * @param kind + */ + public ASTEmptyExpression(Kind kind) { + super(kind); + // TODO Auto-generated constructor stub + } +} diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ASTExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ASTExpression.java index 31c44f7743f..1d7600710e0 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ASTExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ASTExpression.java @@ -20,29 +20,15 @@ import org.eclipse.cdt.core.parser.ast.IASTTypeId; */ public class ASTExpression implements IASTExpression { - private final Kind kind; - private final IASTExpression lhs, rhs, third; - private final IASTTypeId typeId; - private final String literal, idExpression; - private final IASTNewExpressionDescriptor newDescriptor; + private final Kind kind; + private static final String EMPTY_STRING = ""; //$NON-NLS-1$ /** * @param kind - * @param lhs - * @param rhs * @param id - * @param typeId - * @param literal */ - public ASTExpression(Kind kind, IASTExpression lhs, IASTExpression rhs, IASTExpression third, IASTTypeId typeId, String idExpression, String literal, IASTNewExpressionDescriptor newDescriptor ) { + public ASTExpression(Kind kind ) { this.kind = kind; - this.lhs =lhs; - this.rhs = rhs; - this.third = third; - this.typeId = typeId; - this.literal = literal; - this.newDescriptor = newDescriptor; - this.idExpression = idExpression; } /* (non-Javadoc) @@ -56,42 +42,42 @@ public class ASTExpression implements IASTExpression { * @see org.eclipse.cdt.core.parser.ast.IASTExpression#getLHSExpression() */ public IASTExpression getLHSExpression() { - return lhs; + return null; } /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTExpression#getRHSExpression() */ public IASTExpression getRHSExpression() { - return rhs; + return null; } /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTExpression#getLiteralString() */ public String getLiteralString() { - return literal; + return EMPTY_STRING; } /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTExpression#getTypeId() */ public IASTTypeId getTypeId() { - return typeId; + return null; } /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTExpression#getNewExpressionDescriptor() */ public IASTNewExpressionDescriptor getNewExpressionDescriptor() { - return newDescriptor; + return null; } /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTExpression#getThirdExpression() */ public IASTExpression getThirdExpression() { - return third; + return null; } /* (non-Javadoc) @@ -199,7 +185,7 @@ public class ASTExpression implements IASTExpression { */ public String getIdExpression() { - return idExpression; + return null; } /* (non-Javadoc) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ASTIdExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ASTIdExpression.java new file mode 100644 index 00000000000..208245d0b5a --- /dev/null +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ASTIdExpression.java @@ -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.ast.expression; + +import org.eclipse.cdt.core.parser.ast.IASTExpression; + +/** + * @author jcamelon + * + */ +public class ASTIdExpression extends ASTExpression implements IASTExpression { + + private final String idExpression; + + + /** + * @param kind + * @param idExpression + */ + public ASTIdExpression(Kind kind, String idExpression) { + super(kind); + this.idExpression = idExpression; + } + + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTExpression#getIdExpression() + */ + public String getIdExpression() { + return idExpression; + } +} diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ASTLiteralExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ASTLiteralExpression.java new file mode 100644 index 00000000000..7c94bb6a617 --- /dev/null +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ASTLiteralExpression.java @@ -0,0 +1,36 @@ +/********************************************************************** + * 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.expression; + + +/** + * @author jcamelon + * + */ +public class ASTLiteralExpression extends ASTExpression { + + private final String literal; + + /** + * @param kind + * @param literal + */ + public ASTLiteralExpression(Kind kind, String literal) { + super( kind ); + this.literal =literal; + } + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTExpression#getLiteralString() + */ + public String getLiteralString() { + return literal; + } +} diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ASTNewExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ASTNewExpression.java new file mode 100644 index 00000000000..691b043622a --- /dev/null +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ASTNewExpression.java @@ -0,0 +1,47 @@ +/********************************************************************** + * 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.expression; + +import org.eclipse.cdt.core.parser.ast.IASTExpression; +import org.eclipse.cdt.core.parser.ast.IASTTypeId; + +/** + * @author jcamelon + * + */ +public class ASTNewExpression extends ASTExpression implements IASTExpression { + + private final IASTNewExpressionDescriptor newDescriptor; + private final IASTTypeId typeId; + + /** + * @param kind + * @param newDescriptor + * @param typeId + */ + public ASTNewExpression(Kind kind, IASTNewExpressionDescriptor newDescriptor, IASTTypeId typeId) { + super(kind); + this.newDescriptor = newDescriptor; + this.typeId = typeId; + } + /* (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#getTypeId() + */ + public IASTTypeId getTypeId() { + return typeId; + } +} diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ASTTypeIdExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ASTTypeIdExpression.java new file mode 100644 index 00000000000..0018222e6eb --- /dev/null +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ASTTypeIdExpression.java @@ -0,0 +1,42 @@ +/********************************************************************** + * 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.expression; + +import org.eclipse.cdt.core.parser.ast.IASTExpression; +import org.eclipse.cdt.core.parser.ast.IASTTypeId; + +/** + * @author jcamelon + * + */ +public class ASTTypeIdExpression extends ASTExpression + implements + IASTExpression { + + private final IASTTypeId typeId; + + /** + * @param kind + * @param typeId + */ + public ASTTypeIdExpression(Kind kind, IASTTypeId typeId) { + super( kind ); + this.typeId = typeId; + } + + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTExpression#getTypeId() + */ + public IASTTypeId getTypeId() { + return typeId; + } +} diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ASTUnaryExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ASTUnaryExpression.java new file mode 100644 index 00000000000..78a8bcc0acc --- /dev/null +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ASTUnaryExpression.java @@ -0,0 +1,37 @@ +/********************************************************************** + * 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.expression; + +import org.eclipse.cdt.core.parser.ast.IASTExpression; + +/** + * @author jcamelon + * + */ +public class ASTUnaryExpression extends ASTExpression implements IASTExpression { + + private final IASTExpression lhs; + + /** + * @param kind + * @param lhs + */ + public ASTUnaryExpression(Kind kind, IASTExpression lhs) { + super(kind); + this.lhs = lhs; + } + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTExpression#getLHSExpression() + */ + public IASTExpression getLHSExpression() { + return lhs; + } +} diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ASTUnaryTypeIdExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ASTUnaryTypeIdExpression.java new file mode 100644 index 00000000000..7ee172affa9 --- /dev/null +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ASTUnaryTypeIdExpression.java @@ -0,0 +1,43 @@ +/********************************************************************** + * 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.expression; + +import org.eclipse.cdt.core.parser.ast.IASTExpression; +import org.eclipse.cdt.core.parser.ast.IASTTypeId; + +/** + * @author jcamelon + * + */ +public class ASTUnaryTypeIdExpression extends ASTUnaryExpression + implements + IASTExpression { + + private final IASTTypeId typeId; + + /** + * @param kind + * @param lhs + * @param typeId + */ + public ASTUnaryTypeIdExpression(Kind kind, IASTExpression lhs, IASTTypeId typeId) { + super( kind, lhs ); + this.typeId = typeId; + } + + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTExpression#getTypeId() + */ + public IASTTypeId getTypeId() { + return typeId; + } +} diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ExpressionFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ExpressionFactory.java new file mode 100644 index 00000000000..2cf6f7a2983 --- /dev/null +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ExpressionFactory.java @@ -0,0 +1,71 @@ +/********************************************************************** + * 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.expression; + +import org.eclipse.cdt.core.parser.ast.IASTExpression; +import org.eclipse.cdt.core.parser.ast.IASTTypeId; +import org.eclipse.cdt.core.parser.ast.IASTExpression.IASTNewExpressionDescriptor; +import org.eclipse.cdt.core.parser.ast.IASTExpression.Kind; + +/** + * @author jcamelon + * + */ +public class ExpressionFactory { + private static final String EMPTY_STRING = ""; //$NON-NLS-1$ + /** + * + */ + public ExpressionFactory() { + super(); + // TODO Auto-generated constructor stub + } + + /** + * @param kind + * @param lhs + * @param rhs + * @param thirdExpression + * @param typeId + * @param string + * @param literal + * @param newDescriptor + * @return + */ + public static IASTExpression createExpression(Kind kind, IASTExpression lhs, IASTExpression rhs, IASTExpression thirdExpression, IASTTypeId typeId, String idExpression, String literal, IASTNewExpressionDescriptor newDescriptor) { + if( !literal.equals( EMPTY_STRING ) && idExpression.equals( EMPTY_STRING )) //$NON-NLS-1$ + return new ASTLiteralExpression( kind, literal ); + + if( !idExpression.equals( EMPTY_STRING ) ) + return new ASTIdExpression( kind, idExpression ); + + if( thirdExpression != null ) + return new ASTConditionalExpression( kind, lhs, rhs, thirdExpression ); + + if( newDescriptor != null ) + return new ASTNewExpression( kind, newDescriptor, typeId ); + + if( lhs != null && rhs != null ) + return new ASTBinaryExpression( kind, lhs, rhs ); + + if( lhs != null && typeId != null ) + return new ASTUnaryTypeIdExpression( kind, lhs, typeId ); + + if( lhs != null ) + return new ASTUnaryExpression( kind, lhs ); + + if( typeId != null ) + return new ASTTypeIdExpression( kind, typeId ); + + return new ASTEmptyExpression( kind ); + + } +} diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ExpressionParseASTFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ExpressionParseASTFactory.java index 77b1ee72e96..80d3394c04e 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ExpressionParseASTFactory.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ExpressionParseASTFactory.java @@ -381,15 +381,7 @@ public class ExpressionParseASTFactory extends BaseASTFactory implements IASTFac throws ASTSemanticException { if( extension.overrideCreateExpressionMethod() ) return extension.createExpression(scope, kind, lhs, rhs, thirdExpression, typeId, idExpression, literal, newDescriptor ); - return new ASTExpression( - kind, - lhs, - rhs, - thirdExpression, - typeId, - idExpression == null ? "" : idExpression.toString(), //$NON-NLS-1$ - literal, - newDescriptor ); + return ExpressionFactory.createExpression( kind, lhs, rhs, thirdExpression, typeId, idExpression == null ? "" : idExpression.toString(), literal, newDescriptor ); //$NON-NLS-1$ } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/gcc/ASTGCCExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/gcc/ASTGCCExpression.java deleted file mode 100644 index fcae497ef1c..00000000000 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/gcc/ASTGCCExpression.java +++ /dev/null @@ -1,47 +0,0 @@ -/********************************************************************** - * Copyright (c) 2002,2003 Rational Software Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v0.5 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v05.html - * - * Contributors: - * IBM Rational Software - Initial API and implementation */ - -package org.eclipse.cdt.internal.core.parser.ast.expression.gcc; - -import org.eclipse.cdt.core.parser.ast.ASTExpressionEvaluationException; -import org.eclipse.cdt.core.parser.ast.IASTExpression; -import org.eclipse.cdt.core.parser.ast.IASTTypeId; -import org.eclipse.cdt.internal.core.parser.ast.expression.ASTExpression; - -/** - * @author jcamelon - * - */ -public class ASTGCCExpression extends ASTExpression { - - /** - * @param kind - * @param lhs - * @param rhs - * @param third - * @param typeId - * @param idExpression - * @param literal - * @param newDescriptor - */ - public ASTGCCExpression(Kind kind, IASTExpression lhs, IASTExpression rhs, IASTExpression third, IASTTypeId typeId, String idExpression, String literal, IASTNewExpressionDescriptor newDescriptor) { - super(kind, lhs, rhs, third, typeId, idExpression, literal, newDescriptor); - } - - - /* (non-Javadoc) - * @see org.eclipse.cdt.core.parser.ast.IASTExpression#evaluateExpression() - */ - public int evaluateExpression() throws ASTExpressionEvaluationException { - if( getExpressionKind() == Kind.ID_EXPRESSION ) - return 0; - return super.evaluateExpression(); - } -} diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/QuickParseASTFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/QuickParseASTFactory.java index d47a19a643c..4694301dd8a 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/QuickParseASTFactory.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/QuickParseASTFactory.java @@ -60,7 +60,7 @@ import org.eclipse.cdt.core.parser.ast.IASTExpression.Kind; import org.eclipse.cdt.core.parser.ast.IASTSimpleTypeSpecifier.Type; import org.eclipse.cdt.core.parser.extension.IASTFactoryExtension; import org.eclipse.cdt.internal.core.parser.ast.BaseASTFactory; -import org.eclipse.cdt.internal.core.parser.ast.expression.ASTExpression; +import org.eclipse.cdt.internal.core.parser.ast.expression.ExpressionFactory; /** @@ -69,8 +69,6 @@ import org.eclipse.cdt.internal.core.parser.ast.expression.ASTExpression; */ public class QuickParseASTFactory extends BaseASTFactory implements IASTFactory { - private static final boolean CREATE_EXCESS_CONSTRUCTS = true; - public QuickParseASTFactory( IASTFactoryExtension extension ) { super(extension); @@ -159,18 +157,14 @@ public class QuickParseASTFactory extends BaseASTFactory implements IASTFactory * @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(IASTScope scope, Kind kind, IASTExpression lhs, IASTExpression rhs, IASTExpression thirdExpression, IASTTypeId typeId, ITokenDuple idExpression, String literal, IASTNewExpressionDescriptor newDescriptor) { - if( CREATE_EXCESS_CONSTRUCTS ) - return new ASTExpression( kind, lhs, rhs, thirdExpression, typeId, idExpression == null ? "" : idExpression.toString(), literal, newDescriptor ); //$NON-NLS-1$ - return null; + return ExpressionFactory.createExpression( kind, lhs, rhs, thirdExpression, typeId, idExpression == null ? "" : idExpression.toString(), literal, newDescriptor ); //$NON-NLS-1$ } /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTFactory#createNewDescriptor() */ public IASTNewExpressionDescriptor createNewDescriptor(List newPlacementEpressions, List newTypeIdExpressions, List newInitializerExpressions) { - if( CREATE_EXCESS_CONSTRUCTS ) - return new ASTNewDescriptor(); - return null; + return new ASTNewDescriptor(); } /* (non-Javadoc) @@ -341,9 +335,7 @@ public class QuickParseASTFactory extends BaseASTFactory implements IASTFactory public IASTInitializerClause createInitializerClause(IASTScope scope, IASTInitializerClause.Kind kind, IASTExpression assignmentExpression, List initializerClauses, List designators) { - if( CREATE_EXCESS_CONSTRUCTS ) - return new ASTInitializerClause( kind, assignmentExpression, initializerClauses, designators ); - return null; + return new ASTInitializerClause( kind, assignmentExpression, initializerClauses, designators ); } /* (non-Javadoc)