提交 63979260 编写于 作者: H Heejae Chang

second step on separating IOperation from BoundTree.

this doesn't replace or change anything yet, just bunch of Operation types for next step.

next step is creating CSharp/VBFactory which return these Operation type and replace callsite that return bound node with this.

after that, I will create xml/generator from Operation.xml.Generated.cs which can produce Operation.xml.Generated.cs
上级 bf275172
......@@ -125,7 +125,7 @@ internal static ImmutableArray<IArgument> DeriveArguments(ImmutableArray<BoundEx
if (parameter.HasExplicitDefaultValue)
{
// The parameter is optional with a default value.
arguments.Add(new Argument(ArgumentKind.DefaultValue, parameter, new Literal(parameter.ExplicitDefaultConstantValue, parameter.Type, invocationSyntax)));
arguments.Add(new Argument(ArgumentKind.DefaultValue, parameter, new LiteralExpression(parameter.ExplicitDefaultConstantValue, parameter.Type, invocationSyntax)));
}
else
{
......@@ -214,7 +214,7 @@ private static IOperation CreateParamArray(IParameterSymbol parameter, Immutable
var paramArrayArguments = builder.ToImmutableAndFree();
// Use the invocation syntax node if there is no actual syntax available for the argument (because the paramarray is empty.)
return new ArrayCreation(arrayType, paramArrayArguments, paramArrayArguments.Length > 0 ? paramArrayArguments[0].Syntax : invocationSyntax);
return new ArrayCreationExpression(arrayType, paramArrayArguments, paramArrayArguments.Length > 0 ? paramArrayArguments[0].Syntax : invocationSyntax);
}
return new InvalidExpression(invocationSyntax);
......
......@@ -468,12 +468,12 @@ ILocalSymbol ICatchClause.ExceptionLocal
void IOperation.Accept(OperationVisitor visitor)
{
visitor.VisitCatch(this);
visitor.VisitCatchClause(this);
}
TResult IOperation.Accept<TArgument, TResult>(OperationVisitor<TArgument, TResult> visitor, TArgument argument)
{
return visitor.VisitCatch(this, argument);
return visitor.VisitCatchClause(this, argument);
}
}
......
......@@ -91,10 +91,14 @@
<Compile Include="Operations\ILoopStatement.cs" />
<Compile Include="Operations\IMemberReferenceExpression.cs" />
<Compile Include="Operations\IMethodBindingExpression.cs" />
<Compile Include="Operations\IndexedPropertyReferenceExpression_IHasArgumentsExpression.cs" />
<Compile Include="Operations\InstanceReferenceKind.cs" />
<Compile Include="Operations\INullCoalescingExpression.cs" />
<Compile Include="Operations\InvocationExpression_IHasArgumentsExpression.cs" />
<Compile Include="Operations\IObjectCreationExpression.cs" />
<Compile Include="Operations\IOmittedArgumentExpression.cs" />
<Compile Include="Operations\ObjectCreationExpression_IHasArgumentsExpression.cs" />
<Compile Include="Operations\Operation.cs" />
<Compile Include="Operations\IOperationKind.cs" />
<Compile Include="Operations\IParameterInitializer.cs" />
<Compile Include="Operations\IParameterReferenceExpression.cs" />
......@@ -126,6 +130,7 @@
<Compile Include="Operations\IWhileUntilLoopStatement.cs" />
<Compile Include="Operations\IWithStatement.cs" />
<Compile Include="Operations\LoopKind.cs" />
<Compile Include="Operations\Operations.xml.Generated.cs" />
<Compile Include="Operations\SimpleBinaryOperationKind.cs" />
<Compile Include="Operations\SimpleUnaryOperationKind.cs" />
<Compile Include="Operations\SyntheticLocalKind.cs" />
......@@ -390,7 +395,7 @@
<Compile Include="Compilation\Expression.cs" />
<Compile Include="Compilation\Extensions.cs" />
<Compile Include="Operations\IOperation.cs" />
<Compile Include="Compilation\OperationExtensions.cs" />
<Compile Include="Operations\OperationExtensions.cs" />
<Compile Include="Compilation\OptimizationLevel.cs" />
<Compile Include="Compilation\ParseOptions.cs" />
<Compile Include="Compilation\Platform.cs" />
......@@ -398,7 +403,7 @@
<Compile Include="Compilation\SemanticModel.cs" />
<Compile Include="Compilation\SourceReferenceResolver.cs" />
<Compile Include="Compilation\SpeculativeBindingOption.cs" />
<Compile Include="Compilation\Statement.cs" />
<Compile Include="Operations\Statement.cs" />
<Compile Include="Compilation\SubsystemVersion.cs" />
<Compile Include="Compilation\SymbolInfo.cs" />
<Compile Include="Compilation\TypeInfo.cs" />
......
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Linq;
namespace Microsoft.CodeAnalysis.Semantics
{
internal sealed class VariableDeclaration : IVariableDeclaration
{
public VariableDeclaration(ILocalSymbol variable, IOperation initialValue, SyntaxNode syntax)
{
Variable = variable;
InitialValue = initialValue;
Syntax = syntax;
}
public ILocalSymbol Variable { get; }
public IOperation InitialValue { get; }
public bool IsInvalid => Variable == null || (InitialValue != null && InitialValue.IsInvalid);
public OperationKind Kind => OperationKind.VariableDeclaration;
public SyntaxNode Syntax { get; }
public ITypeSymbol Type => null;
public Optional<object> ConstantValue => default(Optional<object>);
public void Accept(OperationVisitor visitor)
{
visitor.VisitVariableDeclaration(this);
}
public TResult Accept<TArgument, TResult>(OperationVisitor<TArgument, TResult> visitor, TArgument argument)
{
return visitor.VisitVariableDeclaration(this, argument);
}
}
}
\ No newline at end of file
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System.Collections.Immutable;
using System.Diagnostics;
using System.Linq;
namespace Microsoft.CodeAnalysis.Semantics
{
internal sealed class ConditionalChoice : IConditionalChoiceExpression
internal sealed partial class ConditionalChoiceExpression : IConditionalChoiceExpression
{
public ConditionalChoice(IOperation condition, IOperation ifTrue, IOperation ifFalse, ITypeSymbol resultType, SyntaxNode syntax)
public ConditionalChoiceExpression(IOperation condition, IOperation ifTrue, IOperation ifFalse, ITypeSymbol resultType, SyntaxNode syntax) :
this(condition,
ifTrue,
ifFalse,
IsInvalidOperation(condition, ifTrue, ifFalse, resultType),
syntax,
resultType,
default(Optional<object>))
{
this.Condition = condition;
this.IfTrueValue = ifTrue;
this.IfFalseValue = ifFalse;
this.Type = resultType;
this.Syntax = syntax;
}
public IOperation Condition { get; }
public IOperation IfTrueValue { get; }
public IOperation IfFalseValue { get; }
public ITypeSymbol Type { get; }
public SyntaxNode Syntax { get; }
public OperationKind Kind => OperationKind.ConditionalChoiceExpression;
public bool IsInvalid => Condition == null || Condition.IsInvalid || IfTrueValue == null || IfTrueValue.IsInvalid || IfFalseValue == null || IfFalseValue.IsInvalid || Type == null;
public Optional<object> ConstantValue => default(Optional<object>);
public void Accept(OperationVisitor visitor)
{
visitor.VisitConditionalChoiceExpression(this);
}
public TResult Accept<TArgument, TResult>(OperationVisitor<TArgument, TResult> visitor, TArgument argument)
{
return visitor.VisitConditionalChoiceExpression(this, argument);
}
}
internal sealed class Assignment : IExpressionStatement
{
private readonly AssignmentExpression _assignment;
public Assignment(IOperation target, IOperation value, SyntaxNode syntax)
private static bool IsInvalidOperation(IOperation condition, IOperation ifTrue, IOperation ifFalse, ITypeSymbol resultType)
{
_assignment = new AssignmentExpression(target, value, syntax);
this.Syntax = syntax;
}
public SyntaxNode Syntax { get; }
public OperationKind Kind => OperationKind.ExpressionStatement;
public bool IsInvalid => _assignment.IsInvalid;
public IOperation Expression => _assignment;
public ITypeSymbol Type => null;
public Optional<object> ConstantValue => default(Optional<object>);
public void Accept(OperationVisitor visitor)
{
visitor.VisitExpressionStatement(this);
}
public TResult Accept<TArgument, TResult>(OperationVisitor<TArgument, TResult> visitor, TArgument argument)
{
return visitor.VisitExpressionStatement(this, argument);
}
private sealed class AssignmentExpression : IAssignmentExpression
{
public AssignmentExpression(IOperation target, IOperation value, SyntaxNode syntax)
{
this.Value = value;
this.Target = target;
this.Syntax = syntax;
}
public IOperation Target { get; }
public IOperation Value { get; }
public SyntaxNode Syntax { get; }
public ITypeSymbol Type => this.Target.Type;
public OperationKind Kind => OperationKind.AssignmentExpression;
public bool IsInvalid => Target == null || Target.IsInvalid || Value == null || Value.IsInvalid;
public Optional<object> ConstantValue => default(Optional<object>);
public void Accept(OperationVisitor visitor)
{
visitor.VisitAssignmentExpression(this);
}
public TResult Accept<TArgument, TResult>(OperationVisitor<TArgument, TResult> visitor, TArgument argument)
{
return visitor.VisitAssignmentExpression(this, argument);
}
return (condition == null || condition.IsInvalid || ifTrue == null || ifTrue.IsInvalid || ifFalse == null || ifFalse.IsInvalid || resultType == null);
}
}
internal sealed class CompoundAssignment : IExpressionStatement
internal sealed partial class ExpressionStatement : IExpressionStatement
{
private readonly CompoundAssignmentExpression _compoundAssignment;
public CompoundAssignment(IOperation target, IOperation value, BinaryOperationKind binaryOperationKind, IMethodSymbol operatorMethod, SyntaxNode syntax)
{
_compoundAssignment = new CompoundAssignmentExpression(target, value, binaryOperationKind, operatorMethod, syntax);
this.Syntax = syntax;
}
public SyntaxNode Syntax { get; }
public OperationKind Kind => OperationKind.ExpressionStatement;
public bool IsInvalid => _compoundAssignment.IsInvalid;
public IOperation Expression => _compoundAssignment;
public ITypeSymbol Type => null;
public Optional<object> ConstantValue => default(Optional<object>);
public void Accept(OperationVisitor visitor)
public ExpressionStatement(IOperation target, IOperation value, SyntaxNode syntax) :
this(new AssignmentExpression(target, value, IsInvalidOperation(target, value), syntax, target.Type, default(Optional<object>)),
syntax)
{
visitor.VisitExpressionStatement(this);
}
public TResult Accept<TArgument, TResult>(OperationVisitor<TArgument, TResult> visitor, TArgument argument)
{
return visitor.VisitExpressionStatement(this, argument);
}
private sealed class CompoundAssignmentExpression : ICompoundAssignmentExpression
{
public CompoundAssignmentExpression(IOperation target, IOperation value, BinaryOperationKind binaryOperationKind, IMethodSymbol operatorMethod, SyntaxNode syntax)
{
this.Target = target;
this.Value = value;
this.BinaryOperationKind = binaryOperationKind;
this.OperatorMethod = operatorMethod;
this.Syntax = syntax;
}
public IOperation Target { get; }
public IOperation Value { get; }
public BinaryOperationKind BinaryOperationKind { get; }
public IMethodSymbol OperatorMethod { get; }
public SyntaxNode Syntax { get; }
public ITypeSymbol Type => this.Target.Type;
public OperationKind Kind => OperationKind.CompoundAssignmentExpression;
public bool IsInvalid => Target == null || Target.IsInvalid || Value == null || Value.IsInvalid;
public Optional<object> ConstantValue => default(Optional<object>);
public bool UsesOperatorMethod => this.OperatorMethod != null;
public void Accept(OperationVisitor visitor)
{
visitor.VisitCompoundAssignmentExpression(this);
}
public TResult Accept<TArgument, TResult>(OperationVisitor<TArgument, TResult> visitor, TArgument argument)
{
return visitor.VisitCompoundAssignmentExpression(this, argument);
}
}
}
internal sealed class IntegerLiteral : ILiteralExpression
{
private readonly long _value;
public IntegerLiteral(long value, ITypeSymbol resultType, SyntaxNode syntax)
public ExpressionStatement(IOperation target, IOperation value, BinaryOperationKind binaryOperationKind, IMethodSymbol operatorMethod, SyntaxNode syntax) :
this(new CompoundAssignmentExpression(
binaryOperationKind,
target,
value,
operatorMethod != null,
operatorMethod,
IsInvalidOperation(target, value),
syntax,
target.Type,
default(Optional<object>)),
syntax)
{
_value = value;
this.Type = resultType;
this.Syntax = syntax;
}
public string Text => _value.ToString();
public ITypeSymbol Type { get; }
public OperationKind Kind => OperationKind.LiteralExpression;
public bool IsInvalid => false;
public Optional<object> ConstantValue => new Optional<object>(_value);
public SyntaxNode Syntax { get; }
public void Accept(OperationVisitor visitor)
private ExpressionStatement(IOperation expression, SyntaxNode syntax) :
this(expression, expression.IsInvalid, syntax, type: null, constantValue: default(Optional<object>))
{
visitor.VisitLiteralExpression(this);
Expression = expression;
}
public TResult Accept<TArgument, TResult>(OperationVisitor<TArgument, TResult> visitor, TArgument argument)
private static bool IsInvalidOperation(IOperation target, IOperation value)
{
return visitor.VisitLiteralExpression(this, argument);
return target == null || target.IsInvalid || value == null || value.IsInvalid;
}
}
internal class Literal : ILiteralExpression
internal sealed partial class LiteralExpression : ILiteralExpression
{
private readonly ConstantValue _value;
public Literal(ConstantValue value, ITypeSymbol resultType, SyntaxNode syntax)
{
Debug.Assert(value != null, "value can't be null");
_value = value;
this.Type = resultType;
this.Syntax = syntax;
}
public string Text => _value.GetValueToDisplay();
public ITypeSymbol Type { get; }
public OperationKind Kind => OperationKind.LiteralExpression;
public bool IsInvalid => _value.IsBad;
public Optional<object> ConstantValue => new Optional<object>(_value.Value);
public SyntaxNode Syntax { get; }
public void Accept(OperationVisitor visitor)
public LiteralExpression(long value, ITypeSymbol resultType, SyntaxNode syntax) :
this(value.ToString(), isInvalid: false, syntax: syntax, type: resultType, constantValue: new Optional<object>(value))
{
visitor.VisitLiteralExpression(this);
}
public TResult Accept<TArgument, TResult>(OperationVisitor<TArgument, TResult> visitor, TArgument argument)
public LiteralExpression(ConstantValue value, ITypeSymbol resultType, SyntaxNode syntax) :
this(value.GetValueToDisplay(), value.IsBad, syntax, resultType, new Optional<object>(value.Value))
{
return visitor.VisitLiteralExpression(this, argument);
}
}
internal sealed class Binary : IBinaryOperatorExpression
internal sealed partial class BinaryOperatorExpression : IBinaryOperatorExpression
{
public Binary(BinaryOperationKind binaryOperationKind, IOperation left, IOperation right, ITypeSymbol resultType, SyntaxNode syntax)
public BinaryOperatorExpression(BinaryOperationKind binaryOperationKind, IOperation left, IOperation right, ITypeSymbol resultType, SyntaxNode syntax) :
this(binaryOperationKind, left, right,
usesOperatorMethod: false, operatorMethod: null,
isInvalid: IsInvalidOperation(binaryOperationKind, left, right, resultType),
syntax: syntax, type: resultType, constantValue: default(Optional<object>))
{
this.BinaryOperationKind = binaryOperationKind;
this.LeftOperand = left;
this.RightOperand = right;
this.Type = resultType;
this.Syntax = syntax;
}
public BinaryOperationKind BinaryOperationKind { get; }
public IOperation LeftOperand { get; }
public IOperation RightOperand { get; }
public bool UsesOperatorMethod => false;
public IMethodSymbol OperatorMethod => null;
public ITypeSymbol Type { get; }
public OperationKind Kind => OperationKind.BinaryOperatorExpression;
public bool IsInvalid => LeftOperand == null
|| LeftOperand.IsInvalid
|| RightOperand == null
|| RightOperand.IsInvalid
|| BinaryOperationKind == BinaryOperationKind.Invalid
|| Type == null;
public Optional<object> ConstantValue => default(Optional<object>);
public SyntaxNode Syntax { get; }
public void Accept(OperationVisitor visitor)
private static bool IsInvalidOperation(BinaryOperationKind binaryOperationKind, IOperation left, IOperation right, ITypeSymbol type)
{
visitor.VisitBinaryOperatorExpression(this);
}
public TResult Accept<TArgument, TResult>(OperationVisitor<TArgument, TResult> visitor, TArgument argument)
{
return visitor.VisitBinaryOperatorExpression(this, argument);
return left == null || left.IsInvalid || right == null
|| right.IsInvalid || binaryOperationKind == BinaryOperationKind.Invalid || type == null;
}
}
internal sealed class ArrayCreation : IArrayCreationExpression
internal sealed partial class ArrayCreationExpression : IArrayCreationExpression
{
private readonly IArrayTypeSymbol _arrayType;
public ArrayCreation(IArrayTypeSymbol arrayType, ImmutableArray<IOperation> elementValues, SyntaxNode syntax)
public ArrayCreationExpression(IArrayTypeSymbol arrayType, ImmutableArray<IOperation> elementValues, SyntaxNode syntax) :
this(arrayType.ElementType,
ImmutableArray.Create<IOperation>(new LiteralExpression(elementValues.Count(), resultType: null, syntax: syntax)),
new ArrayInitializer(elementValues, elementValues.Any(v => v.IsInvalid), syntax, arrayType, default(Optional<object>)),
syntax,
arrayType,
default(Optional<object>))
{
_arrayType = arrayType;
this.DimensionSizes = ImmutableArray.Create<IOperation>(new IntegerLiteral(elementValues.Count(), null, syntax));
this.Initializer = new ArrayInitializer(elementValues, syntax, arrayType);
this.Syntax = syntax;
}
public ITypeSymbol Type => _arrayType;
public ImmutableArray<IOperation> DimensionSizes { get; }
public ITypeSymbol ElementType => _arrayType.ElementType;
public IArrayInitializer Initializer { get; }
public SyntaxNode Syntax { get; }
public OperationKind Kind => OperationKind.ArrayCreationExpression;
public bool IsInvalid => IsInvalidInitializer(Initializer);
private static bool IsInvalidInitializer(IArrayInitializer initializer) => initializer.IsInvalid;
public void Accept(OperationVisitor visitor)
private ArrayCreationExpression(ITypeSymbol elementType, ImmutableArray<IOperation> dimensionSizes, IArrayInitializer initializer, SyntaxNode syntax, ITypeSymbol type, Optional<object> constantValue) :
this(elementType, dimensionSizes, initializer, initializer.IsInvalid, syntax, type, constantValue)
{
visitor.VisitArrayCreationExpression(this);
}
public TResult Accept<TArgument, TResult>(OperationVisitor<TArgument, TResult> visitor, TArgument argument)
{
return visitor.VisitArrayCreationExpression(this, argument);
}
public Optional<object> ConstantValue => default(Optional<object>);
private sealed class ArrayInitializer : IArrayInitializer
{
public ArrayInitializer(ImmutableArray<IOperation> elementValues, SyntaxNode syntax, ITypeSymbol arrayType)
{
ElementValues = elementValues;
Syntax = syntax;
Type = arrayType;
}
public ImmutableArray<IOperation> ElementValues { get; }
public bool IsInvalid => ElementValues.Any(v => v.IsInvalid);
public OperationKind Kind => OperationKind.ArrayInitializer;
public ITypeSymbol Type { get; }
public SyntaxNode Syntax { get; }
public Optional<object> ConstantValue => default(Optional<object>);
public void Accept(OperationVisitor visitor)
{
visitor.VisitArrayInitializer(this);
}
public TResult Accept<TArgument, TResult>(OperationVisitor<TArgument, TResult> visitor, TArgument argument)
{
return visitor.VisitArrayInitializer(this, argument);
}
}
}
internal sealed class InvalidExpression : IInvalidExpression
internal partial class InvalidExpression : IInvalidExpression
{
public InvalidExpression(SyntaxNode syntax)
{
this.Syntax = syntax;
}
public Optional<object> ConstantValue => default(Optional<object>);
public bool IsInvalid => true;
public OperationKind Kind => OperationKind.InvalidExpression;
public SyntaxNode Syntax { get; }
public ITypeSymbol Type => null;
public void Accept(OperationVisitor visitor)
{
visitor.VisitInvalidExpression(this);
}
public TResult Accept<TArgument, TResult>(OperationVisitor<TArgument, TResult> visitor, TArgument argument)
public InvalidExpression(SyntaxNode syntax) :
this(isInvalid: true, syntax: syntax, type: null, constantValue: default(Optional<object>))
{
return visitor.VisitInvalidExpression(this, argument);
}
}
}
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System.Collections.Immutable;
namespace Microsoft.CodeAnalysis.Semantics
{
internal partial class IndexedPropertyReferenceExpression : IHasArgumentsExpression
{
/// <summary>
/// Arguments of the invocation, excluding the instance argument. Arguments are in parameter order,
/// and params/ParamArray arguments have been collected into arrays. Default values are supplied for
/// optional arguments missing in source.
/// </summary>
public ImmutableArray<IArgument> ArgumentsInParameterOrder { get; }
/// <summary>
/// Find the argument supplied for a given parameter of the target method.
/// </summary>
/// <param name="parameter">Parameter of the target method.</param>
/// <returns>Argument corresponding to the parameter.</returns>
public IArgument GetArgumentMatchingParameter(IParameterSymbol parameter)
{
throw new System.NotImplementedException();
}
}
}
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System.Collections.Immutable;
namespace Microsoft.CodeAnalysis.Semantics
{
internal partial class InvocationExpression : IHasArgumentsExpression
{
/// <summary>
/// Arguments of the invocation, excluding the instance argument. Arguments are in parameter order,
/// and params/ParamArray arguments have been collected into arrays. Default values are supplied for
/// optional arguments missing in source.
/// </summary>
public ImmutableArray<IArgument> ArgumentsInParameterOrder { get; }
/// <summary>
/// Find the argument supplied for a given parameter of the target method.
/// </summary>
/// <param name="parameter">Parameter of the target method.</param>
/// <returns>Argument corresponding to the parameter.</returns>
public IArgument GetArgumentMatchingParameter(IParameterSymbol parameter)
{
throw new System.NotImplementedException();
}
}
}
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System.Collections.Immutable;
namespace Microsoft.CodeAnalysis.Semantics
{
internal partial class ObjectCreationExpression : IHasArgumentsExpression
{
/// <summary>
/// Arguments of the invocation, excluding the instance argument. Arguments are in parameter order,
/// and params/ParamArray arguments have been collected into arrays. Default values are supplied for
/// optional arguments missing in source.
/// </summary>
public ImmutableArray<IArgument> ArgumentsInParameterOrder { get; }
/// <summary>
/// Find the argument supplied for a given parameter of the target method.
/// </summary>
/// <param name="parameter">Parameter of the target method.</param>
/// <returns>Argument corresponding to the parameter.</returns>
public IArgument GetArgumentMatchingParameter(IParameterSymbol parameter)
{
throw new System.NotImplementedException();
}
}
}
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using Microsoft.CodeAnalysis.Semantics;
namespace Microsoft.CodeAnalysis
{
/// <summary>
/// Root type for representing the abstract semantics of C# and VB statements and expressions.
/// </summary>
/// <remarks>
/// This interface is reserved for implementation by its associated APIs. We reserve the right to
/// change it in the future.
/// </remarks>
internal abstract class Operation : IOperation
{
public Operation(OperationKind kind, bool isInvalid, SyntaxNode syntax, ITypeSymbol type, Optional<object> constantValue)
{
Kind = kind;
IsInvalid = isInvalid;
Syntax = syntax;
Type = type;
ConstantValue = constantValue;
}
/// <summary>
/// Identifies the kind of the operation.
/// </summary>
public OperationKind Kind { get; }
/// <summary>
/// Indicates whether the operation is invalid, either semantically or syntactically.
/// </summary>
public bool IsInvalid { get; }
/// <summary>
/// Syntax that was analyzed to produce the operation.
/// </summary>
public SyntaxNode Syntax { get; }
/// <summary>
/// Result type of the operation, or null if the operation does not produce a result.
/// </summary>
public ITypeSymbol Type { get; }
/// <summary>
/// If the operation is an expression that evaluates to a constant value, <see cref="Optional{Object}.HasValue"/> is true and <see cref="Optional{Object}.Value"/> is the value of the expression. Otherwise, <see cref="Optional{Object}.HasValue"/> is false.
/// </summary>
public Optional<object> ConstantValue { get; }
public abstract void Accept(OperationVisitor visitor);
public abstract TResult Accept<TArgument, TResult>(OperationVisitor<TArgument, TResult> visitor, TArgument argument);
}
}
......@@ -125,7 +125,7 @@ public virtual void VisitTryStatement(ITryStatement operation)
DefaultVisit(operation);
}
public virtual void VisitCatch(ICatchClause operation)
public virtual void VisitCatchClause(ICatchClause operation)
{
DefaultVisit(operation);
}
......@@ -525,7 +525,7 @@ public virtual TResult VisitTryStatement(ITryStatement operation, TArgument argu
return DefaultVisit(operation, argument);
}
public virtual TResult VisitCatch(ICatchClause operation, TArgument argument)
public virtual TResult VisitCatchClause(ICatchClause operation, TArgument argument)
{
return DefaultVisit(operation, argument);
}
......
......@@ -155,7 +155,7 @@ public override void VisitTryStatement(ITryStatement operation)
Visit(operation.FinallyHandler);
}
public override void VisitCatch(ICatchClause operation)
public override void VisitCatchClause(ICatchClause operation)
{
Visit(operation.Filter);
Visit(operation.Handler);
......
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
namespace Microsoft.CodeAnalysis.Semantics
{
internal partial class VariableDeclaration : IVariableDeclaration
{
public VariableDeclaration(ILocalSymbol variable, IOperation initialValue, SyntaxNode syntax) :
this(variable,
initialValue,
variable == null || (initialValue != null && initialValue.IsInvalid),
syntax,
type: null,
constantValue: default(Optional<object>))
{
}
}
}
\ No newline at end of file
......@@ -750,7 +750,7 @@ override Microsoft.CodeAnalysis.Semantics.OperationWalker.VisitAwaitExpression(M
override Microsoft.CodeAnalysis.Semantics.OperationWalker.VisitBinaryOperatorExpression(Microsoft.CodeAnalysis.Semantics.IBinaryOperatorExpression operation) -> void
override Microsoft.CodeAnalysis.Semantics.OperationWalker.VisitBlockStatement(Microsoft.CodeAnalysis.Semantics.IBlockStatement operation) -> void
override Microsoft.CodeAnalysis.Semantics.OperationWalker.VisitBranchStatement(Microsoft.CodeAnalysis.Semantics.IBranchStatement operation) -> void
override Microsoft.CodeAnalysis.Semantics.OperationWalker.VisitCatch(Microsoft.CodeAnalysis.Semantics.ICatchClause operation) -> void
override Microsoft.CodeAnalysis.Semantics.OperationWalker.VisitCatchClause(Microsoft.CodeAnalysis.Semantics.ICatchClause operation) -> void
override Microsoft.CodeAnalysis.Semantics.OperationWalker.VisitCompoundAssignmentExpression(Microsoft.CodeAnalysis.Semantics.ICompoundAssignmentExpression operation) -> void
override Microsoft.CodeAnalysis.Semantics.OperationWalker.VisitConditionalAccessExpression(Microsoft.CodeAnalysis.Semantics.IConditionalAccessExpression operation) -> void
override Microsoft.CodeAnalysis.Semantics.OperationWalker.VisitConditionalAccessInstanceExpression(Microsoft.CodeAnalysis.Semantics.IConditionalAccessInstanceExpression operation) -> void
......@@ -860,7 +860,7 @@ virtual Microsoft.CodeAnalysis.Semantics.OperationVisitor.VisitAwaitExpression(M
virtual Microsoft.CodeAnalysis.Semantics.OperationVisitor.VisitBinaryOperatorExpression(Microsoft.CodeAnalysis.Semantics.IBinaryOperatorExpression operation) -> void
virtual Microsoft.CodeAnalysis.Semantics.OperationVisitor.VisitBlockStatement(Microsoft.CodeAnalysis.Semantics.IBlockStatement operation) -> void
virtual Microsoft.CodeAnalysis.Semantics.OperationVisitor.VisitBranchStatement(Microsoft.CodeAnalysis.Semantics.IBranchStatement operation) -> void
virtual Microsoft.CodeAnalysis.Semantics.OperationVisitor.VisitCatch(Microsoft.CodeAnalysis.Semantics.ICatchClause operation) -> void
virtual Microsoft.CodeAnalysis.Semantics.OperationVisitor.VisitCatchClause(Microsoft.CodeAnalysis.Semantics.ICatchClause operation) -> void
virtual Microsoft.CodeAnalysis.Semantics.OperationVisitor.VisitCompoundAssignmentExpression(Microsoft.CodeAnalysis.Semantics.ICompoundAssignmentExpression operation) -> void
virtual Microsoft.CodeAnalysis.Semantics.OperationVisitor.VisitConditionalAccessExpression(Microsoft.CodeAnalysis.Semantics.IConditionalAccessExpression operation) -> void
virtual Microsoft.CodeAnalysis.Semantics.OperationVisitor.VisitConditionalAccessInstanceExpression(Microsoft.CodeAnalysis.Semantics.IConditionalAccessInstanceExpression operation) -> void
......@@ -936,7 +936,7 @@ virtual Microsoft.CodeAnalysis.Semantics.OperationVisitor<TArgument, TResult>.Vi
virtual Microsoft.CodeAnalysis.Semantics.OperationVisitor<TArgument, TResult>.VisitBinaryOperatorExpression(Microsoft.CodeAnalysis.Semantics.IBinaryOperatorExpression operation, TArgument argument) -> TResult
virtual Microsoft.CodeAnalysis.Semantics.OperationVisitor<TArgument, TResult>.VisitBlockStatement(Microsoft.CodeAnalysis.Semantics.IBlockStatement operation, TArgument argument) -> TResult
virtual Microsoft.CodeAnalysis.Semantics.OperationVisitor<TArgument, TResult>.VisitBranchStatement(Microsoft.CodeAnalysis.Semantics.IBranchStatement operation, TArgument argument) -> TResult
virtual Microsoft.CodeAnalysis.Semantics.OperationVisitor<TArgument, TResult>.VisitCatch(Microsoft.CodeAnalysis.Semantics.ICatchClause operation, TArgument argument) -> TResult
virtual Microsoft.CodeAnalysis.Semantics.OperationVisitor<TArgument, TResult>.VisitCatchClause(Microsoft.CodeAnalysis.Semantics.ICatchClause operation, TArgument argument) -> TResult
virtual Microsoft.CodeAnalysis.Semantics.OperationVisitor<TArgument, TResult>.VisitCompoundAssignmentExpression(Microsoft.CodeAnalysis.Semantics.ICompoundAssignmentExpression operation, TArgument argument) -> TResult
virtual Microsoft.CodeAnalysis.Semantics.OperationVisitor<TArgument, TResult>.VisitConditionalAccessExpression(Microsoft.CodeAnalysis.Semantics.IConditionalAccessExpression operation, TArgument argument) -> TResult
virtual Microsoft.CodeAnalysis.Semantics.OperationVisitor<TArgument, TResult>.VisitConditionalAccessInstanceExpression(Microsoft.CodeAnalysis.Semantics.IConditionalAccessInstanceExpression operation, TArgument argument) -> TResult
......
......@@ -46,7 +46,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
Public MustOverride Overloads Function Accept(Of TArgument, TResult)(visitor As OperationVisitor(Of TArgument, TResult), argument As TArgument) As TResult Implements IOperation.Accept
End Class
Friend Partial Class BoundIfStatement
Partial Friend Class BoundIfStatement
Implements IIfStatement
Private ReadOnly Property IOperation_Condition As IOperation Implements IIfStatement.Condition
......@@ -80,7 +80,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
End Function
End Class
Friend Partial Class BoundSelectStatement
Partial Friend Class BoundSelectStatement
Implements ISwitchStatement
Private Shared ReadOnly s_caseBlocksMappings As New System.Runtime.CompilerServices.ConditionalWeakTable(Of BoundSelectStatement, Object)
......@@ -256,7 +256,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
End Class
End Class
Friend Partial Class BoundCaseBlock
Partial Friend Class BoundCaseBlock
Protected Overrides Function StatementKind() As OperationKind
Return OperationKind.None
End Function
......@@ -270,7 +270,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
End Function
End Class
Friend Partial Class BoundCaseClause
Partial Friend Class BoundCaseClause
Implements ICaseClause
Private ReadOnly Property IOperation_IsInvalid As Boolean Implements IOperation.IsInvalid
......@@ -306,7 +306,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
End Property
End Class
Friend Partial Class BoundSimpleCaseClause
Partial Friend Class BoundSimpleCaseClause
Implements ISingleValueCaseClause
Private ReadOnly Property ISingleValueCaseClause_Equality As BinaryOperationKind Implements ISingleValueCaseClause.Equality
......@@ -372,7 +372,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
End Function
End Class
Friend Partial Class BoundRangeCaseClause
Partial Friend Class BoundRangeCaseClause
Implements IRangeCaseClause
Private ReadOnly Property IRangeCaseClause_MaximumValue As IOperation Implements IRangeCaseClause.MaximumValue
......@@ -430,7 +430,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
End Function
End Class
Friend Partial Class BoundRelationalCaseClause
Partial Friend Class BoundRelationalCaseClause
Implements IRelationalCaseClause
Private ReadOnly Property IRelationalCaseClause_Relation As BinaryOperationKind Implements IRelationalCaseClause.Relation
......@@ -479,7 +479,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
End Function
End Class
Friend Partial Class BoundCaseStatement
Partial Friend Class BoundCaseStatement
' Cases are found by going through ISwitch, so the VB Case statement is orphaned.
Protected Overrides Function StatementKind() As OperationKind
......@@ -495,7 +495,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
End Function
End Class
Friend Partial Class BoundDoLoopStatement
Partial Friend Class BoundDoLoopStatement
Implements IWhileUntilLoopStatement
Private ReadOnly Property IForWhileUntilLoopStatement_Condition As IOperation Implements IForWhileUntilLoopStatement.Condition
......@@ -541,7 +541,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
End Function
End Class
Friend Partial Class BoundForToStatement
Partial Friend Class BoundForToStatement
Implements IForLoopStatement
Private Shared ReadOnly s_loopBottomMappings As New System.Runtime.CompilerServices.ConditionalWeakTable(Of BoundForToStatement, Object)
......@@ -569,7 +569,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
End If
Dim stepOperand As IOperation = If(stepValue.IsConstant, DirectCast(stepValue, IOperation), New Temporary(SyntheticLocalKind.ForLoopStepValue, BoundFor, stepValue))
statements.Add(New CompoundAssignment(controlReference, stepOperand, Semantics.Expression.DeriveAdditionKind(controlType), Nothing, stepValue.Syntax))
statements.Add(New ExpressionStatement(controlReference, stepOperand, Semantics.Expression.DeriveAdditionKind(controlType), Nothing, stepValue.Syntax))
End If
End If
......@@ -592,17 +592,17 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
' ControlVariable = InitialValue
Dim controlReference As IOperation = BoundFor.ControlVariable
If controlReference IsNot Nothing Then
statements.Add(New Assignment(controlReference, BoundFor.InitialValue, BoundFor.InitialValue.Syntax))
statements.Add(New ExpressionStatement(controlReference, BoundFor.InitialValue, BoundFor.InitialValue.Syntax))
End If
' T0 = LimitValue
If Not Me.LimitValue.IsConstant Then
statements.Add(New Assignment(New Temporary(SyntheticLocalKind.ForLoopLimitValue, BoundFor, BoundFor.LimitValue), BoundFor.LimitValue, BoundFor.LimitValue.Syntax))
statements.Add(New ExpressionStatement(New Temporary(SyntheticLocalKind.ForLoopLimitValue, BoundFor, BoundFor.LimitValue), BoundFor.LimitValue, BoundFor.LimitValue.Syntax))
End If
' T1 = StepValue
If BoundFor.StepValue IsNot Nothing AndAlso Not BoundFor.StepValue.IsConstant Then
statements.Add(New Assignment(New Temporary(SyntheticLocalKind.ForLoopStepValue, BoundFor, BoundFor.StepValue), BoundFor.StepValue, BoundFor.StepValue.Syntax))
statements.Add(New ExpressionStatement(New Temporary(SyntheticLocalKind.ForLoopStepValue, BoundFor, BoundFor.StepValue), BoundFor.StepValue, BoundFor.StepValue.Syntax))
End If
Return statements.ToImmutableAndFree()
......@@ -640,25 +640,25 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
' Either ControlVariable <= LimitValue or ControlVariable >= LimitValue, depending on whether the step value is negative.
Dim relationalCode As BinaryOperationKind = DeriveBinaryOperationKind(If(BoundFor.StepValue IsNot Nothing AndAlso BoundFor.StepValue.ConstantValueOpt.IsNegativeNumeric, BinaryOperatorKind.GreaterThanOrEqual, BinaryOperatorKind.LessThanOrEqual), controlVariable)
Return New Binary(relationalCode, controlVariable, limitValue, booleanType, limitValue.Syntax)
Return New BinaryOperatorExpression(relationalCode, controlVariable, limitValue, booleanType, limitValue.Syntax)
Else
' If(StepValue >= 0, ControlVariable <= LimitValue, ControlVariable >= LimitValue)
Dim stepValue As IOperation = New Temporary(SyntheticLocalKind.ForLoopStepValue, BoundFor, BoundFor.StepValue)
Dim stepRelationalCode As BinaryOperationKind = DeriveBinaryOperationKind(BinaryOperatorKind.GreaterThanOrEqual, BoundFor.StepValue)
Dim stepCondition As IOperation = New Binary(stepRelationalCode,
Dim stepCondition As IOperation = New BinaryOperatorExpression(stepRelationalCode,
stepValue,
New Literal(Semantics.Expression.SynthesizeNumeric(stepValue.Type, 0), BoundFor.StepValue.Type, BoundFor.StepValue.Syntax),
New LiteralExpression(Semantics.Expression.SynthesizeNumeric(stepValue.Type, 0), BoundFor.StepValue.Type, BoundFor.StepValue.Syntax),
booleanType,
BoundFor.StepValue.Syntax)
Dim positiveStepRelationalCode As BinaryOperationKind = DeriveBinaryOperationKind(BinaryOperatorKind.LessThanOrEqual, controlVariable)
Dim positiveStepCondition As IOperation = New Binary(positiveStepRelationalCode, controlVariable, limitValue, booleanType, limitValue.Syntax)
Dim positiveStepCondition As IOperation = New BinaryOperatorExpression(positiveStepRelationalCode, controlVariable, limitValue, booleanType, limitValue.Syntax)
Dim negativeStepRelationalCode As BinaryOperationKind = DeriveBinaryOperationKind(BinaryOperatorKind.GreaterThanOrEqual, controlVariable)
Dim negativeStepCondition As IOperation = New Binary(negativeStepRelationalCode, controlVariable, limitValue, booleanType, limitValue.Syntax)
Dim negativeStepCondition As IOperation = New BinaryOperatorExpression(negativeStepRelationalCode, controlVariable, limitValue, booleanType, limitValue.Syntax)
Return New ConditionalChoice(stepCondition, positiveStepCondition, negativeStepCondition, booleanType, limitValue.Syntax)
Return New ConditionalChoiceExpression(stepCondition, positiveStepCondition, negativeStepCondition, booleanType, limitValue.Syntax)
End If
End If
End Function)
......@@ -754,7 +754,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
End Class
End Class
Friend Partial Class BoundForEachStatement
Partial Friend Class BoundForEachStatement
Implements IForEachLoopStatement
Private ReadOnly Property IForEachLoopStatement_IterationVariable As ILocalSymbol Implements IForEachLoopStatement.IterationVariable
......@@ -799,7 +799,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
End Function
End Class
Friend Partial Class BoundTryStatement
Partial Friend Class BoundTryStatement
Implements ITryStatement
Private ReadOnly Property ITryStatement_Body As IBlockStatement Implements ITryStatement.Body
......@@ -896,15 +896,15 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
End Property
Public Overloads Sub Accept(visitor As OperationVisitor) Implements IOperation.Accept
visitor.VisitCatch(Me)
visitor.VisitCatchClause(Me)
End Sub
Public Overloads Function Accept(Of TArgument, TResult)(visitor As OperationVisitor(Of TArgument, TResult), argument As TArgument) As TResult Implements IOperation.Accept
Return visitor.VisitCatch(Me, argument)
Return visitor.VisitCatchClause(Me, argument)
End Function
End Class
Friend Partial Class BoundBlock
Partial Friend Class BoundBlock
Implements IBlockStatement
Private Shared ReadOnly s_blockStatementsMappings As New System.Runtime.CompilerServices.ConditionalWeakTable(Of BoundBlock, Object)
......@@ -956,7 +956,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
End Function
End Class
Friend Partial Class BoundReturnStatement
Partial Friend Class BoundReturnStatement
Implements IReturnStatement
Private ReadOnly Property IReturnStatement_ReturnedValue As IOperation Implements IReturnStatement.ReturnedValue
......@@ -978,7 +978,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
End Function
End Class
Friend Partial Class BoundThrowStatement
Partial Friend Class BoundThrowStatement
Implements IThrowStatement
Private ReadOnly Property IThrowStatement_ThrownObject As IOperation Implements IThrowStatement.ThrownObject
......@@ -1000,7 +1000,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
End Function
End Class
Friend Partial Class BoundWhileStatement
Partial Friend Class BoundWhileStatement
Implements IWhileUntilLoopStatement
Private ReadOnly Property IForWhileUntilLoopStatement_Condition As IOperation Implements IForWhileUntilLoopStatement.Condition
......@@ -1046,7 +1046,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
End Function
End Class
Friend Partial Class BoundDimStatement
Partial Friend Class BoundDimStatement
Implements IVariableDeclarationStatement
Private Shared ReadOnly s_variablesMappings As New System.Runtime.CompilerServices.ConditionalWeakTable(Of BoundDimStatement, Object)
......@@ -1086,7 +1086,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
End Function
End Class
Friend Partial Class BoundYieldStatement
Partial Friend Class BoundYieldStatement
Implements IReturnStatement
Private ReadOnly Property IReturnStatement_ReturnedValue As IOperation Implements IReturnStatement.ReturnedValue
Get
......@@ -1107,7 +1107,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
End Function
End Class
Friend Partial Class BoundLabelStatement
Partial Friend Class BoundLabelStatement
Implements ILabelStatement
Private ReadOnly Property ILabelStatement_Label As ILabelSymbol Implements ILabelStatement.Label
......@@ -1136,7 +1136,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
End Function
End Class
Friend Partial Class BoundGotoStatement
Partial Friend Class BoundGotoStatement
Implements IBranchStatement
Private ReadOnly Property IBranchStatement_Target As ILabelSymbol Implements IBranchStatement.Target
......@@ -1164,7 +1164,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
End Function
End Class
Friend Partial Class BoundContinueStatement
Partial Friend Class BoundContinueStatement
Implements IBranchStatement
Private ReadOnly Property IBranchStatement_Target As ILabelSymbol Implements IBranchStatement.Target
......@@ -1192,7 +1192,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
End Function
End Class
Friend Partial Class BoundExitStatement
Partial Friend Class BoundExitStatement
Implements IBranchStatement
Private ReadOnly Property IBranchStatement_Target As ILabelSymbol Implements IBranchStatement.Target
......@@ -1220,7 +1220,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
End Function
End Class
Friend Partial Class BoundSyncLockStatement
Partial Friend Class BoundSyncLockStatement
Implements ILockStatement
Private ReadOnly Property ILockStatement_LockedObject As IOperation Implements ILockStatement.LockedObject
......@@ -1264,7 +1264,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
End Function
End Class
Friend Partial Class BoundSequencePoint
Partial Friend Class BoundSequencePoint
Protected Overrides Function StatementKind() As OperationKind
Return OperationKind.None
End Function
......@@ -1278,7 +1278,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
End Function
End Class
Friend Partial Class BoundSequencePointWithSpan
Partial Friend Class BoundSequencePointWithSpan
Protected Overrides Function StatementKind() As OperationKind
Return OperationKind.None
End Function
......@@ -1292,7 +1292,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
End Function
End Class
Friend Partial Class BoundStateMachineScope
Partial Friend Class BoundStateMachineScope
Protected Overrides Function StatementKind() As OperationKind
Return OperationKind.None
End Function
......@@ -1338,7 +1338,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
End Function
End Class
Friend Partial Class BoundWithStatement
Partial Friend Class BoundWithStatement
Implements IWithStatement
Private ReadOnly Property IWithStatement_Body As IOperation Implements IWithStatement.Body
......@@ -1366,7 +1366,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
End Function
End Class
Friend Partial Class BoundUsingStatement
Partial Friend Class BoundUsingStatement
Implements IUsingStatement
Private ReadOnly Property IUsingStatement_Value As IOperation Implements IUsingStatement.Value
......@@ -1460,7 +1460,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
End Class
End Class
Friend Partial Class BoundExpressionStatement
Partial Friend Class BoundExpressionStatement
Implements IExpressionStatement
Private ReadOnly Property IExpressionStatement_Expression As IOperation Implements IExpressionStatement.Expression
......@@ -1746,7 +1746,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
End Function
End Class
Friend Partial Class BoundResumeStatement
Partial Friend Class BoundResumeStatement
Protected Overrides Function StatementKind() As OperationKind
Return OperationKind.None
End Function
......@@ -1760,7 +1760,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
End Function
End Class
Friend Partial Class BoundOnErrorStatement
Partial Friend Class BoundOnErrorStatement
Protected Overrides Function StatementKind() As OperationKind
Return OperationKind.None
End Function
......@@ -1774,7 +1774,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
End Function
End Class
Friend Partial Class BoundUnstructuredExceptionHandlingStatement
Partial Friend Class BoundUnstructuredExceptionHandlingStatement
Protected Overrides Function StatementKind() As OperationKind
Return OperationKind.None
End Function
......@@ -1788,7 +1788,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
End Function
End Class
Friend Partial Class BoundUnstructuredExceptionOnErrorSwitch
Partial Friend Class BoundUnstructuredExceptionOnErrorSwitch
Protected Overrides Function StatementKind() As OperationKind
Return OperationKind.None
End Function
......@@ -1802,7 +1802,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
End Function
End Class
Friend Partial Class BoundUnstructuredExceptionResumeSwitch
Partial Friend Class BoundUnstructuredExceptionResumeSwitch
Protected Overrides Function StatementKind() As OperationKind
Return OperationKind.None
End Function
......
......@@ -425,13 +425,13 @@ public override void VisitTryStatement(ITryStatement operation)
base.VisitTryStatement(operation);
}
public override void VisitCatch(ICatchClause operation)
public override void VisitCatchClause(ICatchClause operation)
{
LogString(nameof(ICatchClause));
LogString($" (Exception type: {operation.Type?.ToTestDisplayString()}, Exception local: {operation.ExceptionLocal?.ToTestDisplayString()})");
LogCommonPropertiesAndNewLine(operation);
base.VisitCatch(operation);
base.VisitCatchClause(operation);
}
public override void VisitUsingStatement(IUsingStatement operation)
......
......@@ -129,7 +129,7 @@ public override void VisitBranchStatement(IBranchStatement operation)
var target = operation.Target;
var branchKind = operation.BranchKind;
base. VisitBranchStatement(operation);
base.VisitBranchStatement(operation);
}
public override void VisitYieldBreakStatement(IReturnStatement operation)
......@@ -162,12 +162,12 @@ public override void VisitTryStatement(ITryStatement operation)
base.VisitTryStatement(operation);
}
public override void VisitCatch(ICatchClause operation)
public override void VisitCatchClause(ICatchClause operation)
{
var caughtType = operation.CaughtType;
var exceptionLocal = operation.ExceptionLocal;
base.VisitCatch(operation);
base.VisitCatchClause(operation);
}
public override void VisitUsingStatement(IUsingStatement operation)
......@@ -468,7 +468,7 @@ public override void VisitParameterInitializer(IParameterInitializer operation)
public override void VisitArrayCreationExpression(IArrayCreationExpression operation)
{
var elementType = operation.ElementType;
base.VisitArrayCreationExpression(operation);
}
......@@ -534,7 +534,7 @@ public override void VisitInvalidStatement(IInvalidStatement operation)
}
public override void VisitInvalidExpression(IInvalidExpression operation)
{
{
base.VisitInvalidExpression(operation);
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册