====== Language plugins : Implementation ======
===== parse, print command =====
==== Background ====
A command object executes a command, does not store anything. The reference to "dot" and "dotcard" is historical, because in Spice, commands were prefixed by a dot.
This section may change as scripting is enhanced.
For reference, here is the class definition from d_dot.h .
/*--------------------------------------------------------------------------*/
class DEV_DOT : public CARD {
private:
std::string _s;
explicit DEV_DOT(const DEV_DOT& p) :CARD(p) {set_constant(true);}
public:
explicit DEV_DOT() :CARD() {set_constant(true);}
private: // override virtual
std::string value_name()const {return "";}
char id_letter()const {untested();return '\0';}
std::string dev_type()const {untested();return "dotcard";}
CARD* clone()const {return new DEV_DOT(*this);}
public:
void set(const std::string& S) {_s = S;}
const std::string& s()const {return _s;}
};
/*--------------------------------------------------------------------------*/
==== parse_command ====
The parse function reads the string and executes it by calling ''CMD::cmdproc''. Then the new object is deleted, and the function returns a NULL pointer.
/*--------------------------------------------------------------------------*/
DEV_DOT* LANG_VERILOG::parse_command(CS& cmd, DEV_DOT* x)
{
assert(x);
x->set(cmd.fullstring());
CARD_LIST* scope = (x->owner()) ? x->owner()->subckt() : &CARD_LIST::card_list;
cmd.reset(0);
CMD::cmdproc(cmd, scope);
delete x;
return NULL;
}
/*--------------------------------------------------------------------------*/
==== print_command ====
For now, all that is needed is to print it.
/*--------------------------------------------------------------------------*/
void LANG_VERILOG::print_command(OMSTREAM& o, const DEV_DOT* x)
{
assert(x);
o << x->s() << '\n';
}
/*--------------------------------------------------------------------------*/