Added previousely missed functions
authorBenedikt Tutzer <e1225461@student.tuwien.ac.at>
Tue, 21 Aug 2018 11:15:08 +0000 (13:15 +0200)
committerBenedikt Tutzer <e1225461@student.tuwien.ac.at>
Tue, 21 Aug 2018 11:15:08 +0000 (13:15 +0200)
kernel/python_wrappers.cc

index 2c27ea47ff8a8037f0f5ee9fbba7c83e4e3a9f18..5e964dcac633f249d2dde5dbbd584fdb26b6eeed 100644 (file)
@@ -36,7 +36,7 @@ namespace YOSYS_PYTHON {
 
        void log(std::string text)
        {
-               Yosys::log(text.c_str());
+               Yosys::log("%s",text.c_str());
        }
 
        struct IdString
@@ -74,11 +74,23 @@ namespace YOSYS_PYTHON {
                //WRAPPED static inline void put_reference(int idx)
                static inline void put_reference(int idx);
 
+               //WRAPPED std::string str() const {
+               std::string str();
+
+               //WRAPPED bool empty() const {
+               bool empty();
+
+               //WRAPPED void clear() {
+               void clear();
+
                //WRAPPED bool in(IdString rhs) const { return *this == rhs; }
                bool in_IdString(IdString *rhs);
 
                //WRAPPED bool in(const std::string &rhs) const { return *this == rhs; }
                bool in_std_string(std::string rhs);
+
+               //WRAPPED bool in(const pool<IdString> &rhs) const { return rhs.count(*this) != 0; }
+               bool in_pool_IdString(boost::python::list *rhs);
        };
 
        std::ostream &operator<<(std::ostream &ostr, const IdString &ref)
@@ -110,12 +122,36 @@ namespace YOSYS_PYTHON {
                        return ref_obj;
                }
 
+               //WRAPPED bool as_bool() const;
+               bool as_bool();
+
                //WRAPPED int as_int(bool is_signed = false) const;
                int as_int(bool is_signed = false);
 
+               //WRAPPED std::string as_string() const;
+               std::string as_string();
+
                //WRAPPED static Const from_string(std::string str);
                static Const from_string(std::string str);
 
+               //WRAPPED std::string decode_string() const;
+               std::string decode_string();
+
+               //WRAPPED inline int size() const { return bits.size(); }
+               inline int size();
+
+               //WRAPPED bool is_fully_zero() const;
+               bool is_fully_zero();
+
+               //WRAPPED bool is_fully_ones() const;
+               bool is_fully_ones();
+
+               //WRAPPED bool is_fully_def() const;
+               bool is_fully_def();
+
+               //WRAPPED bool is_fully_undef() const;
+               bool is_fully_undef();
+
                //WRAPPED inline RTLIL::Const extract(int offset, int len = 1, RTLIL::State padding = RTLIL::State::S0) const {
                inline Const extract(int offset, int len = 1, State padding = RTLIL::State::S0);
        };
@@ -148,6 +184,9 @@ namespace YOSYS_PYTHON {
                {
                        return ref_obj;
                }
+
+               //WRAPPED RTLIL::CaseRule *clone() const;
+               CaseRule clone();
        };
 
        std::ostream &operator<<(std::ostream &ostr, const CaseRule &ref)
@@ -178,6 +217,9 @@ namespace YOSYS_PYTHON {
                {
                        return ref_obj;
                }
+
+               //WRAPPED RTLIL::SwitchRule *clone() const;
+               SwitchRule clone();
        };
 
        std::ostream &operator<<(std::ostream &ostr, const SwitchRule &ref)
@@ -208,6 +250,9 @@ namespace YOSYS_PYTHON {
                {
                        return ref_obj;
                }
+
+               //WRAPPED RTLIL::SyncRule *clone() const;
+               SyncRule clone();
        };
 
        std::ostream &operator<<(std::ostream &ostr, const SyncRule &ref)
@@ -238,6 +283,9 @@ namespace YOSYS_PYTHON {
                {
                        return ref_obj;
                }
+
+               //WRAPPED RTLIL::Process *clone() const;
+               Process clone();
        };
 
        std::ostream &operator<<(std::ostream &ostr, const Process &ref)
@@ -332,6 +380,12 @@ namespace YOSYS_PYTHON {
                        return ref_obj;
                }
 
+               //WRAPPED inline int size() const { return width_; }
+               inline int size();
+
+               //WRAPPED inline bool empty() const { return width_ == 0; }
+               inline bool empty();
+
                //WRAPPED void replace(const RTLIL::SigSpec &pattern, const RTLIL::SigSpec &with);
                void replace_SigSpec_SigSpec(SigSpec *pattern, SigSpec *with);
 
@@ -383,9 +437,57 @@ namespace YOSYS_PYTHON {
                //WRAPPED RTLIL::SigSpec repeat(int num) const;
                SigSpec repeat(int num);
 
+               //WRAPPED bool is_wire() const;
+               bool is_wire();
+
+               //WRAPPED bool is_chunk() const;
+               bool is_chunk();
+
+               //WRAPPED inline bool is_bit() const { return width_ == 1; }
+               inline bool is_bit();
+
+               //WRAPPED bool is_fully_const() const;
+               bool is_fully_const();
+
+               //WRAPPED bool is_fully_zero() const;
+               bool is_fully_zero();
+
+               //WRAPPED bool is_fully_ones() const;
+               bool is_fully_ones();
+
+               //WRAPPED bool is_fully_def() const;
+               bool is_fully_def();
+
+               //WRAPPED bool is_fully_undef() const;
+               bool is_fully_undef();
+
+               //WRAPPED bool has_const() const;
+               bool has_const();
+
+               //WRAPPED bool has_marked_bits() const;
+               bool has_marked_bits();
+
+               //WRAPPED bool as_bool() const;
+               bool as_bool();
+
                //WRAPPED int as_int(bool is_signed = false) const;
                int as_int(bool is_signed = false);
 
+               //WRAPPED std::string as_string() const;
+               std::string as_string();
+
+               //WRAPPED RTLIL::Const as_const() const;
+               Const as_const();
+
+               //WRAPPED RTLIL::Wire *as_wire() const;
+               Wire as_wire();
+
+               //WRAPPED RTLIL::SigChunk as_chunk() const;
+               SigChunk as_chunk();
+
+               //WRAPPED RTLIL::SigBit as_bit() const;
+               SigBit as_bit();
+
                //WRAPPED bool match(std::string pattern) const;
                bool match(std::string pattern);
 
@@ -397,6 +499,9 @@ namespace YOSYS_PYTHON {
 
                //WRAPPED static bool parse_rhs(const RTLIL::SigSpec &lhs, RTLIL::SigSpec &sig, RTLIL::Module *module, std::string str);
                static bool parse_rhs(SigSpec *lhs, SigSpec *sig, Module *module, std::string str);
+
+               //WRAPPED void check() const;
+               void check();
        };
 
        std::ostream &operator<<(std::ostream &ostr, const SigSpec &ref)
@@ -432,6 +537,9 @@ namespace YOSYS_PYTHON {
                //WRAPPED void setPort(RTLIL::IdString portname, RTLIL::SigSpec signal);
                void setPort(IdString *portname, SigSpec *signal);
 
+               //WRAPPED bool known() const;
+               bool known();
+
                //WRAPPED bool input(RTLIL::IdString portname) const;
                bool input(IdString *portname);
 
@@ -449,6 +557,9 @@ namespace YOSYS_PYTHON {
 
                //WRAPPED void fixup_parameters(bool set_a_signed = false, bool set_b_signed = false);
                void fixup_parameters(bool set_a_signed = false, bool set_b_signed = false);
+
+               //WRAPPED bool has_keep_attr() const {
+               bool has_keep_attr();
        };
 
        std::ostream &operator<<(std::ostream &ostr, const Cell &ref)
@@ -578,6 +689,24 @@ namespace YOSYS_PYTHON {
                //WRAPPED void cloneInto(RTLIL::Module *new_mod) const;
                void cloneInto(Module *new_mod);
 
+               //WRAPPED bool has_memories() const;
+               bool has_memories();
+
+               //WRAPPED bool has_processes() const;
+               bool has_processes();
+
+               //WRAPPED bool has_memories_warn() const;
+               bool has_memories_warn();
+
+               //WRAPPED bool has_processes_warn() const;
+               bool has_processes_warn();
+
+               //WRAPPED RTLIL::Wire* wire(RTLIL::IdString id) { return wires_.count(id) ? wires_.at(id) : nullptr; }
+               Wire wire(IdString *id);
+
+               //WRAPPED RTLIL::Cell* cell(RTLIL::IdString id) { return cells_.count(id) ? cells_.at(id) : nullptr; }
+               Cell cell(IdString *id);
+
                //WRAPPED void remove(const pool<RTLIL::Wire*> &wires);
                void remove_pool_Wire(boost::python::list *wires);
 
@@ -1104,6 +1233,9 @@ namespace YOSYS_PYTHON {
 
                //WRAPPED bool selected_whole_module(RTLIL::Module *mod) const;
                bool selected_whole_module_Module(Module *mod);
+
+               //WRAPPED bool full_selection() const {
+               bool full_selection();
        };
 
        std::ostream &operator<<(std::ostream &ostr, const Design &ref)
@@ -1557,6 +1689,24 @@ namespace YOSYS_PYTHON {
                Yosys::RTLIL::IdString::put_reference(idx);
        }
 
+       //WRAPPED std::string str() const {
+       std::string IdString::str()
+       {
+               return this->get_cpp_obj()->str();
+       }
+
+       //WRAPPED bool empty() const {
+       bool IdString::empty()
+       {
+               return this->get_cpp_obj()->empty();
+       }
+
+       //WRAPPED void clear() {
+       void IdString::clear()
+       {
+               this->get_cpp_obj()->clear();
+       }
+
        //WRAPPED bool in(IdString rhs) const { return *this == rhs; }
        bool IdString::in_IdString(IdString *rhs)
        {
@@ -1569,30 +1719,124 @@ namespace YOSYS_PYTHON {
                return this->get_cpp_obj()->in(rhs);
        }
 
+       //WRAPPED bool in(const pool<IdString> &rhs) const { return rhs.count(*this) != 0; }
+       bool IdString::in_pool_IdString(boost::python::list *rhs)
+       {
+               pool<Yosys::RTLIL::IdString> rhs_;
+               for(int i = 0; i < len(*rhs); ++i)
+               {
+               }
+               return this->get_cpp_obj()->in(rhs_);
+       }
+
+       //WRAPPED bool as_bool() const;
+       bool Const::as_bool()
+       {
+               return this->get_cpp_obj()->as_bool();
+       }
+
        //WRAPPED int as_int(bool is_signed = false) const;
        int Const::as_int(bool is_signed)
        {
                return this->get_cpp_obj()->as_int(is_signed);
        }
 
+       //WRAPPED std::string as_string() const;
+       std::string Const::as_string()
+       {
+               return this->get_cpp_obj()->as_string();
+       }
+
        //WRAPPED static Const from_string(std::string str);
        Const Const::from_string(std::string str)
        {
                return Const(Yosys::RTLIL::Const::from_string(str));
        }
 
+       //WRAPPED std::string decode_string() const;
+       std::string Const::decode_string()
+       {
+               return this->get_cpp_obj()->decode_string();
+       }
+
+       //WRAPPED inline int size() const { return bits.size(); }
+       inline int Const::size()
+       {
+               return this->get_cpp_obj()->size();
+       }
+
+       //WRAPPED bool is_fully_zero() const;
+       bool Const::is_fully_zero()
+       {
+               return this->get_cpp_obj()->is_fully_zero();
+       }
+
+       //WRAPPED bool is_fully_ones() const;
+       bool Const::is_fully_ones()
+       {
+               return this->get_cpp_obj()->is_fully_ones();
+       }
+
+       //WRAPPED bool is_fully_def() const;
+       bool Const::is_fully_def()
+       {
+               return this->get_cpp_obj()->is_fully_def();
+       }
+
+       //WRAPPED bool is_fully_undef() const;
+       bool Const::is_fully_undef()
+       {
+               return this->get_cpp_obj()->is_fully_undef();
+       }
+
        //WRAPPED inline RTLIL::Const extract(int offset, int len = 1, RTLIL::State padding = RTLIL::State::S0) const {
        inline Const Const::extract(int offset, int len, State padding)
        {
                return Const(this->get_cpp_obj()->extract(offset, len, padding));
        }
 
+       //WRAPPED RTLIL::CaseRule *clone() const;
+       CaseRule CaseRule::clone()
+       {
+               return CaseRule(this->get_cpp_obj()->clone());
+       }
+
+       //WRAPPED RTLIL::SwitchRule *clone() const;
+       SwitchRule SwitchRule::clone()
+       {
+               return SwitchRule(this->get_cpp_obj()->clone());
+       }
+
+       //WRAPPED RTLIL::SyncRule *clone() const;
+       SyncRule SyncRule::clone()
+       {
+               return SyncRule(this->get_cpp_obj()->clone());
+       }
+
+       //WRAPPED RTLIL::Process *clone() const;
+       Process Process::clone()
+       {
+               return Process(this->get_cpp_obj()->clone());
+       }
+
        //WRAPPED RTLIL::SigChunk extract(int offset, int length) const;
        SigChunk SigChunk::extract(int offset, int length)
        {
                return SigChunk(this->get_cpp_obj()->extract(offset, length));
        }
 
+       //WRAPPED inline int size() const { return width_; }
+       inline int SigSpec::size()
+       {
+               return this->get_cpp_obj()->size();
+       }
+
+       //WRAPPED inline bool empty() const { return width_ == 0; }
+       inline bool SigSpec::empty()
+       {
+               return this->get_cpp_obj()->empty();
+       }
+
        //WRAPPED void replace(const RTLIL::SigSpec &pattern, const RTLIL::SigSpec &with);
        void SigSpec::replace_SigSpec_SigSpec(SigSpec *pattern, SigSpec *with)
        {
@@ -1711,12 +1955,108 @@ namespace YOSYS_PYTHON {
                return SigSpec(this->get_cpp_obj()->repeat(num));
        }
 
+       //WRAPPED bool is_wire() const;
+       bool SigSpec::is_wire()
+       {
+               return this->get_cpp_obj()->is_wire();
+       }
+
+       //WRAPPED bool is_chunk() const;
+       bool SigSpec::is_chunk()
+       {
+               return this->get_cpp_obj()->is_chunk();
+       }
+
+       //WRAPPED inline bool is_bit() const { return width_ == 1; }
+       inline bool SigSpec::is_bit()
+       {
+               return this->get_cpp_obj()->is_bit();
+       }
+
+       //WRAPPED bool is_fully_const() const;
+       bool SigSpec::is_fully_const()
+       {
+               return this->get_cpp_obj()->is_fully_const();
+       }
+
+       //WRAPPED bool is_fully_zero() const;
+       bool SigSpec::is_fully_zero()
+       {
+               return this->get_cpp_obj()->is_fully_zero();
+       }
+
+       //WRAPPED bool is_fully_ones() const;
+       bool SigSpec::is_fully_ones()
+       {
+               return this->get_cpp_obj()->is_fully_ones();
+       }
+
+       //WRAPPED bool is_fully_def() const;
+       bool SigSpec::is_fully_def()
+       {
+               return this->get_cpp_obj()->is_fully_def();
+       }
+
+       //WRAPPED bool is_fully_undef() const;
+       bool SigSpec::is_fully_undef()
+       {
+               return this->get_cpp_obj()->is_fully_undef();
+       }
+
+       //WRAPPED bool has_const() const;
+       bool SigSpec::has_const()
+       {
+               return this->get_cpp_obj()->has_const();
+       }
+
+       //WRAPPED bool has_marked_bits() const;
+       bool SigSpec::has_marked_bits()
+       {
+               return this->get_cpp_obj()->has_marked_bits();
+       }
+
+       //WRAPPED bool as_bool() const;
+       bool SigSpec::as_bool()
+       {
+               return this->get_cpp_obj()->as_bool();
+       }
+
        //WRAPPED int as_int(bool is_signed = false) const;
        int SigSpec::as_int(bool is_signed)
        {
                return this->get_cpp_obj()->as_int(is_signed);
        }
 
+       //WRAPPED std::string as_string() const;
+       std::string SigSpec::as_string()
+       {
+               return this->get_cpp_obj()->as_string();
+       }
+
+       //WRAPPED RTLIL::Const as_const() const;
+       Const SigSpec::as_const()
+       {
+               return Const(this->get_cpp_obj()->as_const());
+       }
+
+       //WRAPPED RTLIL::Wire *as_wire() const;
+       Wire SigSpec::as_wire()
+       {
+               return Wire(this->get_cpp_obj()->as_wire());
+       }
+
+       //WRAPPED RTLIL::SigChunk as_chunk() const;
+       SigChunk SigSpec::as_chunk()
+       {
+               return SigChunk(this->get_cpp_obj()->as_chunk());
+       }
+
+       //WRAPPED RTLIL::SigBit as_bit() const;
+       SigBit SigSpec::as_bit()
+       {
+               return SigBit(this->get_cpp_obj()->as_bit());
+       }
+
        //WRAPPED bool match(std::string pattern) const;
        bool SigSpec::match(std::string pattern)
        {
@@ -1741,6 +2081,12 @@ namespace YOSYS_PYTHON {
                return Yosys::RTLIL::SigSpec::parse_rhs(*lhs->get_cpp_obj(), *sig->get_cpp_obj(), module->get_cpp_obj(), str);
        }
 
+       //WRAPPED void check() const;
+       void SigSpec::check()
+       {
+               this->get_cpp_obj()->check();
+       }
+
        //WRAPPED bool hasPort(RTLIL::IdString portname) const;
        bool Cell::hasPort(IdString *portname)
        {
@@ -1759,6 +2105,12 @@ namespace YOSYS_PYTHON {
                this->get_cpp_obj()->setPort(*portname->get_cpp_obj(), *signal->get_cpp_obj());
        }
 
+       //WRAPPED bool known() const;
+       bool Cell::known()
+       {
+               return this->get_cpp_obj()->known();
+       }
+
        //WRAPPED bool input(RTLIL::IdString portname) const;
        bool Cell::input(IdString *portname)
        {
@@ -1795,6 +2147,12 @@ namespace YOSYS_PYTHON {
                this->get_cpp_obj()->fixup_parameters(set_a_signed, set_b_signed);
        }
 
+       //WRAPPED bool has_keep_attr() const {
+       bool Cell::has_keep_attr()
+       {
+               return this->get_cpp_obj()->has_keep_attr();
+       }
+
        //WRAPPED void connect(const RTLIL::SigSig &conn);
        void Module::connect_SigSig(PyObject* conn)
        {
@@ -1828,6 +2186,42 @@ namespace YOSYS_PYTHON {
                this->get_cpp_obj()->cloneInto(new_mod->get_cpp_obj());
        }
 
+       //WRAPPED bool has_memories() const;
+       bool Module::has_memories()
+       {
+               return this->get_cpp_obj()->has_memories();
+       }
+
+       //WRAPPED bool has_processes() const;
+       bool Module::has_processes()
+       {
+               return this->get_cpp_obj()->has_processes();
+       }
+
+       //WRAPPED bool has_memories_warn() const;
+       bool Module::has_memories_warn()
+       {
+               return this->get_cpp_obj()->has_memories_warn();
+       }
+
+       //WRAPPED bool has_processes_warn() const;
+       bool Module::has_processes_warn()
+       {
+               return this->get_cpp_obj()->has_processes_warn();
+       }
+
+       //WRAPPED RTLIL::Wire* wire(RTLIL::IdString id) { return wires_.count(id) ? wires_.at(id) : nullptr; }
+       Wire Module::wire(IdString *id)
+       {
+               return Wire(this->get_cpp_obj()->wire(*id->get_cpp_obj()));
+       }
+
+       //WRAPPED RTLIL::Cell* cell(RTLIL::IdString id) { return cells_.count(id) ? cells_.at(id) : nullptr; }
+       Cell Module::cell(IdString *id)
+       {
+               return Cell(this->get_cpp_obj()->cell(*id->get_cpp_obj()));
+       }
+
        //WRAPPED void remove(const pool<RTLIL::Wire*> &wires);
        void Module::remove_pool_Wire(boost::python::list *wires)
        {
@@ -2780,6 +3174,12 @@ namespace YOSYS_PYTHON {
                return this->get_cpp_obj()->selected_whole_module(mod->get_cpp_obj());
        }
 
+       //WRAPPED bool full_selection() const {
+       bool Design::full_selection()
+       {
+               return this->get_cpp_obj()->full_selection();
+       }
+
        struct Initializer
        {
                Initializer() {
@@ -2853,36 +3253,52 @@ namespace YOSYS_PYTHON {
                        .def(boost::python::self_ns::repr(boost::python::self_ns::self))
                        .def("get_reference", &IdString::get_reference)
                        .def("put_reference", &IdString::put_reference)
+                       .def("str", &IdString::str)
+                       .def("empty", &IdString::empty)
+                       .def("clear", &IdString::clear)
                        .def("in_IdString", &IdString::in_IdString)
                        .def("in_std_string", &IdString::in_std_string)
+                       .def("in_pool_IdString", &IdString::in_pool_IdString)
                        ;
 
                class_<Const>("Const")
                        .def(boost::python::self_ns::str(boost::python::self_ns::self))
                        .def(boost::python::self_ns::repr(boost::python::self_ns::self))
+                       .def("as_bool", &Const::as_bool)
                        .def("as_int", &Const::as_int)
+                       .def("as_string", &Const::as_string)
                        .def("from_string", &Const::from_string)
+                       .def("decode_string", &Const::decode_string)
+                       .def("size", &Const::size)
+                       .def("is_fully_zero", &Const::is_fully_zero)
+                       .def("is_fully_ones", &Const::is_fully_ones)
+                       .def("is_fully_def", &Const::is_fully_def)
+                       .def("is_fully_undef", &Const::is_fully_undef)
                        .def("extract", &Const::extract)
                        ;
 
                class_<CaseRule>("CaseRule")
                        .def(boost::python::self_ns::str(boost::python::self_ns::self))
                        .def(boost::python::self_ns::repr(boost::python::self_ns::self))
+                       .def("clone", &CaseRule::clone)
                        ;
 
                class_<SwitchRule>("SwitchRule")
                        .def(boost::python::self_ns::str(boost::python::self_ns::self))
                        .def(boost::python::self_ns::repr(boost::python::self_ns::self))
+                       .def("clone", &SwitchRule::clone)
                        ;
 
                class_<SyncRule>("SyncRule")
                        .def(boost::python::self_ns::str(boost::python::self_ns::self))
                        .def(boost::python::self_ns::repr(boost::python::self_ns::self))
+                       .def("clone", &SyncRule::clone)
                        ;
 
                class_<Process>("Process")
                        .def(boost::python::self_ns::str(boost::python::self_ns::self))
                        .def(boost::python::self_ns::repr(boost::python::self_ns::self))
+                       .def("clone", &Process::clone)
                        ;
 
                class_<SigChunk>("SigChunk")
@@ -2899,6 +3315,8 @@ namespace YOSYS_PYTHON {
                class_<SigSpec>("SigSpec")
                        .def(boost::python::self_ns::str(boost::python::self_ns::self))
                        .def(boost::python::self_ns::repr(boost::python::self_ns::self))
+                       .def("size", &SigSpec::size)
+                       .def("empty", &SigSpec::empty)
                        .def("replace_SigSpec_SigSpec", &SigSpec::replace_SigSpec_SigSpec)
                        .def("replace_SigSpec_SigSpec_SigSpec", &SigSpec::replace_SigSpec_SigSpec_SigSpec)
                        .def("replace_int_SigSpec", &SigSpec::replace_int_SigSpec)
@@ -2916,11 +3334,28 @@ namespace YOSYS_PYTHON {
                        .def("append_bit", &SigSpec::append_bit)
                        .def("extend_u0", &SigSpec::extend_u0)
                        .def("repeat", &SigSpec::repeat)
+                       .def("is_wire", &SigSpec::is_wire)
+                       .def("is_chunk", &SigSpec::is_chunk)
+                       .def("is_bit", &SigSpec::is_bit)
+                       .def("is_fully_const", &SigSpec::is_fully_const)
+                       .def("is_fully_zero", &SigSpec::is_fully_zero)
+                       .def("is_fully_ones", &SigSpec::is_fully_ones)
+                       .def("is_fully_def", &SigSpec::is_fully_def)
+                       .def("is_fully_undef", &SigSpec::is_fully_undef)
+                       .def("has_const", &SigSpec::has_const)
+                       .def("has_marked_bits", &SigSpec::has_marked_bits)
+                       .def("as_bool", &SigSpec::as_bool)
                        .def("as_int", &SigSpec::as_int)
+                       .def("as_string", &SigSpec::as_string)
+                       .def("as_const", &SigSpec::as_const)
+                       .def("as_wire", &SigSpec::as_wire)
+                       .def("as_chunk", &SigSpec::as_chunk)
+                       .def("as_bit", &SigSpec::as_bit)
                        .def("match", &SigSpec::match)
                        .def("parse", &SigSpec::parse)
                        .def("parse_sel", &SigSpec::parse_sel)
                        .def("parse_rhs", &SigSpec::parse_rhs)
+                       .def("check", &SigSpec::check)
                        ;
 
                class_<Cell>("Cell", no_init)
@@ -2929,12 +3364,14 @@ namespace YOSYS_PYTHON {
                        .def("hasPort", &Cell::hasPort)
                        .def("unsetPort", &Cell::unsetPort)
                        .def("setPort", &Cell::setPort)
+                       .def("known", &Cell::known)
                        .def("input", &Cell::input)
                        .def("output", &Cell::output)
                        .def("hasParam", &Cell::hasParam)
                        .def("unsetParam", &Cell::unsetParam)
                        .def("setParam", &Cell::setParam)
                        .def("fixup_parameters", &Cell::fixup_parameters)
+                       .def("has_keep_attr", &Cell::has_keep_attr)
                        ;
 
                class_<Wire>("Wire", no_init)
@@ -2957,6 +3394,12 @@ namespace YOSYS_PYTHON {
                        .def("connect_SigSpec_SigSpec", &Module::connect_SigSpec_SigSpec)
                        .def("new_connections", &Module::new_connections)
                        .def("cloneInto", &Module::cloneInto)
+                       .def("has_memories", &Module::has_memories)
+                       .def("has_processes", &Module::has_processes)
+                       .def("has_memories_warn", &Module::has_memories_warn)
+                       .def("has_processes_warn", &Module::has_processes_warn)
+                       .def("wire", &Module::wire)
+                       .def("cell", &Module::cell)
                        .def("remove_pool_Wire", &Module::remove_pool_Wire)
                        .def("remove_Cell", &Module::remove_Cell)
                        .def("rename_Wire_IdString", &Module::rename_Wire_IdString)
@@ -3123,6 +3566,7 @@ namespace YOSYS_PYTHON {
                        .def("selected_member", &Design::selected_member)
                        .def("selected_module_Module", &Design::selected_module_Module)
                        .def("selected_whole_module_Module", &Design::selected_whole_module_Module)
+                       .def("full_selection", &Design::full_selection)
                        ;
 
                def("escape_id", escape_id);