From cc1099a04169b768cb4803686ee20423a6d3fede Mon Sep 17 00:00:00 2001 From: Ondrej Zajicek Date: Mon, 3 Jul 2023 17:00:58 +0200 Subject: Filter: Implement multiple dispatch for methods - Extend method descriptors with type signature - Daisy chain method descriptors for the same symbol - Dispatch methods for same symbol based on type signature - Split add/delete/filter operations to multiple methods - Replace ad-hoc dispatch of old-style syntax with scope-based dispatch - Also change method->arg_num to count initial arg It still needs some improvements, like better handling of untyped expressions and better error reporting when no dispatch can be done. The multiple dispatch could also be extended to dispatch regular function-like expressions in a uniform way. --- filter/data.h | 2 ++ 1 file changed, 2 insertions(+) (limited to 'filter/data.h') diff --git a/filter/data.h b/filter/data.h index baa7114c..e136b65f 100644 --- a/filter/data.h +++ b/filter/data.h @@ -67,7 +67,9 @@ enum f_type { struct f_method { struct symbol *sym; struct f_inst *(*new_inst)(struct f_inst *obj, struct f_inst *args); + const struct f_method *next; uint arg_num; + enum f_type args_type[]; }; /* Filter value; size of this affects filter memory consumption */ -- cgit v1.2.3