diff options
Diffstat (limited to 'core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/util/DeclSpecifier.java')
-rw-r--r-- | core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/util/DeclSpecifier.java | 191 |
1 files changed, 191 insertions, 0 deletions
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/util/DeclSpecifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/util/DeclSpecifier.java new file mode 100644 index 00000000000..6ed3b42b04d --- /dev/null +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/util/DeclSpecifier.java @@ -0,0 +1,191 @@ +package org.eclipse.cdt.internal.core.parser.util; + +import org.eclipse.cdt.internal.core.parser.Token; + +/** + * @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 class DeclSpecifier { + + // DeclSpecifier layed out as bit array + // leftmost 5 bits are type + public static final int typeMask = 0x001f; + public static final int isAuto = 0x0020; + public static final int isRegister = 0x0040; + public static final int isStatic = 0x0080; + public static final int isExtern = 0x0100; + public static final int isMutable = 0x0200; + public static final int isInline = 0x0400; + public static final int isVirtual = 0x0800; + public static final int isExplicit = 0x1000; + public static final int isTypedef = 0x2000; + public static final int isFriend = 0x4000; + public static final int isConst = 0x8000; + public static final int isVolatile = 0x10000; + public static final int isUnsigned = 0x20000; + public static final int isShort = 0x40000; + public static final int isLong = 0x80000; + + private int declSpecifierSeq = 0; + public int getDeclSpecifierSeq() { return declSpecifierSeq; } + + // Convenience methods + private void setBit(boolean b, int mask) { + if (b) + declSpecifierSeq = declSpecifierSeq | mask; + else + declSpecifierSeq = declSpecifierSeq & ~mask; + } + + private boolean checkBit(int mask) { + return (declSpecifierSeq & mask) == 1; + } + + public void setAuto(boolean b) { setBit(b, isAuto); } + public boolean isAuto() { return checkBit(isAuto); } + + public void setRegister(boolean b) { setBit(b, isRegister); } + public boolean isRegister() { return checkBit(isRegister); } + + public void setStatic(boolean b) { setBit(b, isStatic); } + public boolean isStatic() { return checkBit(isStatic); } + + public void setExtern(boolean b) { setBit(b, isExtern); } + public boolean isExtern() { return checkBit(isExtern); } + + public void setMutable(boolean b) { setBit(b, isMutable); } + public boolean isMutable() { return checkBit(isMutable); } + + public void setInline(boolean b) { setBit(b, isInline); } + public boolean isInline() { return checkBit(isInline); } + + public void setVirtual(boolean b) { setBit(b, isVirtual); } + public boolean isVirtual() { return checkBit(isVirtual); } + + public void setExplicit(boolean b) { setBit(b, isExplicit); } + public boolean isExplicit() { return checkBit(isExplicit); } + + public void setTypedef(boolean b) { setBit(b, isTypedef); } + public boolean isTypedef() { return checkBit(isTypedef); } + + public void setFriend(boolean b) { setBit(b, isFriend); } + public boolean isFriend() { return checkBit(isFriend); } + + public void setConst(boolean b) { setBit(b, isConst); } + public boolean isConst() { return checkBit(isConst); } + + public void setVolatile(boolean b) { setBit(b, isVolatile); } + public boolean isVolatile() { return checkBit(isVolatile); } + + public void setUnsigned(boolean b) { setBit(b, isUnsigned); } + public boolean isUnsigned() { return checkBit(isUnsigned); } + + public void setShort(boolean b) { setBit(b, isShort); } + public boolean isShort() { return checkBit(isShort); } + + public void setLong(boolean b) { setBit(b, isLong); } + public boolean isLong() { return checkBit(isLong); } + + // Simple Types + public static final int t_type = 0; // Type Specifier + public static final int t_char = 1; + public static final int t_wchar_t = 2; + public static final int t_bool = 3; + public static final int t_int = 4; + public static final int t_float = 5; + public static final int t_double = 6; + public static final int t_void = 7; + + public void setType( Token token ) + { + switch (token.getType()) { + case Token.t_auto: + setAuto(true); + break; + case Token.t_register: + setRegister(true); + break; + case Token.t_static: + setStatic(true); + break; + case Token.t_extern: + setExtern(true); + break; + case Token.t_mutable: + setMutable(true); + break; + case Token.t_inline: + setInline(true); + break; + case Token.t_virtual: + setVirtual(true); + break; + case Token.t_explicit: + setExplicit(true); + break; + case Token.t_typedef: + setTypedef(true); + break; + case Token.t_friend: + setFriend(true); + break; + case Token.t_const: + setConst(true); + break; + case Token.t_volatile: + setVolatile(true); + break; + case Token.t_char: + setType(DeclarationSpecifier.t_char); + break; + case Token.t_wchar_t: + setType(DeclarationSpecifier.t_wchar_t); + break; + case Token.t_bool: + setType(DeclarationSpecifier.t_bool); + break; + case Token.t_short: + setShort(true); + break; + case Token.t_int: + setType(DeclarationSpecifier.t_int); + break; + case Token.t_long: + setLong(true); + break; + case Token.t_signed: + setUnsigned(false); + break; + case Token.t_unsigned: + setUnsigned(true); + break; + case Token.t_float: + setType(DeclarationSpecifier.t_float); + break; + case Token.t_double: + setType(DeclarationSpecifier.t_double); + break; + case Token.t_void: + setType(DeclarationSpecifier.t_void); + break; + case Token.tIDENTIFIER: + setType(DeclarationSpecifier.t_type); + break; + } + + } + + public void setType(int t) { + declSpecifierSeq = declSpecifierSeq & ~typeMask | t; + } + + public int getType() { + return declSpecifierSeq & typeMask; + } + +} |