예제 #1
0
        internal static void SetModifiers(AstNode node, Modifiers newValue)
        {
            Modifiers oldValue     = GetModifiers(node);
            AstNode   insertionPos = node.GetChildrenByRole(AttributeRole).LastOrDefault();

            foreach (Modifiers m in CppModifierToken.AllModifiers)
            {
                if ((m & newValue) != 0)
                {
                    if ((m & oldValue) == 0)
                    {
                        // Modifier was added
                        var newToken = new CppModifierToken(TextLocation.Empty, m);
                        node.InsertChildAfter(insertionPos, newToken, ModifierRole);
                        insertionPos = newToken;
                    }
                    else
                    {
                        // Modifier already exists
                        insertionPos = node.GetChildrenByRole(ModifierRole).First(t => t.Modifier == m);
                    }
                }
                else
                {
                    if ((m & oldValue) != 0)
                    {
                        // Modifier was removed
                        node.GetChildrenByRole(ModifierRole).First(t => t.Modifier == m).Remove();
                    }
                }
            }
        }
예제 #2
0
 void PrintModifiers(Modifiers modifiers, StringWriter writer)
 {
     foreach (var m in CppModifierToken.AllModifiers)
     {
         if ((modifiers & m) == m)
         {
             writer.Write(CppModifierToken.GetModifierName(m));
             writer.Write(' ');
         }
     }
 }
예제 #3
0
		internal static void SetModifiers(AstNode node, Modifiers newValue)
		{
			Modifiers oldValue = GetModifiers(node);
			AstNode insertionPos = node.GetChildrenByRole(AttributeRole).LastOrDefault();
			foreach (Modifiers m in CppModifierToken.AllModifiers) {
				if ((m & newValue) != 0) {
					if ((m & oldValue) == 0) {
						// Modifier was added
						var newToken = new CppModifierToken(TextLocation.Empty, m);
						node.InsertChildAfter(insertionPos, newToken, ModifierRole);
						insertionPos = newToken;
					} else {
						// Modifier already exists
						insertionPos = node.GetChildrenByRole(ModifierRole).First(t => t.Modifier == m);
					}
				} else {
					if ((m & oldValue) != 0) {
						// Modifier was removed
						node.GetChildrenByRole (ModifierRole).First(t => t.Modifier == m).Remove();
					}
				}
			}
		}
예제 #4
0
        protected internal override bool DoMatch(AstNode other, PatternMatching.Match match)
        {
            CppModifierToken o = other as CppModifierToken;

            return(o != null && this.modifier == o.modifier);
        }