aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libcc1/libcc1.cc81
-rw-r--r--libcc1/libcp1.cc81
2 files changed, 8 insertions, 154 deletions
diff --git a/libcc1/libcc1.cc b/libcc1/libcc1.cc
index 2c08dab..3432f4e 100644
--- a/libcc1/libcc1.cc
+++ b/libcc1/libcc1.cc
@@ -210,90 +210,17 @@ set_callbacks (struct gcc_c_context *s,
self->oracle_datum = datum;
}
-// Instances of these rpc<> template functions are installed into the
+// Instances of this rpc<> template function are installed into the
// "c_vtable". These functions are parameterized by type and method
// name and forward the call via the connection.
-template<typename R, const char *&NAME>
-R rpc (struct gcc_c_context *s)
+template<typename R, const char *&NAME, typename... Arg>
+R rpc (struct gcc_c_context *s, Arg... rest)
{
libcc1 *self = (libcc1 *) s;
R result;
- if (!cc1_plugin::call (self->connection, NAME, &result))
- return 0;
- return result;
-}
-
-template<typename R, const char *&NAME, typename A>
-R rpc (struct gcc_c_context *s, A arg)
-{
- libcc1 *self = (libcc1 *) s;
- R result;
-
- if (!cc1_plugin::call (self->connection, NAME, &result, arg))
- return 0;
- return result;
-}
-
-template<typename R, const char *&NAME, typename A1, typename A2>
-R rpc (struct gcc_c_context *s, A1 arg1, A2 arg2)
-{
- libcc1 *self = (libcc1 *) s;
- R result;
-
- if (!cc1_plugin::call (self->connection, NAME, &result, arg1, arg2))
- return 0;
- return result;
-}
-
-template<typename R, const char *&NAME, typename A1, typename A2, typename A3>
-R rpc (struct gcc_c_context *s, A1 arg1, A2 arg2, A3 arg3)
-{
- libcc1 *self = (libcc1 *) s;
- R result;
-
- if (!cc1_plugin::call (self->connection, NAME, &result, arg1, arg2, arg3))
- return 0;
- return result;
-}
-
-template<typename R, const char *&NAME, typename A1, typename A2, typename A3,
- typename A4>
-R rpc (struct gcc_c_context *s, A1 arg1, A2 arg2, A3 arg3, A4 arg4)
-{
- libcc1 *self = (libcc1 *) s;
- R result;
-
- if (!cc1_plugin::call (self->connection, NAME, &result, arg1, arg2, arg3,
- arg4))
- return 0;
- return result;
-}
-
-template<typename R, const char *&NAME, typename A1, typename A2, typename A3,
- typename A4, typename A5>
-R rpc (struct gcc_c_context *s, A1 arg1, A2 arg2, A3 arg3, A4 arg4, A5 arg5)
-{
- libcc1 *self = (libcc1 *) s;
- R result;
-
- if (!cc1_plugin::call (self->connection, NAME, &result, arg1, arg2, arg3,
- arg4, arg5))
- return 0;
- return result;
-}
-
-template<typename R, const char *&NAME, typename A1, typename A2, typename A3,
- typename A4, typename A5, typename A6, typename A7>
-R rpc (struct gcc_c_context *s, A1 arg1, A2 arg2, A3 arg3, A4 arg4, A5 arg5,
- A6 arg6, A7 arg7)
-{
- libcc1 *self = (libcc1 *) s;
- R result;
-
- if (!cc1_plugin::call (self->connection, NAME, &result, arg1, arg2, arg3,
- arg4, arg5, arg6, arg7))
+ if (!cc1_plugin::call (self->connection, NAME, &result, rest...))
return 0;
return result;
}
diff --git a/libcc1/libcp1.cc b/libcc1/libcp1.cc
index fb91125..4273f8d 100644
--- a/libcc1/libcp1.cc
+++ b/libcc1/libcp1.cc
@@ -233,90 +233,17 @@ set_callbacks (struct gcc_cp_context *s,
self->oracle_datum = datum;
}
-// Instances of these rpc<> template functions are installed into the
+// Instances of this rpc<> template function are installed into the
// "cp_vtable". These functions are parameterized by type and method
// name and forward the call via the connection.
-template<typename R, const char *&NAME>
-R rpc (struct gcc_cp_context *s)
+template<typename R, const char *&NAME, typename... Arg>
+R rpc (struct gcc_cp_context *s, Arg... rest)
{
libcp1 *self = (libcp1 *) s;
R result;
- if (!cc1_plugin::call (self->connection, NAME, &result))
- return 0;
- return result;
-}
-
-template<typename R, const char *&NAME, typename A>
-R rpc (struct gcc_cp_context *s, A arg)
-{
- libcp1 *self = (libcp1 *) s;
- R result;
-
- if (!cc1_plugin::call (self->connection, NAME, &result, arg))
- return 0;
- return result;
-}
-
-template<typename R, const char *&NAME, typename A1, typename A2>
-R rpc (struct gcc_cp_context *s, A1 arg1, A2 arg2)
-{
- libcp1 *self = (libcp1 *) s;
- R result;
-
- if (!cc1_plugin::call (self->connection, NAME, &result, arg1, arg2))
- return 0;
- return result;
-}
-
-template<typename R, const char *&NAME, typename A1, typename A2, typename A3>
-R rpc (struct gcc_cp_context *s, A1 arg1, A2 arg2, A3 arg3)
-{
- libcp1 *self = (libcp1 *) s;
- R result;
-
- if (!cc1_plugin::call (self->connection, NAME, &result, arg1, arg2, arg3))
- return 0;
- return result;
-}
-
-template<typename R, const char *&NAME, typename A1, typename A2, typename A3,
- typename A4>
-R rpc (struct gcc_cp_context *s, A1 arg1, A2 arg2, A3 arg3, A4 arg4)
-{
- libcp1 *self = (libcp1 *) s;
- R result;
-
- if (!cc1_plugin::call (self->connection, NAME, &result, arg1, arg2, arg3,
- arg4))
- return 0;
- return result;
-}
-
-template<typename R, const char *&NAME, typename A1, typename A2, typename A3,
- typename A4, typename A5>
-R rpc (struct gcc_cp_context *s, A1 arg1, A2 arg2, A3 arg3, A4 arg4, A5 arg5)
-{
- libcp1 *self = (libcp1 *) s;
- R result;
-
- if (!cc1_plugin::call (self->connection, NAME, &result, arg1, arg2, arg3,
- arg4, arg5))
- return 0;
- return result;
-}
-
-template<typename R, const char *&NAME, typename A1, typename A2, typename A3,
- typename A4, typename A5, typename A6, typename A7>
-R rpc (struct gcc_cp_context *s, A1 arg1, A2 arg2, A3 arg3, A4 arg4, A5 arg5,
- A6 arg6, A7 arg7)
-{
- libcp1 *self = (libcp1 *) s;
- R result;
-
- if (!cc1_plugin::call (self->connection, NAME, &result, arg1, arg2, arg3,
- arg4, arg5, arg6, arg7))
+ if (!cc1_plugin::call (self->connection, NAME, &result, rest...))
return 0;
return result;
}