Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
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.java191
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;
+ }
+
+}

Back to the top