You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by da...@apache.org on 2012/12/10 22:48:26 UTC

svn commit: r1419817 - /subversion/trunk/build/transform_sql.py

Author: danielsh
Date: Mon Dec 10 21:48:25 2012
New Revision: 1419817

URL: http://svn.apache.org/viewvc?rev=1419817&view=rev
Log:
Improve the new symbolic token maps.

* build/transform_sql.py
  (NonRewritableDict): New.
  (extract_token_map): Ensure that mappings do not override each other.

Modified:
    subversion/trunk/build/transform_sql.py

Modified: subversion/trunk/build/transform_sql.py
URL: http://svn.apache.org/viewvc/subversion/trunk/build/transform_sql.py?rev=1419817&r1=1419816&r2=1419817&view=diff
==============================================================================
--- subversion/trunk/build/transform_sql.py (original)
+++ subversion/trunk/build/transform_sql.py Mon Dec 10 21:48:25 2012
@@ -178,6 +178,20 @@ class Processor(object):
       self.var_printed = False
 
 
+class NonRewritableDict(dict):
+  """A dictionary that does not allow self[k]=v when k in self.
+
+  (An entry would have to be explicitly deleted before a new value
+  may be entered.)
+  """
+
+  def __setitem__(self, key, val):
+    if self.__contains__(key) and self.__getitem__(key) != val:
+      raise Exception("Can't re-insert key %r with value %r "
+                      "(already present with value %r)"
+                      % (key, val, self.__getitem__(key)))
+    super(NonRewritableDict, self).__setitem__(key, val)
+
 def extract_token_map(filename):
   try:
     fd = open(filename)
@@ -185,7 +199,7 @@ def extract_token_map(filename):
     return {}
 
   pattern = re.compile(r'"(.*?)".*(MAP_\w*)')
-  map = {}
+  map = NonRewritableDict()
   hotspot = False
   for line in fd:
     if ('svn_token_map_t', '\x7d;')[hotspot] in line: