Base class for E4X XML attribute-access or property-get expressions.
Base class for E4X XML attribute-access or property-get expressions. Such expressions can take a variety of forms. The general syntax has three parts:

  1. optional: an @
  2. (specifying an attribute access)
  3. optional: a namespace (a Name ) and double-colon
  4. required: either a Name or a bracketed [expression]
The property-name expressions (examples: ns::name , @name ) are represented as XmlPropRef nodes. The bracketed-expression versions (examples: ns::[name] , @[name] ) become XmlElemRef nodes.

This node type (or more specifically, its subclasses) will sometimes be the right-hand child of a PropertyGet node or an XmlMemberGet node. The XmlRef node may also be a standalone primary expression with no explicit target, which is valid in certain expression contexts such as company..employee.(@id < 100) - in this case, the @id is an XmlRef that is part of an infix '<' expression whose parent is an XmlDotQuery node.

Наследование: AstNode
Пример #1
0
		public XmlMemberGet(AstNode target, XmlRef @ref, int opPos) : base(Token.DOTDOT, target, @ref, opPos)
		{
			{
				type = Token.DOTDOT;
			}
		}
Пример #2
0
		/// <summary>
		/// Constructs a new
		/// <code>XmlMemberGet</code>
		/// node.
		/// Updates bounds to include
		/// <code>target</code>
		/// and
		/// <code>ref</code>
		/// nodes.
		/// </summary>
		public XmlMemberGet(AstNode target, XmlRef @ref) : base(target, @ref)
		{
			{
				type = Token.DOTDOT;
			}
		}
Пример #3
0
		public XmlMemberGet(int pos, int len, AstNode target, XmlRef @ref) : base(pos, len, target, @ref)
		{
			{
				type = Token.DOTDOT;
			}
		}
Пример #4
0
		/// <summary>
		/// Sets the XML member-ref expression, and sets its parent
		/// to this node.
		/// </summary>
		/// <remarks>
		/// Sets the XML member-ref expression, and sets its parent
		/// to this node.
		/// </remarks>
		/// <exception cref="System.ArgumentException">
		/// if property is
		/// <code>null</code>
		/// </exception>
		public virtual void SetProperty(XmlRef @ref)
		{
			SetRight(@ref);
		}
Пример #5
0
		private Node TransformXmlRef(Node pn, XmlRef node, int memberTypeFlags)
		{
			if ((memberTypeFlags & Node.ATTRIBUTE_FLAG) != 0)
			{
				decompiler.AddToken(Token.XMLATTR);
			}
			Name @namespace = node.GetNamespace();
			string ns = @namespace != null ? @namespace.GetIdentifier() : null;
			if (ns != null)
			{
				decompiler.AddName(ns);
				decompiler.AddToken(Token.COLONCOLON);
			}
			if (node is XmlPropRef)
			{
				string name = ((XmlPropRef)node).GetPropName().GetIdentifier();
				decompiler.AddName(name);
				return CreatePropertyGet(pn, ns, name, memberTypeFlags);
			}
			else
			{
				decompiler.AddToken(Token.LB);
				Node expr = Transform(((XmlElemRef)node).GetExpression());
				decompiler.AddToken(Token.RB);
				return CreateElementGet(pn, ns, expr, memberTypeFlags);
			}
		}
Пример #6
0
		// We get here if we weren't a child of a . or .. infix node
		private Node TransformXmlRef(XmlRef node)
		{
			int memberTypeFlags = node.IsAttributeAccess() ? Node.ATTRIBUTE_FLAG : 0;
			return TransformXmlRef(null, node, memberTypeFlags);
		}