Ejemplo n.º 1
0
        private PropertyNode Property(string name, TypeNode type)
        {
            // PROPERTY = BLOCK-START (get PROPERTY-BODY) (set PROPERTY-BODY) BLOCK-END |
            //            BLOCK-START (set PROPERTY-BODY) (get PROPERTY-BODY) BLOCK-END

            Eat(Tokens.BlockStart);
            PropertyBodyNode getter = null, setter = null;

            while (_currentToken.Type != Tokens.BlockEnd)
            {
                if (_currentToken.Type == Tokens.PropertyGetter)
                {
                    Eat(Tokens.PropertyGetter);
                    getter = PropertyBody();
                }
                if (_currentToken.Type == Tokens.PropertySetter)
                {
                    Eat(Tokens.PropertySetter);
                    setter = PropertyBody();
                }
            }

            return(new PropertyNode(name, type, getter, setter));

            PropertyBodyNode PropertyBody()
            {
                // PROPERTY-BODY = LAMBDA | BLOCK

                if (_currentToken.Type == Tokens.Lambda)
                {
                    return(new PropertyBodyNode(Lambda()));
                }
                if (_currentToken.Type == Tokens.BlockStart)
                {
                    return(new PropertyBodyNode(Block()));
                }
                return(null);
            }
        }
Ejemplo n.º 2
0
 private void Visit(PropertyBodyNode node)
 {
     Visit(node.Body);
 }