#include "semcheck.h" /***************************************************************** * FILE: expand_inherit.c * COPYRIGHT (c) 1990 * Prof. Karl J. Lieberherr * AUTHOR: Walter Hursch * DATE: October 23, 1990 * REVISED: Cun Feb. March April *----------------------------------------------------------------- *DESCRIPTION: *Expand_inherit.c expands an explicit inheritance (*inherit*) into *the inherited instance variables. It uses the following methods: * Adjacency::expand_inherit( this,NULL); * NULL is used for first call ---Cun * *****************************************************************/ #include /*---------------------------------------------------------------- * Method: void expand_inherit() * *--------------------------------------------------------------*/ void Demeter_in::expand_inherit() { input -> expand_inherit(); } void Input::expand_inherit() { } void Cd_graph::expand_inherit() { adjacencies -> expand_inherit(); } void Adjacency_Nlist::expand_inherit() { Adjacency_list_iterator next_arg( *this ); Adjacency_ each_arg; while (each_arg = next_arg()) each_arg -> expand_inherit( this,NULL); } /*---------------------------------------------------------------- * Method: void expand_inherit( Adjacency_Nlist * ) *--------------------------------------------------------------*/ void Adjacency::expand_inherit(Adjacency_Nlist *adjacencies,Any_vertex_List *new_list) { ns -> expand_inherit( adjacencies,new_list); } void Neighbors::expand_inherit(Adjacency_Nlist *adjacencies,Any_vertex_List *new_list) { } void Neighbors_wc::expand_inherit( Adjacency_Nlist *adjacencies, Any_vertex_List *new_list) { } void Construct_ns::expand_inherit( Adjacency_Nlist *adjacencies, Any_vertex_List *a_list) { Any_vertex_List *new_list = this->get_construct_ns() ->expand_inherit(adjacencies); this->rset_construct_ns(new_list); if (a_list) { Any_vertex_list_iterator next_arg(*this->get_construct_ns()); Any_vertex_ each_arg; while (each_arg = next_arg()) a_list->append(each_arg); } } void Alternat_ns::expand_inherit( Adjacency_Nlist *adjacencies, Any_vertex_List *a_list) { if (this->get_construct_ns()==NULL) return; Any_vertex_List *new_list = this->get_construct_ns() ->expand_inherit(adjacencies); this->rset_construct_ns(new_list); if (a_list) { Any_vertex_list_iterator next_arg(*this->get_construct_ns()); Any_vertex_ each_arg; while (each_arg = next_arg()) a_list->append(each_arg); } } Any_vertex_List*Any_vertex_List::expand_inherit( Adjacency_Nlist *adjacencies ) { Any_vertex_List*new_list = new Any_vertex_List(); Any_vertex_list_iterator next_arg(*this); Any_vertex_ each_arg; while (each_arg = next_arg()){ each_arg -> expand_inherit(adjacencies,this,new_list); } return (new_list); } void Any_vertex::expand_inherit ( Adjacency_Nlist *adjacencies, Any_vertex_List *avl ,Any_vertex_List*new_list) { new_list->append(this); } void Inherit_term::expand_inherit(Adjacency_Nlist *adjacencies,Any_vertex_List *avl,Any_vertex_List*new_list) { inherited ->expand_inherit(adjacencies,avl,new_list); } void Term_Comma_list::expand_inherit(Adjacency_Nlist *adjacencies,Any_vertex_List *avl,Any_vertex_List*new_list) { Term_list_iterator next_arg( *this ); Term_ each_arg; while ( each_arg = next_arg() ) { Adjacency *inherit_adjacency = adjacencies->LL1_FIND_RULE(each_arg->get_vertex()); if (inherit_adjacency) inherit_adjacency->expand_inherit(adjacencies,new_list); /* else { cout<<"\nExpand inherit-part warning: cannot find" << " the production for "; each_arg->get_vertex()->pp(); cout << endl; } */ } }