本文整理汇总了C#中Mono.CSharp.EmitContext.WithFlowAnalysis方法的典型用法代码示例。如果您正苦于以下问题:C# EmitContext.WithFlowAnalysis方法的具体用法?C# EmitContext.WithFlowAnalysis怎么用?C# EmitContext.WithFlowAnalysis使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Mono.CSharp.EmitContext
的用法示例。
在下文中一共展示了EmitContext.WithFlowAnalysis方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Resolve
/// <summary>
/// Resolves an expression and performs semantic analysis on it.
/// </summary>
///
/// <remarks>
/// Currently Resolve wraps DoResolve to perform sanity
/// checking and assertion checking on what we expect from Resolve.
/// </remarks>
public Expression Resolve (EmitContext ec, ResolveFlags flags)
{
if ((flags & ResolveFlags.MaskExprClass) == ResolveFlags.Type)
return ResolveAsTypeStep (ec, false);
bool do_flow_analysis = ec.DoFlowAnalysis;
bool omit_struct_analysis = ec.OmitStructFlowAnalysis;
if ((flags & ResolveFlags.DisableFlowAnalysis) != 0)
do_flow_analysis = false;
if ((flags & ResolveFlags.DisableStructFlowAnalysis) != 0)
omit_struct_analysis = true;
Expression e;
using (ec.WithFlowAnalysis (do_flow_analysis, omit_struct_analysis)) {
if (this is SimpleName) {
bool intermediate = (flags & ResolveFlags.Intermediate) == ResolveFlags.Intermediate;
e = ((SimpleName) this).DoResolve (ec, intermediate);
} else {
e = DoResolve (ec);
}
}
if (e == null)
return null;
if ((flags & e.ExprClassToResolveFlags) == 0) {
e.Error_UnexpectedKind (flags, loc);
return null;
}
if (e.type == null && !(e is Namespace)) {
throw new Exception (
"Expression " + e.GetType () +
" did not set its type after Resolve\n" +
"called from: " + this.GetType ());
}
return e;
}