]> granicus.if.org Git - re2c/commitdiff
- Disallow multiple changes to code names
authorhelly <helly@642ea486-5414-0410-9d7f-a0204ed87703>
Thu, 22 Feb 2007 01:14:09 +0000 (01:14 +0000)
committerhelly <helly@642ea486-5414-0410-9d7f-a0204ed87703>
Thu, 22 Feb 2007 01:14:09 +0000 (01:14 +0000)
re2c/code.cc

index 8bb0402b50e883744e5432bc5aaa44afc238bb13..9af34cdb1d556d3fed54cbdf8ed29cefe2fdff6c 100644 (file)
@@ -1750,15 +1750,27 @@ void Scanner::config(const Str& cfg, const Str& val)
        }
        else if (mapCodeKeys.find(cfg.to_string()) != mapCodeKeys.end())
     {
-       mapCodeName[cfg.to_string().c_str() + sizeof("code:") - 1] = strVal;
+       if ((bSinglePass || !bLastPass) 
+       && !mapCodeName.insert(std::make_pair(cfg.to_string().substr(sizeof("code:") - 1), strVal)).second)
+       {
+                       fatal("variable already being used and cannot be changed");
+       }
     }
        else if (mapDefineKeys.find(cfg.to_string()) != mapDefineKeys.end())
     {
-       mapCodeName[cfg.to_string().c_str() + sizeof("define:") - 1] = strVal;
+       if ((bSinglePass || !bLastPass) 
+       && !mapCodeName.insert(std::make_pair(cfg.to_string().substr(sizeof("define:") - 1), strVal)).second)
+       {
+                       fatal("define already being used and cannot be changed");
+               }
     }
        else if (mapLabelKeys.find(cfg.to_string()) != mapLabelKeys.end())
     {
-       mapCodeName[cfg.to_string().c_str() + sizeof("label:") - 1] = strVal;
+       if ((bSinglePass || !bLastPass) 
+       && !mapCodeName.insert(std::make_pair(cfg.to_string().substr(sizeof("label:") - 1), strVal)).second)
+       {
+                       fatal("label already being used and cannot be changed");
+       }
     }
        else
        {