public override IUnresolvedEntity VisitEnumMemberDeclaration(EnumMemberDeclaration enumMemberDeclaration, object data) { DefaultUnresolvedField field = new DefaultUnresolvedField(currentTypeDefinition, enumMemberDeclaration.Name); field.Region = field.BodyRegion = MakeRegion(enumMemberDeclaration); ConvertAttributes(field.Attributes, enumMemberDeclaration.Attributes); if (currentTypeDefinition.TypeParameters.Count == 0) { field.ReturnType = currentTypeDefinition; } else { ITypeReference[] typeArgs = new ITypeReference[currentTypeDefinition.TypeParameters.Count]; for (int i = 0; i < typeArgs.Length; i++) { typeArgs[i] = new TypeParameterReference(EntityType.TypeDefinition, i); } field.ReturnType = new ParameterizedTypeReference(currentTypeDefinition, typeArgs); } field.Accessibility = Accessibility.Public; field.IsStatic = true; if (!enumMemberDeclaration.Initializer.IsNull) { field.ConstantValue = ConvertConstantValue(field.ReturnType, enumMemberDeclaration.Initializer); } else { DefaultUnresolvedField prevField = currentTypeDefinition.Members.LastOrDefault() as DefaultUnresolvedField; if (prevField == null || prevField.ConstantValue == null) { field.ConstantValue = ConvertConstantValue(field.ReturnType, new PrimitiveExpression(0)); } else { field.ConstantValue = new IncrementConstantValue(prevField.ConstantValue); } } currentTypeDefinition.Members.Add(field); if (interningProvider != null) { field.ApplyInterningProvider(interningProvider); } return field; }
public override IUnresolvedEntity VisitFieldDeclaration(FieldDeclaration fieldDeclaration, object data) { bool isSingleField = fieldDeclaration.Variables.Count == 1; Modifiers modifiers = fieldDeclaration.Modifiers; DefaultUnresolvedField field = null; foreach (VariableInitializer vi in fieldDeclaration.Variables) { field = new DefaultUnresolvedField(currentTypeDefinition, vi.Name); field.Region = isSingleField ? MakeRegion(fieldDeclaration) : MakeRegion(vi); field.BodyRegion = MakeRegion(vi); ConvertAttributes(field.Attributes, fieldDeclaration.Attributes); ApplyModifiers(field, modifiers); field.IsVolatile = (modifiers & Modifiers.Volatile) != 0; field.IsReadOnly = (modifiers & Modifiers.Readonly) != 0; field.ReturnType = fieldDeclaration.ReturnType.ToTypeReference(); if ((modifiers & Modifiers.Const) != 0) { field.ConstantValue = ConvertConstantValue(field.ReturnType, vi.Initializer); } currentTypeDefinition.Members.Add(field); if (interningProvider != null) { field.ApplyInterningProvider(interningProvider); } } return isSingleField ? field : null; }