/// <summary> /// Emits code for inverting the relation. /// </summary> private void emitInversion(ILGenerator gen) { gen.EmitConstant(false); gen.EmitCompareEqual(); }
/// <summary> /// Emits code for loading a field (possibly constant). /// </summary> private void emitField(ILGenerator gen) { if (_Field.IsLiteral) { var fieldType = _Field.FieldType; var dataType = fieldType.IsEnum ? Enum.GetUnderlyingType(fieldType) : fieldType; var value = _Field.FieldInfo.GetValue(null); if (dataType == typeof(int)) gen.EmitConstant((int)value); else if (dataType == typeof(long)) gen.EmitConstant((long)value); else if (dataType == typeof(double)) gen.EmitConstant((double)value); else if (dataType == typeof(float)) gen.EmitConstant((float)value); else if (dataType == typeof(uint)) gen.EmitConstant(unchecked((int)(uint)value)); else if (dataType == typeof(ulong)) gen.EmitConstant(unchecked((long)(ulong)value)); else if (dataType == typeof(byte)) gen.EmitConstant((byte)value); else if (dataType == typeof(sbyte)) gen.EmitConstant((sbyte)value); else if (dataType == typeof(short)) gen.EmitConstant((short)value); else if (dataType == typeof(ushort)) gen.EmitConstant((ushort)value); else if (dataType == typeof(string)) gen.EmitConstant((string)value); else throw new NotImplementedException("Unknown literal field type!"); } else { gen.EmitLoadField(_Field.FieldInfo, PointerRequired || RefArgumentRequired); } }