def check_wellformedness(context_, target, node_): ris = get_roleinstantiation_children(node_) tree = context_.get_visible_global(target) rparamlist = roledecllist_get_roledecl_children( globalprotocoldecl_get_roledecllist_child(tree)) # Section 4.6.3 -- lengts of role-instantiation-list and target # role-decl-list are the same if len(ris) != len(rparamlist): util.report_error("Bad number of role arguments, expected: " + \ str(len(rparamlist))) croles = context_.get_roles() rparams = rparamlist.__iter__() rolemap = {} # params -> args (as strings -- # maybe should do ROLE node_, as for argmap) for ri in ris: ours = roleinstantiation_get_arg(ri) next = rparams.next() theirs = roledecl_get_role_name(next) # Section 4.6.3 -- every role argument is bound and distinct if (ours not in croles) or ours in rolemap.values(): util.report_error("Bad role argument: " + ours) if roleinstantiation_has_parameter_child(ri): tmp = roleinstantiation_get_parameter(ri) if theirs != tmp: # Section 4.6.3 -- every instantiation parameter corresponds to # the declared parameter in the protocol declaration util.report_error("Bad role parameter: " + theirs + ", " +tmp) rolemap[roledecl_get_declaration_name(next)] = ours return rolemap
def _project_all(context_): for _, module_ in context_.get_modules().items(): clone = context_.set_current_module(module_get_full_name(module_)) clone = build_visibility(clone, module_) for (proto, gpd) in clone.get_visible_globals().items(): full_global_name = globalprotocoldecl_get_full_name(gpd) rdl = globalprotocoldecl_get_roledecllist_child(gpd) #rolemap = roledecllist_get_rolemap(rdl) #for role_ in globalprotocoldecl_get_role_names(gpd): for rd in roledecllist_get_roledecl_children(rdl): dname = roledecl_get_declaration_name(rd) role_ = roledecl_get_role_name(rd) full_local_name = globaldo_get_projected_member_name( full_global_name, role_) #full_global_name, rolemap[role_]) if context_.has_projection(full_local_name): break projector = Projector() lpd = projector.project_globalprotocoldecl(clone, gpd, dname)#, rolemap) #full_name = lpd.get_full_name(clone) context_ = context_.add_projection(full_local_name, lpd) #print "Projected", full_global_name, "for", role_ + ":\n", \ # lpd.pretty_print() return context_
def get_rolemap(node_): rolemap = {} for rd in get_roledecl_children(node_): alias = roledecl_get_alias_name(rd) name = roledecl_get_role_name(rd) if alias: rolemap[alias] = name #rolemap[name] = alias else: rolemap[name] = name return rolemap
def get_target_parameter(rd_list, ri_list, rolearg): roleparam = None rd_iter = roledecllist_get_roledecl_children(rd_list).__iter__() for ri in roleinstantiationlist_get_roleinstantiation_children(ri_list): rd = rd_iter.next() if roleinstantiation_get_arg(ri) == rolearg: if roleinstantiation_get_parameter_child(ri): roleparam = roleinstantiation_get_parameter(ri) else: roleparam = roledecl_get_role_name(rd) # actually, this else case subsumes the first case break return roleparam
def get_target_parameter(rd_list, ri_list, rolearg): roleparam = None rd_iter = roledecllist_get_roledecl_children(rd_list).__iter__() for ri in roleinstantiationlist_get_children(ri_list): rd = rd_iter.next() if roleinstantiation_get_arg(ri) == rolearg: if roleinstantiation_get_parameter_child(ri): roleparam = roleinstantiation_get_parameter(ri) else: roleparam = roledecl_get_role_name(rd) # actually, this else case subsumes the first case break return roleparam
def get_target_parameter(self, context_): gpd = context_.get_visible_global(self.get_target()) ri_list = self.get_roleinstantiations() rolearg = self.local_role rd_list = globalprotocoldecl_get_roledecllist_child(gpd) roleparam = None rd_iter = roledecllist_get_roledecl_children(rd_list).__iter__() for (a, p) in ri_list: rd = rd_iter.next() if a == rolearg: if p: roleparam = p else: roleparam = roledecl_get_role_name(rd) # actually, this else case subsumes the first case break return roleparam
def get_role_names(node_): # Not aliases (for projection and role instantiation) roles = [] for rd in get_roledecl_children(node_): roles.append(roledecl_get_role_name(rd)) return roles