本文整理汇总了C#中IExpression.Token方法的典型用法代码示例。如果您正苦于以下问题:C# IExpression.Token方法的具体用法?C# IExpression.Token怎么用?C# IExpression.Token使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IExpression
的用法示例。
在下文中一共展示了IExpression.Token方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: TranslateDelegateCreation
private void TranslateDelegateCreation(IMethodReference methodToCall, ITypeReference type, IExpression creationAST)
{
Bpl.IToken cloc = creationAST.Token();
var a = this.sink.CreateFreshLocal(creationAST.Type);
ITypeDefinition unspecializedType = Microsoft.Cci.MutableContracts.ContractHelper.Unspecialized(type.ResolvedType).ResolvedType;
IMethodDefinition unspecializedMethod = ResolveUnspecializedMethodOrThrow(methodToCall);
sink.AddDelegate(unspecializedType, unspecializedMethod);
Bpl.Constant constant = sink.FindOrCreateDelegateMethodConstant(unspecializedMethod);
Bpl.Expr methodExpr = Bpl.Expr.Ident(constant);
Bpl.Expr instanceExpr = TranslatedExpressions.Pop();
List<Bpl.Expr> typeParameterExprs = new List<Bpl.Expr>();
if (unspecializedMethod.IsStatic) {
List<ITypeReference> consolidatedTypeArguments = new List<ITypeReference>();
Sink.GetConsolidatedTypeArguments(consolidatedTypeArguments, methodToCall.ContainingType);
foreach (ITypeReference typeReference in consolidatedTypeArguments) {
typeParameterExprs.Add(this.sink.FindOrCreateTypeReferenceInCodeContext(typeReference));
}
}
IGenericMethodInstanceReference methodInstanceReference = methodToCall as IGenericMethodInstanceReference;
if (methodInstanceReference != null) {
foreach (ITypeReference typeReference in methodInstanceReference.GenericArguments) {
typeParameterExprs.Add(this.sink.FindOrCreateTypeReferenceInCodeContext(typeReference));
}
}
Bpl.Expr typeParameterExpr =
new Bpl.NAryExpr(Bpl.Token.NoToken,
new Bpl.FunctionCall(this.sink.FindOrCreateNaryTypeFunction(typeParameterExprs.Count)),
typeParameterExprs);
this.StmtTraverser.StmtBuilder.Add(
new Bpl.CallCmd(cloc, this.sink.DelegateCreate(unspecializedType),
new List<Bpl.Expr>(new Bpl.Expr[] {methodExpr, instanceExpr, typeParameterExpr}),
new List<Bpl.IdentifierExpr>(new Bpl.IdentifierExpr[] {Bpl.Expr.Ident(a)})));
TranslatedExpressions.Push(Bpl.Expr.Ident(a));
}
示例2: VisitAssignment
private void VisitAssignment(ITargetExpression target, IExpression source, SourceTraverser sourceTraverser,
bool treatAsStatement, bool pushTargetRValue, bool resultIsInitialTargetRValue) {
Contract.Requires(target != null);
Contract.Requires(source != null);
Contract.Requires(sourceTraverser != null);
Contract.Requires(!resultIsInitialTargetRValue || pushTargetRValue);
Contract.Requires(!pushTargetRValue || source is IBinaryOperation);
var tok = source.Token();
var typ = source.Type;
var structCopy = TranslationHelper.IsStruct(typ) && !(source is IDefaultValue);
// then a struct value of type S is being assigned: "lhs := s"
// model this as the statement "call lhs := S..#copy_ctor(s)" that does the bit-wise copying
Bpl.DeclWithFormals proc = null;
if (structCopy) {
proc = this.sink.FindOrCreateProcedureForStructCopy(typ);
}
object container = target.Definition;
Top:
ILocalDefinition/*?*/ local = container as ILocalDefinition;
if (local != null) {
if (source is IDefaultValue && !local.Type.ResolvedType.IsReferenceType) {
// this.LoadAddressOf(local, null);
// this.generator.Emit(OperationCode.Initobj, local.Type);
// if (!treatAsStatement) this.LoadLocal(local);
} else {
Bpl.IdentifierExpr temp = null;
var bplLocal = Bpl.Expr.Ident(this.sink.FindOrCreateLocalVariable(local));
if (pushTargetRValue) {
this.TranslatedExpressions.Push(bplLocal);
if (!treatAsStatement && resultIsInitialTargetRValue) {
var loc = this.sink.CreateFreshLocal(source.Type);
temp = Bpl.Expr.Ident(loc);
var e3 = this.TranslatedExpressions.Pop();
var cmd3 = Bpl.Cmd.SimpleAssign(tok, temp, e3);
this.StmtTraverser.StmtBuilder.Add(cmd3);
this.TranslatedExpressions.Push(temp);
}
}
sourceTraverser(source);
var e = this.TranslatedExpressions.Pop();
if (temp != null) this.TranslatedExpressions.Push(temp);
Bpl.Cmd cmd;
if (structCopy) {
cmd = new Bpl.CallCmd(tok, proc.Name, new List<Bpl.Expr> { e, }, new List<Bpl.IdentifierExpr> { bplLocal, });
} else {
cmd = Bpl.Cmd.SimpleAssign(tok, bplLocal, e);
}
StmtTraverser.StmtBuilder.Add(cmd);
if (!treatAsStatement && !resultIsInitialTargetRValue) {
this.TranslatedExpressions.Push(bplLocal);
}
}
return;
}
IParameterDefinition/*?*/ parameter = container as IParameterDefinition;
if (parameter != null) {
if (source is IDefaultValue && !parameter.Type.ResolvedType.IsReferenceType) {
//this.LoadAddressOf(parameter, null);
//this.generator.Emit(OperationCode.Initobj, parameter.Type);
//if (!treatAsStatement) this.LoadParameter(parameter);
} else {
Bpl.IdentifierExpr temp = null;
if (pushTargetRValue) {
this.LoadParameter(parameter);
if (!treatAsStatement && resultIsInitialTargetRValue) {
var loc = this.sink.CreateFreshLocal(source.Type);
temp = Bpl.Expr.Ident(loc);
var e3 = this.TranslatedExpressions.Pop();
var cmd3 = Bpl.Cmd.SimpleAssign(tok, temp, e3);
this.StmtTraverser.StmtBuilder.Add(cmd3);
this.TranslatedExpressions.Push(temp);
}
}
sourceTraverser(source);
var e = this.TranslatedExpressions.Pop();
if (temp != null) this.TranslatedExpressions.Push(temp);
var bplParam = Bpl.Expr.Ident(this.sink.FindParameterVariable(parameter, this.contractContext));
Bpl.Cmd cmd;
if (structCopy) {
cmd = new Bpl.CallCmd(tok, proc.Name, new List<Bpl.Expr> { e, bplParam, }, new List<Bpl.IdentifierExpr>());
} else {
cmd = Bpl.Cmd.SimpleAssign(tok, bplParam, e);
}
StmtTraverser.StmtBuilder.Add(cmd);
if (!treatAsStatement && !resultIsInitialTargetRValue) {
this.LoadParameter(parameter);
}
}
return;
}
IFieldReference/*?*/ field = container as IFieldReference;
if (field != null) {
//.........这里部分代码省略.........