本文整理汇总了C#中Expression.GetRegion方法的典型用法代码示例。如果您正苦于以下问题:C# Expression.GetRegion方法的具体用法?C# Expression.GetRegion怎么用?C# Expression.GetRegion使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Expression
的用法示例。
在下文中一共展示了Expression.GetRegion方法的8个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: GenerateUsingBlock
private JsBlockStatement GenerateUsingBlock(LocalResolveResult resource, Expression aquisitionExpression, DomRegion tempVariableRegion, JsBlockStatement body) {
SetRegion(aquisitionExpression.GetRegion());
var boolType = _compilation.FindType(KnownTypeCode.Boolean);
var systemIDisposable = _compilation.FindType(KnownTypeCode.IDisposable);
var disposeMethod = systemIDisposable.GetMethods().Single(m => m.Name == "Dispose");
var conversions = CSharpConversions.Get(_compilation);
var aquisitionResolveResult = _resolver.Resolve(aquisitionExpression);
var compiledAquisition = _expressionCompiler.Compile(aquisitionResolveResult, true);
var stmts = new List<JsStatement>();
stmts.AddRange(compiledAquisition.AdditionalStatements);
stmts.Add(JsStatement.Var(_variables[resource.Variable].Name, MaybeCloneValueType(compiledAquisition.Expression, aquisitionResolveResult, resource.Type)));
bool isDynamic = resource.Type.Kind == TypeKind.Dynamic;
if (isDynamic) {
var newResource = CreateTemporaryVariable(systemIDisposable, tempVariableRegion);
var castExpr = _expressionCompiler.Compile(new ConversionResolveResult(systemIDisposable, resource, conversions.ExplicitConversion(resource, systemIDisposable)), true);
stmts.AddRange(castExpr.AdditionalStatements);
stmts.Add(JsStatement.Var(_variables[newResource].Name, castExpr.Expression));
resource = new LocalResolveResult(newResource);
}
var compiledDisposeCall = _expressionCompiler.Compile(
new CSharpInvocationResolveResult(
new ConversionResolveResult(systemIDisposable, resource, conversions.ImplicitConversion(resource, systemIDisposable)),
disposeMethod,
new ResolveResult[0]
), false);
if (compiledDisposeCall.AdditionalStatements.Count > 0)
_errorReporter.InternalError("Type test cannot return additional statements.");
JsStatement releaseStmt;
if (isDynamic) {
releaseStmt = compiledDisposeCall.Expression;
}
else {
// if (d != null) ((IDisposable)d).Dispose()
var compiledTest = _expressionCompiler.Compile(new OperatorResolveResult(boolType, ExpressionType.NotEqual, resource, new ConstantResolveResult(resource.Type, null)), true);
if (compiledTest.AdditionalStatements.Count > 0)
_errorReporter.InternalError("Null test cannot return additional statements.");
releaseStmt = resource.Type.IsReferenceType == false && !resource.Type.IsKnownType(KnownTypeCode.NullableOfT) ? (JsStatement)compiledDisposeCall.Expression : JsStatement.If(compiledTest.Expression, compiledDisposeCall.Expression, null);
}
stmts.Add(JsStatement.Try(body, null, releaseStmt));
return JsStatement.Block(stmts);
}
示例2: CompileAndAddFieldInitializerToType
private void CompileAndAddFieldInitializerToType(JsClass jsClass, string fieldName, ITypeDefinition owningType, Expression initializer, bool isStatic)
{
if (isStatic) {
jsClass.StaticInitStatements.AddRange(CreateMethodCompiler().CompileFieldInitializer(initializer.GetRegion(), JsExpression.MemberAccess(_runtimeLibrary.GetScriptType(owningType, TypeContext.UseStaticMember), fieldName), initializer));
}
else {
AddInstanceInitStatements(jsClass, CreateMethodCompiler().CompileFieldInitializer(initializer.GetRegion(), JsExpression.MemberAccess(JsExpression.This, fieldName), initializer));
}
}
示例3: CompileExpression
private ExpressionCompileResult CompileExpression(Expression expr, CompileExpressionFlags flags) {
var oldRegion = _errorReporter.Region;
try {
_errorReporter.Region = expr.GetRegion();
var rr = ResolveWithConversion(expr);
var result = _expressionCompiler.Compile(rr, (flags & CompileExpressionFlags.ReturnValueIsImportant) != 0);
if (((flags & CompileExpressionFlags.IsAssignmentSource) != 0) && IsMutableValueType(rr.Type)) {
result.Expression = MaybeCloneValueType(result.Expression, rr, rr.Type);
}
return result;
}
finally {
_errorReporter.Region = oldRegion;
}
}
示例4: CompileExpression
private ExpressionCompileResult CompileExpression(Expression expr, bool returnValueIsImportant) {
var oldRegion = _errorReporter.Region;
try {
_errorReporter.Region = expr.GetRegion();
return _expressionCompiler.Compile(ResolveWithConversion(expr), returnValueIsImportant);
}
finally {
_errorReporter.Region = oldRegion;
}
}
示例5: CheckExpectedType
bool CheckExpectedType(Expression node)
{
IType expectedExpectedType = resolveAllResolver.GetExpectedType(node);
IType actualExpectedType = resolver.GetExpectedType(node);
if (expectedExpectedType.Equals(actualExpectedType))
return true;
Console.WriteLine("Different expected types for '{0}' at {1} in {2}:", node, node.StartLocation, node.GetRegion().FileName);
Console.WriteLine(" expected: " + expectedExpectedType);
Console.WriteLine(" actual: " + actualExpectedType);
return false;
}
示例6: CheckConversion
bool CheckConversion(Expression node)
{
Conversion expectedConversion = resolveAllResolver.GetConversion(node);
Conversion actualConversion = resolver.GetConversion(node);
if (Compare(expectedConversion, actualConversion, typeof(Conversion)))
return true;
Console.WriteLine("Different conversions for '{0}' at {1} in {2}:", node, node.StartLocation, node.GetRegion().FileName);
Console.WriteLine(" expected: " + expectedConversion);
Console.WriteLine(" actual: " + actualConversion);
return false;
}
示例7: CompileAndAddFieldInitializerToType
private void CompileAndAddFieldInitializerToType(JsClass jsClass, string fieldName, ITypeDefinition owningType, Expression initializer, bool isStatic) {
if (isStatic) {
jsClass.StaticInitStatements.AddRange(CreateMethodCompiler().CompileFieldInitializer(initializer.GetRegion(), JsExpression.Member(_runtimeLibrary.InstantiateType(Utils.SelfParameterize(owningType), this), fieldName), initializer, owningType));
}
else {
AddInstanceInitStatements(jsClass, CreateMethodCompiler().CompileFieldInitializer(initializer.GetRegion(), JsExpression.Member(JsExpression.This, fieldName), initializer, owningType));
}
}
示例8: CompileExpression
private ExpressionCompiler.Result CompileExpression(Expression expr, bool returnValueIsImportant)
{
return _expressionCompiler.Compile(expr.GetRegion().FileName, expr.StartLocation, ResolveWithConversion(expr), returnValueIsImportant);
}