Exemplo n.º 1
0
        public override TableOrStructDefinition VisitType_decl([NotNull] FlatBuffersParser.Type_declContext context)
        {
            Dictionary <string, string> metadata = new MetadataVisitor().Visit(context.metadata());

            TableOrStructDefinition definition = new TableOrStructDefinition(
                context.IDENT().GetText(),
                ParseSerailizerFlags(metadata),
                this.parent);

            ErrorContext.Current.WithScope(definition.Name, () =>
            {
                definition.IsTable = context.GetChild(0).GetText() == "table";

                if (!definition.IsTable && definition.RequestedSerializer != null)
                {
                    ErrorContext.Current.RegisterError("Structs may not have precompiled serializers.");
                }

                var fields = context.field_decl();
                if (fields != null)
                {
                    definition.Fields = fields.Select(x => new FieldVisitor().VisitField_decl(x)).ToList();
                }
            });

            return(definition);
        }
Exemplo n.º 2
0
        public override TableOrStructDefinition VisitType_decl([NotNull] FlatBuffersParser.Type_declContext context)
        {
            Dictionary <string, string> metadata = new MetadataVisitor().Visit(context.metadata());

            TableOrStructDefinition definition = new TableOrStructDefinition(
                context.IDENT().GetText(),
                this.parent);

            ErrorContext.Current.WithScope(definition.Name, () =>
            {
                definition.IsTable = context.GetChild(0).GetText() == "table";

                definition.NonVirtual = metadata.ParseNullableBooleanMetadata("nonVirtual");
                definition.ObsoleteDefaultConstructor = metadata.ParseBooleanMetadata("obsoleteDefaultConstructor");

                definition.RequestedSerializer = metadata.ParseMetadata <FlatBufferDeserializationOption?>(
                    "PrecompiledSerializer",
                    ParseSerailizerFlags,
                    FlatBufferDeserializationOption.Default,
                    null);

                if (!definition.IsTable && definition.RequestedSerializer != null)
                {
                    ErrorContext.Current.RegisterError("Structs may not have precompiled serializers.");
                }

                var fields = context.field_decl();
                if (fields != null)
                {
                    definition.Fields = fields.Select(x => new FieldVisitor().VisitField_decl(x)).ToList();
                }
            });

            return(definition);
        }
Exemplo n.º 3
0
        public override BaseSchemaMember VisitType_decl([NotNull] FlatBuffersParser.Type_declContext context)
        {
            var top = this.parseStack.Peek();

            ErrorContext.Current.WithScope(top.FullName, () =>
            {
                TableOrStructDefinition def = new TypeVisitor(top).Visit(context);
                top.AddChild(def);
            });

            return(null);
        }
Exemplo n.º 4
0
        public override TableOrStructDefinition VisitType_decl([NotNull] FlatBuffersParser.Type_declContext context)
        {
            Dictionary <string, string?> metadata = new MetadataVisitor().Visit(context.metadata());

            TableOrStructDefinition definition = new TableOrStructDefinition(
                context.IDENT().GetText(),
                this.parent);

            ErrorContext.Current.WithScope(definition.Name, () =>
            {
                definition.IsTable = context.GetChild(0).GetText() == "table";

                definition.NonVirtual = metadata.ParseNullableBooleanMetadata(MetadataKeys.NonVirtualProperty, MetadataKeys.NonVirtualPropertyLegacy);
                definition.ObsoleteDefaultConstructor = metadata.ParseBooleanMetadata(MetadataKeys.ObsoleteDefaultConstructor, MetadataKeys.ObsoleteDefaultConstructorLegacy);

                definition.RequestedSerializer = metadata.ParseMetadata <FlatBufferDeserializationOption?>(
                    new[] { MetadataKeys.SerializerKind, MetadataKeys.PrecompiledSerializerLegacy },
                    ParseSerailizerFlags,
                    FlatBufferDeserializationOption.Default,
                    null);

                if (!definition.IsTable && definition.RequestedSerializer != null)
                {
                    ErrorContext.Current.RegisterError("Structs may not have serializers.");
                }

                if (metadata.TryGetValue(MetadataKeys.FileIdentifier, out var fileId))
                {
                    if (!definition.IsTable)
                    {
                        ErrorContext.Current.RegisterError("Structs may not have file identifiers.");
                    }

                    definition.FileIdentifier = fileId;
                }

                var fields = context.field_decl();
                if (fields != null)
                {
                    foreach (var f in fields)
                    {
                        new FieldVisitor(definition).VisitField_decl(f);
                    }
                }
            });

            return(definition);
        }
Exemplo n.º 5
0
        public override TableOrStructDefinition VisitType_decl([NotNull] FlatBuffersParser.Type_declContext context)
        {
            Dictionary <string, string> metadata = new MetadataVisitor().Visit(context.metadata());

            TableOrStructDefinition definition = new TableOrStructDefinition(
                context.IDENT().GetText(),
                ParseSerailizerFlags(metadata),
                this.parent);

            ErrorContext.Current.WithScope(definition.Name, () =>
            {
                definition.IsTable = context.GetChild(0).GetText() == "table";

                if (metadata.TryGetValue("virtual", out string virtualValue))
                {
                    if (!bool.TryParse(virtualValue, out bool isVirtual))
                    {
                        ErrorContext.Current?.RegisterError($"The 'virtual' attribute must have a boolean value.");
                    }

                    definition.Virtual = isVirtual;
                }

                if (!definition.IsTable && definition.RequestedSerializer != null)
                {
                    ErrorContext.Current.RegisterError("Structs may not have precompiled serializers.");
                }

                var fields = context.field_decl();
                if (fields != null)
                {
                    definition.Fields = fields.Select(x => new FieldVisitor().VisitField_decl(x)).ToList();
                }
            });

            return(definition);
        }