public override void WriteKeyword(Role role, string keyword)
        {
            TextLocation start = locationProvider.Location;
            AlTokenNode  t     = null;

            if (role is TokenRole)
            {
                t = new AlTokenNode(start, (TokenRole)role);
            }
            else if (role == EntityDeclaration.ModifierRole)
            {
                t = new AlModifierToken(start, AlModifierToken.GetModifierValue(keyword));
            }
            else if (keyword == "self")
            {
                ThisReferenceExpression node = nodes.Peek().LastOrDefault() as ThisReferenceExpression;
                if (node != null)
                {
                    node.Location = start;
                }
            }
            else if (keyword == "me")
            {
                BaseReferenceExpression node = nodes.Peek().LastOrDefault() as BaseReferenceExpression;
                if (node != null)
                {
                    node.Location = start;
                }
            }
            if (t != null)
            {
                currentList.Add(t);
            }
            base.WriteKeyword(role, keyword);
        }
        internal static void SetModifiers(AstNode node, Modifiers newValue)
        {
            Modifiers oldValue     = GetModifiers(node);
            AstNode   insertionPos = node.GetChildrenByRole(AttributeRole).LastOrDefault();

            foreach (Modifiers m in AlModifierToken.AllModifiers)
            {
                if ((m & newValue) != 0)
                {
                    if ((m & oldValue) == 0)
                    {
                        // Modifier was added
                        var newToken = new AlModifierToken(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();
                    }
                }
            }
        }
 void PrintModifiers(Modifiers modifiers, TokenWriter writer)
 {
     foreach (var m in AlModifierToken.AllModifiers)
     {
         if ((modifiers & m) == m)
         {
             writer.WriteKeyword(EntityDeclaration.ModifierRole, AlModifierToken.GetModifierName(m));
             writer.Space();
         }
     }
 }
        protected internal override bool DoMatch(AstNode other, PatternMatching.Match match)
        {
            AlModifierToken o = other as AlModifierToken;

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