private void AutoModifyField(TypeDefinition targetType, MemberActionAttribute fieldActionAttr,
			FieldDefinition yourField)
        {
            Log_modifying_member("field", yourField);
            (fieldActionAttr != null).AssertTrue();
            var asModifies = fieldActionAttr as ModifiesMemberAttribute;
            string targetFieldName = null;
            ModificationScope scope;
            if (asModifies != null) {
                targetFieldName = asModifies.MemberName ?? yourField.Name;
                scope = asModifies.Scope;
            } else if (fieldActionAttr is NewMemberAttribute) {
                targetFieldName = yourField.Name;
                scope = ModificationScope.All;
            } else {
                throw Errors.Unknown_action_attribute(fieldActionAttr);
            }
            var targetField = targetType.GetField(targetFieldName);
            if (targetField == null) {
                throw Errors.Missing_member("field", yourField, targetFieldName);
            }
            if ((scope & ModificationScope.Accessibility) != 0) {
                targetField.SetAccessibility(yourField.GetAccessbility());
            }
            if ((scope & ModificationScope.CustomAttributes) != 0) {
                CopyCustomAttributes(targetField, yourField);
            }
            if ((scope & ModificationScope.Body) != 0) {
                targetField.InitialValue = yourField.InitialValue; //dunno what this is used for
                targetField.Constant = yourField.Constant;
            }
        }
Beispiel #2
0
        private void ModifyField(MemberActionAttribute fieldActionAttr,
			FieldDefinition yourField, FieldDefinition targetField)
        {
            Log_modifying_member("field", yourField);
            (fieldActionAttr != null).AssertTrue();
            ModificationScope scope = fieldActionAttr.Scope;
            if ((scope & ModificationScope.Accessibility) != 0) {
                targetField.SetAccessibility(yourField.GetAccessbility());
            }
            var attrFilter = AttrFilter(scope);
            CopyCustomAttributes(targetField, yourField, attrFilter);
            if ((scope & ModificationScope.Body) != 0) {
                targetField.InitialValue = yourField.InitialValue; //dunno what this is used for
                targetField.Constant = yourField.Constant;
                targetField.HasConstant = yourField.HasConstant;
            }
            var toggleAttributesAttr = yourField.GetCustomAttribute<ToggleFieldAttributes>();
            var toggleValue = toggleAttributesAttr?.Attributes ?? 0;
            targetField.Attributes ^= (FieldAttributes) toggleValue;
        }