summaryrefslogtreecommitdiff
path: root/src/msil/ch/epfl/lamp/compiler/msil/FieldAttributes.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/msil/ch/epfl/lamp/compiler/msil/FieldAttributes.java')
-rw-r--r--src/msil/ch/epfl/lamp/compiler/msil/FieldAttributes.java120
1 files changed, 120 insertions, 0 deletions
diff --git a/src/msil/ch/epfl/lamp/compiler/msil/FieldAttributes.java b/src/msil/ch/epfl/lamp/compiler/msil/FieldAttributes.java
new file mode 100644
index 0000000000..5e6cc84f1e
--- /dev/null
+++ b/src/msil/ch/epfl/lamp/compiler/msil/FieldAttributes.java
@@ -0,0 +1,120 @@
+/*
+ * System.Reflection-like API for access to .NET assemblies (DLL & EXE)
+ */
+
+// $Id$
+
+package ch.epfl.lamp.compiler.msil;
+
+/**
+ * Specifies flags that describe the attributes of a field.
+ *
+ * @author Nikolay Mihaylov
+ * @version 1.0
+ */
+public final class FieldAttributes {
+
+ //##########################################################################
+
+ /** Specifies the access level of a given field. */
+ public static final short FieldAccessMask = 0x0007;
+
+ /** Member not refereneceable. */
+ public static final short CompilerControlled = 0x0000;
+
+ /** Field is accessible only by the parent type. */
+ public static final short Private = 0x0001;
+
+ /** Field is accessible only by subtypes in this assembly. */
+ public static final short FamANDAssem = 0x0002;
+
+ /** Field is accessible throughout the assembly. */
+ public static final short Assembly = 0x0003;
+
+ /** Field is accessible only by type and subtypes. */
+ public static final short Family = 0x0004;
+
+ /** Field is accessible by subtypes anywhere,
+ * as well as throughout this assembly. */
+ public static final short FamORAssem = 0x0005;
+
+ /** Specifies that the field is accessible by any member
+ * for whom this scope is visible. */
+ public static final short Public = 0x0006;
+
+ //##########################################################################
+ //
+
+ /** Field represents the defined type, or else it is per-instance. */
+ public static final short Static = 0x0010;
+
+ /** Field is initialized only and cannot be written after initialization. */
+ public static final short InitOnly = 0x0020;
+
+ /** Value is compile-time constant. */
+ public static final short Literal = 0x0040;
+
+ /** Field does not have to be serialized when the type is remoted. */
+ public static final short NotSerialized = 0x0080;
+
+ /** Field is special. */
+ public static final short SpecialName = 0x0200;
+
+ //##########################################################################
+ // Interop attributes
+
+ /** Implementation is forwarded through PInvoke */
+ public static final short PinvokeImpl = 0x2000;
+
+
+ //##########################################################################
+ // Additional flags
+
+ /** CLI provides 'special' behavior depending upon the name of the field */
+ public static final short RTSpecialName = 0x0400;
+
+ /** Field has marshalling information. */
+ public static final short HasFieldMarshal = 0x1000;
+
+ /** Field has a default value. */
+ public static final short HasDefault = (short)0x8000;
+
+ /** Field has a Relative Virtual Address (RVA). The RVA is the location
+ * of the method body in the current image, as an address relative
+ * to the start of the image file in which it is located. */
+ public static final short HasFieldRVA = 0x0100;
+
+ //##########################################################################
+ //
+
+ public static String toString(short attrs) {
+ StringBuffer str = new StringBuffer();
+ switch (attrs & FieldAccessMask) {
+ case CompilerControlled: str.append("compilercontrolled"); break;
+ case Private: str.append("private"); break;
+ case FamANDAssem: str.append("famandassem"); break;
+ case Assembly: str.append("assembly"); break;
+ case Family: str.append("family"); break;
+ case FamORAssem: str.append("famorassem"); break;
+ case Public: str.append("public"); break;
+ }
+ if ((attrs & Static) != 0) str.append(" static");
+ if ((attrs & InitOnly) != 0) str.append(" initonly");
+ if ((attrs & Literal) != 0) str.append(" literal");
+ if ((attrs & NotSerialized) != 0) str.append(" notserialized");
+ if ((attrs & SpecialName) != 0) str.append(" specialname");
+ if ((attrs & PinvokeImpl) != 0) str.append("");
+ if ((attrs & RTSpecialName) != 0) str.append(" rtspecialname");
+ if ((attrs & HasFieldMarshal) != 0) str.append(" marshal(<native type>)");
+ //if ((attrs & HasDefault) != 0) str.append(" default(???)");
+ return str.toString();
+ }
+
+ //##########################################################################
+
+ // makes the class uninstantiable
+ private FieldAttributes() {}
+
+ //##########################################################################
+
+} // class FieldAttributes