@@ -641,6 +641,297 @@ public void RegisterExternal<TP0, TP1, TP2, TP3, TP4, TP5, TP6, TP7, TP8, TP9>(s
641
641
cb ( p0 , p1 , p2 , p3 , p4 , p5 , p6 , p7 , p8 , p9 ) ;
642
642
} ) ;
643
643
}
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
+ }
644
935
645
936
private void Push < T > ( T value )
646
937
{
@@ -704,6 +995,17 @@ private void RegisterExternalUnsafe(DaedalusSymbol sym, ExternalFunc cb)
704
995
Native . ZkDaedalusVm_registerExternal ( Handle , sym . Handle , _nativeExternalCallback ,
705
996
GCHandle . ToIntPtr ( gcHandle ) ) ;
706
997
}
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
+ }
707
1009
708
1010
[ MonoPInvokeCallback ]
709
1011
private static void _nativeExternalCallbackHandler ( IntPtr ctx , UIntPtr vm )
0 commit comments