Ejemplo n.º 1
0
        /// <summary>
        /// Creates a variable use from the given element. Must be a <see cref="ABB.SrcML.SRC.Expression"/>, <see cref="ABB.SrcML.SRC.Name"/>, or <see cref="ABB.SrcML.SRC.ExpressionStatement"/>
        /// </summary>
        /// <param name="element">The element to parse</param>
        /// <param name="context">The parser context</param>
        /// <returns>A variable use object</returns>
        // TODO make this fit in with the rest of the parse methods
        public virtual VariableUse CreateVariableUse(XElement element, ParserContext context) {
            XElement nameElement;
            if(element.Name == SRC.Name) {
                nameElement = element;
            } else if(element.Name == SRC.Expression) {
                nameElement = element.Element(SRC.Name);
            } else if(element.Name == SRC.ExpressionStatement || element.Name == SRC.Argument) {
                nameElement = element.Element(SRC.Expression).Element(SRC.Name);
            } else {
                throw new ArgumentException("element should be an expression, expression statement, argument, or name", "element");
            }

            var lastNameElement = NameHelper.GetLastNameElement(nameElement);

            var variableUse = new VariableUse() {
                Location = context.CreateLocation(lastNameElement, true),
                Name = lastNameElement.Value,
                ParentScope = context.CurrentScope,
                ProgrammingLanguage = ParserLanguage,
            };
            return variableUse;
        }
Ejemplo n.º 2
0
 /// <summary>
 /// Creates a resolvable use from an expression
 /// </summary>
 /// <param name="element">The element to parse</param>
 /// <param name="context">The parser context</param>
 /// <returns>A resolvable use object</returns>
 // TODO make this fit in with the rest of the parse methods (rename to parse)
 public virtual IResolvesToType CreateResolvableUse(XElement element, ParserContext context) {
     var use = new VariableUse() {
         Location = context.CreateLocation(element, true),
         ParentScope = context.CurrentScope,
         ProgrammingLanguage = ParserLanguage,
     };
     return use;
 }