Skip to content

Arguments (and friends): Use more (smart) C++ templates to replace typed-operations

Marco Trevisan requested to merge 3v1n0/gjs:moar-templates into master

In various code paths we repeat the same thing for different structures or types, while in some cases the problem has been resolved using C-style macros, in modern C++ world we can achieve this in a better way with proper static checking and type-safety (and with some smarter selections done using the SFINAE technique).

So... Rewrite some parts in order to avoid mistakes and inconsistencies, in particular:

  • Adding inline functions to access to GIArgument's members in a consistent way, using the wanted type and/or the GITypeTag to select them consistently
    • This may also open the road to do a proper wrapper for it, but it was too much for now.
  • Created a standard way to convert JS values to C values with type-checks so that we safely use the right container type to store values and, if needed, with out-of-bounding checks.
    • As per this, using only template functions to convert primitive values or array of values.
  • Replaced all the main #define (non in header) macros around to repeat the same operations using inline functions instead with proper code checks.
  • Various cleanups and some more C++izations.

This is working properly in all the tested architectures, while the failure in in s390x is the same happening also in master as reported in #319 (closed) (so, unrelated).

Last, but not least, this should also implementing new types as per BigInt, making !412 (closed) work hopefully easier.

Edited by Philip Chimento

Merge request reports