/* **************************************************************************** * * Copyright (c) Microsoft Corporation. * * This source code is subject to terms and conditions of the Apache License, Version 2.0. A * copy of the license can be found in the License.html file at the root of this distribution. If * you cannot locate the Apache License, Version 2.0, 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 Apache License, Version 2.0. * * You must not remove this notice, or any other, from this software. * * * ***************************************************************************/ using System; using System.Dynamic.Utils; #if !FEATURE_CORE_DLR namespace Microsoft.Scripting.Ast { #else namespace System.Linq.Expressions { #endif /// /// Used to denote the target of a . /// public sealed class LabelTarget { private readonly Type _type; private readonly string _name; internal LabelTarget(Type type, string name) { _type = type; _name = name; } /// /// Gets the name of the label. /// /// The label's name is provided for information purposes only. public string Name { get { return _name; } } /// /// The type of value that is passed when jumping to the label /// (or System.Void if no value should be passed). /// [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1721:PropertyNamesShouldNotMatchGetMethods")] public Type Type { get { return _type; } } /// /// Returns a that represents the current . /// /// A that represents the current . public override string ToString() { return String.IsNullOrEmpty(this.Name) ? "UnamedLabel" : this.Name; } } public partial class Expression { /// /// Creates a representing a label with void type and no name. /// /// The new . public static LabelTarget Label() { return Label(typeof(void), null); } /// /// Creates a representing a label with void type and the given name. /// /// The name of the label. /// The new . public static LabelTarget Label(string name) { return Label(typeof(void), name); } /// /// Creates a representing a label with the given type. /// /// The type of value that is passed when jumping to the label. /// The new . public static LabelTarget Label(Type type) { return Label(type, null); } /// /// Creates a representing a label with the given type and name. /// /// The type of value that is passed when jumping to the label. /// The name of the label. /// The new . public static LabelTarget Label(Type type, string name) { ContractUtils.RequiresNotNull(type, "type"); TypeUtils.ValidateType(type); return new LabelTarget(type, name); } } }