/// <summary>
		/// String constructor.
		/// Used for generating string results 'internally'.
		/// </summary>
		public ArrayValue(ArrayType stringTypeResult, string content) : base(stringTypeResult)
		{
			StringFormat = LiteralSubformat.Utf8;
			StringValue = content;
		}
		public ArrayValue(ArrayType resolvedArrayType, params ISymbolValue[] elements) : base(resolvedArrayType)
		{
			Elements = elements;
		}
		/// <summary>
		/// String constructor.
		/// Given result stores both type and idenfitierexpression whose Value is used as content
		/// </summary>
		public ArrayValue(ArrayType stringLiteralResult, IdentifierExpression stringLiteral = null)
			: base(stringLiteralResult)
		{
			StringFormat = LiteralSubformat.Utf8;
			if (stringLiteralResult.DeclarationOrExpressionBase is IdentifierExpression)
			{
				StringFormat = ((IdentifierExpression)stringLiteralResult.DeclarationOrExpressionBase).Subformat;
				StringValue = ((IdentifierExpression)stringLiteralResult.DeclarationOrExpressionBase).StringValue;
			}
			else
				StringValue = stringLiteral.StringValue;
		}