]> Nishi Git Mirror - gwion.git/commitdiff
:art: op_get
authorJérémie Astor <fennecdjay@gmail.com>
Wed, 7 Jul 2021 00:29:53 +0000 (02:29 +0200)
committerJérémie Astor <fennecdjay@gmail.com>
Wed, 7 Jul 2021 00:29:53 +0000 (02:29 +0200)
include/operator.h
include/plug.h
plug
src/parse/operator.c

index 72996780aa3863515740d79e219a92862febd8eb..cda04f19b601c96d9c8b0d61387e1ddff5e11647 100644 (file)
@@ -78,6 +78,7 @@ struct TemplateScan {
 
 ANN void   op_cpy(const Env env, const struct Op_Import *opi);
 ANN m_bool add_op(const Gwion gwion, const struct Op_Import *);
+ANN void* op_get(const Env env, struct Op_Import *opi);
 ANN Type   op_check(const Env, struct Op_Import *);
 ANN m_bool op_emit(const Emitter, const struct Op_Import *);
 ANN m_bool operator_set_func(const struct Op_Import *);
index 07b2e53fe8a91e17585eba3b6a67ac46d997d60e..adb913bc585acebe04da24bc6be8a74240d67d8c 100644 (file)
@@ -17,9 +17,9 @@ ANN m_bool plugin_ini(struct Gwion_ *gwion, const m_str iname);
 #define GWDEPEND_NAME gwdepend
 #define GWMODINI(a)                                                            \
   ANN2(1)                                                                      \
-  void *GWMODINI_NAME(const struct Gwion_ *gwion NUSED, const Vector args NUSED)
+  void *GWMODINI_NAME(struct Gwion_ *const gwion NUSED, const Vector args NUSED)
 #define GWMODEND(a)                                                            \
-  ANN void GWMODEND_NAME(const struct Gwion_ *gwion NUSED, void *self NUSED)
+  ANN void GWMODEND_NAME(struct Gwion_ *const gwion NUSED, void *self NUSED)
 #define GWDRIVER(a) ANN void GWDRIVER_NAME(DriverData *d)
 #define GWDEPEND    ANN m_str const *GWDEPEND_NAME(void)
 
diff --git a/plug b/plug
index b2c146f2a2d9789a45e00ce90d998ebec6f005ed..ab56ae7687294f6fbaf1d4089412219c3ffcd8de 160000 (submodule)
--- a/plug
+++ b/plug
@@ -1 +1 @@
-Subproject commit b2c146f2a2d9789a45e00ce90d998ebec6f005ed
+Subproject commit ab56ae7687294f6fbaf1d4089412219c3ffcd8de
index f00800200b58ce0b47e63112e5bd10303592e615..525b1f409a692798110385b16818cb3ba215e714 100644 (file)
@@ -260,6 +260,31 @@ ANN static Type op_check_tmpl(const Env env, struct Op_Import *opi) {
   return NULL;
 }
 
+ANN void* op_get(const Env env, struct Op_Import *opi) {
+  for (int i = 0; i < 2; ++i) {
+    Nspc nspc = env->curr;
+    do {
+      Type l = opi->lhs;
+      if (!nspc->info->op_map.ptr) continue;
+      const Map map = &nspc->info->op_map;
+      do {
+        Type r = opi->rhs;
+        do {
+           const m_int idx = map_index(map, (vtype)opi->op);
+           if(idx != -1) {
+             M_Operator *const mo = !i
+                    ? operator_find2((Vector)&VVAL(map, idx), l, r)
+                    : operator_find((Vector)&VVAL(map, idx), l, r);
+            if (mo)
+              return mo;
+          }
+        } while (r && (r = op_parent(env, r)));
+      } while (l && (l = op_parent(env, l)));
+    } while ((nspc = nspc->parent));
+  }
+  return NULL;
+}
+
 ANN Type op_check(const Env env, struct Op_Import *opi) {
   for (int i = 0; i < 2; ++i) {
     Nspc nspc = env->curr;