Changeset: 5620a3a96a33 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/5620a3a96a33
Added Files:
        monetdb5/mal/mal_arguments.h
Modified Files:
        monetdb5/mal/CMakeLists.txt
        monetdb5/mal/mal_interpreter.h
Branch: Dec2025
Log Message:

Make getArgReference* available through the installed include files.


diffs (264 lines):

diff --git a/monetdb5/mal/CMakeLists.txt b/monetdb5/mal/CMakeLists.txt
--- a/monetdb5/mal/CMakeLists.txt
+++ b/monetdb5/mal/CMakeLists.txt
@@ -10,6 +10,7 @@
 
 set(mal_public_headers
   ${CMAKE_CURRENT_SOURCE_DIR}/mal.h
+  ${CMAKE_CURRENT_SOURCE_DIR}/mal_arguments.h
   ${CMAKE_CURRENT_SOURCE_DIR}/mal_authorize.h
   ${CMAKE_CURRENT_SOURCE_DIR}/mal_client.h
   ${CMAKE_CURRENT_SOURCE_DIR}/mal_errors.h
diff --git a/monetdb5/mal/mal_arguments.h b/monetdb5/mal/mal_arguments.h
new file mode 100644
--- /dev/null
+++ b/monetdb5/mal/mal_arguments.h
@@ -0,0 +1,124 @@
+/*
+ * SPDX-License-Identifier: MPL-2.0
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0.  If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * For copyright information, see the file debian/copyright.
+ */
+
+#ifndef _MAL_ARGUMENTS_H
+#define _MAL_ARGUMENTS_H
+
+#include "mal_client.h"
+
+#if !defined(NDEBUG) && defined(__GNUC__)
+/* for ease of programming and debugging (assert reporting a useful
+ * location), we use a GNU C extension to check the type of arguments,
+ * and of course only when assertions are enabled */
+#define getArgReference_TYPE(s, pci, k, TYPE)                                  
\
+       ({                                                                      
                                                \
+               assert((s)->stk[(pci)->argv[k]].vtype == TYPE_##TYPE);  \
+               (TYPE *) getArgReference((s), (pci), (k));                      
        \
+       })
+#define getArgReference_msk(s, pci, k)                         \
+       ({                                                                      
                        \
+               ValRecord *v = &(s)->stk[(pci)->argv[k]];       \
+               assert(v->vtype == TYPE_msk);                           \
+               &v->val.mval;                                                   
        \
+       })
+#define getArgReference_bit(s, pci, k)                         \
+       ({                                                                      
                        \
+               ValRecord *v = &(s)->stk[(pci)->argv[k]];       \
+               assert(v->vtype == TYPE_bit);                           \
+               (bit *) &v->val.btval;                                          
\
+       })
+#define getArgReference_sht(s, pci, k)                         \
+       ({                                                                      
                        \
+               ValRecord *v = &(s)->stk[(pci)->argv[k]];       \
+               assert(v->vtype == TYPE_sht);                           \
+               &v->val.shval;                                                  
        \
+       })
+#define getArgReference_bat(s, pci, k)                         \
+       ({                                                                      
                        \
+               ValRecord *v = &(s)->stk[(pci)->argv[k]];       \
+               assert(v->bat);                                                 
        \
+               &v->val.bval;                                                   
        \
+       })
+#define getArgReference_int(s, pci, k)                         \
+       ({                                                                      
                        \
+               ValRecord *v = &(s)->stk[(pci)->argv[k]];       \
+               assert(v->vtype == TYPE_int);                           \
+               &v->val.ival;                                                   
        \
+       })
+#define getArgReference_bte(s, pci, k)                         \
+       ({                                                                      
                        \
+               ValRecord *v = &(s)->stk[(pci)->argv[k]];       \
+               assert(v->vtype == TYPE_bte);                           \
+               &v->val.btval;                                                  
        \
+       })
+#define getArgReference_oid(s, pci, k)                                         
        \
+       ({                                                                      
                                                \
+               ValRecord *v = &(s)->stk[(pci)->argv[k]];                       
        \
+               assert(v->vtype == TYPE_oid || v->vtype == TYPE_void);  \
+               &v->val.oval;                                                   
                                \
+       })
+#define getArgReference_ptr(s, pci, k)                         \
+       ({                                                                      
                        \
+               ValRecord *v = &(s)->stk[(pci)->argv[k]];       \
+               assert(v->vtype == TYPE_ptr);                           \
+               &v->val.pval;                                                   
        \
+       })
+#define getArgReference_flt(s, pci, k)                         \
+       ({                                                                      
                        \
+               ValRecord *v = &(s)->stk[(pci)->argv[k]];       \
+               assert(v->vtype == TYPE_flt);                           \
+               &v->val.fval;                                                   
        \
+       })
+#define getArgReference_dbl(s, pci, k)                         \
+       ({                                                                      
                        \
+               ValRecord *v = &(s)->stk[(pci)->argv[k]];       \
+               assert(v->vtype == TYPE_dbl);                           \
+               &v->val.dval;                                                   
        \
+       })
+#define getArgReference_lng(s, pci, k)                         \
+       ({                                                                      
                        \
+               ValRecord *v = &(s)->stk[(pci)->argv[k]];       \
+               assert(v->vtype == TYPE_lng);                           \
+               &v->val.lval;                                                   
        \
+       })
+#ifdef HAVE_HGE
+#define getArgReference_hge(s, pci, k)                         \
+       ({                                                                      
                        \
+               ValRecord *v = &(s)->stk[(pci)->argv[k]];       \
+               assert(v->vtype == TYPE_hge);                           \
+               &v->val.hval;                                                   
        \
+       })
+#endif
+#define getArgReference_str(s, pci, k)                         \
+       ({                                                                      
                        \
+               ValRecord *v = &(s)->stk[(pci)->argv[k]];       \
+               assert(v->vtype == TYPE_str);                           \
+               &v->val.sval;                                                   
        \
+       })
+#else
+#define getArgReference_TYPE(s, pci, k, TYPE)  ((TYPE *) getArgReference(s, 
pci, k))
+#define getArgReference_msk(s, pci, k) (&(s)->stk[(pci)->argv[k]].val.mval)
+#define getArgReference_bit(s, pci, k) ((bit *) 
&(s)->stk[(pci)->argv[k]].val.btval)
+#define getArgReference_sht(s, pci, k) (&(s)->stk[(pci)->argv[k]].val.shval)
+#define getArgReference_bat(s, pci, k) (&(s)->stk[(pci)->argv[k]].val.bval)
+#define getArgReference_int(s, pci, k) (&(s)->stk[(pci)->argv[k]].val.ival)
+#define getArgReference_bte(s, pci, k) (&(s)->stk[(pci)->argv[k]].val.btval)
+#define getArgReference_oid(s, pci, k) (&(s)->stk[(pci)->argv[k]].val.oval)
+#define getArgReference_ptr(s, pci, k) (&(s)->stk[(pci)->argv[k]].val.pval)
+#define getArgReference_flt(s, pci, k) (&(s)->stk[(pci)->argv[k]].val.fval)
+#define getArgReference_dbl(s, pci, k) (&(s)->stk[(pci)->argv[k]].val.dval)
+#define getArgReference_lng(s, pci, k) (&(s)->stk[(pci)->argv[k]].val.lval)
+#ifdef HAVE_HGE
+#define getArgReference_hge(s, pci, k) (&(s)->stk[(pci)->argv[k]].val.hval)
+#endif
+#define getArgReference_str(s, pci, k) (&(s)->stk[(pci)->argv[k]].val.sval)
+#endif
+
+#endif
diff --git a/monetdb5/mal/mal_interpreter.h b/monetdb5/mal/mal_interpreter.h
--- a/monetdb5/mal/mal_interpreter.h
+++ b/monetdb5/mal/mal_interpreter.h
@@ -18,6 +18,7 @@
 
 #include "mal_client.h"
 #include "mal_profiler.h"
+#include "mal_arguments.h"
 
 /*
  * Activation of a thread requires construction of the argument list
@@ -39,112 +40,5 @@ mal_export void garbageCollector(Client 
                                                                 int flag);
 
 mal_export ptr getArgReference(MalStkPtr stk, InstrPtr pci, int k);
-#if !defined(NDEBUG) && defined(__GNUC__)
-/* for ease of programming and debugging (assert reporting a useful
- * location), we use a GNU C extension to check the type of arguments,
- * and of course only when assertions are enabled */
-#define getArgReference_TYPE(s, pci, k, TYPE)                                  
\
-       ({                                                                      
                                                \
-               assert((s)->stk[(pci)->argv[k]].vtype == TYPE_##TYPE);  \
-               (TYPE *) getArgReference((s), (pci), (k));                      
        \
-       })
-#define getArgReference_msk(s, pci, k)                         \
-       ({                                                                      
                        \
-               ValRecord *v = &(s)->stk[(pci)->argv[k]];       \
-               assert(v->vtype == TYPE_msk);                           \
-               &v->val.mval;                                                   
        \
-       })
-#define getArgReference_bit(s, pci, k)                         \
-       ({                                                                      
                        \
-               ValRecord *v = &(s)->stk[(pci)->argv[k]];       \
-               assert(v->vtype == TYPE_bit);                           \
-               (bit *) &v->val.btval;                                          
\
-       })
-#define getArgReference_sht(s, pci, k)                         \
-       ({                                                                      
                        \
-               ValRecord *v = &(s)->stk[(pci)->argv[k]];       \
-               assert(v->vtype == TYPE_sht);                           \
-               &v->val.shval;                                                  
        \
-       })
-#define getArgReference_bat(s, pci, k)                         \
-       ({                                                                      
                        \
-               ValRecord *v = &(s)->stk[(pci)->argv[k]];       \
-               assert(v->bat);                                                 
        \
-               &v->val.bval;                                                   
        \
-       })
-#define getArgReference_int(s, pci, k)                         \
-       ({                                                                      
                        \
-               ValRecord *v = &(s)->stk[(pci)->argv[k]];       \
-               assert(v->vtype == TYPE_int);                           \
-               &v->val.ival;                                                   
        \
-       })
-#define getArgReference_bte(s, pci, k)                         \
-       ({                                                                      
                        \
-               ValRecord *v = &(s)->stk[(pci)->argv[k]];       \
-               assert(v->vtype == TYPE_bte);                           \
-               &v->val.btval;                                                  
        \
-       })
-#define getArgReference_oid(s, pci, k)                                         
        \
-       ({                                                                      
                                                \
-               ValRecord *v = &(s)->stk[(pci)->argv[k]];                       
        \
-               assert(v->vtype == TYPE_oid || v->vtype == TYPE_void);  \
-               &v->val.oval;                                                   
                                \
-       })
-#define getArgReference_ptr(s, pci, k)                         \
-       ({                                                                      
                        \
-               ValRecord *v = &(s)->stk[(pci)->argv[k]];       \
-               assert(v->vtype == TYPE_ptr);                           \
-               &v->val.pval;                                                   
        \
-       })
-#define getArgReference_flt(s, pci, k)                         \
-       ({                                                                      
                        \
-               ValRecord *v = &(s)->stk[(pci)->argv[k]];       \
-               assert(v->vtype == TYPE_flt);                           \
-               &v->val.fval;                                                   
        \
-       })
-#define getArgReference_dbl(s, pci, k)                         \
-       ({                                                                      
                        \
-               ValRecord *v = &(s)->stk[(pci)->argv[k]];       \
-               assert(v->vtype == TYPE_dbl);                           \
-               &v->val.dval;                                                   
        \
-       })
-#define getArgReference_lng(s, pci, k)                         \
-       ({                                                                      
                        \
-               ValRecord *v = &(s)->stk[(pci)->argv[k]];       \
-               assert(v->vtype == TYPE_lng);                           \
-               &v->val.lval;                                                   
        \
-       })
-#ifdef HAVE_HGE
-#define getArgReference_hge(s, pci, k)                         \
-       ({                                                                      
                        \
-               ValRecord *v = &(s)->stk[(pci)->argv[k]];       \
-               assert(v->vtype == TYPE_hge);                           \
-               &v->val.hval;                                                   
        \
-       })
-#endif
-#define getArgReference_str(s, pci, k)                         \
-       ({                                                                      
                        \
-               ValRecord *v = &(s)->stk[(pci)->argv[k]];       \
-               assert(v->vtype == TYPE_str);                           \
-               &v->val.sval;                                                   
        \
-       })
-#else
-#define getArgReference_TYPE(s, pci, k, TYPE)  ((TYPE *) getArgReference(s, 
pci, k))
-#define getArgReference_msk(s, pci, k) (&(s)->stk[(pci)->argv[k]].val.mval)
-#define getArgReference_bit(s, pci, k) ((bit *) 
&(s)->stk[(pci)->argv[k]].val.btval)
-#define getArgReference_sht(s, pci, k) (&(s)->stk[(pci)->argv[k]].val.shval)
-#define getArgReference_bat(s, pci, k) (&(s)->stk[(pci)->argv[k]].val.bval)
-#define getArgReference_int(s, pci, k) (&(s)->stk[(pci)->argv[k]].val.ival)
-#define getArgReference_bte(s, pci, k) (&(s)->stk[(pci)->argv[k]].val.btval)
-#define getArgReference_oid(s, pci, k) (&(s)->stk[(pci)->argv[k]].val.oval)
-#define getArgReference_ptr(s, pci, k) (&(s)->stk[(pci)->argv[k]].val.pval)
-#define getArgReference_flt(s, pci, k) (&(s)->stk[(pci)->argv[k]].val.fval)
-#define getArgReference_dbl(s, pci, k) (&(s)->stk[(pci)->argv[k]].val.dval)
-#define getArgReference_lng(s, pci, k) (&(s)->stk[(pci)->argv[k]].val.lval)
-#ifdef HAVE_HGE
-#define getArgReference_hge(s, pci, k) (&(s)->stk[(pci)->argv[k]].val.hval)
-#endif
-#define getArgReference_str(s, pci, k) (&(s)->stk[(pci)->argv[k]].val.sval)
-#endif
 
 #endif /*  _MAL_INTERPRET_H */
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to