Changeset 572 for CMT/HEAD


Ignore:
Timestamp:
Apr 29, 2011, 5:43:24 PM (13 years ago)
Author:
rybkin
Message:

See C.L. 455

Location:
CMT/HEAD
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • CMT/HEAD/ChangeLog

    r571 r572  
     12011-04-29    <rybkin@lal.in2p3.fr> 455
     2
     3        * source/cmt_use.h: In class Use, declare function show_sub_uses with
     4        modified signature to show, in more detail, origin of uses auto_imports
     5        state
     6        * source/cmt_use.cxx: In class Use, in function set_auto_imports,
     7        implement policy where use has Off != auto_imports, if it is (direct)
     8        sub-use without -no_auto_imports of either current use or sub-use with
     9        Off != auto_imports, implement function show_sub_uses with modified
     10        signature, in function show_all, make use of show_sub_uses with modified
     11        signature
     12       
    1132011-04-25    <rybkin@lal.in2p3.fr> 454
    214
  • CMT/HEAD/source/cmt_use.cxx

    r571 r572  
    521521  use = &(current ());
    522522  use->unselect ();
    523   if (!Cmt::get_quiet () && mode != Xml) use->show_sub_uses ("", skip_discarded, out);
     523  cmt_map <Use*, bool> visited;
     524  if (!Cmt::get_quiet () && mode != Xml) use->show_sub_uses (visited, "", use->auto_imports, skip_discarded, out);
    524525
    525526  if (uses.size () > 0)
     
    39623963  static int level (-1);
    39633964  level++;
     3965  /*
    39643966  if (level == 0)
    39653967    {
     
    39673969      selected = true;
    39683970    }
    3969 
    3970   if (visited.has (this) &&
    3971       (1 != level || selected))
    3972     // revisit sub-uses of current (level == 0) use
    3973     // encountered in its requirements file for the first time (selected == false)
    3974     // to ensure their auto_imports state takes precedence
    3975     {
    3976       level--;
    3977       return;
     3971  */
     3972  switch (context_state)
     3973    {
     3974    case Unspecified:
     3975    case On:
     3976      if (!visited.has (this) ||
     3977          // revisit uses that may be turned into Off != auto_imports
     3978          // via some other use(s)
     3979          // policy being use has Off != auto_imports,
     3980          // if it is (direct) sub-use without -no_auto_imports of
     3981          // either current use or sub-use with Off != auto_imports
     3982          (Off == auto_imports && Off != specified_state)
     3983          )
     3984        {
     3985          auto_imports = specified_state;
     3986          context_state = UseContext::mask_auto_imports (context_state, auto_imports);
     3987        }
     3988      else
     3989        {
     3990          level--;
     3991          return;
     3992        }
     3993      break;
     3994    case Off:
     3995      if (visited.has (this))
     3996        {
     3997          level--;
     3998          return;
     3999        }
     4000      auto_imports = context_state;
     4001      break;
    39784002    }
    39794003
     
    39894013  static bool yes (true);
    39904014  visited.add (this, yes);
    3991   if (1 == level) selected = true;
    3992   //  if (auto_imports == context_state) return;
    3993  
    3994   //State old_state = auto_imports;
    3995  
    3996   //auto_imports = context_state;
    3997 
    3998   switch (context_state)
    3999     {
    4000     case Unspecified:
    4001     case On:
    4002       //if (auto_imports == specified_state) return;
    4003       auto_imports = specified_state;
    4004       /*
    4005       switch (auto_imports)
    4006         {
    4007         case Unspecified:
    4008           break;
    4009         case Off:
    4010           context_state = Off;
    4011           break;
    4012         case On:
    4013           context_state = On;
    4014           break;
    4015         }
    4016       */
    4017       context_state = UseContext::mask_auto_imports (context_state, auto_imports);
    4018       break;
    4019     case Off:
    4020       //if (auto_imports == context_state) return;
    4021       auto_imports = context_state;
    4022       break;
    4023     }
     4015
    40244016  cmt_string s;
    40254017  static const cmt_string state_text[] = {"Unspecified", "Off", "On"};
     
    40844076            {
    40854077              visited.add (sub_uses[i], yes);
    4086               sub_uses[i]->select ();
    40874078            }
    40884079        }
     
    44944485
    44954486//----------------------------------------------------------
    4496 void Use::show_sub_uses (const cmt_string& request, bool skip_discarded, ostream& out)
    4497 //void Use::show_sub_uses (const cmt_string& request, bool skip_discarded)
    4498 {
    4499   Use* current = &(Use::current ());
    4500   int n;
    4501   Use* use;
    4502   static int level = 0;
    4503 
     4487void Use::show_sub_uses (cmt_map <Use*, bool>& visited,
     4488                         const cmt_string& request, State specified_state,
     4489                         bool skip_discarded, ostream& out)
     4490//void Use::show_sub_uses (const cmt_string& request, bool skip_discarded, ostream& out)
     4491{
    45044492  if (skip_discarded && discarded) return;
    45054493  if (m_hidden) return;
    45064494
     4495  Use* current = &(Use::current ());
     4496  static State context_state (auto_imports);
     4497  static int level (-1);
     4498  level++;
     4499
     4500  if (level == 0)
     4501    {
     4502      unselect_all ();
     4503      selected = true;
     4504    }
     4505
     4506  State saved_context_state (context_state);
     4507  switch (context_state)
     4508    {
     4509    case Unspecified:
     4510    case On:
     4511      if (!visited.has (this)
     4512          || level == 1)
     4513        // show all direct sub-uses of current use
     4514        {
     4515          context_state = UseContext::mask_auto_imports (context_state, specified_state);
     4516        }
     4517      else if (Off != auto_imports && Off != specified_state
     4518               //      else if (specified_state == auto_imports && Off != specified_state
     4519               && !selected)
     4520        // show this sub-use as it may have been used to make Off != auto_imports
     4521        // and is sufficient in order to consider it Off != auto_imports,
     4522        // mark selected not to consider use again and thus avoid looping this way
     4523        {
     4524          selected = true;
     4525          //      auto_imports = specified_state;
     4526          context_state = UseContext::mask_auto_imports (context_state, specified_state);
     4527        }
     4528      else
     4529        {
     4530          level--;
     4531          return;
     4532        }
     4533      break;
     4534    case Off:
     4535      if (visited.has (this)
     4536          )
     4537        {
     4538          level--;
     4539          return;
     4540        }
     4541      break;
     4542    }
     4543
    45074544  if (level > 0)
    45084545    {
    45094546      out << "# ";
    4510       for (n = 0; n < (level-1); n++) out << "  ";
     4547      for (int n = 0; n < (level-1); n++) out << "  ";
    45114548
    45124549      if (request == "")
     
    45364573      else if (initial_scope != ScopePublic) out << " (private)";
    45374574
    4538       if (auto_imports == Off) out << " (no_auto_imports)";
     4575      if (specified_state == Off) out << " (no_auto_imports)";
     4576      //      if (auto_imports == Off) out << " (no_auto_imports)";
    45394577
    45404578      if (structuring_style == without_version_directory) out << " (no_version_directory)";
    4541       //      if (style == no_version_style) out << " (no_version_directory)";
    45424579
    45434580      if (m_has_native_version)
     
    45574594    }
    45584595
    4559   if (selected) return;
    4560   selected = true;
    4561 
    4562   level++;
     4596  static bool yes (true);
     4597  visited.add (this, yes);
     4598
    45634599  for (int i = 0; i < sub_uses.size (); i++)
    45644600    {
    4565       //use = sub_uses[n];
    45664601      //if (use == 0) continue;
     4602      Use* use;
    45674603      if (sub_uses[i]->m_index >= 0 && !sub_uses[i]->discarded)
    45684604        {
     
    45784614          else
    45794615            {
     4616              visited.add (sub_uses[i], yes);
    45804617              continue;
    45814618            }
     
    45854622
    45864623      ScopeType saved_scope = use->initial_scope;
    4587       State saved_state = use->auto_imports;
     4624      //      State saved_state = use->auto_imports;
    45884625
    45894626      use->initial_scope = sub_use_scopes[i];
    4590       use->auto_imports = sub_use_auto_imports[i];
    4591 
    4592       use->show_sub_uses (request, skip_discarded, out);
     4627      //      use->auto_imports = sub_use_auto_imports[i];
     4628
     4629      use->show_sub_uses (visited, request, sub_use_auto_imports[i], skip_discarded, out);
     4630      //use->show_sub_uses (request, skip_discarded, out);
    45934631
    45944632      use->initial_scope = saved_scope;
    4595       use->auto_imports = saved_state;
     4633      //      use->auto_imports = saved_state;
    45964634    }
    45974635  level--;
     4636
     4637  context_state = saved_context_state;
    45984638}
    45994639
  • CMT/HEAD/source/cmt_use.h

    r566 r572  
    198198  bool is_client (const cmt_string& package,
    199199                  const cmt_string& version);
    200   void show_sub_uses (const cmt_string& request, bool skip_discarded = false,
    201                       ostream& out = cout);
     200  void show_sub_uses (cmt_map <Use*, bool>& visited,
     201                      const cmt_string& request, State specified_state,
     202                      bool skip_discarded = false, ostream& out = cout);
    202203  //  void show_sub_uses (const cmt_string& request, bool skip_discarded = false);
    203204  bool select_alternate ();
Note: See TracChangeset for help on using the changeset viewer.