Language.Cil.Syntax
Description
Abstract Syntax Tree for the Common Intermediate Language. Note; currently this is just a subset of CIL.
- keywords :: [String]
- type DottedName = String
- type AssemblyName = DottedName
- type TypeName = DottedName
- type GenParamName = DottedName
- type MethodName = DottedName
- type FieldName = DottedName
- type ParamName = DottedName
- type LocalName = DottedName
- type Version = (Int, Int, Int, Int)
- type PublicKeyToken = String
- type Offset = Int
- data Assembly = Assembly [AssemblyRef] AssemblyName [TypeDef]
- data AssemblyRef = AssemblyRef AssemblyName Version PublicKeyToken
- data TypeDef
- data GenParam = GenParam GenParamName
- data ClassAttr
- data ClassDecl
- data TypeSpec = TypeSpec TypeName
- data FieldDef = Field [FieldAttr] PrimitiveType FieldName
- data FieldAttr
- = FaStatic
- | FaPublic
- | FaPrivate
- | FaAssembly
- data MethodDef
- data MethAttr
- = MaStatic
- | MaPublic
- | MaPrivate
- | MaAssembly
- | MaVirtual
- | MaHidebysig
- data Parameter = Param (Maybe ParamAttr) PrimitiveType ParamName
- data ParamAttr
- data MethodDecl
- data Instr
- data Directive
- = EntryPoint
- | LocalsInit [Local]
- | MaxStack Int
- data Local = Local PrimitiveType LocalName
- type Label = String
- data OpCode
- = Add
- | And
- | Beq Label
- | Bge Label
- | Bgt Label
- | Ble Label
- | Blt Label
- | Box PrimitiveType
- | Br Label
- | Brfalse Label
- | Brtrue Label
- | Call { }
- | CallVirt { }
- | Ceq
- | Cge
- | Cgt
- | Cle
- | Clt
- | Dup
- | Isinst TypeName
- | Ldarg Offset
- | Ldarg_0
- | Ldarg_1
- | Ldarg_2
- | Ldarg_3
- | LdargN DottedName
- | Ldc_i4 Integer
- | Ldc_i4_0
- | Ldc_i4_1
- | Ldc_i4_2
- | Ldc_i4_3
- | Ldc_i4_4
- | Ldc_i4_5
- | Ldc_i4_6
- | Ldc_i4_7
- | Ldc_i4_8
- | Ldc_i4_m1
- | Ldc_i4_s Int
- | Ldc_i8 Integer
- | Ldc_r4 Float
- | Ldc_r8 Double
- | Ldfld { }
- | Ldflda { }
- | Ldftn { }
- | Ldind_i
- | Ldind_i1
- | Ldind_i2
- | Ldind_i4
- | Ldind_i8
- | Ldind_r4
- | Ldind_r8
- | Ldind_ref
- | Ldind_u1
- | Ldind_u2
- | Ldind_u4
- | Ldloc Offset
- | Ldloc_0
- | Ldloc_1
- | Ldloc_2
- | Ldloc_3
- | LdlocN DottedName
- | Ldloca Offset
- | LdlocaN DottedName
- | Ldsfld { }
- | Ldsflda { }
- | Ldstr String
- | Mul
- | Neg
- | Newobj { }
- | Nop
- | Pop
- | Rem
- | Ret
- | Stfld { }
- | Stind_i
- | Stind_i1
- | Stind_i2
- | Stind_i4
- | Stind_i8
- | Stind_r4
- | Stind_r8
- | Stind_ref
- | Stloc Offset
- | Stloc_0
- | Stloc_1
- | Stloc_2
- | Stloc_3
- | StlocN DottedName
- | Stsfld { }
- | Sub
- | Tail
- | Tailcall OpCode
- | Unbox PrimitiveType
- data PrimitiveType
- = Void
- | Bool
- | Char
- | Byte
- | Int32
- | Int64
- | Float32
- | Double64
- | IntPtr
- | String
- | Object
- | ValueType AssemblyName TypeName
- | ReferenceType AssemblyName TypeName
- | GenericReferenceType AssemblyName TypeName [GenParamName]
- | ByRef PrimitiveType
- | GenericType Offset
- data CallConv = CcInstance
Documentation
type DottedName = StringSource
A name in the CIL world. These need to confirm to certain restrictions, altough these aren't currently checked.
type AssemblyName = DottedNameSource
type TypeName = DottedNameSource
type GenParamName = DottedNameSource
type MethodName = DottedNameSource
type FieldName = DottedNameSource
type ParamName = DottedNameSource
type LocalName = DottedNameSource
type PublicKeyToken = StringSource
A public key token
The top level Assembly. This is the root of a CIL program.
Constructors
Assembly [AssemblyRef] AssemblyName [TypeDef] |
data AssemblyRef Source
Assembly reference.
Constructors
AssemblyRef AssemblyName Version PublicKeyToken |
Instances
A Type definition in CIL, either a class or a value type.
A parameter to a generic class. Not fully implemented yet, constraints aren't supported.
Constructors
GenParam GenParamName |
Attribures to class definitions.
Constructors
CaPrivate | |
CaPublic | |
CaNestedPublic | |
CaNestedPrivate |
Class declarations, i.e. the body of a class.
Type specification.
Field definition.
Constructors
Field [FieldAttr] PrimitiveType FieldName |
Attributes to field definitions.
Constructors
FaStatic | |
FaPublic | |
FaPrivate | |
FaAssembly |
A Method definition in CIL.
Constructors
Constructor [MethAttr] PrimitiveType [Parameter] [MethodDecl] | |
Method [MethAttr] PrimitiveType MethodName [Parameter] [MethodDecl] |
Attributes to method definitions.
Constructors
MaStatic | |
MaPublic | |
MaPrivate | |
MaAssembly | |
MaVirtual | |
MaHidebysig |
A formal parameter to a method.
Constructors
Param (Maybe ParamAttr) PrimitiveType ParamName |
Attributes to parameter definitions.
Single instruction in method definition. Either an OpCode or a labelled OpCode.
Directive meta data for method definitions.
Constructors
EntryPoint | |
LocalsInit [Local] | |
MaxStack Int |
Local variables used inside a method definition.
Constructors
Local PrimitiveType LocalName |
CIL OpCodes inside a method definition. See http://msdn.microsoft.com/en-us/library/system.reflection.emit.opcodes_fields.aspx for a more complete list with documentation.
Constructors
Add | Pops 2 values, adds the values, pushes result. |
And | Pops 2 values, do bitwise AND between the values, pushes result. |
Beq Label | Pops 2 values, if first value is equal to second value, jump to specified label. |
Bge Label | Pops 2 values, if first value is greater or equal to second value, jump to specified label. |
Bgt Label | Pops 2 values, if first value is greater than second value, jump to specified label. |
Ble Label | Pops 2 values, if first value is lesser or equal to second value, jump to specified label. |
Blt Label | Pops 2 values, if first value is lesser or equal to second value, jump to specified label. |
Box PrimitiveType | Pops 1 value, boxes value type, pushes object reference. |
Br Label | Unconditionally jump to specified label. |
Brfalse Label | Pops 1 value, if value is false, null reference or zero, jump to specified label. |
Brtrue Label | Pops 1 value, if value is true, not null or non-zero, jump to specified label. |
Call | Pops n values, calls specified method, pushes return value. (where n is the number of formal parameters of the method). |
Fields
| |
CallVirt | Pops n values, calls specified virtual method, pushes return value. (where n is the number of formal parameters of the method). |
Fields
| |
Ceq | Pops 2 values, if they are equal, pushes 1 to stack; otherwise, pushes 0. |
Cge | Pops 2 values and compares them. |
Cgt | Pops 2 values and compares them. |
Cle | Pops 2 values and compares them. |
Clt | Pops 2 values and compares them. |
Dup | Pops 1 value, copies it, pushes the same value twise. |
Isinst TypeName | Tests if an object reference is an instance of class, returning either a null reference or an instance of that class or interface. |
Ldarg Offset | Loads n-th argument to current method onto stack. |
Ldarg_0 | Loads 0th argument to current method onto stack. |
Ldarg_1 | Loads 1th argument to current method onto stack. |
Ldarg_2 | Loads 2th argument to current method onto stack. |
Ldarg_3 | Loads 3th argument to current method onto stack. |
LdargN DottedName | Loads named argument to current method onto stack. |
Ldc_i4 Integer | Loads the supplied 32-bit integer onto the stack. |
Ldc_i4_0 | Loads the value 0 onto the stack. |
Ldc_i4_1 | Loads the value 1 onto the stack. |
Ldc_i4_2 | Loads the value 2 onto the stack. |
Ldc_i4_3 | Loads the value 3 onto the stack. |
Ldc_i4_4 | Loads the value 4 onto the stack. |
Ldc_i4_5 | Loads the value 5 onto the stack. |
Ldc_i4_6 | Loads the value 6 onto the stack. |
Ldc_i4_7 | Loads the value 7 onto the stack. |
Ldc_i4_8 | Loads the value 8 onto the stack. |
Ldc_i4_m1 | Loads the value -1 onto the stack. |
Ldc_i4_s Int | Loads the supplied 8-bit integer onto the stack as 32-bit integer (short form). |
Ldc_i8 Integer | Loads the supplied 64-bit integer onto the stack. |
Ldc_r4 Float | Loads the supplied 32-bit float onto the stack. |
Ldc_r8 Double | Loads the supplied 64-bit double onto the stack. |
Ldfld | Pops object reference, find value of specified field on object, pushes value to the stack. |
Fields
| |
Ldflda | Pops object reference, find address of specified field on the object, pushes address to the stack. |
Fields
| |
Ldftn | Pops object reference, finds address of specified method, pushes address as native int to the stack. |
Fields
| |
Ldind_i | Pops an address, pushes the native integer stored at the address. |
Ldind_i1 | Pops an address, pushes the 8-bit integer stored at the address as a 32-bit integer. |
Ldind_i2 | Pops an address, pushes the 16-bit integer stored at the address as a 32-bit integer. |
Ldind_i4 | Pops an address, pushes the 32-bit integer stored at the address. |
Ldind_i8 | Pops an address, pushes the 64-bit integer stored at the address as a 64-bit integer. |
Ldind_r4 | Pops an address, pushes the 32-bit float stored at the address. |
Ldind_r8 | Pops an address, pushes the 64-bit double stored at the address. |
Ldind_ref | Pops an address, pushes the object reference specified at the address. |
Ldind_u1 | Pops an address, pushes the 8-bit unsigned integer stored at the address as a 32-bit integer. |
Ldind_u2 | Pops an address, pushes the 16-bit unsigned integer stored at the address as a 32-bit integer. |
Ldind_u4 | Pops an address, pushes the 32-bit unsigned integer stored at the address as a 32-bit integer. |
Ldloc Offset | Pushes value of local variable, specified by index, to the stack. |
Ldloc_0 | Pushes 0th local variable to the stack. |
Ldloc_1 | Pushes 1th local variable to the stack. |
Ldloc_2 | Pushes 2th local variable to the stack. |
Ldloc_3 | Pushes 3th local variable to the stack. |
LdlocN DottedName | Pushes value of local variable, specified by name, to the stack. |
Ldloca Offset | Pushes address of local variable, specified by index, to the stack. |
LdlocaN DottedName | Pushes address of local variable, specified by name, to the stack. |
Ldsfld | Pops type reference, find value of specified field on the type, pushes value to the stack. |
Fields
| |
Ldsflda | Pops type reference, find address of specified field on the type, pushes address to the stack. |
Fields
| |
Ldstr String | Pushes an object reference to the specified string constant. |
Mul | Pops 2 values, multiplies the values, pushes result. |
Neg | Pops 1 value, negates the value, pushes the value. |
Newobj | Creates a new object or instance of a value type. Pops n values, calls the specified constructor, pushes a new object reference onto the stack (where n is the number of formal parameters of the constructor). |
Fields
| |
Nop | No operation is performed. |
Pop | Pops the top of the stack. |
Rem | Pops 2 values, devides the first value by the second value, pushes the remainder. |
Ret | Returns from the current method. Pushes top of the stack to the top of the callers stack (if stack is not empty). |
Stfld | Replaces the value stored in the field of an object reference or pointer with a new value. |
Fields
| |
Stind_i | Pops an address and a native integer, stores the integer at the address. |
Stind_i1 | Pops an address and a 8-bit integer, stores the integer at the address. |
Stind_i2 | Pops an address and a 16-bit integer, stores the integer at the address. |
Stind_i4 | Pops an address and a 32-bit integer, stores the integer at the address. |
Stind_i8 | Pops an address and a 64-bit integer, stores the integer at the address. |
Stind_r4 | Pops an address and a 32-bit float, stores the float at the address. |
Stind_r8 | Pops an address and a 64-bit double, stores the double at the address. |
Stind_ref | Pops an address and an object reference, stores the object reference at the address. |
Stloc Offset | Pops 1 value, stores it in the local variable specified by index. |
Stloc_0 | Pops 1 value, stores it in the 0th local variable. |
Stloc_1 | Pops 1 value, stores it in the 1th local variable. |
Stloc_2 | Pops 1 value, stores it in the 2th local variable. |
Stloc_3 | Pops 1 value, stores it in the 3th local variable. |
StlocN DottedName | Pops 1 value, stores it in the local variable specified by name. |
Stsfld | Replaces the value stored in the static field of a type with a new value. |
Fields
| |
Sub | Pops 2 values, substracts second value from the first value, pushes result. |
Tail | Performs subsequent call as a tail call, by replacing current stack frame with callee stack frame. |
Tailcall OpCode | Performs provided call as a tail call, by replacing current stack frame with callee stack frame. |
Unbox PrimitiveType | Pops 1 value, unboxes object reference, pushes value type. |
data PrimitiveType Source
Primitive types in CIL.
Constructors
Instances