#include "semcheck.h" /***************************************************************** ** File Name : alt_common_pars.c ** ** ** ** For a parameterized alternation class,all its alternatives ** ** have to use all its formal parameters in the same order ** *****************************************************************/ int Cd_graph::alt_common_pars() { return adjacencies->alt_common_pars(); } int Adjacency_Nlist::alt_common_pars() { int result = SUCCESS; Adjacency_list_iterator next_Adjacency(*this); Adjacency_ each_Adjacency; while (each_Adjacency=next_Adjacency()) if (each_Adjacency->alt_common_pars()==ERROR_ALT_COM) { cerr << toolname << ": error: near line " << each_Adjacency->get_source()->get_vertex_name()->get_line_number() << endl; result = ERROR_ALT_COM; } return (result); } int Adjacency::alt_common_pars() { if (parameters) return ns->alt_common_pars(parameters); else return (SUCCESS); } int Neighbors::alt_common_pars(Vertex_Comma_list *parameters) { return (SUCCESS); // For Construct_ns and Repetit_n } int Alternat_ns::alt_common_pars(Vertex_Comma_list *parameters) { return alternat_ns->alt_common_pars(parameters); } int Term_Bar_list::alt_common_pars(Vertex_Comma_list *parameters) { int result = SUCCESS; Term_list_iterator next_Term(*this); Term_ each_Term; while (each_Term=next_Term()) if (each_Term->alt_common_pars(parameters)==ERROR_ALT_COM) result = ERROR_ALT_COM; return (result); } int Term::alt_common_pars(Vertex_Comma_list *parameters) { int result = SUCCESS; Vertex *a_vertex = this->get_vertex(); Term_Comma_list *act_pars = this->get_actual_parameters(); if ((!parameters)&&(!act_pars)) return SUCCESS; else if (parameters && act_pars) result = act_pars->alt_common_pars(parameters); /* check their args are the same and in the same order */ else result = ERROR_ALT_COM; if (result==ERROR_ALT_COM) { cerr << toolname << ": error: on line " << this->get_vertex()->get_vertex_name()->get_line_number() << " parameters of '"; this->pp(cerr); cerr << "' mismatch with its superclass's.\n" << endl; } return result; } int Term_Comma_list::alt_common_pars(Vertex_Comma_list *parameters) { Vertex_list_iterator next_Vertex(*parameters); Vertex_ each_Vertex; Term_list_iterator next_Term(*this); Term_ each_Term; if ((this->number_of_parts())!=(parameters->number_of_parts())) return ERROR_ALT_COM; while ((each_Term=next_Term())&&(each_Vertex=next_Vertex())) if (!each_Term->get_vertex()->g_equal(each_Vertex)) return (ERROR_ALT_COM); return (SUCCESS); }