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); }
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); }
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); }
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); }