aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Shah <dave@ds0.me>2019-03-31 17:28:45 +0100
committerDavid Shah <dave@ds0.me>2019-04-02 15:30:01 +0100
commit30f0c582e4b809dd860d34c8c4c598a91374b029 (patch)
tree315bd75e8729b86583aecdc21d5a3940d576c7b8
parentf5bfd557b625d1b5349c4a8305eccec30bafbe69 (diff)
downloadnextpnr-30f0c582e4b809dd860d34c8c4c598a91374b029.tar.gz
nextpnr-30f0c582e4b809dd860d34c8c4c598a91374b029.tar.bz2
nextpnr-30f0c582e4b809dd860d34c8c4c598a91374b029.zip
python: Named argument support
Signed-off-by: David Shah <dave@ds0.me>
-rw-r--r--common/pybindings.cc1
-rw-r--r--common/pywrappers.h30
-rw-r--r--generic/arch_pybindings.cc1
3 files changed, 32 insertions, 0 deletions
diff --git a/common/pybindings.cc b/common/pybindings.cc
index dad8e5c7..547d9b62 100644
--- a/common/pybindings.cc
+++ b/common/pybindings.cc
@@ -241,6 +241,7 @@ void init_python(const char *executable, bool first)
Py_Initialize();
if (first)
PyImport_ImportModule(TOSTRING(MODULE_NAME));
+ PyRun_SimpleString("from " TOSTRING(MODULE_NAME) " import *");
} catch (boost::python::error_already_set const &) {
// Parse and output the exception
std::string perror_str = parse_python_exception();
diff --git a/common/pywrappers.h b/common/pywrappers.h
index b564eb59..b9ed807d 100644
--- a/common/pywrappers.h
+++ b/common/pywrappers.h
@@ -250,6 +250,11 @@ template <typename Class, typename FuncT, FuncT fn, typename arg1_conv> struct f
}
template <typename WrapCls> static void def_wrap(WrapCls cls_, const char *name) { cls_.def(name, wrapped_fn); }
+
+ template <typename WrapCls, typename Ta> static void def_wrap(WrapCls cls_, const char *name, Ta a = arg("arg1"))
+ {
+ cls_.def(name, wrapped_fn, a);
+ }
};
// Two parameters, one return
@@ -267,6 +272,11 @@ template <typename Class, typename FuncT, FuncT fn, typename arg1_conv, typename
}
template <typename WrapCls> static void def_wrap(WrapCls cls_, const char *name) { cls_.def(name, wrapped_fn); }
+
+ template <typename WrapCls, typename Ta> static void def_wrap(WrapCls cls_, const char *name, const Ta &a)
+ {
+ cls_.def(name, wrapped_fn, a);
+ }
};
// Three parameters, no return
@@ -286,6 +296,11 @@ struct fn_wrapper_3a_v
}
template <typename WrapCls> static void def_wrap(WrapCls cls_, const char *name) { cls_.def(name, wrapped_fn); }
+
+ template <typename WrapCls, typename Ta> static void def_wrap(WrapCls cls_, const char *name, const Ta &a)
+ {
+ cls_.def(name, wrapped_fn, a);
+ }
};
// Four parameters, no return
@@ -309,6 +324,11 @@ struct fn_wrapper_4a_v
}
template <typename WrapCls> static void def_wrap(WrapCls cls_, const char *name) { cls_.def(name, wrapped_fn); }
+
+ template <typename WrapCls, typename Ta> static void def_wrap(WrapCls cls_, const char *name, const Ta &a)
+ {
+ cls_.def(name, wrapped_fn, a);
+ }
};
// Five parameters, no return
@@ -333,6 +353,11 @@ struct fn_wrapper_5a_v
}
template <typename WrapCls> static void def_wrap(WrapCls cls_, const char *name) { cls_.def(name, wrapped_fn); }
+
+ template <typename WrapCls, typename Ta> static void def_wrap(WrapCls cls_, const char *name, const Ta &a)
+ {
+ cls_.def(name, wrapped_fn, a);
+ }
};
// Six parameters, no return
@@ -358,6 +383,11 @@ struct fn_wrapper_6a_v
}
template <typename WrapCls> static void def_wrap(WrapCls cls_, const char *name) { cls_.def(name, wrapped_fn); }
+
+ template <typename WrapCls, typename Ta> static void def_wrap(WrapCls cls_, const char *name, const Ta &a)
+ {
+ cls_.def(name, wrapped_fn, a);
+ }
};
// Wrapped getter
diff --git a/generic/arch_pybindings.cc b/generic/arch_pybindings.cc
index 5eabd42a..04620cd5 100644
--- a/generic/arch_pybindings.cc
+++ b/generic/arch_pybindings.cc
@@ -30,6 +30,7 @@ NEXTPNR_NAMESPACE_BEGIN
void arch_wrap_python()
{
using namespace PythonConversion;
+
auto arch_cls = class_<Arch, Arch *, bases<BaseCtx>, boost::noncopyable>("Arch", init<ArchArgs>());
auto ctx_cls = class_<Context, Context *, bases<Arch>, boost::noncopyable>("Context", no_init)
.def("checksum", &Context::checksum)