protected void ImplementConstructor(MethodInstance template_m_setPrimitivePropertyPrivilege, MethodInstance template_m_setRelationPropertyPrivilege) { IBytecodeBehaviorState state = State; ConstructorInfo constructor = state.CurrentType.GetConstructor(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, new Type[] { typeof(bool), typeof(bool), typeof(bool), typeof(bool), typeof(bool), typeof(IPropertyPrivilege[]), typeof(IPropertyPrivilege[]) }, null); ConstructorInstance c_method = new ConstructorInstance(constructor); IMethodVisitor mg = VisitMethod(c_method); mg.LoadThis(); mg.LoadArgs(); mg.InvokeConstructor(c_method); Type propertyPrivilegeType = typeof(IPropertyPrivilege); for (int primitiveIndex = 0, size = metaData.PrimitiveMembers.Length; primitiveIndex < size; primitiveIndex++) { mg.LoadThis(); mg.Push(primitiveIndex); mg.LoadArg(5); mg.Push(primitiveIndex); mg.ArrayLoad(propertyPrivilegeType); mg.InvokeVirtual(template_m_setPrimitivePropertyPrivilege); } for (int relationIndex = 0, size = metaData.RelationMembers.Length; relationIndex < size; relationIndex++) { mg.LoadThis(); mg.Push(relationIndex); mg.LoadArg(6); mg.Push(relationIndex); mg.ArrayLoad(propertyPrivilegeType); mg.InvokeVirtual(template_m_setRelationPropertyPrivilege); } mg.ReturnValue(); mg.EndMethod(); }