@@ -641,6 +641,297 @@ public void RegisterExternal<TP0, TP1, TP2, TP3, TP4, TP5, TP6, TP7, TP8, TP9>(s
641641 cb ( p0 , p1 , p2 , p3 , p4 , p5 , p6 , p7 , p8 , p9 ) ;
642642 } ) ;
643643 }
644+
645+ public void OverrideFunction < TR > ( string name , ExternalFunc < TR > cb )
646+ {
647+ OverrideFunctionUnsafe ( name , vm => vm . Push ( cb ( ) ) ) ;
648+ }
649+
650+ public void OverrideFunction < TR , TP0 > ( string name , ExternalFunc < TR , TP0 > cb )
651+ {
652+ OverrideFunctionUnsafe ( name , vm =>
653+ {
654+ var p0 = vm . Pop < TP0 > ( ) ;
655+ vm . Push ( cb ( p0 ) ) ;
656+ } ) ;
657+ }
658+
659+ public void OverrideFunction < TR , TP0 , TP1 > ( string name , ExternalFunc < TR , TP0 , TP1 > cb )
660+ {
661+ OverrideFunctionUnsafe ( name , vm =>
662+ {
663+ var p1 = vm . Pop < TP1 > ( ) ;
664+ var p0 = vm . Pop < TP0 > ( ) ;
665+ vm . Push ( cb ( p0 , p1 ) ) ;
666+ } ) ;
667+ }
668+
669+ public void OverrideFunction < TR , TP0 , TP1 , TP2 > ( string name , ExternalFunc < TR , TP0 , TP1 , TP2 > cb )
670+ {
671+ OverrideFunctionUnsafe ( name , vm =>
672+ {
673+ var p2 = vm . Pop < TP2 > ( ) ;
674+ var p1 = vm . Pop < TP1 > ( ) ;
675+ var p0 = vm . Pop < TP0 > ( ) ;
676+ vm . Push ( cb ( p0 , p1 , p2 ) ) ;
677+ } ) ;
678+ }
679+
680+ public void OverrideFunction < TR , TP0 , TP1 , TP2 , TP3 > ( string name , ExternalFunc < TR , TP0 , TP1 , TP2 , TP3 > cb )
681+ {
682+ OverrideFunctionUnsafe ( name , vm =>
683+ {
684+ var p3 = vm . Pop < TP3 > ( ) ;
685+ var p2 = vm . Pop < TP2 > ( ) ;
686+ var p1 = vm . Pop < TP1 > ( ) ;
687+ var p0 = vm . Pop < TP0 > ( ) ;
688+ vm . Push ( cb ( p0 , p1 , p2 , p3 ) ) ;
689+ } ) ;
690+ }
691+
692+ public void OverrideFunction < TR , TP0 , TP1 , TP2 , TP3 , TP4 > ( string name ,
693+ ExternalFunc < TR , TP0 , TP1 , TP2 , TP3 , TP4 > cb )
694+ {
695+ OverrideFunctionUnsafe ( name , vm =>
696+ {
697+ var p4 = vm . Pop < TP4 > ( ) ;
698+ var p3 = vm . Pop < TP3 > ( ) ;
699+ var p2 = vm . Pop < TP2 > ( ) ;
700+ var p1 = vm . Pop < TP1 > ( ) ;
701+ var p0 = vm . Pop < TP0 > ( ) ;
702+ vm . Push ( cb ( p0 , p1 , p2 , p3 , p4 ) ) ;
703+ } ) ;
704+ }
705+
706+ public void OverrideFunction < TR , TP0 , TP1 , TP2 , TP3 , TP4 , TP5 > ( string name ,
707+ ExternalFunc < TR , TP0 , TP1 , TP2 , TP3 , TP4 , TP5 > cb )
708+ {
709+ OverrideFunctionUnsafe ( name , vm =>
710+ {
711+ var p5 = vm . Pop < TP5 > ( ) ;
712+ var p4 = vm . Pop < TP4 > ( ) ;
713+ var p3 = vm . Pop < TP3 > ( ) ;
714+ var p2 = vm . Pop < TP2 > ( ) ;
715+ var p1 = vm . Pop < TP1 > ( ) ;
716+ var p0 = vm . Pop < TP0 > ( ) ;
717+ vm . Push ( cb ( p0 , p1 , p2 , p3 , p4 , p5 ) ) ;
718+ } ) ;
719+ }
720+
721+ public void OverrideFunction < TR , TP0 , TP1 , TP2 , TP3 , TP4 , TP5 , TP6 > ( string name ,
722+ ExternalFunc < TR , TP0 , TP1 , TP2 , TP3 , TP4 , TP5 , TP6 > cb )
723+ {
724+ OverrideFunctionUnsafe ( name , vm =>
725+ {
726+ var p6 = vm . Pop < TP6 > ( ) ;
727+ var p5 = vm . Pop < TP5 > ( ) ;
728+ var p4 = vm . Pop < TP4 > ( ) ;
729+ var p3 = vm . Pop < TP3 > ( ) ;
730+ var p2 = vm . Pop < TP2 > ( ) ;
731+ var p1 = vm . Pop < TP1 > ( ) ;
732+ var p0 = vm . Pop < TP0 > ( ) ;
733+ vm . Push ( cb ( p0 , p1 , p2 , p3 , p4 , p5 , p6 ) ) ;
734+ } ) ;
735+ }
736+
737+ public void OverrideFunction < TR , TP0 , TP1 , TP2 , TP3 , TP4 , TP5 , TP6 , TP7 > ( string name ,
738+ ExternalFunc < TR , TP0 , TP1 , TP2 , TP3 , TP4 , TP5 , TP6 , TP7 > cb )
739+ {
740+ OverrideFunctionUnsafe ( name , vm =>
741+ {
742+ var p7 = vm . Pop < TP7 > ( ) ;
743+ var p6 = vm . Pop < TP6 > ( ) ;
744+ var p5 = vm . Pop < TP5 > ( ) ;
745+ var p4 = vm . Pop < TP4 > ( ) ;
746+ var p3 = vm . Pop < TP3 > ( ) ;
747+ var p2 = vm . Pop < TP2 > ( ) ;
748+ var p1 = vm . Pop < TP1 > ( ) ;
749+ var p0 = vm . Pop < TP0 > ( ) ;
750+ vm . Push ( cb ( p0 , p1 , p2 , p3 , p4 , p5 , p6 , p7 ) ) ;
751+ } ) ;
752+ }
753+
754+ public void OverrideFunction < TR , TP0 , TP1 , TP2 , TP3 , TP4 , TP5 , TP6 , TP7 , TP8 > ( string name ,
755+ ExternalFunc < TR , TP0 , TP1 , TP2 , TP3 , TP4 , TP5 , TP6 , TP7 , TP8 > cb )
756+ {
757+ OverrideFunctionUnsafe ( name , vm =>
758+ {
759+ var p8 = vm . Pop < TP8 > ( ) ;
760+ var p7 = vm . Pop < TP7 > ( ) ;
761+ var p6 = vm . Pop < TP6 > ( ) ;
762+ var p5 = vm . Pop < TP5 > ( ) ;
763+ var p4 = vm . Pop < TP4 > ( ) ;
764+ var p3 = vm . Pop < TP3 > ( ) ;
765+ var p2 = vm . Pop < TP2 > ( ) ;
766+ var p1 = vm . Pop < TP1 > ( ) ;
767+ var p0 = vm . Pop < TP0 > ( ) ;
768+ vm . Push ( cb ( p0 , p1 , p2 , p3 , p4 , p5 , p6 , p7 , p8 ) ) ;
769+ } ) ;
770+ }
771+
772+ public void OverrideFunction < TR , TP0 , TP1 , TP2 , TP3 , TP4 , TP5 , TP6 , TP7 , TP8 , TP9 > ( string name ,
773+ ExternalFunc < TR , TP0 , TP1 , TP2 , TP3 , TP4 , TP5 , TP6 , TP7 , TP8 , TP9 > cb )
774+ {
775+ OverrideFunctionUnsafe ( name , vm =>
776+ {
777+ var p9 = vm . Pop < TP9 > ( ) ;
778+ var p8 = vm . Pop < TP8 > ( ) ;
779+ var p7 = vm . Pop < TP7 > ( ) ;
780+ var p6 = vm . Pop < TP6 > ( ) ;
781+ var p5 = vm . Pop < TP5 > ( ) ;
782+ var p4 = vm . Pop < TP4 > ( ) ;
783+ var p3 = vm . Pop < TP3 > ( ) ;
784+ var p2 = vm . Pop < TP2 > ( ) ;
785+ var p1 = vm . Pop < TP1 > ( ) ;
786+ var p0 = vm . Pop < TP0 > ( ) ;
787+ vm . Push ( cb ( p0 , p1 , p2 , p3 , p4 , p5 , p6 , p7 , p8 , p9 ) ) ;
788+ } ) ;
789+ }
790+
791+ public void OverrideFunction ( string name , ExternalFuncV cb )
792+ {
793+ OverrideFunctionUnsafe ( name , _ => cb ( ) ) ;
794+ }
795+
796+ public void OverrideFunction < TP0 > ( string name , ExternalFuncV < TP0 > cb )
797+ {
798+ OverrideFunctionUnsafe ( name , vm =>
799+ {
800+ var p0 = vm . Pop < TP0 > ( ) ;
801+ cb ( p0 ) ;
802+ } ) ;
803+ }
804+
805+ public void OverrideFunction < TP0 , TP1 > ( string name , ExternalFuncV < TP0 , TP1 > cb )
806+ {
807+ OverrideFunctionUnsafe ( name , vm =>
808+ {
809+ var p1 = vm . Pop < TP1 > ( ) ;
810+ var p0 = vm . Pop < TP0 > ( ) ;
811+ cb ( p0 , p1 ) ;
812+ } ) ;
813+ }
814+
815+ public void OverrideFunction < TP0 , TP1 , TP2 > ( string name , ExternalFuncV < TP0 , TP1 , TP2 > cb )
816+ {
817+ OverrideFunctionUnsafe ( name , vm =>
818+ {
819+ var p2 = vm . Pop < TP2 > ( ) ;
820+ var p1 = vm . Pop < TP1 > ( ) ;
821+ var p0 = vm . Pop < TP0 > ( ) ;
822+ cb ( p0 , p1 , p2 ) ;
823+ } ) ;
824+ }
825+
826+ public void OverrideFunction < TP0 , TP1 , TP2 , TP3 > ( string name , ExternalFuncV < TP0 , TP1 , TP2 , TP3 > cb )
827+ {
828+ OverrideFunctionUnsafe ( name , vm =>
829+ {
830+ var p3 = vm . Pop < TP3 > ( ) ;
831+ var p2 = vm . Pop < TP2 > ( ) ;
832+ var p1 = vm . Pop < TP1 > ( ) ;
833+ var p0 = vm . Pop < TP0 > ( ) ;
834+ cb ( p0 , p1 , p2 , p3 ) ;
835+ } ) ;
836+ }
837+
838+ public void OverrideFunction < TP0 , TP1 , TP2 , TP3 , TP4 > ( string name , ExternalFuncV < TP0 , TP1 , TP2 , TP3 , TP4 > cb )
839+ {
840+ OverrideFunctionUnsafe ( name , vm =>
841+ {
842+ var p4 = vm . Pop < TP4 > ( ) ;
843+ var p3 = vm . Pop < TP3 > ( ) ;
844+ var p2 = vm . Pop < TP2 > ( ) ;
845+ var p1 = vm . Pop < TP1 > ( ) ;
846+ var p0 = vm . Pop < TP0 > ( ) ;
847+ cb ( p0 , p1 , p2 , p3 , p4 ) ;
848+ } ) ;
849+ }
850+
851+ public void OverrideFunction < TP0 , TP1 , TP2 , TP3 , TP4 , TP5 > ( string name ,
852+ ExternalFuncV < TP0 , TP1 , TP2 , TP3 , TP4 , TP5 > cb )
853+ {
854+ OverrideFunctionUnsafe ( name , vm =>
855+ {
856+ var p5 = vm . Pop < TP5 > ( ) ;
857+ var p4 = vm . Pop < TP4 > ( ) ;
858+ var p3 = vm . Pop < TP3 > ( ) ;
859+ var p2 = vm . Pop < TP2 > ( ) ;
860+ var p1 = vm . Pop < TP1 > ( ) ;
861+ var p0 = vm . Pop < TP0 > ( ) ;
862+ cb ( p0 , p1 , p2 , p3 , p4 , p5 ) ;
863+ } ) ;
864+ }
865+
866+ public void OverrideFunction < TP0 , TP1 , TP2 , TP3 , TP4 , TP5 , TP6 > ( string name ,
867+ ExternalFuncV < TP0 , TP1 , TP2 , TP3 , TP4 , TP5 , TP6 > cb )
868+ {
869+ OverrideFunctionUnsafe ( name , vm =>
870+ {
871+ var p6 = vm . Pop < TP6 > ( ) ;
872+ var p5 = vm . Pop < TP5 > ( ) ;
873+ var p4 = vm . Pop < TP4 > ( ) ;
874+ var p3 = vm . Pop < TP3 > ( ) ;
875+ var p2 = vm . Pop < TP2 > ( ) ;
876+ var p1 = vm . Pop < TP1 > ( ) ;
877+ var p0 = vm . Pop < TP0 > ( ) ;
878+ cb ( p0 , p1 , p2 , p3 , p4 , p5 , p6 ) ;
879+ } ) ;
880+ }
881+
882+ public void OverrideFunction < TP0 , TP1 , TP2 , TP3 , TP4 , TP5 , TP6 , TP7 > ( string name ,
883+ ExternalFuncV < TP0 , TP1 , TP2 , TP3 , TP4 , TP5 , TP6 , TP7 > cb )
884+ {
885+ OverrideFunctionUnsafe ( name , vm =>
886+ {
887+ var p7 = vm . Pop < TP7 > ( ) ;
888+ var p6 = vm . Pop < TP6 > ( ) ;
889+ var p5 = vm . Pop < TP5 > ( ) ;
890+ var p4 = vm . Pop < TP4 > ( ) ;
891+ var p3 = vm . Pop < TP3 > ( ) ;
892+ var p2 = vm . Pop < TP2 > ( ) ;
893+ var p1 = vm . Pop < TP1 > ( ) ;
894+ var p0 = vm . Pop < TP0 > ( ) ;
895+ cb ( p0 , p1 , p2 , p3 , p4 , p5 , p6 , p7 ) ;
896+ } ) ;
897+ }
898+
899+ public void OverrideFunction < TP0 , TP1 , TP2 , TP3 , TP4 , TP5 , TP6 , TP7 , TP8 > ( string name ,
900+ ExternalFuncV < TP0 , TP1 , TP2 , TP3 , TP4 , TP5 , TP6 , TP7 , TP8 > cb )
901+ {
902+ OverrideFunctionUnsafe ( name , vm =>
903+ {
904+ var p8 = vm . Pop < TP8 > ( ) ;
905+ var p7 = vm . Pop < TP7 > ( ) ;
906+ var p6 = vm . Pop < TP6 > ( ) ;
907+ var p5 = vm . Pop < TP5 > ( ) ;
908+ var p4 = vm . Pop < TP4 > ( ) ;
909+ var p3 = vm . Pop < TP3 > ( ) ;
910+ var p2 = vm . Pop < TP2 > ( ) ;
911+ var p1 = vm . Pop < TP1 > ( ) ;
912+ var p0 = vm . Pop < TP0 > ( ) ;
913+ cb ( p0 , p1 , p2 , p3 , p4 , p5 , p6 , p7 , p8 ) ;
914+ } ) ;
915+ }
916+
917+ public void OverrideFunction < TP0 , TP1 , TP2 , TP3 , TP4 , TP5 , TP6 , TP7 , TP8 , TP9 > ( string name ,
918+ ExternalFuncV < TP0 , TP1 , TP2 , TP3 , TP4 , TP5 , TP6 , TP7 , TP8 , TP9 > cb )
919+ {
920+ OverrideFunctionUnsafe ( name , vm =>
921+ {
922+ var p9 = vm . Pop < TP9 > ( ) ;
923+ var p8 = vm . Pop < TP8 > ( ) ;
924+ var p7 = vm . Pop < TP7 > ( ) ;
925+ var p6 = vm . Pop < TP6 > ( ) ;
926+ var p5 = vm . Pop < TP5 > ( ) ;
927+ var p4 = vm . Pop < TP4 > ( ) ;
928+ var p3 = vm . Pop < TP3 > ( ) ;
929+ var p2 = vm . Pop < TP2 > ( ) ;
930+ var p1 = vm . Pop < TP1 > ( ) ;
931+ var p0 = vm . Pop < TP0 > ( ) ;
932+ cb ( p0 , p1 , p2 , p3 , p4 , p5 , p6 , p7 , p8 , p9 ) ;
933+ } ) ;
934+ }
644935
645936 private void Push < T > ( T value )
646937 {
@@ -704,6 +995,17 @@ private void RegisterExternalUnsafe(DaedalusSymbol sym, ExternalFunc cb)
704995 Native . ZkDaedalusVm_registerExternal ( Handle , sym . Handle , _nativeExternalCallback ,
705996 GCHandle . ToIntPtr ( gcHandle ) ) ;
706997 }
998+
999+ private void OverrideFunctionUnsafe ( string name , ExternalFunc cb )
1000+ {
1001+ var sym = GetSymbolByName ( name ) ;
1002+ if ( sym == null ) throw new Exception ( "Symbol not found" ) ;
1003+
1004+ var gcHandle = GCHandle . Alloc ( cb ) ;
1005+ _externalCallbacks . Add ( gcHandle ) ;
1006+ Native . ZkDaedalusVm_overrideFunction ( Handle , name , _nativeExternalCallback ,
1007+ GCHandle . ToIntPtr ( gcHandle ) ) ;
1008+ }
7071009
7081010 [ MonoPInvokeCallback ]
7091011 private static void _nativeExternalCallbackHandler ( IntPtr ctx , UIntPtr vm )
0 commit comments