Undo change from list to dict for handling varnames, consts, etc.

As the doc string for _lookupName() explains:

    This routine uses a list instead of a dictionary, because a
    dictionary can't store two different keys if the keys have the
    same value but different types, e.g. 2 and 2L.  The compiler
    must treat these two separately, so it does an explicit type
    comparison before comparing the values.
diff --git a/Lib/compiler/pyassem.py b/Lib/compiler/pyassem.py
index 0cdc6ea..b2f91aa 100644
--- a/Lib/compiler/pyassem.py
+++ b/Lib/compiler/pyassem.py
@@ -15,17 +15,6 @@
     l.sort(sorter)
     return l
 
-def list2dict(l):
-    d = {}
-    for i in range(len(l)):
-        d[l[i]] = i
-    return d
-
-def dict2list(d):
-    l = [(v, k) for k, v in d.items()]
-    l.sort()
-    return [k for v, k in l]
-
 class FlowGraph:
     def __init__(self):
         self.current = self.entry = Block()
@@ -457,12 +446,6 @@
         assert self.stage == FLAT
         self.consts.insert(0, self.docstring)
         self.sort_cellvars()
-
-        self.c_varnames = list2dict(self.varnames)
-        self.c_names = list2dict(self.names)
-        self.c_consts = list2dict(self.consts)
-        self.c_closure = list2dict(self.closure)
-
         for i in range(len(self.insts)):
             t = self.insts[i]
             if len(t) == 2:
@@ -470,12 +453,6 @@
                 conv = self._converters.get(opname, None)
                 if conv:
                     self.insts[i] = opname, conv(self, oparg)
-
-        self.varnames = dict2list(self.c_varnames)
-        self.names = dict2list(self.c_names)
-        self.consts = dict2list(self.c_consts)
-        self.closure = dict2list(self.c_closure)
-
         self.stage = CONV
 
     def sort_cellvars(self):
@@ -491,23 +468,18 @@
         self.cellvars = self.cellvars + cells.keys()
         self.closure = self.cellvars + self.freevars
 
-    def _lookupName(self, name, dict):
-        i = dict.get(name, None)
-        if i is None:
-            i = dict[name] = len(dict)
-        return i
+    def _lookupName(self, name, list):
+        """Return index of name in list, appending if necessary
 
-    def XXX_lookupName(self, name, list):
-        """Return index of name in list, appending if necessary"""
-        # XXX It should be possible to replace this with some
-        # dictionary operations, but not sure how
+        This routine uses a list instead of a dictionary, because a
+        dictionary can't store two different keys if the keys have the
+        same value but different types, e.g. 2 and 2L.  The compiler
+        must treat these two separately, so it does an explicit type
+        comparison before comparing the values.
+        """
         t = type(name)
         for i in range(len(list)):
-            # must do a comparison on type first to prevent UnicodeErrors
-            # not clear that a dictionary would work, because we could
-            # get UnicodeErrors on lookups 
-            elt = list[i]
-            if isinstance(elt, t) and elt == name:
+            if t == type(list[i]) and list[i] == name:
                 return i
         end = len(list)
         list.append(name)
@@ -517,21 +489,22 @@
     def _convert_LOAD_CONST(self, arg):
         if hasattr(arg, 'getCode'):
             arg = arg.getCode()
-        return self._lookupName(arg, self.c_consts)
+        return self._lookupName(arg, self.consts)
 
     def _convert_LOAD_FAST(self, arg):
-        self._lookupName(arg, self.c_names)
-        return self._lookupName(arg, self.c_varnames)
+        self._lookupName(arg, self.names)
+        return self._lookupName(arg, self.varnames)
     _convert_STORE_FAST = _convert_LOAD_FAST
     _convert_DELETE_FAST = _convert_LOAD_FAST
 
     def _convert_LOAD_NAME(self, arg):
-        return self._lookupName(arg, self.c_names)
+        if self.klass is None:
+            self._lookupName(arg, self.varnames)
+        return self._lookupName(arg, self.names)
 
     def _convert_NAME(self, arg):
-        if self.klass is None:
-            self._lookupName(arg, self.c_varnames)
-        return self._lookupName(arg, self.c_names)
+        self._lookupName(arg, self.varnames)
+        return self._lookupName(arg, self.names)
     _convert_STORE_NAME = _convert_NAME
     _convert_DELETE_NAME = _convert_NAME
     _convert_IMPORT_NAME = _convert_NAME
@@ -544,15 +517,15 @@
     _convert_DELETE_GLOBAL = _convert_NAME
 
     def _convert_DEREF(self, arg):
-        self._lookupName(arg, self.c_names)
-        self._lookupName(arg, self.c_varnames)
-        return self._lookupName(arg, self.c_closure)
+        self._lookupName(arg, self.names)
+        self._lookupName(arg, self.varnames)
+        return self._lookupName(arg, self.closure)
     _convert_LOAD_DEREF = _convert_DEREF
     _convert_STORE_DEREF = _convert_DEREF
 
     def _convert_LOAD_CLOSURE(self, arg):
-        self._lookupName(arg, self.c_varnames)
-        return self._lookupName(arg, self.c_closure)
+        self._lookupName(arg, self.varnames)
+        return self._lookupName(arg, self.closure)
 
     _cmp = list(dis.cmp_op)
     def _convert_COMPARE_OP(self, arg):