language-cil-0.2.1: Manipulating Common Intermediate Language AST

Language.Cil.Syntax

Description

Abstract Syntax Tree for the Common Intermediate Language. Note; currently this is just a subset of CIL.

Synopsis

Documentation

type DottedName = StringSource

A name in the CIL world. These need to confirm to certain restrictions, altough these aren't currently checked.

type Version = (Int, Int, Int, Int)Source

A Version number in CIL

type PublicKeyToken = StringSource

A public key token

type Offset = IntSource

An offset, e.g. for local variables or arguments

data Assembly Source

The top level Assembly. This is the root of a CIL program.

data TypeDef Source

A Type definition in CIL, either a class or a value type.

Instances

data GenParam Source

A parameter to a generic class. Not fully implemented yet, constraints aren't supported.

Constructors

GenParam GenParamName 

data ClassAttr Source

Attribures to class definitions.

data ClassDecl Source

Class declarations, i.e. the body of a class.

data TypeSpec Source

Type specification.

Constructors

TypeSpec TypeName 

data FieldDef Source

Field definition.

data FieldAttr Source

Attributes to field definitions.

data MethAttr Source

Attributes to method definitions.

data Parameter Source

A formal parameter to a method.

data ParamAttr Source

Attributes to parameter definitions.

Constructors

PaIn 
PaOut 
PaOpt 

data MethodDecl Source

Method declarations, i.e. the body of a method.

data Instr Source

Single instruction in method definition. Either an OpCode or a labelled OpCode.

Instances

data Directive Source

Directive meta data for method definitions.

data Local Source

Local variables used inside a method definition.

Instances

type Label = StringSource

A Label in CIL.

data OpCode Source

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

callConv :: [CallConv]

Method is associated with class or instance.

returnType :: PrimitiveType

Return type of the method.

assemblyName :: AssemblyName

Name of the assembly where the method resides.

typeName :: TypeName

Name of the type of which the method is a member.

methodName :: MethodName

Name of the method.

paramTypes :: [PrimitiveType]

Types of the formal parameters of the method.

CallVirt

Pops n values, calls specified virtual method, pushes return value. (where n is the number of formal parameters of the method).

Fields

returnType :: PrimitiveType

Return type of the method.

assemblyName :: AssemblyName

Name of the assembly where the method resides.

typeName :: TypeName

Name of the type of which the method is a member.

methodName :: MethodName

Name of the method.

paramTypes :: [PrimitiveType]

Types of the formal parameters of the method.

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

fieldType :: PrimitiveType

Type of the field.

assemblyName :: AssemblyName

Name of the assembly where the method resides.

typeName :: TypeName

Name of the type of which the method is a member.

fieldName :: FieldName

Name of the field.

Ldflda

Pops object reference, find address of specified field on the object, pushes address to the stack.

Fields

fieldType :: PrimitiveType

Type of the field.

assemblyName :: AssemblyName

Name of the assembly where the method resides.

typeName :: TypeName

Name of the type of which the method is a member.

fieldName :: FieldName

Name of the field.

Ldftn

Pops object reference, finds address of specified method, pushes address as native int to the stack.

Fields

returnType :: PrimitiveType

Return type of the method.

assemblyName :: AssemblyName

Name of the assembly where the method resides.

typeName :: TypeName

Name of the type of which the method is a member.

methodName :: MethodName

Name of the method.

paramTypes :: [PrimitiveType]

Types of the formal parameters of the method.

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

fieldType :: PrimitiveType

Type of the field.

assemblyName :: AssemblyName

Name of the assembly where the method resides.

typeName :: TypeName

Name of the type of which the method is a member.

fieldName :: FieldName

Name of the field.

Ldsflda

Pops type reference, find address of specified field on the type, pushes address to the stack.

Fields

fieldType :: PrimitiveType

Type of the field.

assemblyName :: AssemblyName

Name of the assembly where the method resides.

typeName :: TypeName

Name of the type of which the method is a member.

fieldName :: FieldName

Name of the field.

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

returnType :: PrimitiveType

Return type of the method.

assemblyName :: AssemblyName

Name of the assembly where the method resides.

typeName :: TypeName

Name of the type of which the method is a member.

paramTypes :: [PrimitiveType]

Types of the formal parameters of the method.

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

fieldType :: PrimitiveType

Type of the field.

assemblyName :: AssemblyName

Name of the assembly where the method resides.

typeName :: TypeName

Name of the type of which the method is a member.

fieldName :: FieldName

Name of the field.

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

fieldType :: PrimitiveType

Type of the field.

assemblyName :: AssemblyName

Name of the assembly where the method resides.

typeName :: TypeName

Name of the type of which the method is a member.

fieldName :: FieldName

Name of the field.

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.

Instances

data CallConv Source

Calling convention for method calls.

Constructors

CcInstance