From 9ab42da0771a5250dd42f04ac20781ec046b16e5 Mon Sep 17 00:00:00 2001 From: Sergey Prigogin Date: Mon, 9 Jul 2012 12:09:25 -0700 Subject: [PATCH] Bug 299911. Signatures for evaluations. --- .../core/dom/parser/ITypeMarshalBuffer.java | 2 + .../cdt/internal/core/dom/parser/Value.java | 4 +- .../core/dom/parser/cpp/ICPPEvaluation.java | 37 ++- .../parser/cpp/semantics/CPPEvaluation.java | 228 ++++++++++++++++++ .../dom/parser/cpp/semantics/EvalBinary.java | 2 +- .../cpp/semantics/EvalBinaryTypeId.java | 3 +- .../dom/parser/cpp/semantics/EvalBinding.java | 3 +- .../dom/parser/cpp/semantics/EvalComma.java | 2 +- .../parser/cpp/semantics/EvalCompound.java | 2 +- .../parser/cpp/semantics/EvalConditional.java | 2 +- .../dom/parser/cpp/semantics/EvalFixed.java | 2 +- .../cpp/semantics/EvalFunctionCall.java | 2 +- .../parser/cpp/semantics/EvalFunctionSet.java | 3 +- .../core/dom/parser/cpp/semantics/EvalID.java | 2 +- .../parser/cpp/semantics/EvalInitList.java | 2 +- .../cpp/semantics/EvalMemberAccess.java | 2 +- .../dom/parser/cpp/semantics/EvalTypeId.java | 2 +- .../dom/parser/cpp/semantics/EvalUnary.java | 2 +- .../parser/cpp/semantics/EvalUnaryTypeID.java | 3 +- .../core/pdom/db/TypeMarshalBuffer.java | 4 +- 20 files changed, 283 insertions(+), 26 deletions(-) create mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPEvaluation.java diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ITypeMarshalBuffer.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ITypeMarshalBuffer.java index f3dbae212dc..4b0ebf003e7 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ITypeMarshalBuffer.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ITypeMarshalBuffer.java @@ -63,6 +63,7 @@ public interface ITypeMarshalBuffer { ISerializableEvaluation unmarshalEvaluation() throws CoreException; int getByte() throws CoreException; int getShort() throws CoreException; + int getInt() throws CoreException; long getLong() throws CoreException; char[] getCharArray() throws CoreException; @@ -72,6 +73,7 @@ public interface ITypeMarshalBuffer { void marshalEvaluation(ISerializableEvaluation eval, boolean includeValue) throws CoreException; void putByte(byte data); void putShort(short data); + void putInt(int data); void putLong(long data); void putCharArray(char[] data); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/Value.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/Value.java index 808165c5c65..a731fd688ed 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/Value.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/Value.java @@ -158,7 +158,7 @@ public class Value implements IValue { return parseLong(fExpression); } - public void marshall(TypeMarshalBuffer buf) throws CoreException { + public void marshall(ITypeMarshalBuffer buf) throws CoreException { if (UNKNOWN == this) { buf.putByte((byte) (ITypeMarshalBuffer.VALUE | ITypeMarshalBuffer.FLAG1)); } else { @@ -183,7 +183,7 @@ public class Value implements IValue { } } - public static IValue unmarshal(TypeMarshalBuffer buf) throws CoreException { + public static IValue unmarshal(ITypeMarshalBuffer buf) throws CoreException { int firstByte= buf.getByte(); if (firstByte == TypeMarshalBuffer.NULL_TYPE) return null; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/ICPPEvaluation.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/ICPPEvaluation.java index c56f4d343ae..62e90c102f4 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/ICPPEvaluation.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/ICPPEvaluation.java @@ -6,9 +6,8 @@ * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * Markus Schorn - initial API and implementation - *******************************************************************************/ - + * Markus Schorn - initial API and implementation + *******************************************************************************/ package org.eclipse.cdt.internal.core.dom.parser.cpp; import org.eclipse.cdt.core.dom.ast.IASTExpression.ValueCategory; @@ -24,10 +23,40 @@ public interface ICPPEvaluation extends ISerializableEvaluation { boolean isInitializerList(); boolean isFunctionSet(); + /** + * Returns {@code true} if the type of the expression depends on template parameters. + */ boolean isTypeDependent(); + + /** + * Returns {@code true} if the value of the expression depends on template parameters. + */ boolean isValueDependent(); - + + /** + * TODO Add description + * + * @param point determines the scope for name lookups + */ IType getTypeOrFunctionSet(IASTNode point); + + /** + * TODO Add description + * + * @param point determines the scope for name lookups + */ IValue getValue(IASTNode point); + + /** + * TODO Add description + * + * @param point determines the scope for name lookups + */ ValueCategory getValueCategory(IASTNode point); + + /** + * Returns a signature uniquely identifying the evaluation. Two evaluations with identical + * signatures are guaranteed to produce the same results. + */ + char[] getSignature(); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPEvaluation.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPEvaluation.java new file mode 100644 index 00000000000..69460068b57 --- /dev/null +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPEvaluation.java @@ -0,0 +1,228 @@ +/******************************************************************************* + * Copyright (c) 2012 Google, Inc and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Sergey Prigogin (Google) - initial API and implementation + *******************************************************************************/ +package org.eclipse.cdt.internal.core.dom.parser.cpp.semantics; + +import org.eclipse.cdt.core.CCorePlugin; +import org.eclipse.cdt.core.dom.ast.ASTTypeUtil; +import org.eclipse.cdt.core.dom.ast.IBinding; +import org.eclipse.cdt.core.dom.ast.IType; +import org.eclipse.cdt.core.dom.ast.IValue; +import org.eclipse.cdt.internal.core.dom.parser.ISerializableEvaluation; +import org.eclipse.cdt.internal.core.dom.parser.ISerializableType; +import org.eclipse.cdt.internal.core.dom.parser.ITypeMarshalBuffer; +import org.eclipse.cdt.internal.core.dom.parser.Value; +import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPEvaluation; +import org.eclipse.core.runtime.CoreException; + +public abstract class CPPEvaluation implements ICPPEvaluation { + + private static class SignatureBuilder implements ITypeMarshalBuffer { + private static final byte NULL_TYPE= 0; + private static final byte UNSTORABLE_TYPE= (byte) -1; + private static final char[] HEX_DIGITS = + { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; + + private final StringBuilder fBuffer; + private boolean hexMode; + + /** + * Constructor for input buffer. + */ + public SignatureBuilder() { + fBuffer= new StringBuilder(); + } + + @Override + public String toString() { + return fBuffer.toString(); + } + + @Override + public void marshalBinding(IBinding binding) throws CoreException { + if (binding instanceof ISerializableType) { + ((ISerializableType) binding).marshal(this); + } else if (binding == null) { + putByte(NULL_TYPE); + } else { + appendSeparator(); + IBinding owner= binding.getOwner(); + if (owner instanceof IType) { + ASTTypeUtil.appendType((IType) owner, true, fBuffer); + fBuffer.append("::"); //$NON-NLS-1$ + } + fBuffer.append(binding.getName()); + } + } + + @Override + public void marshalType(IType type) throws CoreException { + if (type instanceof ISerializableType) { + ((ISerializableType) type).marshal(this); + } else if (type == null) { + putByte(NULL_TYPE); + } else if (type instanceof IBinding) { + marshalBinding((IBinding) type); + } else { + assert false : "Cannot serialize " + ASTTypeUtil.getType(type) + " (" + type.getClass().getName() + ")"; //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$ + putByte(UNSTORABLE_TYPE); + } + } + + @Override + public void marshalEvaluation(ISerializableEvaluation eval, boolean includeValues) throws CoreException { + if (eval == null) { + putByte(NULL_TYPE); + } else { + eval.marshal(this, includeValues); + } + } + + @Override + public void marshalValue(IValue value) throws CoreException { + if (value instanceof Value) { + ((Value) value).marshall(this); + } else { + putByte(NULL_TYPE); + } + } + + @Override + public void putByte(byte b) { + appendHexDigit(b >> 4); + appendHexDigit(b); + } + + @Override + public void putShort(short value) { + appendHexDigit(value >> 12); + appendHexDigit(value >> 8); + appendHexDigit(value >> 4); + appendHexDigit(value); + } + + @Override + public void putInt(int value) { + appendHexDigit(value >> 28); + appendHexDigit(value >> 24); + appendHexDigit(value >> 20); + appendHexDigit(value >> 16); + appendHexDigit(value >> 12); + appendHexDigit(value >> 8); + appendHexDigit(value >> 4); + appendHexDigit(value); + } + + @Override + public void putLong(long value) { + appendHexDigit((int) (value >> 60)); + appendHexDigit((int) (value >> 56)); + appendHexDigit((int) (value >> 52)); + appendHexDigit((int) (value >> 48)); + appendHexDigit((int) (value >> 44)); + appendHexDigit((int) (value >> 40)); + appendHexDigit((int) (value >> 36)); + appendHexDigit((int) (value >> 32)); + appendHexDigit((int) (value >> 28)); + appendHexDigit((int) (value >> 24)); + appendHexDigit((int) (value >> 20)); + appendHexDigit((int) (value >> 16)); + appendHexDigit((int) (value >> 12)); + appendHexDigit((int) (value >> 8)); + appendHexDigit((int) (value >> 4)); + appendHexDigit((int) value); + } + + @Override + public void putCharArray(char[] chars) { + appendSeparator(); + for (char c : chars) { + fBuffer.append(c); + } + } + + private void appendHexDigit(int val) { + if (hexMode) { + appendSeparator(); + fBuffer.append("0x"); //$NON-NLS-1$ + hexMode = true; + } + fBuffer.append(HEX_DIGITS[val & 0xF]); + } + + private void appendSeparator() { + if (fBuffer.length() != 0) + fBuffer.append(' '); + hexMode = false; + } + + @Override + public IBinding unmarshalBinding() throws CoreException { + throw new UnsupportedOperationException(); + } + + @Override + public IType unmarshalType() throws CoreException { + throw new UnsupportedOperationException(); + } + + @Override + public ISerializableEvaluation unmarshalEvaluation() throws CoreException { + throw new UnsupportedOperationException(); + } + + @Override + public IValue unmarshalValue() throws CoreException { + throw new UnsupportedOperationException(); + } + + @Override + public int getByte() throws CoreException { + throw new UnsupportedOperationException(); + } + + @Override + public CoreException unmarshallingError() { + throw new UnsupportedOperationException(); + } + + @Override + public int getShort() throws CoreException { + throw new UnsupportedOperationException(); + } + + @Override + public int getInt() throws CoreException { + throw new UnsupportedOperationException(); + } + + @Override + public long getLong() throws CoreException { + throw new UnsupportedOperationException(); + } + + @Override + public char[] getCharArray() throws CoreException { + throw new UnsupportedOperationException(); + } + } + + @Override + public char[] getSignature() { + SignatureBuilder buf = new SignatureBuilder(); + try { + marshal(buf, true); + } catch (CoreException e) { + CCorePlugin.log(e); + return new char[] { '?' }; + } + return buf.toString().toCharArray(); + } +} \ No newline at end of file diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalBinary.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalBinary.java index c762f12a9a7..0f119910e85 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalBinary.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalBinary.java @@ -43,7 +43,7 @@ import org.eclipse.core.runtime.CoreException; /** * Performs evaluation of an expression. */ -public class EvalBinary implements ICPPEvaluation { +public class EvalBinary extends CPPEvaluation { public final static int op_arrayAccess= Byte.MAX_VALUE; private final int fOperator; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalBinaryTypeId.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalBinaryTypeId.java index 7ef770b186a..ae2d6bd9878 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalBinaryTypeId.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalBinaryTypeId.java @@ -23,13 +23,12 @@ import org.eclipse.cdt.internal.core.dom.parser.ITypeMarshalBuffer; import org.eclipse.cdt.internal.core.dom.parser.ProblemType; import org.eclipse.cdt.internal.core.dom.parser.Value; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPBasicType; -import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPEvaluation; import org.eclipse.core.runtime.CoreException; /** * Performs evaluation of an expression. */ -public class EvalBinaryTypeId implements ICPPEvaluation { +public class EvalBinaryTypeId extends CPPEvaluation { private final Operator fOperator; private final IType fType1, fType2; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalBinding.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalBinding.java index 8567ea3b666..2f75c840940 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalBinding.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalBinding.java @@ -27,11 +27,10 @@ import org.eclipse.cdt.internal.core.dom.parser.ISerializableEvaluation; import org.eclipse.cdt.internal.core.dom.parser.ITypeMarshalBuffer; import org.eclipse.cdt.internal.core.dom.parser.ProblemType; import org.eclipse.cdt.internal.core.dom.parser.Value; -import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPEvaluation; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPUnknownBinding; import org.eclipse.core.runtime.CoreException; -public class EvalBinding implements ICPPEvaluation { +public class EvalBinding extends CPPEvaluation { private final IBinding fBinding; private final boolean fFixedType; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalComma.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalComma.java index 13a284e8c59..31e0f1f80fc 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalComma.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalComma.java @@ -25,7 +25,7 @@ import org.eclipse.cdt.internal.core.dom.parser.Value; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPEvaluation; import org.eclipse.core.runtime.CoreException; -public class EvalComma implements ICPPEvaluation { +public class EvalComma extends CPPEvaluation { private static final ICPPFunction[] NO_FUNCTIONS = {}; private final ICPPEvaluation[] fArguments; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalCompound.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalCompound.java index f4621924a41..8cae8cb319a 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalCompound.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalCompound.java @@ -25,7 +25,7 @@ import org.eclipse.core.runtime.CoreException; /** * Performs evaluation of an expression. */ -public class EvalCompound implements ICPPEvaluation { +public class EvalCompound extends CPPEvaluation { private final ICPPEvaluation fDelegate; public EvalCompound(ICPPEvaluation delegate) { diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalConditional.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalConditional.java index 67bc4c3c1ee..d4caae8ea52 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalConditional.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalConditional.java @@ -41,7 +41,7 @@ import org.eclipse.core.runtime.CoreException; /** * Performs evaluation of an expression. */ -public class EvalConditional implements ICPPEvaluation { +public class EvalConditional extends CPPEvaluation { private final ICPPEvaluation fCondition, fPositive, fNegative; private final boolean fPositiveThrows, fNegativeThrows; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalFixed.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalFixed.java index fbd99448f59..c6985aed4c7 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalFixed.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalFixed.java @@ -28,7 +28,7 @@ import org.eclipse.core.runtime.CoreException; /** * Performs evaluation of an expression. */ -public class EvalFixed implements ICPPEvaluation { +public class EvalFixed extends CPPEvaluation { public static final ICPPEvaluation INCOMPLETE = new EvalFixed(ProblemType.UNKNOWN_FOR_EXPRESSION, PRVALUE, Value.UNKNOWN); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalFunctionCall.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalFunctionCall.java index 2c2db81fb2e..38c741f9e38 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalFunctionCall.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalFunctionCall.java @@ -36,7 +36,7 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.OverloadableOperator; import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPSemantics.LookupMode; import org.eclipse.core.runtime.CoreException; -public class EvalFunctionCall implements ICPPEvaluation { +public class EvalFunctionCall extends CPPEvaluation { private final ICPPEvaluation[] fArguments; private ICPPFunction fOverload= CPPFunction.UNINITIALIZED_FUNCTION; private IType fType; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalFunctionSet.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalFunctionSet.java index ce16b11a6b4..c2a98168cc7 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalFunctionSet.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalFunctionSet.java @@ -21,14 +21,13 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateArgument; import org.eclipse.cdt.internal.core.dom.parser.ISerializableEvaluation; import org.eclipse.cdt.internal.core.dom.parser.ITypeMarshalBuffer; import org.eclipse.cdt.internal.core.dom.parser.Value; -import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPEvaluation; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPUnknownBinding; import org.eclipse.core.runtime.CoreException; /** * Performs evaluation of an expression. */ -public class EvalFunctionSet implements ICPPEvaluation { +public class EvalFunctionSet extends CPPEvaluation { private final CPPFunctionSet fFunctionSet; private final boolean fAddressOf; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalID.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalID.java index 962def2afec..366e8f6e7a2 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalID.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalID.java @@ -43,7 +43,7 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPEvaluation; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPUnknownBinding; import org.eclipse.core.runtime.CoreException; -public class EvalID implements ICPPEvaluation { +public class EvalID extends CPPEvaluation { private final ICPPEvaluation fFieldOwner; private final char[] fName; private final IBinding fNameOwner; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalInitList.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalInitList.java index 3b5e432cf2b..d54b0fb9bca 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalInitList.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalInitList.java @@ -25,7 +25,7 @@ import org.eclipse.core.runtime.CoreException; /** * Performs evaluation of an expression. */ -public class EvalInitList implements ICPPEvaluation { +public class EvalInitList extends CPPEvaluation { private final ICPPEvaluation[] fClauses; public EvalInitList(ICPPEvaluation[] clauses) { diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalMemberAccess.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalMemberAccess.java index e6eb6eb4437..84c8d69ea80 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalMemberAccess.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalMemberAccess.java @@ -46,7 +46,7 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.OverloadableOperator; import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPSemantics.LookupMode; import org.eclipse.core.runtime.CoreException; -public class EvalMemberAccess implements ICPPEvaluation { +public class EvalMemberAccess extends CPPEvaluation { private final IType fOwnerType; private final IBinding fMember; private final ValueCategory fOwnerValueCategory; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalTypeId.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalTypeId.java index 7ffadea8273..e2e41b728b1 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalTypeId.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalTypeId.java @@ -26,7 +26,7 @@ import org.eclipse.core.runtime.CoreException; /** * Performs evaluation of an expression. */ -public class EvalTypeId implements ICPPEvaluation { +public class EvalTypeId extends CPPEvaluation { private final IType fInputType; private final ICPPEvaluation[] fArguments; private IType fOutputType; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalUnary.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalUnary.java index 2058d62e861..ca5bef22dfc 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalUnary.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalUnary.java @@ -39,7 +39,7 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.OverloadableOperator; import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPSemantics.LookupMode; import org.eclipse.core.runtime.CoreException; -public class EvalUnary implements ICPPEvaluation { +public class EvalUnary extends CPPEvaluation { private static final ICPPEvaluation ZERO_EVAL = new EvalFixed(CPPSemantics.INT_TYPE, PRVALUE, Value.create(0)); private final int fOperator; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalUnaryTypeID.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalUnaryTypeID.java index c40d89f1011..9caf7ec00f4 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalUnaryTypeID.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalUnaryTypeID.java @@ -23,10 +23,9 @@ import org.eclipse.cdt.internal.core.dom.parser.ITypeMarshalBuffer; import org.eclipse.cdt.internal.core.dom.parser.ProblemType; import org.eclipse.cdt.internal.core.dom.parser.Value; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPBasicType; -import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPEvaluation; import org.eclipse.core.runtime.CoreException; -public class EvalUnaryTypeID implements ICPPEvaluation { +public class EvalUnaryTypeID extends CPPEvaluation { private final int fOperator; private final IType fOrigType; private IType fType; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/db/TypeMarshalBuffer.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/db/TypeMarshalBuffer.java index 5c3b1646143..7c3f483a70e 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/db/TypeMarshalBuffer.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/db/TypeMarshalBuffer.java @@ -117,7 +117,7 @@ public class TypeMarshalBuffer implements ITypeMarshalBuffer { } else if (type instanceof IBinding) { marshalBinding((IBinding) type); } else { - assert false : "Cannot serialize " + ASTTypeUtil.getType(type) + "(" + type.getClass().getName() + ")"; //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$ + assert false : "Cannot serialize " + ASTTypeUtil.getType(type) + " (" + type.getClass().getName() + ")"; //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$ putByte(UNSTORABLE_TYPE); } } @@ -239,6 +239,7 @@ public class TypeMarshalBuffer implements ITypeMarshalBuffer { return (((byte1 << 8) | (byte2 & 0xff))); } + @Override public void putInt(int value) { request(4); fPos += 4; @@ -249,6 +250,7 @@ public class TypeMarshalBuffer implements ITypeMarshalBuffer { fBuffer[--p]= (byte) (value); } + @Override public int getInt() throws CoreException { if (fPos + 4 > fBuffer.length) throw unmarshallingError();