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
- XmlResolver.cs
- ExecutorLocksHeldException.cs
- WindowsListViewItemStartMenu.cs
- BackStopAuthenticationModule.cs
- Trigger.cs
- NeutralResourcesLanguageAttribute.cs
- Processor.cs
- TypeRestriction.cs
- WindowsIPAddress.cs
- UserControl.cs
- XamlDebuggerXmlReader.cs
- RadioButton.cs
- EnumValidator.cs
- StatusStrip.cs
- ShadowGlyph.cs
- DataShape.cs
- ProviderUtil.cs
- ZipIOCentralDirectoryFileHeader.cs
- ListViewPagedDataSource.cs
- TrustManager.cs
- ExpressionEditorAttribute.cs
- TextRunProperties.cs
- SR.Designer.cs
- ControlCollection.cs
- HwndProxyElementProvider.cs
- TargetConverter.cs
- SafeArrayTypeMismatchException.cs
- ReadContentAsBinaryHelper.cs
- ErrorTableItemStyle.cs
- Zone.cs
- ImageListUtils.cs
- DataControlPagerLinkButton.cs
- ShortcutKeysEditor.cs
- StreamSecurityUpgradeAcceptor.cs
- SqlRewriteScalarSubqueries.cs
- UIntPtr.cs
- EmissiveMaterial.cs
- ChtmlPhoneCallAdapter.cs
- SafeNativeMethods.cs
- BamlLocalizabilityResolver.cs
- BeginStoryboard.cs
- RecordManager.cs
- X509Utils.cs
- BamlTreeNode.cs
- DataServiceQueryProvider.cs
- XmlObjectSerializerWriteContextComplexJson.cs
- SHA384.cs
- Attributes.cs
- Literal.cs
- WebPartDisplayModeCancelEventArgs.cs
- Msec.cs
- WorkflowDefinitionContext.cs
- CallSiteOps.cs
- UInt64.cs
- OleDbReferenceCollection.cs
- DocumentEventArgs.cs
- BasicHttpSecurityElement.cs
- ChannelBinding.cs
- DictionaryContent.cs
- _FixedSizeReader.cs
- DataGridAutomationPeer.cs
- WebUtil.cs
- Error.cs
- CroppedBitmap.cs
- StringArrayConverter.cs
- ListView.cs
- XmlKeywords.cs
- Condition.cs
- HttpCacheVaryByContentEncodings.cs
- NavigationFailedEventArgs.cs
- TextFormattingConverter.cs
- ListViewTableRow.cs
- XmlConvert.cs
- Stopwatch.cs
- _ShellExpression.cs
- CodeCatchClauseCollection.cs
- QuadraticBezierSegment.cs
- DeflateInput.cs
- _OSSOCK.cs
- KeyedPriorityQueue.cs
- StrokeIntersection.cs
- ConfigurationSectionCollection.cs
- IsolatedStorage.cs
- SrgsGrammarCompiler.cs
- PackUriHelper.cs
- GestureRecognizer.cs
- SiteMapNodeCollection.cs
- NeutralResourcesLanguageAttribute.cs
- hwndwrapper.cs
- PermissionSet.cs
- DataControlFieldCell.cs
- ContentHostHelper.cs
- ObjectDataSourceFilteringEventArgs.cs
- GridViewCellAutomationPeer.cs
- StructureChangedEventArgs.cs
- UnsafeNativeMethodsCLR.cs
- UnitySerializationHolder.cs
- ExpressionSelection.cs
- DomainLiteralReader.cs
- WindowsBrush.cs