/*******************************************************************************
* Copyright (c) 2004, 2016 IBM Corporation 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:
* Doug Schaefer (IBM) - Initial API and implementation
* Markus Schorn (Wind River Systems)
* Sergey Prigogin (Google)
* Thomas Corbat (IFS)
*******************************************************************************/
package org.eclipse.cdt.core.dom.ast;
import org.eclipse.cdt.core.dom.ast.IBasicType.Kind;
/**
* This represents a declaration specifier for a built-in type.
*
* @noextend This interface is not intended to be extended by clients.
* @noimplement This interface is not intended to be implemented by clients.
*/
public interface IASTSimpleDeclSpecifier extends IASTDeclSpecifier {
/**
* @since 5.2
*/
public static final ASTNodeProperty DECLTYPE_EXPRESSION = new ASTNodeProperty(
"IASTSimpleDeclSpecifier.EXPRESSION [IASTExpression]"); //$NON-NLS-1$
/**
* Used for omitted declaration specifiers. E.g. for declaration of constructors,
* or in plain c, where this defaults to an integer.
*/
public static final int t_unspecified = 0;
/**
* <code>void x();</code>
*/
public static final int t_void = 1;
/**
* <code>char c;</code>
*/
public static final int t_char = 2;
/**
* <code>int i;</code>
*/
public static final int t_int = 3;
/**
* <code>float f;</code>
*/
public static final int t_float = 4;
/**
* <code>double d;</code>
*/
public static final int t_double = 5;
/**
* Represents a boolean type (bool in c++, _Bool in c)
* @since 5.2
*/
public static final int t_bool = 6;
/**
* <code>wchar_t c;</code>
* @since 5.2
*/
public static final int t_wchar_t = 7;
/**
* <code>typeof 'c' c;</code>
* @since 5.2
*/
public static final int t_typeof = 8;
/**
* <code>decltype('c') c;</code>
* @since 5.2
*/
public static final int t_decltype = 9;
/**
* <code>auto c = expression;</code>
* @since 5.2
*/
public static final int t_auto = 10;
/**
* <code>char16_t c;</code>
* @since 5.2
*/
public static final int t_char16_t = 11;
/**
* <code>char32_t c;</code>
* @since 5.2
*/
public static final int t_char32_t = 12;
/**
* <code>__int128 i;</code>
* @since 5.5
*/
public static final int t_int128 = 13;
/**
* <code>__float128 i;</code>
* @since 5.5
*/
public static final int t_float128 = 14;
/**
* <code>_Decimal32 i;</code>
* @since 5.10
*/
public static final int t_decimal32 = 15;
/**
* <code>_Decimal64 i;</code>
* @since 5.10
*/
public static final int t_decimal64 = 16;
/**
* <code>_Decimal128 i;</code>
* @since 5.10
*/
public static final int t_decimal128 = 17;
/**
* <code>decltype(auto) c = expression;</code>
* @since 6.1
*/
public static final int t_decltype_auto = 18;
/**
* @since 5.1
*/
@Override
public IASTSimpleDeclSpecifier copy();
/**
* Returns the built-in type for the declaration. The type is then
* refined by qualifiers for signed/unsigned and short/long. The type could
* also be unspecified which usually means int.
*/
public int getType();
/**
* <code>signed char c;</code>
*/
public boolean isSigned();
/**
* <code>unsigned int u;</code>
*/
public boolean isUnsigned();
/**
* <code>short int s;</code>
*/
public boolean isShort();
/**
* <code>long int l;</code>
*/
public boolean isLong();
/**
* <code>long long int l;</code>
* @since 5.2
*/
public boolean isLongLong();
/**
* <code>_Complex t</code>;
* @since 5.2
*/
public boolean isComplex();
/**
* <code>_Imaginary t</code>;
* @since 5.2
*/
public boolean isImaginary();
/**
* Returns the expression for simple declaration specifiers of type
* {@link IASTSimpleDeclSpecifier#t_decltype} or {@link IASTSimpleDeclSpecifier#t_typeof}.
* Other simple declaration specifiers will return <code>null</code>.
* @since 5.2
*/
public IASTExpression getDeclTypeExpression();
/**
* Not allowed on frozen ast.
* @see #getType()
*/
public void setType(int type);
/**
* Not allowed on frozen ast.
* Sets this declaration specifier to the type based on {@link IBasicType.Kind}.
* @since 5.2
*/
public void setType(Kind kind);
/**
* Not allowed on frozen ast.
* @see #isSigned()
*/
public void setSigned(boolean value);
/**
* Not allowed on frozen ast.
* @see #isUnsigned()
*/
public void setUnsigned(boolean value);
/**
* Not allowed on frozen ast.
* @see #isShort()
*/
public void setShort(boolean value);
/**
* Not allowed on frozen ast.
* @see #isLong()
*/
public void setLong(boolean value);
/**
* Not allowed on frozen ast.
* @see #isLongLong()
* @since 5.2
*/
public void setLongLong(boolean value);
/**
* Not allowed on frozen ast.
* @see #isComplex()
* @since 5.2
*/
public void setComplex(boolean value);
/**
* Not allowed on frozen ast.
* @see #isImaginary()
* @since 5.2
*/
public void setImaginary(boolean value);
/**
* Not allowed on frozen ast.
* @see #getDeclTypeExpression()
* @since 5.2
*/
public void setDeclTypeExpression(IASTExpression expression);
}