From 240a5ac13edb45d58928861e227aa178c976e57f Mon Sep 17 00:00:00 2001 From: Sergey Prigogin Date: Wed, 18 Dec 2013 12:32:44 -0800 Subject: [PATCH] Bug 424378 - __is_final GCC built-in type trait is not supported --- .../org/eclipse/cdt/core/dom/ast/IASTTypeIdExpression.java | 6 ++++++ .../dom/parser/cpp/GPPScannerExtensionConfiguration.java | 2 +- .../parser/org/eclipse/cdt/core/parser/GCCKeywords.java | 1 + .../parser/org/eclipse/cdt/core/parser/IGCCToken.java | 3 ++- .../org/eclipse/cdt/internal/core/dom/parser/Value.java | 3 +++ .../internal/core/dom/parser/cpp/GNUCPPSourceParser.java | 3 +++ .../core/dom/parser/cpp/semantics/EvalUnaryTypeID.java | 3 +++ 7 files changed, 19 insertions(+), 2 deletions(-) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTTypeIdExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTTypeIdExpression.java index 3c76114dcb5..7d7a01d903c 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTTypeIdExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTTypeIdExpression.java @@ -152,6 +152,12 @@ public interface IASTTypeIdExpression extends IASTExpression { */ public static final int op_sizeofParameterPack = 22; + /** + * Built-in type trait of g++. + * @since 5.6 + */ + public static final int op_is_final= 23; + /** * @deprecated constants should be declared here, to avoid using the same constant in different * interfaces. diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/parser/cpp/GPPScannerExtensionConfiguration.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/parser/cpp/GPPScannerExtensionConfiguration.java index ee2fcc6cb17..77bf6e8c220 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/parser/cpp/GPPScannerExtensionConfiguration.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/parser/cpp/GPPScannerExtensionConfiguration.java @@ -106,7 +106,7 @@ public class GPPScannerExtensionConfiguration extends GNUScannerExtensionConfigu if (version >= VERSION_4_7) { addKeyword(GCCKeywords.cp__float128, IGCCToken.t__float128); addKeyword(GCCKeywords.cp__int128, IGCCToken.t__int128); - + addKeyword(GCCKeywords.cp__is_final, IGCCToken.tTT_is_final); addKeyword(GCCKeywords.cp__underlying_type, IGCCToken.tTT_underlying_type); } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/GCCKeywords.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/GCCKeywords.java index ee060670d96..e4bedec191d 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/GCCKeywords.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/GCCKeywords.java @@ -82,5 +82,6 @@ public class GCCKeywords { /** @since 5.6 */ public static final char[] + cp__is_final= "__is_final".toCharArray(), cp__underlying_type= "__underlying_type".toCharArray(); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/IGCCToken.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/IGCCToken.java index d253176d97e..bace8d7fe28 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/IGCCToken.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/IGCCToken.java @@ -48,5 +48,6 @@ public interface IGCCToken extends IToken { /** @since 5.5 */ int t__int128= FIRST_RESERVED_IGCCToken + 25; /** @since 5.5 */ int t__float128= FIRST_RESERVED_IGCCToken + 26; - /** @since 5.6 */ int tTT_underlying_type= FIRST_RESERVED_IGCCToken + 27; + /** @since 5.6 */ int tTT_is_final= FIRST_RESERVED_IGCCToken + 27; + /** @since 5.6 */ int tTT_underlying_type= FIRST_RESERVED_IGCCToken + 28; } 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 b84c4bdbaed..c85cad67c5b 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 @@ -23,6 +23,7 @@ import static org.eclipse.cdt.core.dom.ast.IASTTypeIdExpression.op_is_abstract; import static org.eclipse.cdt.core.dom.ast.IASTTypeIdExpression.op_is_class; import static org.eclipse.cdt.core.dom.ast.IASTTypeIdExpression.op_is_empty; import static org.eclipse.cdt.core.dom.ast.IASTTypeIdExpression.op_is_enum; +import static org.eclipse.cdt.core.dom.ast.IASTTypeIdExpression.op_is_final; import static org.eclipse.cdt.core.dom.ast.IASTTypeIdExpression.op_is_literal_type; import static org.eclipse.cdt.core.dom.ast.IASTTypeIdExpression.op_is_pod; import static org.eclipse.cdt.core.dom.ast.IASTTypeIdExpression.op_is_polymorphic; @@ -326,6 +327,8 @@ public class Value implements IValue { break; // TODO(sprigogin): Implement case op_is_enum: return type instanceof IEnumeration ? 1 : 0; + case op_is_final: + return type instanceof ICPPClassType && ((ICPPClassType) type).isFinal() ? 1 : 0; case op_is_literal_type: break; // TODO(sprigogin): Implement case op_is_pod: diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java index 9944a6011c8..0474384483b 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java @@ -1342,6 +1342,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { case IGCCToken.tTT_is_class: case IGCCToken.tTT_is_empty: case IGCCToken.tTT_is_enum: + case IGCCToken.tTT_is_final: case IGCCToken.tTT_is_literal_type: case IGCCToken.tTT_is_pod: case IGCCToken.tTT_is_polymorphic: @@ -1422,6 +1423,8 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { return IASTTypeIdExpression.op_is_empty; case IGCCToken.tTT_is_enum: return IASTTypeIdExpression.op_is_enum; + case IGCCToken.tTT_is_final: + return IASTTypeIdExpression.op_is_final; case IGCCToken.tTT_is_literal_type: return IASTTypeIdExpression.op_is_literal_type; case IGCCToken.tTT_is_pod: 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 a25f71ea5a5..02976a6e918 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 @@ -25,6 +25,7 @@ import static org.eclipse.cdt.core.dom.ast.IASTTypeIdExpression.op_is_abstract; import static org.eclipse.cdt.core.dom.ast.IASTTypeIdExpression.op_is_class; import static org.eclipse.cdt.core.dom.ast.IASTTypeIdExpression.op_is_empty; import static org.eclipse.cdt.core.dom.ast.IASTTypeIdExpression.op_is_enum; +import static org.eclipse.cdt.core.dom.ast.IASTTypeIdExpression.op_is_final; import static org.eclipse.cdt.core.dom.ast.IASTTypeIdExpression.op_is_literal_type; import static org.eclipse.cdt.core.dom.ast.IASTTypeIdExpression.op_is_pod; import static org.eclipse.cdt.core.dom.ast.IASTTypeIdExpression.op_is_polymorphic; @@ -109,6 +110,7 @@ public class EvalUnaryTypeID extends CPPDependentEvaluation { case op_is_class: case op_is_empty: case op_is_enum: + case op_is_final: case op_is_literal_type: case op_is_pod: case op_is_polymorphic: @@ -150,6 +152,7 @@ public class EvalUnaryTypeID extends CPPDependentEvaluation { case op_is_class: case op_is_empty: case op_is_enum: + case op_is_final: case op_is_literal_type: case op_is_pod: case op_is_polymorphic: