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();
        }
Esempio n. 2
0
 /// <summary>
 /// Visit a parse tree produced by <see cref="GLSL_ES300Parser.declaration"/>.
 /// <para>
 /// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/>
 /// on <paramref name="context"/>.
 /// </para>
 /// </summary>
 /// <param name="context">The parse tree.</param>
 /// <return>The visitor result.</return>
 public virtual Result VisitDeclaration([NotNull] GLSL_ES300Parser.DeclarationContext context)
 {
     return(VisitChildren(context));
 }