Block::system_handler done message format

As I was investigating the message passing subsystem I noticed that my
own blocks had a “system” port that I did not manually register.
Looking through the code I found in the special message to put
the block in a finished state:

block::system_handler(pmt::pmt_t msg)
//std::cout << "system_handler " << msg << “\n”;
pmt::pmt_t op = pmt::car(msg);
if(pmt::eqv(op, pmt::mp(“done”))){
d_finished = pmt::to_long(pmt::cdr(msg));
} else {
std::cout << “WARNING: bad message op on system port!\n”;

Maybe I don’t understand the reason for this, but it appears that this
code requires pmt::cdr(msg) to return a long int and then implicitly
casts to a bool. Wouldn’t it be better for this to be a bool already
such that a message could be constructed like

pmt::cons(pmt::mp(“done”), pmt::get_PMT_T())

or Python

pmt.cons(pmt.to_pmt(“done”), pmt.PMT_T) ?

Perhaps it really doesn’t matter. It just seems more natural,
particularly if one were to put a logical statement as the argument to


This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs