Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Core / Microsoft / Scripting / Actions / BinaryOperationBinder.cs / 1305376 / BinaryOperationBinder.cs
/* ****************************************************************************
*
* Copyright (c) Microsoft Corporation.
*
* This source code is subject to terms and conditions of the Microsoft Public License. A
* copy of the license can be found in the License.html file at the root of this distribution. If
* you cannot locate the Microsoft Public License, please send an email to
* dlr@microsoft.com. By using this source code in any fashion, you are agreeing to be bound
* by the terms of the Microsoft Public License.
*
* You must not remove this notice, or any other, from this software.
*
*
* ***************************************************************************/
using System.Dynamic.Utils;
using System.Linq.Expressions;
namespace System.Dynamic {
///
/// Represents the binary dynamic operation at the call site, providing the binding semantic and the details about the operation.
///
public abstract class BinaryOperationBinder : DynamicMetaObjectBinder {
private ExpressionType _operation;
///
/// Initializes a new instance of the class.
///
/// The binary operation kind.
protected BinaryOperationBinder(ExpressionType operation) {
ContractUtils.Requires(OperationIsValid(operation), "operation");
_operation = operation;
}
///
/// The result type of the operation.
///
public override sealed Type ReturnType {
get { return typeof(object); }
}
///
/// The binary operation kind.
///
public ExpressionType Operation {
get {
return _operation;
}
}
///
/// Performs the binding of the binary dynamic operation if the target dynamic object cannot bind.
///
/// The target of the dynamic binary operation.
/// The right hand side operand of the dynamic binary operation.
/// The representing the result of the binding.
public DynamicMetaObject FallbackBinaryOperation(DynamicMetaObject target, DynamicMetaObject arg) {
return FallbackBinaryOperation(target, arg, null);
}
///
/// When overridden in the derived class, performs the binding of the binary dynamic operation if the target dynamic object cannot bind.
///
/// The target of the dynamic binary operation.
/// The right hand side operand of the dynamic binary operation.
/// The binding result in case the binding fails, or null.
/// The representing the result of the binding.
public abstract DynamicMetaObject FallbackBinaryOperation(DynamicMetaObject target, DynamicMetaObject arg, DynamicMetaObject errorSuggestion);
///
/// Performs the binding of the dynamic binary operation.
///
/// The target of the dynamic operation.
/// An array of arguments of the dynamic operation.
/// The representing the result of the binding.
public sealed override DynamicMetaObject Bind(DynamicMetaObject target, DynamicMetaObject[] args) {
ContractUtils.RequiresNotNull(target, "target");
ContractUtils.RequiresNotNull(args, "args");
ContractUtils.Requires(args.Length == 1, "args");
var arg0 = args[0];
ContractUtils.RequiresNotNull(arg0, "args");
return target.BindBinaryOperation(this, arg0);
}
// this is a standard DynamicMetaObjectBinder
internal override sealed bool IsStandardBinder {
get {
return true;
}
}
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")]
internal static bool OperationIsValid(ExpressionType operation) {
switch (operation) {
#region Generated Binary Operation Binder Validator
// *** BEGIN GENERATED CODE ***
// generated by function: gen_binop_validator from: generate_tree.py
case ExpressionType.Add:
case ExpressionType.And:
case ExpressionType.Divide:
case ExpressionType.Equal:
case ExpressionType.ExclusiveOr:
case ExpressionType.GreaterThan:
case ExpressionType.GreaterThanOrEqual:
case ExpressionType.LeftShift:
case ExpressionType.LessThan:
case ExpressionType.LessThanOrEqual:
case ExpressionType.Modulo:
case ExpressionType.Multiply:
case ExpressionType.NotEqual:
case ExpressionType.Or:
case ExpressionType.Power:
case ExpressionType.RightShift:
case ExpressionType.Subtract:
case ExpressionType.AddAssign:
case ExpressionType.AndAssign:
case ExpressionType.DivideAssign:
case ExpressionType.ExclusiveOrAssign:
case ExpressionType.LeftShiftAssign:
case ExpressionType.ModuloAssign:
case ExpressionType.MultiplyAssign:
case ExpressionType.OrAssign:
case ExpressionType.PowerAssign:
case ExpressionType.RightShiftAssign:
case ExpressionType.SubtractAssign:
// *** END GENERATED CODE ***
#endregion
case ExpressionType.Extension:
return true;
default:
return false;
}
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
/* ****************************************************************************
*
* Copyright (c) Microsoft Corporation.
*
* This source code is subject to terms and conditions of the Microsoft Public License. A
* copy of the license can be found in the License.html file at the root of this distribution. If
* you cannot locate the Microsoft Public License, please send an email to
* dlr@microsoft.com. By using this source code in any fashion, you are agreeing to be bound
* by the terms of the Microsoft Public License.
*
* You must not remove this notice, or any other, from this software.
*
*
* ***************************************************************************/
using System.Dynamic.Utils;
using System.Linq.Expressions;
namespace System.Dynamic {
///
/// Represents the binary dynamic operation at the call site, providing the binding semantic and the details about the operation.
///
public abstract class BinaryOperationBinder : DynamicMetaObjectBinder {
private ExpressionType _operation;
///
/// Initializes a new instance of the class.
///
/// The binary operation kind.
protected BinaryOperationBinder(ExpressionType operation) {
ContractUtils.Requires(OperationIsValid(operation), "operation");
_operation = operation;
}
///
/// The result type of the operation.
///
public override sealed Type ReturnType {
get { return typeof(object); }
}
///
/// The binary operation kind.
///
public ExpressionType Operation {
get {
return _operation;
}
}
///
/// Performs the binding of the binary dynamic operation if the target dynamic object cannot bind.
///
/// The target of the dynamic binary operation.
/// The right hand side operand of the dynamic binary operation.
/// The representing the result of the binding.
public DynamicMetaObject FallbackBinaryOperation(DynamicMetaObject target, DynamicMetaObject arg) {
return FallbackBinaryOperation(target, arg, null);
}
///
/// When overridden in the derived class, performs the binding of the binary dynamic operation if the target dynamic object cannot bind.
///
/// The target of the dynamic binary operation.
/// The right hand side operand of the dynamic binary operation.
/// The binding result in case the binding fails, or null.
/// The representing the result of the binding.
public abstract DynamicMetaObject FallbackBinaryOperation(DynamicMetaObject target, DynamicMetaObject arg, DynamicMetaObject errorSuggestion);
///
/// Performs the binding of the dynamic binary operation.
///
/// The target of the dynamic operation.
/// An array of arguments of the dynamic operation.
/// The representing the result of the binding.
public sealed override DynamicMetaObject Bind(DynamicMetaObject target, DynamicMetaObject[] args) {
ContractUtils.RequiresNotNull(target, "target");
ContractUtils.RequiresNotNull(args, "args");
ContractUtils.Requires(args.Length == 1, "args");
var arg0 = args[0];
ContractUtils.RequiresNotNull(arg0, "args");
return target.BindBinaryOperation(this, arg0);
}
// this is a standard DynamicMetaObjectBinder
internal override sealed bool IsStandardBinder {
get {
return true;
}
}
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")]
internal static bool OperationIsValid(ExpressionType operation) {
switch (operation) {
#region Generated Binary Operation Binder Validator
// *** BEGIN GENERATED CODE ***
// generated by function: gen_binop_validator from: generate_tree.py
case ExpressionType.Add:
case ExpressionType.And:
case ExpressionType.Divide:
case ExpressionType.Equal:
case ExpressionType.ExclusiveOr:
case ExpressionType.GreaterThan:
case ExpressionType.GreaterThanOrEqual:
case ExpressionType.LeftShift:
case ExpressionType.LessThan:
case ExpressionType.LessThanOrEqual:
case ExpressionType.Modulo:
case ExpressionType.Multiply:
case ExpressionType.NotEqual:
case ExpressionType.Or:
case ExpressionType.Power:
case ExpressionType.RightShift:
case ExpressionType.Subtract:
case ExpressionType.AddAssign:
case ExpressionType.AndAssign:
case ExpressionType.DivideAssign:
case ExpressionType.ExclusiveOrAssign:
case ExpressionType.LeftShiftAssign:
case ExpressionType.ModuloAssign:
case ExpressionType.MultiplyAssign:
case ExpressionType.OrAssign:
case ExpressionType.PowerAssign:
case ExpressionType.RightShiftAssign:
case ExpressionType.SubtractAssign:
// *** END GENERATED CODE ***
#endregion
case ExpressionType.Extension:
return true;
default:
return false;
}
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- SmtpCommands.cs
- SchemaDeclBase.cs
- PersistenceProviderBehavior.cs
- bindurihelper.cs
- ConvertEvent.cs
- FormViewDeletedEventArgs.cs
- ZipIOBlockManager.cs
- ListControlBuilder.cs
- SignatureHelper.cs
- BindingManagerDataErrorEventArgs.cs
- ProfilePropertySettings.cs
- CodeAssignStatement.cs
- MergablePropertyAttribute.cs
- MaskInputRejectedEventArgs.cs
- EventWaitHandle.cs
- MethodBuilderInstantiation.cs
- SoapMessage.cs
- Point3DConverter.cs
- NameTable.cs
- ResourceDisplayNameAttribute.cs
- ChtmlTextWriter.cs
- IsolatedStorageFileStream.cs
- RuleSetBrowserDialog.cs
- Graph.cs
- mediaeventshelper.cs
- RTLAwareMessageBox.cs
- SQLBytesStorage.cs
- PrincipalPermission.cs
- EntityChangedParams.cs
- EventLogEntryCollection.cs
- TextRangeProviderWrapper.cs
- AccessText.cs
- isolationinterop.cs
- LocalIdKeyIdentifierClause.cs
- ScrollContentPresenter.cs
- CodeMemberProperty.cs
- MultiSelector.cs
- ByteAnimation.cs
- DeflateInput.cs
- ExpandSegment.cs
- ChangeTracker.cs
- returneventsaver.cs
- CodeLinePragma.cs
- DataGridTablesFactory.cs
- NetworkAddressChange.cs
- DeclarativeCatalogPart.cs
- SudsParser.cs
- ObjectListSelectEventArgs.cs
- xml.cs
- AsymmetricAlgorithm.cs
- ConfigsHelper.cs
- BamlResourceDeserializer.cs
- XmlSchemaAppInfo.cs
- NamedPipeAppDomainProtocolHandler.cs
- ObjectStorage.cs
- ReturnEventArgs.cs
- TextEditorMouse.cs
- PaintValueEventArgs.cs
- DataGridViewCellStyle.cs
- XamlPointCollectionSerializer.cs
- TransformValueSerializer.cs
- MenuTracker.cs
- CollectionDataContractAttribute.cs
- TypeConstant.cs
- CryptographicAttribute.cs
- URLIdentityPermission.cs
- DataBoundControlParameterTarget.cs
- CompressedStack.cs
- InteropTrackingRecord.cs
- ListSourceHelper.cs
- unitconverter.cs
- ComponentRenameEvent.cs
- EndOfStreamException.cs
- WebPartCatalogAddVerb.cs
- PropertyEntry.cs
- Stacktrace.cs
- listitem.cs
- DataGridViewCellToolTipTextNeededEventArgs.cs
- SymmetricCryptoHandle.cs
- CopyAction.cs
- StringAnimationBase.cs
- PagerSettings.cs
- HtmlDocument.cs
- connectionpool.cs
- InputProcessorProfiles.cs
- BamlLocalizabilityResolver.cs
- PermissionSet.cs
- DrawingState.cs
- WebEvents.cs
- LineVisual.cs
- PropertyValueUIItem.cs
- PreloadedPackages.cs
- Substitution.cs
- SpellerInterop.cs
- JsonSerializer.cs
- AsyncDataRequest.cs
- TimeEnumHelper.cs
- LinkLabel.cs
- RtfToXamlReader.cs
- ComponentDispatcherThread.cs