Skip to content

Instantly share code, notes, and snippets.

@noblethrasher
Created December 1, 2014 01:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save noblethrasher/af1b382fa6e0423bf8bd to your computer and use it in GitHub Desktop.
Save noblethrasher/af1b382fa6e0423bf8bd to your computer and use it in GitHub Desktop.
F# and IL
type Foo =
| Bar of int * string
| Baz of bool * string
| Biz of string * string
let f foo =
match foo with
| Bar (x, s) -> s
| Baz (b, s) -> s
| Biz (s, s') -> s
//IL
Dump:
IL_0000: nop
IL_0001: ldarg.0
IL_0002: box 03 00 00 1B
IL_0007: call LINQPad.FSharpExtensions.Extensions.Dump
IL_000C: ret
CompareTo$cont@1:
IL_0000: nop
IL_0001: ldarg.0
IL_0002: stloc.s 0C
IL_0004: ldloc.s 0C
IL_0006: isinst Query_izsety+Foo.Bar
IL_000B: brtrue.s IL_0022
IL_000D: ldloc.s 0C
IL_000F: isinst Query_izsety+Foo.Baz
IL_0014: brtrue.s IL_007C
IL_0016: ldloc.s 0C
IL_0018: isinst Query_izsety+Foo.Biz
IL_001D: brtrue IL_00DC
IL_0022: ldarg.0
IL_0023: castclass Query_izsety+Foo.Bar
IL_0028: stloc.0
IL_0029: ldarg.1
IL_002A: castclass Query_izsety+Foo.Bar
IL_002F: stloc.1
IL_0030: call Microsoft.FSharp.Core.LanguagePrimitives.get_GenericComparer
IL_0035: stloc.3
IL_0036: ldloc.0
IL_0037: ldfld Query_izsety+Foo+Bar.item1
IL_003C: stloc.s 04
IL_003E: ldloc.1
IL_003F: ldfld Query_izsety+Foo+Bar.item1
IL_0044: stloc.s 05
IL_0046: ldloc.s 04
IL_0048: ldloc.s 05
IL_004A: bge.s IL_0050
IL_004C: ldc.i4.m1
IL_004D: nop
IL_004E: br.s IL_0057
IL_0050: ldloc.s 04
IL_0052: ldloc.s 05
IL_0054: cgt
IL_0056: nop
IL_0057: stloc.2
IL_0058: ldloc.2
IL_0059: ldc.i4.0
IL_005A: bge.s IL_005E
IL_005C: ldloc.2
IL_005D: ret
IL_005E: ldloc.2
IL_005F: ldc.i4.0
IL_0060: ble.s IL_0064
IL_0062: ldloc.2
IL_0063: ret
IL_0064: call Microsoft.FSharp.Core.LanguagePrimitives.get_GenericComparer
IL_0069: stloc.3
IL_006A: ldloc.0
IL_006B: ldfld Query_izsety+Foo+Bar.item2
IL_0070: ldloc.1
IL_0071: ldfld Query_izsety+Foo+Bar.item2
IL_0076: call System.String.CompareOrdinal
IL_007B: ret
IL_007C: ldarg.0
IL_007D: castclass Query_izsety+Foo.Baz
IL_0082: stloc.s 06
IL_0084: ldarg.1
IL_0085: castclass Query_izsety+Foo.Baz
IL_008A: stloc.s 07
IL_008C: call Microsoft.FSharp.Core.LanguagePrimitives.get_GenericComparer
IL_0091: stloc.3
IL_0092: ldloc.s 06
IL_0094: ldfld Query_izsety+Foo+Baz.item1
IL_0099: stloc.s 08
IL_009B: ldloc.s 07
IL_009D: ldfld Query_izsety+Foo+Baz.item1
IL_00A2: stloc.s 09
IL_00A4: ldloc.s 08
IL_00A6: ldloc.s 09
IL_00A8: bge.s IL_00AE
IL_00AA: ldc.i4.m1
IL_00AB: nop
IL_00AC: br.s IL_00B5
IL_00AE: ldloc.s 08
IL_00B0: ldloc.s 09
IL_00B2: cgt
IL_00B4: nop
IL_00B5: stloc.2
IL_00B6: ldloc.2
IL_00B7: ldc.i4.0
IL_00B8: bge.s IL_00BC
IL_00BA: ldloc.2
IL_00BB: ret
IL_00BC: ldloc.2
IL_00BD: ldc.i4.0
IL_00BE: ble.s IL_00C2
IL_00C0: ldloc.2
IL_00C1: ret
IL_00C2: call Microsoft.FSharp.Core.LanguagePrimitives.get_GenericComparer
IL_00C7: stloc.3
IL_00C8: ldloc.s 06
IL_00CA: ldfld Query_izsety+Foo+Baz.item2
IL_00CF: ldloc.s 07
IL_00D1: ldfld Query_izsety+Foo+Baz.item2
IL_00D6: call System.String.CompareOrdinal
IL_00DB: ret
IL_00DC: ldarg.0
IL_00DD: castclass Query_izsety+Foo.Biz
IL_00E2: stloc.s 0A
IL_00E4: ldarg.1
IL_00E5: castclass Query_izsety+Foo.Biz
IL_00EA: stloc.s 0B
IL_00EC: call Microsoft.FSharp.Core.LanguagePrimitives.get_GenericComparer
IL_00F1: stloc.3
IL_00F2: ldloc.s 0A
IL_00F4: ldfld Query_izsety+Foo+Biz.item1
IL_00F9: ldloc.s 0B
IL_00FB: ldfld Query_izsety+Foo+Biz.item1
IL_0100: call System.String.CompareOrdinal
IL_0105: stloc.2
IL_0106: ldloc.2
IL_0107: ldc.i4.0
IL_0108: bge.s IL_010C
IL_010A: ldloc.2
IL_010B: ret
IL_010C: ldloc.2
IL_010D: ldc.i4.0
IL_010E: ble.s IL_0112
IL_0110: ldloc.2
IL_0111: ret
IL_0112: call Microsoft.FSharp.Core.LanguagePrimitives.get_GenericComparer
IL_0117: stloc.3
IL_0118: ldloc.s 0A
IL_011A: ldfld Query_izsety+Foo+Biz.item2
IL_011F: ldloc.s 0B
IL_0121: ldfld Query_izsety+Foo+Biz.item2
IL_0126: call System.String.CompareOrdinal
IL_012B: ret
CompareTo$cont@1-1:
IL_0000: nop
IL_0001: ldarg.0
IL_0002: stloc.s 0B
IL_0004: ldloc.s 0B
IL_0006: isinst Query_izsety+Foo.Bar
IL_000B: brtrue.s IL_0022
IL_000D: ldloc.s 0B
IL_000F: isinst Query_izsety+Foo.Baz
IL_0014: brtrue.s IL_006D
IL_0016: ldloc.s 0B
IL_0018: isinst Query_izsety+Foo.Biz
IL_001D: brtrue IL_00C1
IL_0022: ldarg.0
IL_0023: castclass Query_izsety+Foo.Bar
IL_0028: stloc.0
IL_0029: ldarg.1
IL_002A: castclass Query_izsety+Foo.Bar
IL_002F: stloc.1
IL_0030: ldloc.0
IL_0031: ldfld Query_izsety+Foo+Bar.item1
IL_0036: stloc.3
IL_0037: ldloc.1
IL_0038: ldfld Query_izsety+Foo+Bar.item1
IL_003D: stloc.s 04
IL_003F: ldloc.3
IL_0040: ldloc.s 04
IL_0042: bge.s IL_0048
IL_0044: ldc.i4.m1
IL_0045: nop
IL_0046: br.s IL_004E
IL_0048: ldloc.3
IL_0049: ldloc.s 04
IL_004B: cgt
IL_004D: nop
IL_004E: stloc.2
IL_004F: ldloc.2
IL_0050: ldc.i4.0
IL_0051: bge.s IL_0055
IL_0053: ldloc.2
IL_0054: ret
IL_0055: ldloc.2
IL_0056: ldc.i4.0
IL_0057: ble.s IL_005B
IL_0059: ldloc.2
IL_005A: ret
IL_005B: ldloc.0
IL_005C: ldfld Query_izsety+Foo+Bar.item2
IL_0061: ldloc.1
IL_0062: ldfld Query_izsety+Foo+Bar.item2
IL_0067: call System.String.CompareOrdinal
IL_006C: ret
IL_006D: ldarg.0
IL_006E: castclass Query_izsety+Foo.Baz
IL_0073: stloc.s 05
IL_0075: ldarg.1
IL_0076: castclass Query_izsety+Foo.Baz
IL_007B: stloc.s 06
IL_007D: ldloc.s 05
IL_007F: ldfld Query_izsety+Foo+Baz.item1
IL_0084: stloc.s 07
IL_0086: ldloc.s 06
IL_0088: ldfld Query_izsety+Foo+Baz.item1
IL_008D: stloc.s 08
IL_008F: ldloc.s 07
IL_0091: ldloc.s 08
IL_0093: bge.s IL_0099
IL_0095: ldc.i4.m1
IL_0096: nop
IL_0097: br.s IL_00A0
IL_0099: ldloc.s 07
IL_009B: ldloc.s 08
IL_009D: cgt
IL_009F: nop
IL_00A0: stloc.2
IL_00A1: ldloc.2
IL_00A2: ldc.i4.0
IL_00A3: bge.s IL_00A7
IL_00A5: ldloc.2
IL_00A6: ret
IL_00A7: ldloc.2
IL_00A8: ldc.i4.0
IL_00A9: ble.s IL_00AD
IL_00AB: ldloc.2
IL_00AC: ret
IL_00AD: ldloc.s 05
IL_00AF: ldfld Query_izsety+Foo+Baz.item2
IL_00B4: ldloc.s 06
IL_00B6: ldfld Query_izsety+Foo+Baz.item2
IL_00BB: call System.String.CompareOrdinal
IL_00C0: ret
IL_00C1: ldarg.0
IL_00C2: castclass Query_izsety+Foo.Biz
IL_00C7: stloc.s 09
IL_00C9: ldarg.1
IL_00CA: castclass Query_izsety+Foo.Biz
IL_00CF: stloc.s 0A
IL_00D1: ldloc.s 09
IL_00D3: ldfld Query_izsety+Foo+Biz.item1
IL_00D8: ldloc.s 0A
IL_00DA: ldfld Query_izsety+Foo+Biz.item1
IL_00DF: call System.String.CompareOrdinal
IL_00E4: stloc.2
IL_00E5: ldloc.2
IL_00E6: ldc.i4.0
IL_00E7: bge.s IL_00EB
IL_00E9: ldloc.2
IL_00EA: ret
IL_00EB: ldloc.2
IL_00EC: ldc.i4.0
IL_00ED: ble.s IL_00F1
IL_00EF: ldloc.2
IL_00F0: ret
IL_00F1: ldloc.s 09
IL_00F3: ldfld Query_izsety+Foo+Biz.item2
IL_00F8: ldloc.s 0A
IL_00FA: ldfld Query_izsety+Foo+Biz.item2
IL_00FF: call System.String.CompareOrdinal
IL_0104: ret
GetHashCode$cont@1:
IL_0000: nop
IL_0001: ldc.i4.0
IL_0002: stloc.0
IL_0003: ldarg.0
IL_0004: stloc.s 05
IL_0006: ldloc.s 05
IL_0008: isinst Query_izsety+Foo.Bar
IL_000D: brtrue.s IL_0024
IL_000F: ldloc.s 05
IL_0011: isinst Query_izsety+Foo.Baz
IL_0016: brtrue.s IL_0068
IL_0018: ldloc.s 05
IL_001A: isinst Query_izsety+Foo.Biz
IL_001F: brtrue IL_00AC
IL_0024: ldarg.0
IL_0025: castclass Query_izsety+Foo.Bar
IL_002A: stloc.1
IL_002B: ldc.i4.0
IL_002C: stloc.0
IL_002D: ldc.i4 B9 79 37 9E
IL_0032: ldloc.1
IL_0033: ldfld Query_izsety+Foo+Bar.item2
IL_0038: stloc.2
IL_0039: ldloc.2
IL_003A: brfalse.s IL_0045
IL_003C: ldloc.2
IL_003D: call System.String.GetHashCode
IL_0042: nop
IL_0043: br.s IL_0047
IL_0045: ldc.i4.0
IL_0046: nop
IL_0047: ldloc.0
IL_0048: ldc.i4.6
IL_0049: shl
IL_004A: ldloc.0
IL_004B: ldc.i4.2
IL_004C: shr
IL_004D: add
IL_004E: add
IL_004F: add
IL_0050: stloc.0
IL_0051: ldc.i4 B9 79 37 9E
IL_0056: ldloc.1
IL_0057: ldfld Query_izsety+Foo+Bar.item1
IL_005C: ldloc.0
IL_005D: ldc.i4.6
IL_005E: shl
IL_005F: ldloc.0
IL_0060: ldc.i4.2
IL_0061: shr
IL_0062: add
IL_0063: add
IL_0064: add
IL_0065: stloc.0
IL_0066: ldloc.0
IL_0067: ret
IL_0068: ldarg.0
IL_0069: castclass Query_izsety+Foo.Baz
IL_006E: stloc.3
IL_006F: ldc.i4.1
IL_0070: stloc.0
IL_0071: ldc.i4 B9 79 37 9E
IL_0076: ldloc.3
IL_0077: ldfld Query_izsety+Foo+Baz.item2
IL_007C: stloc.2
IL_007D: ldloc.2
IL_007E: brfalse.s IL_0089
IL_0080: ldloc.2
IL_0081: call System.String.GetHashCode
IL_0086: nop
IL_0087: br.s IL_008B
IL_0089: ldc.i4.0
IL_008A: nop
IL_008B: ldloc.0
IL_008C: ldc.i4.6
IL_008D: shl
IL_008E: ldloc.0
IL_008F: ldc.i4.2
IL_0090: shr
IL_0091: add
IL_0092: add
IL_0093: add
IL_0094: stloc.0
IL_0095: ldc.i4 B9 79 37 9E
IL_009A: ldloc.3
IL_009B: ldfld Query_izsety+Foo+Baz.item1
IL_00A0: ldloc.0
IL_00A1: ldc.i4.6
IL_00A2: shl
IL_00A3: ldloc.0
IL_00A4: ldc.i4.2
IL_00A5: shr
IL_00A6: add
IL_00A7: add
IL_00A8: add
IL_00A9: stloc.0
IL_00AA: ldloc.0
IL_00AB: ret
IL_00AC: ldarg.0
IL_00AD: castclass Query_izsety+Foo.Biz
IL_00B2: stloc.s 04
IL_00B4: ldc.i4.2
IL_00B5: stloc.0
IL_00B6: ldc.i4 B9 79 37 9E
IL_00BB: ldloc.s 04
IL_00BD: ldfld Query_izsety+Foo+Biz.item2
IL_00C2: stloc.2
IL_00C3: ldloc.2
IL_00C4: brfalse.s IL_00CF
IL_00C6: ldloc.2
IL_00C7: call System.String.GetHashCode
IL_00CC: nop
IL_00CD: br.s IL_00D1
IL_00CF: ldc.i4.0
IL_00D0: nop
IL_00D1: ldloc.0
IL_00D2: ldc.i4.6
IL_00D3: shl
IL_00D4: ldloc.0
IL_00D5: ldc.i4.2
IL_00D6: shr
IL_00D7: add
IL_00D8: add
IL_00D9: add
IL_00DA: stloc.0
IL_00DB: ldc.i4 B9 79 37 9E
IL_00E0: ldloc.s 04
IL_00E2: ldfld Query_izsety+Foo+Biz.item1
IL_00E7: stloc.2
IL_00E8: ldloc.2
IL_00E9: brfalse.s IL_00F4
IL_00EB: ldloc.2
IL_00EC: call System.String.GetHashCode
IL_00F1: nop
IL_00F2: br.s IL_00F6
IL_00F4: ldc.i4.0
IL_00F5: nop
IL_00F6: ldloc.0
IL_00F7: ldc.i4.6
IL_00F8: shl
IL_00F9: ldloc.0
IL_00FA: ldc.i4.2
IL_00FB: shr
IL_00FC: add
IL_00FD: add
IL_00FE: add
IL_00FF: stloc.0
IL_0100: ldloc.0
IL_0101: ret
Equals$cont@1:
IL_0000: nop
IL_0001: ldarg.1
IL_0002: isinst Query_izsety.Foo
IL_0007: stloc.0
IL_0008: ldloc.0
IL_0009: brfalse IL_0113
IL_000E: ldarg.0
IL_000F: stloc.s 09
IL_0011: ldloc.s 09
IL_0013: isinst Query_izsety+Foo.Biz
IL_0018: brfalse.s IL_001D
IL_001A: ldc.i4.2
IL_001B: br.s IL_002A
IL_001D: ldloc.s 09
IL_001F: isinst Query_izsety+Foo.Baz
IL_0024: brfalse.s IL_0029
IL_0026: ldc.i4.1
IL_0027: br.s IL_002A
IL_0029: ldc.i4.0
IL_002A: stloc.1
IL_002B: ldloc.0
IL_002C: stloc.s 0A
IL_002E: ldloc.s 0A
IL_0030: isinst Query_izsety+Foo.Biz
IL_0035: brfalse.s IL_003A
IL_0037: ldc.i4.2
IL_0038: br.s IL_0047
IL_003A: ldloc.s 0A
IL_003C: isinst Query_izsety+Foo.Baz
IL_0041: brfalse.s IL_0046
IL_0043: ldc.i4.1
IL_0044: br.s IL_0047
IL_0046: ldc.i4.0
IL_0047: stloc.2
IL_0048: ldloc.1
IL_0049: ldloc.2
IL_004A: bne.un IL_0111
IL_004F: ldarg.0
IL_0050: stloc.s 0B
IL_0052: ldloc.s 0B
IL_0054: isinst Query_izsety+Foo.Bar
IL_0059: brtrue.s IL_006D
IL_005B: ldloc.s 0B
IL_005D: isinst Query_izsety+Foo.Baz
IL_0062: brtrue.s IL_00A0
IL_0064: ldloc.s 0B
IL_0066: isinst Query_izsety+Foo.Biz
IL_006B: brtrue.s IL_00D6
IL_006D: ldarg.0
IL_006E: castclass Query_izsety+Foo.Bar
IL_0073: stloc.3
IL_0074: ldloc.0
IL_0075: castclass Query_izsety+Foo.Bar
IL_007A: stloc.s 04
IL_007C: ldloc.3
IL_007D: ldfld Query_izsety+Foo+Bar.item1
IL_0082: ldloc.s 04
IL_0084: ldfld Query_izsety+Foo+Bar.item1
IL_0089: bne.un.s IL_009E
IL_008B: ldloc.3
IL_008C: ldfld Query_izsety+Foo+Bar.item2
IL_0091: ldloc.s 04
IL_0093: ldfld Query_izsety+Foo+Bar.item2
IL_0098: call System.String.Equals
IL_009D: ret
IL_009E: ldc.i4.0
IL_009F: ret
IL_00A0: ldarg.0
IL_00A1: castclass Query_izsety+Foo.Baz
IL_00A6: stloc.s 05
IL_00A8: ldloc.0
IL_00A9: castclass Query_izsety+Foo.Baz
IL_00AE: stloc.s 06
IL_00B0: ldloc.s 05
IL_00B2: ldfld Query_izsety+Foo+Baz.item1
IL_00B7: ldloc.s 06
IL_00B9: ldfld Query_izsety+Foo+Baz.item1
IL_00BE: bne.un.s IL_00D4
IL_00C0: ldloc.s 05
IL_00C2: ldfld Query_izsety+Foo+Baz.item2
IL_00C7: ldloc.s 06
IL_00C9: ldfld Query_izsety+Foo+Baz.item2
IL_00CE: call System.String.Equals
IL_00D3: ret
IL_00D4: ldc.i4.0
IL_00D5: ret
IL_00D6: ldarg.0
IL_00D7: castclass Query_izsety+Foo.Biz
IL_00DC: stloc.s 07
IL_00DE: ldloc.0
IL_00DF: castclass Query_izsety+Foo.Biz
IL_00E4: stloc.s 08
IL_00E6: ldloc.s 07
IL_00E8: ldfld Query_izsety+Foo+Biz.item1
IL_00ED: ldloc.s 08
IL_00EF: ldfld Query_izsety+Foo+Biz.item1
IL_00F4: call System.String.Equals
IL_00F9: brfalse.s IL_010F
IL_00FB: ldloc.s 07
IL_00FD: ldfld Query_izsety+Foo+Biz.item2
IL_0102: ldloc.s 08
IL_0104: ldfld Query_izsety+Foo+Biz.item2
IL_0109: call System.String.Equals
IL_010E: ret
IL_010F: ldc.i4.0
IL_0110: ret
IL_0111: ldc.i4.0
IL_0112: ret
IL_0113: ldc.i4.0
IL_0114: ret
f:
IL_0000: ldarg.0
IL_0001: stloc.0
IL_0002: ldloc.0
IL_0003: isinst Query_izsety+Foo.Baz
IL_0008: brtrue.s IL_001F
IL_000A: ldloc.0
IL_000B: isinst Query_izsety+Foo.Biz
IL_0010: brtrue.s IL_002B
IL_0012: nop
IL_0013: ldarg.0
IL_0014: castclass Query_izsety+Foo.Bar
IL_0019: ldfld Query_izsety+Foo+Bar.item2
IL_001E: ret
IL_001F: ldarg.0
IL_0020: castclass Query_izsety+Foo.Baz
IL_0025: ldfld Query_izsety+Foo+Baz.item2
IL_002A: ret
IL_002B: ldarg.0
IL_002C: castclass Query_izsety+Foo.Biz
IL_0031: ldfld Query_izsety+Foo+Biz.item1
IL_0036: ret
Foo.NewBar:
IL_0000: ldarg.0
IL_0001: ldarg.1
IL_0002: newobj Query_izsety+Foo+Bar..ctor
IL_0007: ret
Foo.get_IsBar:
IL_0000: ldarg.0
IL_0001: isinst Query_izsety+Foo.Bar
IL_0006: ldnull
IL_0007: cgt.un
IL_0009: ret
Foo.NewBaz:
IL_0000: ldarg.0
IL_0001: ldarg.1
IL_0002: newobj Query_izsety+Foo+Baz..ctor
IL_0007: ret
Foo.get_IsBaz:
IL_0000: ldarg.0
IL_0001: isinst Query_izsety+Foo.Baz
IL_0006: ldnull
IL_0007: cgt.un
IL_0009: ret
Foo.NewBiz:
IL_0000: ldarg.0
IL_0001: ldarg.1
IL_0002: newobj Query_izsety+Foo+Biz..ctor
IL_0007: ret
Foo.get_IsBiz:
IL_0000: ldarg.0
IL_0001: isinst Query_izsety+Foo.Biz
IL_0006: ldnull
IL_0007: cgt.un
IL_0009: ret
Foo.get_Tag:
IL_0000: ldarg.0
IL_0001: stloc.0
IL_0002: ldloc.0
IL_0003: isinst Query_izsety+Foo.Biz
IL_0008: brfalse.s IL_000D
IL_000A: ldc.i4.2
IL_000B: br.s IL_0019
IL_000D: ldloc.0
IL_000E: isinst Query_izsety+Foo.Baz
IL_0013: brfalse.s IL_0018
IL_0015: ldc.i4.1
IL_0016: br.s IL_0019
IL_0018: ldc.i4.0
IL_0019: ret
Foo.__DebugDisplay:
IL_0000: ldstr "%+0.8A"
IL_0005: newobj Microsoft.FSharp.Core.PrintfFormat<Microsoft.FSharp.Core.FSharpFunc<Query_izsety+Foo,System.String>,Microsoft.FSharp.Core.Unit,System.String,System.String,System.String>..ctor
IL_000A: call Microsoft.FSharp.Core.ExtraTopLevelOperators.PrintFormatToString
IL_000F: ldarg.0
IL_0010: callvirt Microsoft.FSharp.Core.FSharpFunc<Query_izsety+Foo,System.String>.Invoke
IL_0015: ret
Foo.CompareTo:
IL_0000: nop
IL_0001: ldarg.0
IL_0002: ldnull
IL_0003: cgt.un
IL_0005: brfalse.s IL_0054
IL_0007: ldarg.1
IL_0008: ldnull
IL_0009: cgt.un
IL_000B: brfalse.s IL_0052
IL_000D: ldarg.0
IL_000E: stloc.2
IL_000F: ldloc.2
IL_0010: isinst Query_izsety+Foo.Biz
IL_0015: brfalse.s IL_001A
IL_0017: ldc.i4.2
IL_0018: br.s IL_0026
IL_001A: ldloc.2
IL_001B: isinst Query_izsety+Foo.Baz
IL_0020: brfalse.s IL_0025
IL_0022: ldc.i4.1
IL_0023: br.s IL_0026
IL_0025: ldc.i4.0
IL_0026: stloc.0
IL_0027: ldarg.1
IL_0028: stloc.3
IL_0029: ldloc.3
IL_002A: isinst Query_izsety+Foo.Biz
IL_002F: brfalse.s IL_0034
IL_0031: ldc.i4.2
IL_0032: br.s IL_0040
IL_0034: ldloc.3
IL_0035: isinst Query_izsety+Foo.Baz
IL_003A: brfalse.s IL_003F
IL_003C: ldc.i4.1
IL_003D: br.s IL_0040
IL_003F: ldc.i4.0
IL_0040: stloc.1
IL_0041: ldloc.0
IL_0042: ldloc.1
IL_0043: bne.un.s IL_004E
IL_0045: ldarg.0
IL_0046: ldarg.1
IL_0047: ldnull
IL_0048: call Query_izsety.CompareTo$cont@1
IL_004D: ret
IL_004E: ldloc.0
IL_004F: ldloc.1
IL_0050: sub
IL_0051: ret
IL_0052: ldc.i4.1
IL_0053: ret
IL_0054: ldarg.1
IL_0055: ldnull
IL_0056: cgt.un
IL_0058: brfalse.s IL_005C
IL_005A: ldc.i4.m1
IL_005B: ret
IL_005C: ldc.i4.0
IL_005D: ret
Foo.CompareTo:
IL_0000: nop
IL_0001: ldarg.0
IL_0002: ldarg.1
IL_0003: unbox.any Query_izsety.Foo
IL_0008: callvirt Query_izsety+Foo.CompareTo
IL_000D: ret
Foo.CompareTo:
IL_0000: nop
IL_0001: ldarg.1
IL_0002: unbox.any Query_izsety.Foo
IL_0007: stloc.0
IL_0008: ldarg.0
IL_0009: ldnull
IL_000A: cgt.un
IL_000C: brfalse.s IL_0063
IL_000E: ldarg.1
IL_000F: unbox.any Query_izsety.Foo
IL_0014: ldnull
IL_0015: cgt.un
IL_0017: brfalse.s IL_0061
IL_0019: ldarg.0
IL_001A: stloc.3
IL_001B: ldloc.3
IL_001C: isinst Query_izsety+Foo.Biz
IL_0021: brfalse.s IL_0026
IL_0023: ldc.i4.2
IL_0024: br.s IL_0032
IL_0026: ldloc.3
IL_0027: isinst Query_izsety+Foo.Baz
IL_002C: brfalse.s IL_0031
IL_002E: ldc.i4.1
IL_002F: br.s IL_0032
IL_0031: ldc.i4.0
IL_0032: stloc.1
IL_0033: ldloc.0
IL_0034: stloc.s 04
IL_0036: ldloc.s 04
IL_0038: isinst Query_izsety+Foo.Biz
IL_003D: brfalse.s IL_0042
IL_003F: ldc.i4.2
IL_0040: br.s IL_004F
IL_0042: ldloc.s 04
IL_0044: isinst Query_izsety+Foo.Baz
IL_0049: brfalse.s IL_004E
IL_004B: ldc.i4.1
IL_004C: br.s IL_004F
IL_004E: ldc.i4.0
IL_004F: stloc.2
IL_0050: ldloc.1
IL_0051: ldloc.2
IL_0052: bne.un.s IL_005D
IL_0054: ldarg.0
IL_0055: ldloc.0
IL_0056: ldnull
IL_0057: call Query_izsety.CompareTo$cont@1-1
IL_005C: ret
IL_005D: ldloc.1
IL_005E: ldloc.2
IL_005F: sub
IL_0060: ret
IL_0061: ldc.i4.1
IL_0062: ret
IL_0063: ldarg.1
IL_0064: unbox.any Query_izsety.Foo
IL_0069: ldnull
IL_006A: cgt.un
IL_006C: brfalse.s IL_0070
IL_006E: ldc.i4.m1
IL_006F: ret
IL_0070: ldc.i4.0
IL_0071: ret
Foo.GetHashCode:
IL_0000: nop
IL_0001: ldarg.0
IL_0002: ldnull
IL_0003: cgt.un
IL_0005: brfalse.s IL_000F
IL_0007: ldarg.0
IL_0008: ldnull
IL_0009: call Query_izsety.GetHashCode$cont@1
IL_000E: ret
IL_000F: ldc.i4.0
IL_0010: ret
Foo.GetHashCode:
IL_0000: nop
IL_0001: ldarg.0
IL_0002: call Microsoft.FSharp.Core.LanguagePrimitives.get_GenericEqualityComparer
IL_0007: callvirt Query_izsety+Foo.GetHashCode
IL_000C: ret
Foo.Equals:
IL_0000: nop
IL_0001: ldarg.0
IL_0002: ldnull
IL_0003: cgt.un
IL_0005: brfalse.s IL_0010
IL_0007: ldarg.0
IL_0008: ldarg.1
IL_0009: ldnull
IL_000A: call Query_izsety.Equals$cont@1
IL_000F: ret
IL_0010: ldarg.1
IL_0011: ldnull
IL_0012: cgt.un
IL_0014: ldc.i4.0
IL_0015: ceq
IL_0017: ret
Foo.Equals:
IL_0000: nop
IL_0001: ldarg.0
IL_0002: ldnull
IL_0003: cgt.un
IL_0005: brfalse IL_0117
IL_000A: ldarg.1
IL_000B: ldnull
IL_000C: cgt.un
IL_000E: brfalse IL_0115
IL_0013: ldarg.0
IL_0014: stloc.s 08
IL_0016: ldloc.s 08
IL_0018: isinst Query_izsety+Foo.Biz
IL_001D: brfalse.s IL_0022
IL_001F: ldc.i4.2
IL_0020: br.s IL_002F
IL_0022: ldloc.s 08
IL_0024: isinst Query_izsety+Foo.Baz
IL_0029: brfalse.s IL_002E
IL_002B: ldc.i4.1
IL_002C: br.s IL_002F
IL_002E: ldc.i4.0
IL_002F: stloc.0
IL_0030: ldarg.1
IL_0031: stloc.s 09
IL_0033: ldloc.s 09
IL_0035: isinst Query_izsety+Foo.Biz
IL_003A: brfalse.s IL_003F
IL_003C: ldc.i4.2
IL_003D: br.s IL_004C
IL_003F: ldloc.s 09
IL_0041: isinst Query_izsety+Foo.Baz
IL_0046: brfalse.s IL_004B
IL_0048: ldc.i4.1
IL_0049: br.s IL_004C
IL_004B: ldc.i4.0
IL_004C: stloc.1
IL_004D: ldloc.0
IL_004E: ldloc.1
IL_004F: bne.un IL_0113
IL_0054: ldarg.0
IL_0055: stloc.s 0A
IL_0057: ldloc.s 0A
IL_0059: isinst Query_izsety+Foo.Bar
IL_005E: brtrue.s IL_0072
IL_0060: ldloc.s 0A
IL_0062: isinst Query_izsety+Foo.Baz
IL_0067: brtrue.s IL_00A2
IL_0069: ldloc.s 0A
IL_006B: isinst Query_izsety+Foo.Biz
IL_0070: brtrue.s IL_00D8
IL_0072: ldarg.0
IL_0073: castclass Query_izsety+Foo.Bar
IL_0078: stloc.2
IL_0079: ldarg.1
IL_007A: castclass Query_izsety+Foo.Bar
IL_007F: stloc.3
IL_0080: ldloc.2
IL_0081: ldfld Query_izsety+Foo+Bar.item1
IL_0086: ldloc.3
IL_0087: ldfld Query_izsety+Foo+Bar.item1
IL_008C: bne.un.s IL_00A0
IL_008E: ldloc.2
IL_008F: ldfld Query_izsety+Foo+Bar.item2
IL_0094: ldloc.3
IL_0095: ldfld Query_izsety+Foo+Bar.item2
IL_009A: call System.String.Equals
IL_009F: ret
IL_00A0: ldc.i4.0
IL_00A1: ret
IL_00A2: ldarg.0
IL_00A3: castclass Query_izsety+Foo.Baz
IL_00A8: stloc.s 04
IL_00AA: ldarg.1
IL_00AB: castclass Query_izsety+Foo.Baz
IL_00B0: stloc.s 05
IL_00B2: ldloc.s 04
IL_00B4: ldfld Query_izsety+Foo+Baz.item1
IL_00B9: ldloc.s 05
IL_00BB: ldfld Query_izsety+Foo+Baz.item1
IL_00C0: bne.un.s IL_00D6
IL_00C2: ldloc.s 04
IL_00C4: ldfld Query_izsety+Foo+Baz.item2
IL_00C9: ldloc.s 05
IL_00CB: ldfld Query_izsety+Foo+Baz.item2
IL_00D0: call System.String.Equals
IL_00D5: ret
IL_00D6: ldc.i4.0
IL_00D7: ret
IL_00D8: ldarg.0
IL_00D9: castclass Query_izsety+Foo.Biz
IL_00DE: stloc.s 06
IL_00E0: ldarg.1
IL_00E1: castclass Query_izsety+Foo.Biz
IL_00E6: stloc.s 07
IL_00E8: ldloc.s 06
IL_00EA: ldfld Query_izsety+Foo+Biz.item1
IL_00EF: ldloc.s 07
IL_00F1: ldfld Query_izsety+Foo+Biz.item1
IL_00F6: call System.String.Equals
IL_00FB: brfalse.s IL_0111
IL_00FD: ldloc.s 06
IL_00FF: ldfld Query_izsety+Foo+Biz.item2
IL_0104: ldloc.s 07
IL_0106: ldfld Query_izsety+Foo+Biz.item2
IL_010B: call System.String.Equals
IL_0110: ret
IL_0111: ldc.i4.0
IL_0112: ret
IL_0113: ldc.i4.0
IL_0114: ret
IL_0115: ldc.i4.0
IL_0116: ret
IL_0117: ldarg.1
IL_0118: ldnull
IL_0119: cgt.un
IL_011B: ldc.i4.0
IL_011C: ceq
IL_011E: ret
Foo.Equals:
IL_0000: nop
IL_0001: ldarg.1
IL_0002: isinst Query_izsety.Foo
IL_0007: stloc.0
IL_0008: ldloc.0
IL_0009: brfalse.s IL_0013
IL_000B: ldarg.0
IL_000C: ldloc.0
IL_000D: callvirt Query_izsety+Foo.Equals
IL_0012: ret
IL_0013: ldc.i4.0
IL_0014: ret
Foo..ctor:
IL_0000: ldarg.0
IL_0001: call System.Object..ctor
IL_0006: ret
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment