Author: sapient
Date: Thu Jun 12 06:27:44 2008
New Revision: 27109

URL: http://svn.gna.org/viewcvs/wesnoth?rev=27109&view=rev
Log:
possible fix for bug #11813, Shadow_Master to test it

Modified:
    trunk/src/unit_types.cpp

Modified: trunk/src/unit_types.cpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/unit_types.cpp?rev=27109&r1=27108&r2=27109&view=diff
==============================================================================
--- trunk/src/unit_types.cpp (original)
+++ trunk/src/unit_types.cpp Thu Jun 12 06:27:44 2008
@@ -38,6 +38,10 @@
 #define DBG_UT LOG_STREAM(debug, engine)
 #define LOG_UT LOG_STREAM(info, engine)
 #define ERR_UT LOG_STREAM(err, engine)
+
+namespace {
+       std::map< std::string, std::set< std::string > > future_advancefroms;
+}
 
 attack_type::attack_type(const config& cfg)
 {
@@ -762,6 +766,16 @@
        hide_help_= utils::string_bool(cfg["hide_help"],false);
 
        build_status_ = HELP_INDEX;
+
+       std::map< std::string, std::set< std::string > >::const_iterator 
adv_froms = future_advancefroms.find(id_);
+       if (adv_froms != future_advancefroms.end()) {
+               std::set< std::string >::const_iterator adv_it,
+                       adv_end = adv_froms->second.end();
+               for(adv_it = adv_froms->second.begin(); adv_it != adv_end; 
++adv_it) {
+                       add_advancesfrom(*adv_it);
+               }
+               future_advancefroms.erase(id_);
+       }
 }
 
 const unit_type& unit_type::get_gender_unit_type(unit_race::GENDER gender) 
const
@@ -1131,7 +1145,13 @@
             count++;
             DBG_UT << "Unit: " << unit_cfg["id"] << ", AdvanceTo " << count << 
": " << *i_adv << "\n";
             unit_type_map::iterator itor_advanceto = types_.find(*i_adv);
-            itor_advanceto->second.add_advancesfrom(unit_cfg["id"]);
+            if(itor_advanceto == types_.end()) {
+               // if we can't add the advancefrom information yet, we should
+               // just remember it for later (to prevent infinite recursion)
+               future_advancefroms[*i_adv].insert(unit_cfg["id"]);
+            } else {
+                               
itor_advanceto->second.add_advancesfrom(unit_cfg["id"]);
+            }
         }
     }
 }


_______________________________________________
Wesnoth-commits mailing list
[email protected]
https://mail.gna.org/listinfo/wesnoth-commits

Reply via email to