*operation* void bind_pde(Meta_def * finalmeta,Propagation_directive_exp *& pdexp) *traverse* *from* Propagation_directive_exp *to-stop* {Pde, Dir_name_with_exp} *wrapper* Dir_name_with_exp *prefix* (@ finalmeta->bind_pde2(this->get_inst(),pdexp); @) *wrapper* Merge_pde *prefix* (@ Propagation_directive_exp * exp1 = NULL; Propagation_directive_exp * exp2 = NULL; this->get_pde1()->bind_pde(finalmeta,exp1); this->get_pde2()->bind_pde(finalmeta,exp2); if (exp1 != NULL) this->rset_pde1((Propagation_directive_exp *)exp1->g_copy())->g_delete(); if (exp2 != NULL) this->rset_pde2((Propagation_directive_exp *)exp2->g_copy())->g_delete(); @) *wrapper* Join_pde *prefix* (@ Propagation_directive_exp * exp1 = NULL; Propagation_directive_exp * exp2 = NULL; this->get_pde1()->bind_pde(finalmeta,exp1); this->get_pde2()->bind_pde(finalmeta,exp2); if (exp1 != NULL) this->rset_pde1((Propagation_directive_exp *)exp1->g_copy())->g_delete(); if (exp2 != NULL) this->rset_pde2((Propagation_directive_exp *)exp2->g_copy())->g_delete(); @) *operation* void bind_pde2(DemIdent *inst_name, Propagation_directive_exp *& pdexp) *traverse* *from* Meta_def *to* Meta_macro_def *wrapper* Meta_macro_def *prefix* (@ Propagation_directive_exp * r = NULL; if (this->get_dirs() != NULL) this->get_dirs()->find_pde(r,inst_name); if (r != NULL) pdexp = (Propagation_directive_exp *)r->g_copy(); else { cout << toolname << ": undefined propagation directive expression variable : '" << inst_name->get_val() << "' on line " << inst_name->get_line_number() << endl; exit(-1); } @)