public override void VisitSharedAttr(SharedAttrDefinition attr) { inSharedContext = true; attr.Value.Accept(this); inSharedContext = false; }
public override void VisitSharedAttr(SharedAttrDefinition attr) { ilGenerator = attr.Reader.GetILGenerator(); ilGenerator.Emit(OpCodes.Ldsfld, attr.FieldBuilder); ilGenerator.Emit(OpCodes.Ret); ilGenerator = attr.Writer.GetILGenerator(); ilGenerator.Emit(OpCodes.Ldarg_1); ilGenerator.Emit(OpCodes.Stsfld, attr.FieldBuilder); ilGenerator.Emit(OpCodes.Ret); ilGenerator = currentClass.StaticConstructorIL; inSharedContext = true; attr.Value.Accept(this); ilGenerator.Emit(OpCodes.Stsfld, attr.FieldBuilder); inSharedContext = false; }
public override void VisitSharedAttr(SharedAttrDefinition attr) { attr.TypeSpecifier.Accept(this); Type attrType = attr.TypeSpecifier.RawType; TypeBuilder typeBuilder = currentClass.TypeBuilder; MethodAttributes readerAttributes = MethodAttributes.Virtual | MethodAttributes.HideBySig; MethodAttributes writerAttributes = MethodAttributes.Virtual | MethodAttributes.HideBySig; switch (attr.Modifier) { case AttrModifier.None: readerAttributes |= MethodAttributes.Public; writerAttributes |= MethodAttributes.Public; break; case AttrModifier.Private: readerAttributes |= MethodAttributes.Private; writerAttributes |= MethodAttributes.Private; break; case AttrModifier.Readonly: readerAttributes |= MethodAttributes.Public; writerAttributes |= MethodAttributes.Private; break; } attr.FieldBuilder = typeBuilder.DefineField("_" + attr.Name, attrType, FieldAttributes.Private | FieldAttributes.Static); try { attr.Reader = DefineReader(typeBuilder, attr.Name, readerAttributes, attr.TypeSpecifier); attr.Writer = DefineWriter(typeBuilder, attr.Name, readerAttributes, attr.TypeSpecifier); } catch (MethodConflictionException e) { report.Error(attr.Location, e.Message); } }
public virtual void VisitSharedAttr(SharedAttrDefinition sharedAttr) { }