本文整理汇总了C#中IMethodDefinition.Token方法的典型用法代码示例。如果您正苦于以下问题:C# IMethodDefinition.Token方法的具体用法?C# IMethodDefinition.Token怎么用?C# IMethodDefinition.Token使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IMethodDefinition
的用法示例。
在下文中一共展示了IMethodDefinition.Token方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Visit
/// <summary>
///
/// </summary>
public override void Visit(IMethodDefinition method) {
Dictionary<IParameterDefinition, MethodParameter> formalMap = new Dictionary<IParameterDefinition, MethodParameter>();
this.sink.BeginMethod();
try {
#region Create in- and out-parameters
int in_count = 0;
int out_count = 0;
MethodParameter mp;
foreach (IParameterDefinition formal in method.ResolvedMethod.Parameters) {
mp = new MethodParameter(formal);
if (mp.inParameterCopy != null) in_count++;
if (mp.outParameterCopy != null && (formal.IsByReference || formal.IsOut))
out_count++;
formalMap.Add(formal, mp);
}
this.sink.FormalMap = formalMap;
#region Look for Returnvalue
// This is just a hack, should be replaced with something more robust
if (method.Type.TypeCode != PrimitiveTypeCode.Void) {
Bpl.Type rettype = Bpl.Type.Int;
out_count++;
this.sink.RetVariable = new Bpl.Formal(method.Token(),
new Bpl.TypedIdent(method.Type.Token(),
"$result", rettype), false);
} else {
this.sink.RetVariable = null;
}
#endregion
#region Create 'this' parameter
in_count++;
Bpl.Type selftype = Bpl.Type.Int;
Bpl.Formal self = new Bpl.Formal(method.Token(),
new Bpl.TypedIdent(method.Type.Token(),
"this", selftype), true);
#endregion
Bpl.Variable[] invars = new Bpl.Formal[in_count];
Bpl.Variable[] outvars = new Bpl.Formal[out_count];
int i = 0;
int j = 0;
#region Add 'this' parameter as first in parameter
invars[i++] = self;
#endregion
foreach (MethodParameter mparam in formalMap.Values) {
if (mparam.inParameterCopy != null) {
invars[i++] = mparam.inParameterCopy;
}
if (mparam.outParameterCopy != null) {
if (mparam.underlyingParameter.IsByReference || mparam.underlyingParameter.IsOut)
outvars[j++] = mparam.outParameterCopy;
}
}
#region add the returnvalue to out if there is one
if (this.sink.RetVariable != null) outvars[j] = this.sink.RetVariable;
#endregion
#endregion
#region Check The Method Contracts
Bpl.RequiresSeq boogiePrecondition = new Bpl.RequiresSeq();
Bpl.EnsuresSeq boogiePostcondition = new Bpl.EnsuresSeq();
Bpl.IdentifierExprSeq boogieModifies = new Bpl.IdentifierExprSeq();
IMethodContract contract = ContractProvider.GetMethodContractFor(method);
if (contract != null) {
try {
foreach (IPrecondition pre in contract.Preconditions) {
ExpressionTraverser exptravers = this.factory.MakeExpressionTraverser(this.sink, null);
exptravers.Visit(pre.Condition); // TODO
// Todo: Deal with Descriptions
Bpl.Requires req
= new Bpl.Requires(pre.Token(),
true, exptravers.TranslatedExpressions.Pop(), "");
boogiePrecondition.Add(req);
}
foreach (IPostcondition post in contract.Postconditions) {
ExpressionTraverser exptravers = this.factory.MakeExpressionTraverser(this.sink, null);
exptravers.Visit(post.Condition);
// Todo: Deal with Descriptions
//.........这里部分代码省略.........
示例2: TraverseChildren
/// <summary>
///
/// </summary>
public override void TraverseChildren(IMethodDefinition method) {
if (method.IsStaticConstructor) this.sawCctor = true;
bool isEventAddOrRemove = method.IsSpecialName && (method.Name.Value.StartsWith("add_") || method.Name.Value.StartsWith("remove_"));
if (isEventAddOrRemove)
return;
Sink.ProcedureInfo procInfo;
IMethodDefinition stubMethod = null;
if (IsStubMethod(method, out stubMethod)) {
procInfo = this.sink.FindOrCreateProcedure(stubMethod);
} else {
procInfo = this.sink.FindOrCreateProcedure(method);
}
if (method.IsAbstract || method.IsExternal) { // we're done, just define the procedure
return;
}
this.sink.BeginMethod(method);
var decl = procInfo.Decl;
var proc = decl as Bpl.Procedure;
var formalMap = procInfo.FormalMap;
if (this.entryPoint != null && method.InternedKey == this.entryPoint.InternedKey) {
decl.AddAttribute("entrypoint");
}
// FEEDBACK inline handler methods to avoid more false alarms
if (PhoneCodeHelper.instance().PhoneFeedbackToggled && PhoneCodeHelper.instance().isMethodInputHandlerOrFeedbackOverride(method) &&
!PhoneCodeHelper.instance().isMethodIgnoredForFeedback(method)) {
proc.AddAttribute("inline", new Bpl.LiteralExpr(Bpl.Token.NoToken, Microsoft.Basetypes.BigNum.ONE));
PhoneCodeHelper.instance().trackCallableMethod(proc);
}
try {
StatementTraverser stmtTraverser = this.Factory.MakeStatementTraverser(this.sink, this.PdbReader, false);
// FEEDBACK if this is a feedback method it will be plagued with false asserts. They will trigger if $Exception becomes other than null
// FEEDBACK for modular analysis we need it to be non-null at the start
// FEEDBACK also, callee is obviously non null
IMethodDefinition translatedMethod= sink.getMethodBeingTranslated();
if (PhoneCodeHelper.instance().PhoneFeedbackToggled && translatedMethod != null &&
PhoneCodeHelper.instance().isMethodInputHandlerOrFeedbackOverride(translatedMethod)) {
// assign null to exception
List<Bpl.AssignLhs> assignee= new List<Bpl.AssignLhs>();
Bpl.AssignLhs exceptionAssignee= new Bpl.SimpleAssignLhs(Bpl.Token.NoToken, Bpl.Expr.Ident(this.sink.Heap.ExceptionVariable));
assignee.Add(exceptionAssignee);
List<Bpl.Expr> value= new List<Bpl.Expr>();
value.Add(Bpl.Expr.Ident(this.sink.Heap.NullRef));
Bpl.Cmd exceptionAssign= new Bpl.AssignCmd(Bpl.Token.NoToken, assignee, value);
stmtTraverser.StmtBuilder.Add(exceptionAssign);
}
#region Add assignments from In-Params to local-Params
foreach (MethodParameter mparam in formalMap) {
if (mparam.inParameterCopy != null) {
Bpl.IToken tok = method.Token();
stmtTraverser.StmtBuilder.Add(Bpl.Cmd.SimpleAssign(tok,
new Bpl.IdentifierExpr(tok, mparam.outParameterCopy),
new Bpl.IdentifierExpr(tok, mparam.inParameterCopy)));
}
}
#endregion
#region For non-deferring ctors and all cctors, initialize all fields to null-equivalent values
var inits = InitializeFieldsInConstructor(method);
if (0 < inits.Count) {
foreach (var s in inits) {
stmtTraverser.Traverse(s);
}
}
#endregion
#region Translate method attributes
// Don't need an expression translator because there is a limited set of things
// that can appear as arguments to custom attributes
// TODO: decode enum values
try {
foreach (var a in method.Attributes) {
var attrName = TypeHelper.GetTypeName(a.Type);
if (attrName.EndsWith("Attribute"))
attrName = attrName.Substring(0, attrName.Length - 9);
var args = new List<object>();
foreach (var c in a.Arguments) {
var mdc = c as IMetadataConstant;
if (mdc != null) {
object o;
if (mdc.Type.IsEnum) {
var lit = Bpl.Expr.Literal((int) mdc.Value);
lit.Type = Bpl.Type.Int;
o = lit;
} else {
//.........这里部分代码省略.........