using System;
namespace AnticipatingMinds.Genesis.CodeDOM{
/// <summary>
/// Represents an argument in function invocation statement or class instantiation statement.
/// </summary>
/// <remarks>
/// <para><B><I>Argument</I></B> an expression in the comma-separated list bounded by the parentheses in a method or instance
/// constructor call expression. It is also known as an actual argument. (ECMA 334. Page 7, Line 18; Page 132, Line 2).
/// </para>
/// <para>
/// Some languages allow to identify argument by parameter name. C# employes named
/// arguments during attribute declaration (ECMA 334. Page 310, Line 26).
/// </para>
/// <para>
/// If Name equals to String.Empty it implies that argument is identified by pits position in argument list.
/// </para>
/// </remarks>
[Serializable]
public class CodeArgument : CodeElement
{
#region Nested Types
/// <summary>
/// Argument declaration modifiers.
/// </summary>
/// <remarks>ECMA 334 - p. 231, line 10.</remarks>
public enum CodeArgumentModifier
{
/// <summary>
/// Indicates absense of argument modifiers.
/// </summary>
None,
/// <summary>
/// Indicats that the argument is passed as areference parameter.
/// </summary>
/// <remarks>(ECMA 334. Page 133, Line 2)</remarks>
Ref,
/// <summary>
/// Indicats that the argument is passed as an output parameter.
/// </summary>
/// <remarks>(ECMA 334. Page 133, Line 5)</remarks>
Out
};
#endregion Nested Types
#region Instance constructors
/// <summary>
/// Initializes new instance of CodeArgument class.
/// </summary>
public CodeArgument()
{
}
/// <summary>
/// Initializes new instance of CodeArgument class.
/// </summary>
/// <param name="value">Defines argument value</param>
public CodeArgument(CodeExpression value):this()
{
Value = value;
}
#endregion Instance constructors
#region Public instance properties
/// <summary>
/// Gets or sets argument name.
/// </summary>
public string Name
{
get
{
return name;
}
set
{
name = (value == null ? string.Empty:value);
}
}
/// <summary>
/// Gets or sets argument value.
/// </summary>
public CodeExpression Value
{
get
{
return argumentValue;
}
set
{
argumentValue = value;
}
}
/// <summary>
/// Parameter declaration modifiers
/// </summary>
/// <remarks>(ECMA 334. Page 132, Line 24).</remarks>
public CodeArgumentModifier Modifier
{
get
{
return argumentModifier;
}
set
{
argumentModifier = value;
}
}
#endregion Public instance properties
#region Private instance fields
private string name;
private CodeExpression argumentValue;
private CodeArgumentModifier argumentModifier = CodeArgumentModifier.None;
#endregion Private instance fields
}
}
|