Galua.OpcodeInterpreter
(2)
lvl
=
unpackCString#
"step"
…
(2)
lvl
=
unpackCString#
"limit"
…
(2)
lvl
=
unpackCString#
"initial"
…
(1)
lvl
=
0
…
(2)
lvl
=
$fNumNumber_$cfromInteger
lvl
…
(10)
lvl
=
λ
ds
eta
→
let!
(,)
f
as
=
ds
in
(#,#)
eta
$WFunTailcall
f
as
…
(63)
$wsetStackSize
=
λ
ww
ww
ww
ww
ww
ww
w
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
w
in
let!
SizedVector'
dt
_
_
_
=
ipv1
in
case
tagToEnum#
<=#
dt
ww
of
False
→
$wshrink
ww
-#
dt
ww
ipv
…
True
→
let
rec
$wloop
=
λ
ww1
w2
→
case
tagToEnum#
<=#
ww1
0
of
False
→
let!
(#,#)
ipv
ipv1
=
newMutVar#
Nil
w2
in
let!
(#,#)
ipv
_
=
$wpush
ww
STRef
ipv1
ipv
in
$wloop
-#
ww1
1
ipv
…
True
→
(#,#)
w2
()
…
…
in
$wloop
-#
ww
dt
ipv
…
…
(2)
$tc'InterpreterFailure
=
TrNameS
"'InterpreterFailure"
…
(2)
$tcInterpreterFailureType
=
TrNameS
"InterpreterFailureType"
…
(2)
$tc'BadProto
=
TrNameS
"'BadProto"
…
(2)
$tc'BadPc
=
TrNameS
"'BadPc"
…
(2)
$tc'BadStack
=
TrNameS
"'BadStack"
…
(2)
$tc'BadUpval
=
TrNameS
"'BadUpval"
…
(2)
$tc'BadConstant
=
TrNameS
"'BadConstant"
…
(2)
$tc'ExpectedExtraArg
=
TrNameS
"'ExpectedExtraArg"
…
(2)
$tc'UnexpectedExtraArg
=
TrNameS
"'UnexpectedExtraArg"
…
(2)
$tc'SetListNeedsTable
=
TrNameS
"'SetListNeedsTable"
…
(2)
$tc'NonLuaFunction
=
TrNameS
"'NonLuaFunction"
…
(2)
$tcRValue
=
TrNameS
"RValue"
…
(2)
$tc'C:RValue
=
TrNameS
"'C:RValue"
…
(2)
$tcLValue
=
TrNameS
"LValue"
…
(2)
$tc'C:LValue
=
TrNameS
"'C:LValue"
…
(2)
lvl
=
unpackCString#
" must be a number"
…
(74)
forloopAsNumber
=
λ
label
v
cont
eta
→
let
$j
=
λ
w
→
let!
PS
dt
dt1
dt2
dt3
=
packUtf8
unpackAppendCString#
"'for' "
++
label
lvl
in
let!
(#,#)
ipv
ipv1
=
$wpeekLuaString
plusAddr#
dt
dt2
dt3
eta
in
let!
s'
=
touch#
dt1
ipv
in
(#,#)
s'
ThrowError
$WString
ipv1
…
in
case
v
of
DEFAULT
→
$j
void#
…
Number
n
→
cont
n
eta
…
String
n
→
let!
PS
ww1
ww2
ww3
ww4
=
n
in
let
s
=
$wunpackUtf8
ww1
ww2
ww3
ww4
…
in
case
run
parseFloatP
s
$fApplicativeP_$cpure
s
of
[]
→
$j
void#
…
:
ds
ds1
→
let!
(,)
n
_
=
ds
in
case
ds1
of
[]
→
cont
forceDouble
n
eta
…
:
_
_
→
$j
void#
…
…
…
…
(2)
lvl
=
unpackCString#
"Interpreter failed!"
…
(2)
$cshowList
=
I#
0
…
(2)
lvl
=
unpackCString#
"BadProto "
…
(2)
lvl
=
unpackCString#
"BadPc "
…
(2)
lvl
=
unpackCString#
"BadStack "
…
(2)
lvl
=
unpackCString#
"BadUpval "
…
(2)
lvl
=
unpackCString#
"BadConstant "
…
(2)
lvl
=
unpackCString#
"ExpectedExtraArg"
…
(2)
lvl
=
unpackCString#
"UnexpectedExtraArg"
…
(2)
lvl
=
unpackCString#
"SetListNeedsTable"
…
(2)
lvl
=
unpackCString#
"NonLuaFunction"
…
(236)
$cshowsPrec
=
λ
a
ds
eta
→
case
ds
of
BadProto
b1
→
let!
I#
x
=
a
in
case
tagToEnum#
>=#
x
11
of
False
→
++
lvl
let!
I#
ww3
=
b1
in
let!
(#,#)
ww5
ww6
=
$wshowSignedInt
11
ww3
eta
in
:
ww5
ww6
…
True
→
:
shows9
++
lvl
let!
I#
ww3
=
b1
in
let!
(#,#)
ww5
ww6
=
$wshowSignedInt
11
ww3
:
shows6
eta
in
:
ww5
ww6
…
…
BadPc
b1
→
let!
I#
x
=
a
in
case
tagToEnum#
>=#
x
11
of
False
→
++
lvl
let!
I#
ww3
=
b1
in
let!
(#,#)
ww5
ww6
=
$wshowSignedInt
11
ww3
eta
in
:
ww5
ww6
…
True
→
:
shows9
++
lvl
let!
I#
ww3
=
b1
in
let!
(#,#)
ww5
ww6
=
$wshowSignedInt
11
ww3
:
shows6
eta
in
:
ww5
ww6
…
…
BadStack
b1
→
let!
I#
x
=
a
in
case
tagToEnum#
>=#
x
11
of
False
→
++
lvl
let!
I#
ww3
=
b1
in
let!
(#,#)
ww5
ww6
=
$wshowSignedInt
11
ww3
eta
in
:
ww5
ww6
…
True
→
:
shows9
++
lvl
let!
I#
ww3
=
b1
in
let!
(#,#)
ww5
ww6
=
$wshowSignedInt
11
ww3
:
shows6
eta
in
:
ww5
ww6
…
…
BadUpval
b1
→
let!
I#
x
=
a
in
case
tagToEnum#
>=#
x
11
of
False
→
++
lvl
let!
I#
ww3
=
b1
in
let!
(#,#)
ww5
ww6
=
$wshowSignedInt
11
ww3
eta
in
:
ww5
ww6
…
True
→
:
shows9
++
lvl
let!
I#
ww3
=
b1
in
let!
(#,#)
ww5
ww6
=
$wshowSignedInt
11
ww3
:
shows6
eta
in
:
ww5
ww6
…
…
BadConstant
b1
→
let!
I#
x
=
a
in
case
tagToEnum#
>=#
x
11
of
False
→
++
lvl
let!
I#
ww3
=
b1
in
let!
(#,#)
ww5
ww6
=
$wshowSignedInt
11
ww3
eta
in
:
ww5
ww6
…
True
→
:
shows9
++
lvl
let!
I#
ww3
=
b1
in
let!
(#,#)
ww5
ww6
=
$wshowSignedInt
11
ww3
:
shows6
eta
in
:
ww5
ww6
…
…
ExpectedExtraArg
→
++
lvl
eta
…
UnexpectedExtraArg
→
++
lvl
eta
…
SetListNeedsTable
→
++
lvl
eta
…
NonLuaFunction
→
++
lvl
eta
…
…
(2)
$cshowList
=
$cshowsPrec
$cshowList
…
(2)
$cshowList
=
showList__
$cshowList
…
(2)
$sshows
=
$cshowsPrec
shows22
…
(86)
$cshow
=
λ
x
→
case
x
of
BadProto
b1
→
++
lvl
let!
I#
ww3
=
b1
in
let!
(#,#)
ww5
ww6
=
$wshowSignedInt
11
ww3
[]
in
:
ww5
ww6
…
BadPc
b1
→
++
lvl
let!
I#
ww3
=
b1
in
let!
(#,#)
ww5
ww6
=
$wshowSignedInt
11
ww3
[]
in
:
ww5
ww6
…
BadStack
b1
→
++
lvl
let!
I#
ww3
=
b1
in
let!
(#,#)
ww5
ww6
=
$wshowSignedInt
11
ww3
[]
in
:
ww5
ww6
…
BadUpval
b1
→
++
lvl
let!
I#
ww3
=
b1
in
let!
(#,#)
ww5
ww6
=
$wshowSignedInt
11
ww3
[]
in
:
ww5
ww6
…
BadConstant
b1
→
++
lvl
let!
I#
ww3
=
b1
in
let!
(#,#)
ww5
ww6
=
$wshowSignedInt
11
ww3
[]
in
:
ww5
ww6
…
ExpectedExtraArg
→
lvl
…
UnexpectedExtraArg
→
lvl
…
SetListNeedsTable
→
lvl
…
NonLuaFunction
→
lvl
…
…
(4)
$fShowInterpreterFailureType
=
C:Show
$cshowsPrec
$cshow
$cshowList
…
(10)
$w$cshow
=
λ
ww
→
unlines
:
lvl
:
unpackAppendCString#
"Exception: "
$cshow
ww
[]
…
(6)
$cshow
=
λ
w
→
let!
InterpreterFailure
ww
=
w
in
$w$cshow
ww
…
(10)
$cshowsPrec
=
λ
ds
x
s
→
let!
InterpreterFailure
ww
=
x
in
++
$w$cshow
ww
s
…
(9)
lvl
=
λ
x
s
→
let!
InterpreterFailure
ww
=
x
in
++
$w$cshow
ww
s
…
(6)
$cshowList
=
λ
ls
s
→
showList__
lvl
ls
s
…
(1)
$sshows
=
lvl
…
(1)
$s$dmshowList
=
$cshowList
…
(4)
$fShowInterpreterFailure
=
C:Show
$cshowsPrec
$cshow
$cshowList
…
(1)
$s$dmshowsPrec
=
$cshowsPrec
…
(1)
$cdisplayException
=
$cshow
…
(1)
$s$dmdisplayException
=
$cshow
…
(1)
$s$dmshow
=
$cshow
…
(2)
$tcInterpreterFailure
=
TrNameS
"InterpreterFailure"
…
(2)
$trModule
=
TrNameS
"Galua.OpcodeInterpreter"
…
(2)
$trModule
=
TrNameS
"galua-0.2-5hdm9cyXNeHDuUoWCZKIIG"
…
(3)
$trModule
=
Module
$trModule
$trModule
…
(5)
$tcInterpreterFailure
=
TyCon
11147647436523647781
17461527858744733576
$trModule
$tcInterpreterFailure
…
(3)
lvl
=
Fingerprint
11147647436523647781
17461527858744733576
…
(17)
ds
=
let!
kt_fps
=
typeRepFingerprints
[]
[]
in
let!
Fingerprint
dt1
dt2
=
fingerprintFingerprints
:
lvl
kt_fps
in
TypeRep
dt1
dt2
$tcInterpreterFailure
[]
[]
…
(2)
$cp1Exception
=
λ
wild
→
ds
…
(1)
$cp1Exception
=
$cp1Exception
…
(30)
$cfromException
=
λ
eta
→
let!
SomeException
_
$dException1
e2
=
eta
in
let!
TypeRep
dt
dt1
_
_
_
=
$p1Exception
$dException1
proxy#
in
let!
TypeRep
dt2
dt3
_
_
_
=
ds
in
case
tagToEnum#
eqWord#
dt
dt2
of
False
→
Nothing
…
True
→
case
tagToEnum#
eqWord#
dt1
dt3
of
False
→
Nothing
…
True
→
Just
e2
…
…
…
rec
(6)
$fExceptionInterpreterFailure
=
C:Exception
$cp1Exception
$fShowInterpreterFailure
$ctoException
$cfromException
$cshow
…
(2)
$ctoException
=
SomeException
$fExceptionInterpreterFailure
…
(2)
lvl
=
InterpreterFailure
NonLuaFunction
…
(2)
lvl
=
$ctoException
lvl
…
(160)
$wgetCallArguments
=
λ
w
ww
w
w
→
let
$w$j
=
λ
w
ww
→
let
$j
=
λ
ipv
ipv1
→
let!
ExecEnv
dt
_
_
dt3
ds1
dt4
_
dt5
_
_
dt8
=
w
in
case
ds1
of
CFunction
_
→
case
raiseIO#
lvl
ipv
of
…
LuaFunction
_
f
→
let!
Function
_
_
_
_
_
dt3
_
_
_
_
_
=
f
in
let!
(#,#)
ipv
_
=
$wsetStackSize
dt
dt3
dt4
dt5
dt8
dt3
ipv
in
(#,#)
ipv
ipv1
…
…
in
case
eftInt
ww
ww
of
[]
→
$j
w
[]
…
:
y
ys
→
let!
ExecEnv
dt
_
_
_
_
_
_
_
_
_
_
=
w
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
dt
w
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
I#
y
=
y
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
y
ipv
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
let
rec
go
=
λ
ds
eta
→
case
ds
of
[]
→
(#,#)
eta
[]
…
:
y
ys
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
dt
eta
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
I#
y
=
y
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
y
ipv
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
let!
(#,#)
ipv2
ipv3
=
go
ys
ipv
in
(#,#)
ipv2
:
ipv1
ipv3
…
…
in
let!
(#,#)
ipv2
ipv3
=
go
ys
ipv
in
$j
ipv2
:
ipv1
ipv3
…
…
in
case
w
of
CountInt
dt
→
$w$j
w
+#
ww
-#
dt
1
…
CountTop
→
let!
ExecEnv
dt
_
_
_
_
_
_
_
_
_
_
=
w
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
dt
w
in
let!
SizedVector'
dt
_
_
_
=
ipv1
in
$w$j
ipv
-#
dt
1
…
…
(1)
$s$dmfromException
=
$cfromException
…
(5)
$tc'C:LValue
=
TyCon
10750136585711280147
8989885400586916285
$trModule
$tc'C:LValue
…
(5)
$tcLValue
=
TyCon
3910655325234061769
17843099448469732468
$trModule
$tcLValue
…
(5)
$tc'C:RValue
=
TyCon
16754152644948943996
13742640978507325937
$trModule
$tc'C:RValue
…
(5)
$tcRValue
=
TyCon
13710688313145283911
3603288615126448145
$trModule
$tcRValue
…
(5)
$tc'NonLuaFunction
=
TyCon
2374708341481109220
17786606766698271285
$trModule
$tc'NonLuaFunction
…
(5)
$tc'SetListNeedsTable
=
TyCon
12583183158098790170
4184896142159572745
$trModule
$tc'SetListNeedsTable
…
(5)
$tc'UnexpectedExtraArg
=
TyCon
17880776475502837358
13428188826927287413
$trModule
$tc'UnexpectedExtraArg
…
(5)
$tc'ExpectedExtraArg
=
TyCon
12826134753600904332
15489741898322933998
$trModule
$tc'ExpectedExtraArg
…
(5)
$tc'BadConstant
=
TyCon
8619145638731840761
17310576819555232571
$trModule
$tc'BadConstant
…
(5)
$tc'BadUpval
=
TyCon
4303715194229828891
14333317240402025394
$trModule
$tc'BadUpval
…
(5)
$tc'BadStack
=
TyCon
4638462076280649569
9113266575224827691
$trModule
$tc'BadStack
…
(5)
$tc'BadPc
=
TyCon
13128597107965212752
13628730234098581381
$trModule
$tc'BadPc
…
(5)
$tc'BadProto
=
TyCon
3077995449931202244
9603166132221267693
$trModule
$tc'BadProto
…
(5)
$tcInterpreterFailureType
=
TyCon
5321971167829799437
3304782236808591716
$trModule
$tcInterpreterFailureType
…
(5)
$tc'InterpreterFailure
=
TyCon
5568027973552712036
638928563048629650
$trModule
$tc'InterpreterFailure
…
(32)
$cget
=
λ
eta
eta
eta
→
case
eta
of
RK_Reg
dt
→
let!
ExecEnv
dt
_
_
_
_
_
_
_
_
_
_
=
eta
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
dt
eta
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
readSTRef1
ipv1
ipv
…
RK_Kst
k
→
(#,#)
eta
k
…
…
(20)
$slvalToRval
=
λ
eta
eta
s
→
let!
ExecEnv
_
dt1
_
dt3
_
_
_
_
_
_
_
=
eta
in
let!
I#
y
=
eta
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
y
s
in
readSTRef1
ipv1
ipv
…
(28)
$slvalToRval
=
λ
eta
eta
s
→
let!
ExecEnv
dt
_
_
_
_
_
_
_
_
_
_
=
eta
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
dt
s
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
I#
y
=
eta
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
y
ipv
in
readSTRef1
ipv1
ipv
…
(42)
$w$slvalToRval
=
λ
ww
ww
ww
ww
ww
ww
w
w
→
case
w
of
UpReg
dt
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
w
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
readSTRef1
ipv1
ipv
…
UpUp
dt
→
let!
(#,#)
ipv
ipv1
=
readArray#
ww
+#
ww
dt
w
in
readSTRef1
ipv1
ipv
…
…
(15)
$slvalToRval
=
λ
w
w
w
→
let!
ExecEnv
ww
ww
_
ww
_
ww
_
ww
_
_
ww
=
w
in
$w$slvalToRval
ww
ww
ww
ww
ww
ww
w
w
…
(33)
$cgetLValue
=
λ
eta
eta
eta
→
case
eta
of
UpReg
dt
→
let!
ExecEnv
dt
_
_
_
_
_
_
_
_
_
_
=
eta
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
dt
eta
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
readArray#
dt3
+#
dt1
dt
ipv
…
UpUp
dt
→
let!
ExecEnv
_
dt1
_
dt3
_
_
_
_
_
_
_
=
eta
in
readArray#
dt3
+#
dt1
dt
eta
…
…
(1)
$cgetLValue
=
$cgetLValue
…
(1)
$fLValueUpvalue
=
$cgetLValue
…
(1)
$sgetLValue
=
$cgetLValue
…
(15)
$cgetLValue
=
λ
eta
eta
eta
→
let!
ExecEnv
_
dt1
_
dt3
_
_
_
_
_
_
_
=
eta
in
let!
I#
y
=
eta
in
readArray#
dt3
+#
dt1
y
eta
…
(1)
$cgetLValue
=
$cgetLValue
…
(1)
$fLValueUpIx
=
$cgetLValue
…
(1)
$sgetLValue
=
$cgetLValue
…
(23)
$cgetLValue
=
λ
eta
eta
eta
→
let!
ExecEnv
dt
_
_
_
_
_
_
_
_
_
_
=
eta
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
dt
eta
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
I#
y
=
eta
in
readArray#
dt3
+#
dt1
y
ipv
…
(1)
$cgetLValue
=
$cgetLValue
…
(1)
$fLValueReg
=
$cgetLValue
…
(1)
$sgetLValue
=
$cgetLValue
…
rec
(3)
xs
=
:
Nil
xs
…
(163)
setCallResults
=
λ
eenv
a
b
xs
s
→
let
$w$j
=
λ
w
ww
→
case
tagToEnum#
<#
0
ww
of
False
→
(#,#)
w
()
…
True
→
let!
I#
x1
=
a
in
case
$wgo1
x1
ww
of
[]
→
(#,#)
w
()
…
:
ipv
ipv1
→
case
++
xs
xs
of
[]
→
(#,#)
w
()
…
:
ipv2
ipv3
→
let!
x
=
ipv2
in
let!
ExecEnv
dt
_
_
_
_
_
_
_
_
_
_
=
eenv
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
dt
w
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
I#
y
=
ipv
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
y
ipv
in
let!
STRef
var#
=
ipv1
in
let!
s2#
=
writeMutVar#
var#
x
ipv
in
let
rec
go
=
λ
ds
_ys
eta
→
case
ds
of
[]
→
(#,#)
eta
()
…
:
ipv
ipv1
→
case
_ys
of
[]
→
(#,#)
eta
()
…
:
ipv2
ipv3
→
let!
x
=
ipv2
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
dt
eta
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
I#
y
=
ipv
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
y
ipv
in
let!
STRef
var#
=
ipv1
in
let!
s2#
=
writeMutVar#
var#
x
ipv
in
go
ipv1
ipv3
s2#
…
…
…
in
go
ipv1
ipv3
s2#
…
…
…
…
in
case
b
of
CountInt
dt
→
$w$j
s
dt
…
CountTop
→
let!
ww2
=
$wlenAcc
xs
0
in
let!
ExecEnv
ww
_
_
ww
_
ww
_
ww
_
_
ww
=
eenv
in
let!
I#
x
=
a
in
let!
(#,#)
ipv
_
=
$wsetStackSize
ww
ww
ww
ww
ww
+#
x
ww2
s
in
$w$j
ipv
ww2
…
…
(2)
ipv
=
absentError
"ww_s4HPx Value"
…
(2)
lvl
=
InterpreterFailure
SetListNeedsTable
…
(2)
lvl
=
$ctoException
lvl
…
rec
(123)
$sfoldlM_loop
=
λ
sc
sc
sc
sc
sc
sg
sc
→
case
sc
of
[]
→
(#,#)
sc
(,)
MVector
sc
sc
sc
I#
sc
…
:
x
xs1
→
let
y
=
+#
sc
1
…
in
case
tagToEnum#
<#
sc
y
of
False
→
let!
s'#
=
writeArray#
sc
+#
sc
sc
x
sc
in
$sfoldlM_loop
s'#
xs1
sc
sc
sc
y
…
True
→
let
$j
=
λ
n#
→
let!
(#,#)
ipv
ipv1
=
newArray#
n#
uninitialised
sc
in
let!
s'#
=
copyMutableArray#
sc
sc
ipv1
0
sc
ipv
in
let!
s'#
=
writeArray#
ipv1
sc
x
s'#
in
$sfoldlM_loop
s'#
xs1
0
n#
ipv1
y
…
in
case
tagToEnum#
<=#
sc
1
of
False
→
let
y2
=
-#
y
sc
…
in
case
tagToEnum#
<=#
sc
y2
of
False
→
$j
+#
sc
sc
…
True
→
$j
+#
sc
y2
…
…
True
→
let
y2
=
-#
y
sc
…
in
case
tagToEnum#
<=#
1
y2
of
False
→
$j
+#
sc
1
…
True
→
$j
+#
sc
y2
…
…
…
…
…
(2)
lvl
=
InterpreterFailure
UnexpectedExtraArg
…
(2)
lvl
=
$ctoException
lvl
…
(4602)
$wexecute
=
λ
ww
ww
ww
ww
ww
ww
ww
ww
ww
ww
ww
ww
ww
ww
ww
ww
ww
w
→
let
lvl
=
+#
ww
1
…
lvl
=
Goto
lvl
…
lvl
=
+#
+#
ww
1
1
…
lvl
=
Goto
lvl
…
advance
=
λ
s
→
(#,#)
s
lvl
…
wild
=
ExecEnv
ww
ww
0
ww
ww
ww
ipv
ww
ww
0
ww
…
in
let!
Unit#
ipv
=
indexArray#
ww
+#
ww
ww
in
case
ipv
of
OP_MOVE
dt
dt
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
w
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
let!
x
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
ipv
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
s2#
=
writeMutVar#
var#
x
ipv
in
(#,#)
s2#
lvl
…
OP_LOADK
dt
src
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
w
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
s2#
=
writeMutVar#
var#
src
ipv
in
(#,#)
s2#
lvl
…
OP_LOADKX
dt
v
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
w
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
s2#
=
writeMutVar#
var#
v
ipv
in
(#,#)
s2#
lvl
…
OP_LOADBOOL
dt
b
c
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
w
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
s2#
=
writeMutVar#
var#
Bool
b
ipv
in
case
c
of
False
→
(#,#)
s2#
lvl
…
True
→
(#,#)
s2#
lvl
…
…
OP_LOADNIL
dt
dt
→
let
ww
=
+#
dt
1
…
$sgo
=
λ
sc
sg
→
(#,#)
sc
()
…
in
let
rec
go
=
λ
ds
eta
→
case
ds
of
[]
→
(#,#)
eta
()
…
:
y
ys
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
eta
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
I#
y
=
y
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
y
ipv
in
let!
STRef
var#
=
ipv1
in
let!
s2#
=
writeMutVar#
var#
Nil
ipv
in
go
ys
s2#
…
…
in
case
tagToEnum#
<#
0
ww
of
False
→
(#,#)
w
lvl
…
True
→
let!
(#,#)
ipv
_
=
go
$wgo1
dt
ww
w
in
(#,#)
ipv
lvl
…
…
OP_GETUPVAL
dt
dt
→
let!
(#,#)
ipv
ipv1
=
readArray#
ww
+#
ww
dt
w
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
let!
x
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
ipv
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
s2#
=
writeMutVar#
var#
x
ipv
in
(#,#)
s2#
lvl
…
OP_GETTABUP
dt
dt
tabKey
→
let!
(#,#)
ipv
ipv1
=
readArray#
ww
+#
ww
dt
w
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
let
$j
=
λ
ipv
ipv1
→
m__index1
STRef
ww
λ
v
eta
→
let!
x
=
v
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
eta
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
s2#
=
writeMutVar#
var#
x
ipv
in
(#,#)
s2#
lvl
ipv1
ipv1
ipv
…
in
case
tabKey
of
RK_Reg
dt
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
ipv
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
$j
ipv
ipv1
…
RK_Kst
k
→
$j
ipv
k
…
…
OP_GETTABLE
dt
dt
tabKey
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
w
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
let
$j
=
λ
ipv
ipv1
→
m__index1
STRef
ww
λ
v
eta
→
let!
x
=
v
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
eta
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
s2#
=
writeMutVar#
var#
x
ipv
in
(#,#)
s2#
lvl
ipv1
ipv1
ipv
…
in
case
tabKey
of
RK_Reg
dt
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
ipv
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
$j
ipv
ipv1
…
RK_Kst
k
→
$j
ipv
k
…
…
OP_SETTABUP
dt
key
src
→
let!
(#,#)
ipv
ipv1
=
readArray#
ww
+#
ww
dt
w
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
let
$j
=
λ
ipv
ipv1
→
case
src
of
RK_Reg
dt
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
ipv
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
m__newindex1
STRef
ww
advance
ipv1
ipv1
ipv1
ipv
…
RK_Kst
k
→
m__newindex1
STRef
ww
advance
ipv1
ipv1
k
ipv
…
…
in
case
key
of
RK_Reg
dt
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
ipv
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
$j
ipv
ipv1
…
RK_Kst
k
→
$j
ipv
k
…
…
OP_SETUPVAL
dt
dt
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
w
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
let!
x
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
ww
+#
ww
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
s2#
=
writeMutVar#
var#
x
ipv
in
(#,#)
s2#
lvl
…
OP_SETTABLE
dt
key
src
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
w
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
let
$j
=
λ
ipv
ipv1
→
case
src
of
RK_Reg
dt
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
ipv
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
m__newindex1
STRef
ww
advance
ipv1
ipv1
ipv1
ipv
…
RK_Kst
k
→
m__newindex1
STRef
ww
advance
ipv1
ipv1
k
ipv
…
…
in
case
key
of
RK_Reg
dt
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
ipv
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
$j
ipv
ipv1
…
RK_Kst
k
→
$j
ipv
k
…
…
OP_NEWTABLE
dt
dt
dt
→
let!
ThreadRef
_
_
_
_
_
_
_
_
ww14
ww15
_
ww17
=
ww
in
let!
(#,#)
ipv
ipv1
=
readIntArray#
ww17
ww15
w
in
let!
(#,#)
ipv2
ipv3
=
readMutVar#
ww14
ipv
in
let!
(#,#)
ipv
ipv1
=
$wnewTable
STRef
ww
let!
Stack
_
ds2
=
ipv3
in
let!
dt1
=
case
ds2
of
[]
→
MachSetup
…
:
x
_
→
let!
CallFrame
dt1
env
_
_
=
x
in
let!
ExecEnv
_
_
_
_
ds5
_
_
_
_
_
_
=
env
in
case
ds5
of
CFunction
name
→
$WInC
name
…
LuaFunction
name
_
→
let!
nt
=
name
in
InLua
nt
dt1
…
…
in
let!
dt11
=
case
ww
of
CFunction
name
→
$WInC
name
…
LuaFunction
name
_
→
let!
nt
=
name
in
InLua
nt
ipv1
…
in
RefLoc
dt1
dt11
dt
I#
dt
ipv2
in
let!
nt
as
TableRef
_
_
_
_
_
_
_
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
ipv
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
s2#
=
writeMutVar#
var#
Table
nt
ipv
in
(#,#)
s2#
lvl
…
OP_SELF
dt
dt
key
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
w
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
let
$j
=
λ
ipv
ipv1
→
m__index1
STRef
ww
λ
v
s
→
let!
x
=
v
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
s
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
s2#
=
writeMutVar#
var#
x
ipv
in
let!
x
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
s2#
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
+#
dt
1
ipv
in
let!
STRef
var#
=
ipv1
in
let!
s2#
=
writeMutVar#
var#
x
ipv
in
(#,#)
s2#
lvl
ipv1
ipv1
ipv
…
in
case
key
of
RK_Reg
dt
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
ipv
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
$j
ipv
ipv1
…
RK_Kst
k
→
$j
ipv
k
…
…
OP_ADD
dt
op1
op2
→
let
$j
=
λ
ipv
ipv1
→
let
$j
=
λ
ipv
ipv1
→
m__add1
STRef
ww
λ
v
eta
→
let!
x
=
v
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
eta
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
s2#
=
writeMutVar#
var#
x
ipv
in
(#,#)
s2#
lvl
ipv1
ipv1
ipv
…
in
case
op2
of
RK_Reg
dt
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
ipv
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
$j
ipv
ipv1
…
RK_Kst
k
→
$j
ipv
k
…
…
in
case
op1
of
RK_Reg
dt
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
w
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
$j
ipv
ipv1
…
RK_Kst
k
→
$j
w
k
…
…
OP_SUB
dt
op1
op2
→
let
$j
=
λ
ipv
ipv1
→
let
$j
=
λ
ipv
ipv1
→
m__sub1
STRef
ww
λ
v
eta
→
let!
x
=
v
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
eta
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
s2#
=
writeMutVar#
var#
x
ipv
in
(#,#)
s2#
lvl
ipv1
ipv1
ipv
…
in
case
op2
of
RK_Reg
dt
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
ipv
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
$j
ipv
ipv1
…
RK_Kst
k
→
$j
ipv
k
…
…
in
case
op1
of
RK_Reg
dt
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
w
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
$j
ipv
ipv1
…
RK_Kst
k
→
$j
w
k
…
…
OP_MUL
dt
op1
op2
→
let
$j
=
λ
ipv
ipv1
→
let
$j
=
λ
ipv
ipv1
→
m__mul1
STRef
ww
λ
v
eta
→
let!
x
=
v
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
eta
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
s2#
=
writeMutVar#
var#
x
ipv
in
(#,#)
s2#
lvl
ipv1
ipv1
ipv
…
in
case
op2
of
RK_Reg
dt
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
ipv
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
$j
ipv
ipv1
…
RK_Kst
k
→
$j
ipv
k
…
…
in
case
op1
of
RK_Reg
dt
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
w
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
$j
ipv
ipv1
…
RK_Kst
k
→
$j
w
k
…
…
OP_MOD
dt
op1
op2
→
let
$j
=
λ
ipv
ipv1
→
let
$j
=
λ
ipv
ipv1
→
m__mod1
STRef
ww
λ
v
eta
→
let!
x
=
v
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
eta
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
s2#
=
writeMutVar#
var#
x
ipv
in
(#,#)
s2#
lvl
ipv1
ipv1
ipv
…
in
case
op2
of
RK_Reg
dt
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
ipv
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
$j
ipv
ipv1
…
RK_Kst
k
→
$j
ipv
k
…
…
in
case
op1
of
RK_Reg
dt
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
w
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
$j
ipv
ipv1
…
RK_Kst
k
→
$j
w
k
…
…
OP_POW
dt
op1
op2
→
let
$j
=
λ
ipv
ipv1
→
let
$j
=
λ
ipv
ipv1
→
m__pow1
STRef
ww
λ
v
eta
→
let!
x
=
v
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
eta
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
s2#
=
writeMutVar#
var#
x
ipv
in
(#,#)
s2#
lvl
ipv1
ipv1
ipv
…
in
case
op2
of
RK_Reg
dt
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
ipv
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
$j
ipv
ipv1
…
RK_Kst
k
→
$j
ipv
k
…
…
in
case
op1
of
RK_Reg
dt
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
w
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
$j
ipv
ipv1
…
RK_Kst
k
→
$j
w
k
…
…
OP_DIV
dt
op1
op2
→
let
$j
=
λ
ipv
ipv1
→
let
$j
=
λ
ipv
ipv1
→
m__div1
STRef
ww
λ
v
eta
→
let!
x
=
v
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
eta
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
s2#
=
writeMutVar#
var#
x
ipv
in
(#,#)
s2#
lvl
ipv1
ipv1
ipv
…
in
case
op2
of
RK_Reg
dt
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
ipv
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
$j
ipv
ipv1
…
RK_Kst
k
→
$j
ipv
k
…
…
in
case
op1
of
RK_Reg
dt
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
w
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
$j
ipv
ipv1
…
RK_Kst
k
→
$j
w
k
…
…
OP_IDIV
dt
op1
op2
→
let
$j
=
λ
ipv
ipv1
→
let
$j
=
λ
ipv
ipv1
→
m__idiv1
STRef
ww
λ
v
eta
→
let!
x
=
v
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
eta
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
s2#
=
writeMutVar#
var#
x
ipv
in
(#,#)
s2#
lvl
ipv1
ipv1
ipv
…
in
case
op2
of
RK_Reg
dt
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
ipv
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
$j
ipv
ipv1
…
RK_Kst
k
→
$j
ipv
k
…
…
in
case
op1
of
RK_Reg
dt
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
w
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
$j
ipv
ipv1
…
RK_Kst
k
→
$j
w
k
…
…
OP_BAND
dt
op1
op2
→
let
$j
=
λ
ipv
ipv1
→
let
$j
=
λ
ipv
ipv1
→
m__band1
STRef
ww
λ
v
eta
→
let!
x
=
v
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
eta
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
s2#
=
writeMutVar#
var#
x
ipv
in
(#,#)
s2#
lvl
ipv1
ipv1
ipv
…
in
case
op2
of
RK_Reg
dt
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
ipv
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
$j
ipv
ipv1
…
RK_Kst
k
→
$j
ipv
k
…
…
in
case
op1
of
RK_Reg
dt
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
w
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
$j
ipv
ipv1
…
RK_Kst
k
→
$j
w
k
…
…
OP_BOR
dt
op1
op2
→
let
$j
=
λ
ipv
ipv1
→
let
$j
=
λ
ipv
ipv1
→
m__bor1
STRef
ww
λ
v
eta
→
let!
x
=
v
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
eta
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
s2#
=
writeMutVar#
var#
x
ipv
in
(#,#)
s2#
lvl
ipv1
ipv1
ipv
…
in
case
op2
of
RK_Reg
dt
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
ipv
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
$j
ipv
ipv1
…
RK_Kst
k
→
$j
ipv
k
…
…
in
case
op1
of
RK_Reg
dt
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
w
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
$j
ipv
ipv1
…
RK_Kst
k
→
$j
w
k
…
…
OP_BXOR
dt
op1
op2
→
let
$j
=
λ
ipv
ipv1
→
let
$j
=
λ
ipv
ipv1
→
m__bxor1
STRef
ww
λ
v
eta
→
let!
x
=
v
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
eta
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
s2#
=
writeMutVar#
var#
x
ipv
in
(#,#)
s2#
lvl
ipv1
ipv1
ipv
…
in
case
op2
of
RK_Reg
dt
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
ipv
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
$j
ipv
ipv1
…
RK_Kst
k
→
$j
ipv
k
…
…
in
case
op1
of
RK_Reg
dt
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
w
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
$j
ipv
ipv1
…
RK_Kst
k
→
$j
w
k
…
…
OP_SHL
dt
op1
op2
→
let
$j
=
λ
ipv
ipv1
→
let
$j
=
λ
ipv
ipv1
→
m__shl1
STRef
ww
λ
v
eta
→
let!
x
=
v
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
eta
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
s2#
=
writeMutVar#
var#
x
ipv
in
(#,#)
s2#
lvl
ipv1
ipv1
ipv
…
in
case
op2
of
RK_Reg
dt
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
ipv
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
$j
ipv
ipv1
…
RK_Kst
k
→
$j
ipv
k
…
…
in
case
op1
of
RK_Reg
dt
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
w
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
$j
ipv
ipv1
…
RK_Kst
k
→
$j
w
k
…
…
OP_SHR
dt
op1
op2
→
let
$j
=
λ
ipv
ipv1
→
let
$j
=
λ
ipv
ipv1
→
m__shr1
STRef
ww
λ
v
eta
→
let!
x
=
v
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
eta
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
s2#
=
writeMutVar#
var#
x
ipv
in
(#,#)
s2#
lvl
ipv1
ipv1
ipv
…
in
case
op2
of
RK_Reg
dt
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
ipv
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
$j
ipv
ipv1
…
RK_Kst
k
→
$j
ipv
k
…
…
in
case
op1
of
RK_Reg
dt
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
w
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
$j
ipv
ipv1
…
RK_Kst
k
→
$j
w
k
…
…
OP_UNM
dt
dt
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
w
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
m__unm1
STRef
ww
λ
v
eta
→
let!
x
=
v
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
eta
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
s2#
=
writeMutVar#
var#
x
ipv
in
(#,#)
s2#
lvl
ipv1
ipv
…
OP_BNOT
dt
dt
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
w
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
m__bnot1
STRef
ww
λ
v
eta
→
let!
x
=
v
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
eta
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
s2#
=
writeMutVar#
var#
x
ipv
in
(#,#)
s2#
lvl
ipv1
ipv
…
OP_NOT
dt
dt
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
w
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
let!
dt
=
case
ipv1
of
DEFAULT
→
False
…
Bool
b
→
case
b
of
False
→
True
…
True
→
False
…
…
Nil
→
True
…
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
ipv
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
s2#
=
writeMutVar#
var#
Bool
dt
ipv
in
(#,#)
s2#
lvl
…
OP_LEN
dt
dt
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
w
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
m__len1
STRef
ww
λ
v
eta
→
let!
x
=
v
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
eta
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
s2#
=
writeMutVar#
var#
x
ipv
in
(#,#)
s2#
lvl
ipv1
ipv
…
OP_CONCAT
dt
dt
dt
→
let
rec
go
=
λ
ds
eta
→
case
ds
of
[]
→
(#,#)
eta
[]
…
:
y
ys
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
eta
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
I#
y
=
y
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
y
ipv
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
let!
(#,#)
ipv2
ipv3
=
go
ys
ipv
in
(#,#)
ipv2
:
ipv1
ipv3
…
…
in
let!
(#,#)
ipv
ipv1
=
go
eftInt
dt
dt
w
in
m__concat2
STRef
ww
λ
v
eta
→
let!
x
=
v
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
eta
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
s2#
=
writeMutVar#
var#
x
ipv
in
(#,#)
s2#
lvl
reverse
ipv1
ipv
…
OP_JMP
mbCloseReg
dt
→
case
mbCloseReg
of
Nothing
→
(#,#)
w
Goto
+#
+#
ww
dt
1
…
Just
x
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
w
in
let!
I#
x
=
x
in
let!
SizedVector'
dt
_
_
_
=
ipv1
in
let
y
=
-#
dt
1
…
in
case
tagToEnum#
>#
x
y
of
False
→
let
rec
go
=
λ
x
eta
→
let!
(#,#)
ipv
ipv1
=
newMutVar#
Nil
eta
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
ipv
in
let!
SizedVector'
dt
dt1
_
dt3
=
ipv1
in
case
tagToEnum#
<=#
0
x
of
False
→
raiseIO#
set2
ipv
…
True
→
case
tagToEnum#
<#
x
dt
of
False
→
raiseIO#
set2
ipv
…
True
→
let!
s'#
=
writeArray#
dt3
+#
dt1
x
STRef
ipv1
ipv
in
case
tagToEnum#
==#
x
y
of
False
→
go
+#
x
1
s'#
…
True
→
(#,#)
s'#
()
…
…
…
…
in
let!
(#,#)
ipv
_
=
go
x
ipv
in
(#,#)
ipv
Goto
+#
+#
ww
dt
1
…
True
→
(#,#)
ipv
Goto
+#
+#
ww
dt
1
…
…
…
OP_EQ
invert
op1
op2
→
let
$j
=
λ
ipv
ipv1
→
let
$j
=
λ
ipv
ipv1
→
m__eq1
STRef
ww
λ
res
eta
→
case
res
of
False
→
case
invert
of
False
→
(#,#)
eta
lvl
…
True
→
(#,#)
eta
lvl
…
…
True
→
case
invert
of
False
→
(#,#)
eta
lvl
…
True
→
(#,#)
eta
lvl
…
…
ipv1
ipv1
ipv
…
in
case
op2
of
RK_Reg
dt
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
ipv
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
$j
ipv
ipv1
…
RK_Kst
k
→
$j
ipv
k
…
…
in
case
op1
of
RK_Reg
dt
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
w
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
$j
ipv
ipv1
…
RK_Kst
k
→
$j
w
k
…
…
OP_LT
invert
op1
op2
→
let
$j
=
λ
ipv
ipv1
→
let
$j
=
λ
ipv
ipv1
→
m__lt1
STRef
ww
λ
res
eta
→
case
res
of
False
→
case
invert
of
False
→
(#,#)
eta
lvl
…
True
→
(#,#)
eta
lvl
…
…
True
→
case
invert
of
False
→
(#,#)
eta
lvl
…
True
→
(#,#)
eta
lvl
…
…
ipv1
ipv1
ipv
…
in
case
op2
of
RK_Reg
dt
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
ipv
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
$j
ipv
ipv1
…
RK_Kst
k
→
$j
ipv
k
…
…
in
case
op1
of
RK_Reg
dt
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
w
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
$j
ipv
ipv1
…
RK_Kst
k
→
$j
w
k
…
…
OP_LE
invert
op1
op2
→
let
$j
=
λ
ipv
ipv1
→
let
$j
=
λ
ipv
ipv1
→
m__le1
STRef
ww
λ
res
eta
→
case
res
of
False
→
case
invert
of
False
→
(#,#)
eta
lvl
…
True
→
(#,#)
eta
lvl
…
…
True
→
case
invert
of
False
→
(#,#)
eta
lvl
…
True
→
(#,#)
eta
lvl
…
…
ipv1
ipv1
ipv
…
in
case
op2
of
RK_Reg
dt
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
ipv
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
$j
ipv
ipv1
…
RK_Kst
k
→
$j
ipv
k
…
…
in
case
op1
of
RK_Reg
dt
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
w
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
$j
ipv
ipv1
…
RK_Kst
k
→
$j
w
k
…
…
OP_TEST
dt
c
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
w
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
case
ipv1
of
DEFAULT
→
case
c
of
False
→
(#,#)
ipv
lvl
…
True
→
(#,#)
ipv
lvl
…
…
Bool
b
→
case
b
of
False
→
case
c
of
False
→
(#,#)
ipv
lvl
…
True
→
(#,#)
ipv
lvl
…
…
True
→
case
c
of
False
→
(#,#)
ipv
lvl
…
True
→
(#,#)
ipv
lvl
…
…
…
Nil
→
case
c
of
False
→
(#,#)
ipv
lvl
…
True
→
(#,#)
ipv
lvl
…
…
…
OP_TESTSET
dt
dt
c
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
w
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
case
ipv1
as
wild
of
DEFAULT
→
case
c
of
False
→
(#,#)
ipv
lvl
…
True
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
ipv
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
s2#
=
writeMutVar#
var#
wild
ipv
in
(#,#)
s2#
lvl
…
…
Bool
b
→
case
b
of
False
→
case
c
of
False
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
ipv
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
s2#
=
writeMutVar#
var#
wild
ipv
in
(#,#)
s2#
lvl
…
True
→
(#,#)
ipv
lvl
…
…
True
→
case
c
of
False
→
(#,#)
ipv
lvl
…
True
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
ipv
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
s2#
=
writeMutVar#
var#
wild
ipv
in
(#,#)
s2#
lvl
…
…
…
Nil
→
case
c
of
False
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
ipv
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
s2#
=
writeMutVar#
var#
Nil
ipv
in
(#,#)
s2#
lvl
…
True
→
(#,#)
ipv
lvl
…
…
…
OP_CALL
dt
b
c
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
w
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
let!
(#,#)
ipv
ipv1
=
$wgetCallArguments
wild
+#
dt
1
b
ipv
in
let
a
=
I#
dt
…
in
resolveFunction1
STRef
ww
λ
ds
eta1
→
let!
(,)
f
vs
=
ds
in
(#,#)
eta1
let!
ClosureRef
dt1
dt2
dt3
dt4
dt5
=
f
in
FunCall
dt1
dt2
dt3
dt4
dt5
vs
Nothing
λ
result
s
→
let!
(#,#)
ipv
_
=
setCallResults
wild
a
c
result
s
in
(#,#)
ipv
lvl
ipv1
ipv1
ipv
…
OP_TAILCALL
dt
b
_
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
w
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
let!
(#,#)
ipv
ipv1
=
$wgetCallArguments
wild
+#
dt
1
b
ipv
in
resolveFunction1
STRef
ww
lvl
ipv1
ipv1
ipv
…
OP_RETURN
dt
c
→
let!
(#,#)
ipv
ipv1
=
$wgetCallArguments
wild
dt
c
w
in
(#,#)
ipv
FunReturn
ipv1
…
OP_FORLOOP
dt
dt
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
w
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
ipv
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
+#
dt
1
ipv
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
ipv
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
+#
dt
2
ipv
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
forloopAsNumber
lvl
ipv1
λ
initial
eta
→
forloopAsNumber
lvl
ipv1
λ
limit
eta
→
forloopAsNumber
lvl
ipv1
λ
step
eta
→
let
next
=
case
initial
of
Int
dt
→
case
step
of
Int
dt1
→
Int
+#
dt
dt1
…
Double
ipv
→
Double
+##
int2Double#
dt
ipv
…
…
Double
ipv
→
case
step
of
Int
dt
→
Double
+##
ipv
int2Double#
dt
…
Double
dt
→
Double
+##
ipv
dt
…
…
…
$w$j
=
λ
w
→
let!
dt
=
next
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
w
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
s2#
=
writeMutVar#
var#
Number
dt
ipv
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
s2#
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
+#
dt
3
ipv
in
let!
STRef
var#
=
ipv1
in
let!
s2#
=
writeMutVar#
var#
Number
dt
ipv
in
(#,#)
s2#
Goto
+#
+#
ww
dt
1
…
in
case
$fOrdNumber_$c<
lvl
step
of
False
→
case
$fOrdNumber_$c<=
limit
next
of
False
→
(#,#)
eta
lvl
…
True
→
$w$j
eta
…
…
True
→
case
$fOrdNumber_$c<=
next
limit
of
False
→
(#,#)
eta
lvl
…
True
→
$w$j
eta
…
…
eta
eta
ipv
…
OP_FORPREP
dt
dt
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
w
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
ipv
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
+#
dt
1
ipv
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
ipv
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
+#
dt
2
ipv
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
forloopAsNumber
lvl
ipv1
λ
initial
eta
→
forloopAsNumber
lvl
ipv1
λ
limit
eta
→
forloopAsNumber
lvl
ipv1
λ
step
s
→
let!
dt
=
case
initial
of
Int
dt
→
case
step
of
Int
dt1
→
Int
-#
dt
dt1
…
Double
ipv
→
Double
-##
int2Double#
dt
ipv
…
…
Double
ipv
→
case
step
of
Int
dt
→
Double
-##
ipv
int2Double#
dt
…
Double
dt
→
Double
-##
ipv
dt
…
…
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
s
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
s2#
=
writeMutVar#
var#
Number
dt
ipv
in
let!
dt
=
limit
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
s2#
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
+#
dt
1
ipv
in
let!
STRef
var#
=
ipv1
in
let!
s2#
=
writeMutVar#
var#
Number
dt
ipv
in
let!
dt
=
step
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
s2#
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
+#
dt
2
ipv
in
let!
STRef
var#
=
ipv1
in
let!
s2#
=
writeMutVar#
var#
Number
dt
ipv
in
(#,#)
s2#
Goto
+#
+#
ww
dt
1
eta
eta
ipv
…
OP_TFORCALL
dt
dt
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
w
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
ipv
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
+#
dt
1
ipv
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
ipv
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
+#
dt
2
ipv
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
let
lvl
=
+#
dt
3
…
lvl
=
I#
lvl
…
lvl
=
CountInt
dt
…
in
resolveFunction1
STRef
ww
λ
ds
eta1
→
let!
(,)
f
vs
=
ds
in
(#,#)
eta1
let!
ClosureRef
dt1
dt2
dt3
dt4
dt5
=
f
in
FunCall
dt1
dt2
dt3
dt4
dt5
vs
Nothing
λ
result
s
→
let!
(#,#)
ipv
_
=
setCallResults
wild
lvl
lvl
result
s
in
(#,#)
ipv
lvl
ipv1
:
ipv1
:
ipv1
[]
ipv
…
OP_TFORLOOP
dt
dt
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
w
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
+#
dt
1
ipv
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
case
$fEqValue_$c==
ipv1
Nil
of
False
→
let!
x
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
ipv
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
s2#
=
writeMutVar#
var#
x
ipv
in
(#,#)
s2#
Goto
+#
+#
ww
dt
1
…
True
→
(#,#)
ipv
lvl
…
…
OP_SETLIST
dt
dt
dt
dt
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
w
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
case
ipv1
of
DEFAULT
→
case
raiseIO#
lvl
ipv
of
…
Table
tab
→
let!
TableRef
_
_
_
dt3
dt4
dt5
dt6
=
tab
in
let
$w$j
=
λ
w
ww
→
let
$w$j
=
λ
w
→
case
ww
of
CFunction
_
→
case
raiseIO#
lvl
w
of
…
LuaFunction
_
f
→
let!
Function
_
_
_
_
_
dt3
_
_
_
_
_
=
f
in
let!
(#,#)
ipv
_
=
$wsetStackSize
ww
ww
ww
ww
ww
dt3
w
in
(#,#)
ipv
Goto
+#
+#
ww
dt
1
…
…
in
case
tagToEnum#
>#
1
ww
of
False
→
let
rec
go
=
λ
x
eta
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
eta
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
+#
dt
x
ipv
in
let!
STRef
var#
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
var#
ipv
in
let!
(#,#)
ipv
_
=
$wsetTableRaw
$fTableValueValue
dt3
dt4
dt5
dt6
Number
Int
+#
dt
x
ipv1
ipv
in
case
tagToEnum#
==#
x
ww
of
False
→
go
+#
x
1
ipv
…
True
→
(#,#)
ipv
()
…
…
in
let!
(#,#)
ipv
_
=
go
1
w
in
$w$j
ipv
…
True
→
$w$j
w
…
…
in
case
dt
as
wild
of
DEFAULT
→
$w$j
ipv
wild
…
0
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
ipv
in
let!
SizedVector'
dt
_
_
_
=
ipv1
in
$w$j
ipv
-#
-#
dt
dt
1
…
…
…
OP_CLOSURE
dt
dt
cloFunc
→
let!
wild
as
Function
_
_
_
_
_
_
_
ds4
_
_
_
=
cloFunc
in
let!
Vector
ipv
ipv
ipv
=
ds4
in
let
rec
$wgo
=
λ
ww
w
→
case
tagToEnum#
>=#
ww
ipv
of
False
→
let!
Unit#
ipv
=
indexArray#
ipv
+#
ipv
ww
in
case
ipv
of
UpReg
dt
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
w
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
(#,#)
ipv2
ipv3
=
$wgo
+#
ww
1
ipv
in
(#,#)
ipv2
:
ipv1
ipv3
…
UpUp
dt
→
let!
(#,#)
ipv
ipv1
=
readArray#
ww
+#
ww
dt
w
in
let!
(#,#)
ipv2
ipv3
=
$wgo
+#
ww
1
ipv
in
(#,#)
ipv2
:
ipv1
ipv3
…
…
True
→
(#,#)
w
[]
…
…
in
let!
(#,#)
ipv
ipv1
=
$wgo
0
w
in
let!
(#,#)
ipv
ipv1
=
newArray#
0
uninitialised
ipv
in
let!
(#,#)
ipv6
ipv7
=
$sfoldlM_loop
ipv
ipv1
0
0
ipv1
0
in
let!
(,)
v'
n
=
ipv7
in
case
ww
of
CFunction
_
→
case
raiseIO#
lvl
ipv6
of
…
LuaFunction
fid
_
→
let!
ThreadRef
_
_
_
_
_
_
_
_
ww14
ww15
_
ww17
=
ww
in
let!
(#,#)
ipv
ipv1
=
readIntArray#
ww17
ww15
ipv6
in
let!
(#,#)
ipv2
ipv3
=
readMutVar#
ww14
ipv
in
let!
(#,#)
ipv2
ipv3
=
atomicModifyMutVar#
ww
newRef4
ipv2
in
let!
b1
as
I#
_
=
ipv3
in
let!
(#,#)
ipv
ipv1
=
newRef2
$fAllocTypeClosure
STRef
ww
b1
let!
Stack
_
ds2
=
ipv3
in
let!
dt1
=
case
ds2
of
[]
→
MachSetup
…
:
x
_
→
let!
CallFrame
dt1
env
_
_
=
x
in
let!
ExecEnv
_
_
_
_
ds5
_
_
_
_
_
_
=
env
in
case
ds5
of
CFunction
name
→
$WInC
name
…
LuaFunction
name
_
→
let!
nt
=
name
in
InLua
nt
dt1
…
…
in
let!
nt
=
fid
in
RefLoc
dt1
InLua
nt
ipv1
MkClosure
LuaFunction
:
I#
dt
fid
wild
let!
MVector
dt
_
dt2
=
v'
in
let!
I#
dt6
=
n
in
MVector
dt
dt6
dt2
ipv2
in
let!
nt
as
ClosureRef
_
_
_
_
_
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
ipv
in
let!
SizedVector'
_
dt1
_
dt3
=
ipv1
in
let!
(#,#)
ipv
ipv1
=
readArray#
dt3
+#
dt1
dt
ipv
in
let!
STRef
var#
=
ipv1
in
let!
s2#
=
writeMutVar#
var#
Closure
nt
ipv
in
(#,#)
s2#
lvl
…
…
OP_VARARG
dt
b
→
let!
(#,#)
ipv
ipv1
=
readMutVar#
ww
w
in
let!
(#,#)
ipv
_
=
setCallResults
wild
I#
dt
b
ipv1
ipv
in
(#,#)
ipv
lvl
…
OP_EXTRAARG
_
→
raiseIO#
lvl
w
…
…
(34)
execute
=
λ
w
w
w
→
let!
VM
ww
_
ww
ww
=
w
in
let!
MachineEnv
_
_
ww
_
ww
_
ww
ww
_
ww
ww
ww
=
ww
in
let!
ExecEnv
ww
ww
_
ww
ww
ww
_
ww
ww
_
ww
=
ww
in
let!
I#
ww
=
w
in
$wexecute
ww
ww
ww
ww
ww
ww
ww
ww
ww
ww
ww
ww
ww
ww
ww
ww
ww
w
…
(1)
execute
=
execute
…
(7)
$s=<<
=
λ
f
x
→
bindIO1
x
f
…
(1)
$s=<<
=
$s=<<
…
(1)
$slvalToRval
=
$slvalToRval
…
(1)
$fRValueUpvalue
=
$slvalToRval
…
(1)
$slvalToRval
=
$slvalToRval
…
(1)
$fRValueReg
=
$slvalToRval
…
(1)
$sget
=
$slvalToRval
…
(1)
$slvalToRval
=
$slvalToRval
…
(1)
$fRValueUpIx
=
$slvalToRval
…
(1)
$sget
=
$slvalToRval
…
(1)
$cget
=
$cget
…
(1)
$fRValueRK
=
$cget
…
(1)
$sget
=
$cget
…
(1)
$s<$>
=
$fFunctorIO2
…
(26)
$sfor_
=
λ
eta
eta1
eta
→
let
rec
go
=
λ
ds
eta
→
case
ds
of
[]
→
(#,#)
eta
()
…
:
y
ys
→
let!
(#,#)
ipv
_
=
eta1
y
eta
in
go
ys
ipv
…
…
in
go
eta
eta
…
(1)
$sfor_
=
$sfor_
…
(1)
$sforM_
=
$sfor_
…
rec
(124)
$spoly_foldlM_loop
=
λ
sc
sc
sc
sc
sc
sg
sc
→
case
sc
of
[]
→
(#,#)
sc
(,)
MVector
sc
sc
sc
I#
sc
…
:
x
xs1
→
let
y
=
+#
sc
1
…
in
case
tagToEnum#
<#
sc
y
of
False
→
let!
s'#
=
writeArray#
sc
+#
sc
sc
x
sc
in
$spoly_foldlM_loop
s'#
xs1
sc
sc
sc
y
…
True
→
let
$j
=
λ
n#
→
let!
(#,#)
ipv
ipv1
=
newArray#
n#
uninitialised
sc
in
let!
s'#
=
copyMutableArray#
sc
sc
ipv1
0
sc
ipv
in
let!
s'#
=
writeArray#
ipv1
sc
x
s'#
in
$spoly_foldlM_loop
s'#
xs1
0
n#
ipv1
y
…
in
case
tagToEnum#
<=#
sc
1
of
False
→
let
y2
=
-#
y
sc
…
in
case
tagToEnum#
<=#
sc
y2
of
False
→
$j
+#
sc
sc
…
True
→
$j
+#
sc
y2
…
…
True
→
let
y2
=
-#
y
sc
…
in
case
tagToEnum#
<=#
1
y2
of
False
→
$j
+#
sc
1
…
True
→
$j
+#
sc
y2
…
…
…
…
…
(91)
$w$s$fTraversableVector_$ctraverse
=
λ
w
ww
ww
ww
w
→
let
rec
$wgo
=
λ
ww
w
→
case
tagToEnum#
>=#
ww
ww
of
False
→
let!
Unit#
ipv
=
indexArray#
ww
+#
ww
ww
in
let!
(#,#)
ipv
ipv1
=
w
ipv
w
in
let!
(#,#)
ipv2
ipv3
=
$wgo
+#
ww
1
ipv
in
(#,#)
ipv2
:
ipv1
ipv3
…
True
→
(#,#)
w
[]
…
…
in
let!
(#,#)
ipv
ipv1
=
$wgo
0
w
in
(#,#)
ipv
let!
(#,#)
_
ipv2
=
runRW#
λ
s1
→
let!
(#,#)
ipv
ipv1
=
newArray#
0
uninitialised
s1
in
let!
(#,#)
ipv6
ipv7
=
$spoly_foldlM_loop
ipv
ipv1
0
0
ipv1
0
in
let!
(,)
v'
n
=
ipv7
in
let!
MVector
dt
_
dt2
=
v'
in
let!
I#
dt6
=
n
in
let!
(#,#)
ipv
ipv1
=
unsafeFreezeArray#
dt2
ipv6
in
(#,#)
ipv
Vector
dt
dt6
ipv1
in
ipv2
…
(14)
$s$fTraversableVector_$ctraverse
=
λ
w
w
w
→
let!
Vector
ww
ww
ww
=
w
in
$w$s$fTraversableVector_$ctraverse
w
ww
ww
ww
w
…
(1)
$s$fTraversableVector_$ctraverse
=
$s$fTraversableVector_$ctraverse
…
(16)
$sunsafeRead
=
λ
eta
eta1
eta
→
let!
MVector
dt
_
dt2
=
eta
in
let!
I#
y
=
eta1
in
readArray#
dt2
+#
dt
y
eta
…
(1)
$sunsafeRead
=
$sunsafeRead
…
rec
(17)
poly_go
=
λ
ds
eta
→
case
ds
of
[]
→
(#,#)
eta
()
…
:
y
ys
→
let!
(#,#)
ipv
_
=
y
eta
in
poly_go
ys
ipv
…
…
(6)
$ssequenceA_
=
λ
eta
eta
→
poly_go
eta
eta
…
(1)
$ssequenceA_
=
$ssequenceA_
…
(39)
$szipWithM_
=
λ
f
xs
ys
eta
→
let
rec
go
=
λ
ds
_ys
eta
→
case
ds
of
[]
→
(#,#)
eta
()
…
:
ipv
ipv1
→
case
_ys
of
[]
→
(#,#)
eta
()
…
:
ipv2
ipv3
→
let!
(#,#)
ipv
_
=
f
ipv
ipv2
eta
in
go
ipv1
ipv3
ipv
…
…
…
in
go
xs
ys
eta
…
(1)
$szipWithM_
=
$szipWithM_
…
(33)
$s$fTraversable[]_$ctraverse
=
λ
eta
eta
eta
→
let
rec
go
=
λ
ds
eta
→
case
ds
of
[]
→
(#,#)
eta
[]
…
:
y
ys
→
let!
(#,#)
ipv
ipv1
=
eta
y
eta
in
let!
(#,#)
ipv2
ipv3
=
go
ys
ipv
in
(#,#)
ipv2
:
ipv1
ipv3
…
…
in
go
eta
eta
…
(1)
$s$fTraversable[]_$ctraverse
=
$s$fTraversable[]_$ctraverse
…