public override void VisitPrecisionDeclaration(PrecisionDeclaration node, AstPrinterContext context)
 {
     context.Write("precision ");
     context.Write(node.PrecisionQualifier.ToString().ToLower());
     context.Write(" ");
     this.Visit(node.Type, context);
     this.Visit(node.ArraySpecifier, context);
     context.Write(";");
 }
 public override void VisitPrecisionDeclaration(PrecisionDeclaration node, CloningAstVisitorContext context)
 {
     context.Result = new PrecisionDeclaration()
     {
         Type               = this.CloneNode(node.Type, context),
         ArraySpecifier     = this.CloneNode(node.ArraySpecifier, context),
         PrecisionQualifier = node.PrecisionQualifier
     };
 }
        public override AstNode VisitDeclaration([NotNull] GLSL_ES300Parser.DeclarationContext context)
        {
            var declaratorList = context.declaratorlist();

            if (declaratorList != null)
            {
                return(this.Visit(declaratorList));
            }

            var functionPrototype = context.function_prototype();

            if (functionPrototype != null)
            {
                return(this.Visit(functionPrototype));
            }

            var precisionQualifier = context.precision_qualifier();

            if (precisionQualifier != null)
            {
                PrecisionDeclaration result = new PrecisionDeclaration();

                result.PrecisionQualifier = (PrecisionQualifier)Enum.Parse(typeof(PrecisionQualifier), precisionQualifier.GetText(), true);

                var noPrecTypeSpec = context.type_specifier_noprec();
                var typeSpecifier  = (TypeSpecifier)VisitType_specifier_nonarray(noPrecTypeSpec.type_specifier_nonarray());
                result.Type = typeSpecifier;

                if (noPrecTypeSpec.LeftBracket() != null)
                {
                    result.ArraySpecifier = new ArraySpecifier();

                    if (noPrecTypeSpec.constant_expression() != null)
                    {
                        result.ArraySpecifier.ArraySizeExpression = (Expression)this.Visit(noPrecTypeSpec.constant_expression());
                    }
                }

                return(result);
            }

            throw new NotSupportedException();
        }
 public virtual void VisitPrecisionDeclaration(PrecisionDeclaration node, TContext context)
 {
     this.Visit(node.Type, context);
     this.Visit(node.ArraySpecifier, context);
 }