singrdk/base/Windows/mkmsil/msil/EHClause.cs

122 lines
3.1 KiB
C#
Raw Permalink Normal View History

2008-11-17 18:29:00 -05:00
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
using System;
namespace Bartok.MSIL
{
public class EHClause {
// Constructor Methods
internal EHClause(int flags, int tryOffset, int tryLength,
int handlerOffset, int handlerLength,
int filterOffset, MetaDataObject classObject) {
this.flags = (ExceptionFlag) flags;
this.tryOffset = tryOffset;
this.tryEnd = tryOffset + tryLength;
this.handlerOffset = handlerOffset;
this.handlerEnd = handlerOffset + handlerLength;
this.filterOffset = filterOffset;
this.classObject = classObject;
}
// Access Methods
public ExceptionFlag Flags {
get {
return this.flags;
}
}
public int TryOffset {
get {
return this.tryOffset;
}
}
public int TryEnd {
get {
return this.tryEnd;
}
}
public int HandlerOffset {
get {
return this.handlerOffset;
}
}
public int HandlerEnd {
get {
return this.handlerEnd;
}
}
public int FilterOffset {
get {
return this.filterOffset;
}
}
public MetaDataObject TypeObject {
get {
return this.classObject;
}
}
// Debug Methods
public override String ToString() {
System.Text.StringBuilder sb =
new System.Text.StringBuilder("EHClause(");
sb.Append(this.flags);
sb.Append(",try(");
sb.Append(this.tryOffset.ToString("x"));
sb.Append(",");
sb.Append(this.tryEnd.ToString("x"));
sb.Append("),handler(");
sb.Append(this.handlerOffset.ToString("x"));
sb.Append(",");
sb.Append(this.handlerEnd.ToString("x"));
sb.Append("),");
sb.Append(this.filterOffset.ToString("x"));
sb.Append(",");
sb.Append(this.classObject);
sb.Append(")");
return sb.ToString();
}
internal static void dumpToConsole(EHClause[] ehClauses) {
int count = ehClauses.Length;
for (int i = 0; i < count; i++) {
Console.WriteLine(ehClauses[i].ToString());
}
}
// State
private readonly ExceptionFlag flags;
private readonly int tryOffset;
private readonly int tryEnd;
private readonly int handlerOffset;
private readonly int handlerEnd;
private readonly int filterOffset;
private readonly MetaDataObject classObject;
// Internal Classes
public enum ExceptionFlag {
None = 0x0000,
Filter = 0x0001,
Finally = 0x0002,
Fault = 0x0004
}
}
}