Hmmm, I hadn't realised the limit was that small.
As you've probably figured out, the constant to tweak is NUM_FIXUPS
in prelude.h.
The new code generator won't have this limitation (the number of fixups will
be limited by the C stack depth).
Alastair
> This file cracks hugs up with a
>
> ERROR "Test.lhs": Compiled code too complex
>
> > data RawByteCode
> > = RawNop
> > | RawAconst_null
> > | RawIconst_m1
> > | RawIconst_0
> > | RawIconst_1
> > | RawIconst_2
> > | RawIconst_3
> > | RawIconst_4
> > | RawIconst_5
> > | RawLconst_0
> > | RawLconst_1
> > | RawFconst_0
> > | RawFconst_1
> > | RawFconst_2
> > | RawDconst_0
> > | RawDconst_1
> > | RawBipush
> > | RawSipush
> > | RawLdc
> > | RawLdc_w
> > | RawLdc2_w
> > | RawIload
> > | RawLload
> > | RawFload
> > | RawDload
> > | RawAload
> > | RawIload_0
> > | RawIload_1
> > | RawIload_2
> > | RawIload_3
> > | RawLload_0
> > | RawLload_1
> > | RawLload_2
> > | RawLload_3
> > | RawFload_0
> > | RawFload_1
> > | RawFload_2
> > | RawFload_3
> > | RawDload_0
> > | RawDload_1
> > | RawDload_2
> > | RawDload_3
> > | RawAload_0
> > | RawAload_1
> > | RawAload_2
> > | RawAload_3
> > | RawIaload
> > | RawLaload
> > | RawFaload
> > | RawDaload
> > | RawAaload
> > | RawBaload
> > | RawCaload
> > | RawSaload
> > | RawIstore
> > | RawLstore
> > | RawFstore
> > | RawDstore
> > | RawAstore
> > | RawIstore_0
> > | RawIstore_1
> > | RawIstore_2
> > | RawIstore_3
> > | RawLstore_0
> > | RawLstore_1
> > | RawLstore_2
> > | RawLstore_3
> > | RawFstore_0
> > | RawFstore_1
> > | RawFstore_2
> > | RawFstore_3
> > | RawDstore_0
> > | RawDstore_1
> > | RawDstore_2
> > | RawDstore_3
> > | RawAstore_0
> > | RawAstore_1
> > | RawAstore_2
> > | RawAstore_3
> > | RawIastore
> > | RawLastore
> > | RawFastore
> > | RawDastore
> > | RawAastore
> > | RawBastore
> > | RawCastore
> > | RawSastore
> > | RawPop
> > | RawPop2
> > | RawDup
> > | RawDup_x1
> > | RawDup_x2
> > | RawDup2
> > | RawDup2_x1
> > | RawDup2_x2
> > | RawSwap
> > | RawIadd
> > | RawLadd
> > | RawFadd
> > | RawDadd
> > | RawIsub
> > | RawLsub
> > | RawFsub
> > | RawDsub
> > | RawImul
> > | RawLmul
> > | RawFmul
> > | RawDmul
> > | RawIdiv
> > | RawLdiv
> > | RawFdiv
> > | RawDdiv
> > | RawIrem
> > | RawLrem
> > | RawFrem
> > | RawDrem
> > | RawIneg
> > | RawLneg
> > | RawFneg
> > | RawDneg
> > | RawIshl
> > | RawLshl
> > | RawIshr
> > | RawLshr
> > | RawIushr
> > | RawLushr
> > | RawIand
> > | RawLand
> > | RawIor
> > | RawLor
> > | RawIxor
> > | RawLxor
> > | RawIinc
> > | RawI2l
> > | RawI2f
> > | RawI2d
> > | RawL2i
> > | RawL2f
> > | RawL2d
> > | RawF2i
> > | RawF2l
> > | RawF2d
> > | RawD2i
> > | RawD2l
> > | RawD2f
> > | RawInt2byte
> > | RawInt2char
> > | RawInt2short
> > | RawLcmp
> > | RawFcmpl
> > | RawFcmpg
> > | RawDcmpl
> > | RawDcmpg
> > | RawIfeq
> > | RawIfne
> > | RawIflt
> > | RawIfge
> > | RawIfgt
> > | RawIfle
> > | RawIf_icmpeq
> > | RawIf_icmpne
> > | RawIf_icmplt
> > | RawIf_icmpge
> > | RawIf_icmpgt
> > | RawIf_icmple
> > | RawIf_acmpeq
> > | RawIf_acmpne
> > | RawGoto
> > | RawJsr
> > | RawRet
> > | RawTableswitch
> > | RawLookupswitch
> > | RawIreturn
> > | RawLreturn
> > | RawFreturn
> > | RawDreturn
> > | RawAreturn
> > | RawReturn
> > | RawGetstatic
> > | RawPutstatic
> > | RawGetfield
> > | RawPutfield
> > | RawInvokevirtual
> > | RawInvokenonvirtual
> > | RawInvokestatic
> > | RawInvokeinterface
> > | RawXxxunusedxxx
> > | RawNew
> > | RawNewarray
> > | RawAnewarray
> > | RawArraylength
> > | RawAthrow
> > | RawCheckcast
> > | RawInstanceof
> > | RawMonitorenter
> > | RawMonitorexit
> > | RawWide
> > | RawMultianewarray
> > | RawIfnull
> > | RawIfnonnull
> > | RawGoto_w
> > | RawJsr_w
> > | RawBreakpoint
> > | RawLdc_quick
> > | RawLdc_w_quick
> > | RawLdc2_w_quick
> > | RawGetfield_quick
> > | RawPutfield_quick
> > | RawGetfield2_quick
> > | RawPutfield2_quick
> > | RawGetstatic_quick
> > | RawPutstatic_quick
> > | RawGetstatic2_quick
> > | RawPutstatic2_quick
> > | RawInvokevirtual_quick
> > | RawInvokenonvirtual_quick
> > | RawInvokesuper_quick
> > | RawInvokestatic_quick
> > | RawInvokeinterface_quick
> > | RawInvokevirtualobject_quick
> > | RawInvokeignored_quick
> > | RawNew_quick
> > | RawAnewarray_quick
> > | RawMultianewarray_quick
> > | RawCheckcast_quick
> > | RawInstanceof_quick
> > | RawInvokevirtual_quick_w
> > | RawGetfield_quick_w
> > | RawPutfield_quick_w
> > deriving (Enum, Show)