@@ -39,8 +39,7 @@ def _re0(s, fp, n):
3939    return  struct .unpack (s , _read_except (fp , n ))[0 ]
4040
4141
42- def  _unpack_integer (code , fp ):
43-     ic  =  ord (code )
42+ def  _unpack_integer (ic , code , fp ):
4443    if  (ic  &  0xE0 ) ==  0xE0 :
4544        return  struct .unpack ("b" , code )[0 ]
4645    if  (ic  &  0x80 ) ==  0x00 :
@@ -54,17 +53,15 @@ def _unpack_integer(code, fp):
5453    return  _re0 (s .strip (), fp , 1  <<  (ic  &  3 ))
5554
5655
57- def  _unpack_float (code , fp ):
58-     ic  =  ord (code )
56+ def  _unpack_float (ic , code , fp ):
5957    if  ic  ==  0xCA :
6058        return  _re0 (">f" , fp , 4 )
6159    if  ic  ==  0xCB :
6260        return  _re0 (">d" , fp , 8 )
6361    _fail ()
6462
6563
66- def  _unpack_string (code , fp , options ):
67-     ic  =  ord (code )
64+ def  _unpack_string (ic , code , fp , options ):
6865    if  (ic  &  0xE0 ) ==  0xA0 :
6966        length  =  ic  &  ~ 0xE0 
7067    elif  ic  ==  0xD9 :
@@ -85,8 +82,7 @@ def _unpack_string(code, fp, options):
8582        raise  InvalidStringException ("unpacked string is invalid utf-8" )
8683
8784
88- def  _unpack_binary (code , fp ):
89-     ic  =  ord (code )
85+ def  _unpack_binary (ic , code , fp ):
9086    if  ic  ==  0xC4 :
9187        length  =  _re0 ("B" , fp , 1 )
9288    elif  ic  ==  0xC5 :
@@ -99,8 +95,7 @@ def _unpack_binary(code, fp):
9995    return  _read_except (fp , length )
10096
10197
102- def  _unpack_ext (code , fp , options ):
103-     ic  =  ord (code )
98+ def  _unpack_ext (ic , code , fp , options ):
10499    n  =  b"\xd4 \xd5 \xd6 \xd7 \xd8 " .find (code )
105100    length  =  0  if  n  <  0  else  1  <<  n 
106101    if  not  length :
@@ -126,8 +121,7 @@ def _unpack_ext(code, fp, options):
126121    raise  UnsupportedTypeException (f"ext_type: 0x{ ext_type :0X}  " )
127122
128123
129- def  _unpack_array (code , fp , options ):
130-     ic  =  ord (code )
124+ def  _unpack_array (ic , code , fp , options ):
131125    if  (ic  &  0xF0 ) ==  0x90 :
132126        length  =  ic  &  ~ 0xF0 
133127    elif  ic  ==  0xDC :
@@ -146,8 +140,7 @@ def _deep_list_to_tuple(obj):
146140    return  obj 
147141
148142
149- def  _unpack_map (code , fp , options ):
150-     ic  =  ord (code )
143+ def  _unpack_map (ic , code , fp , options ):
151144    if  (ic  &  0xF0 ) ==  0x80 :
152145        length  =  ic  &  ~ 0xF0 
153146    elif  ic  ==  0xDE :
@@ -171,45 +164,39 @@ def _unpack_map(code, fp, options):
171164            raise  UnhashableKeyException (f'"{ str (k )}  "' )
172165        if  k  in  d :
173166            raise  DuplicateKeyException (f'"{ str (k )}  " ({ type (k )}  )' )
174- 
175167        # Unpack value 
176-         v  =  mpload (fp , options )
177- 
178-         try :
179-             d [k ] =  v 
180-         except  TypeError :
181-             raise  UnhashableKeyException (f'"{ str (k )}  "' )
168+         d [k ] =  mpload (fp , options )
182169    return  d 
183170
184171
185172def  mpload (fp , options ):
186173    code  =  _read_except (fp , 1 )
187174    ic  =  ord (code )
188175    if  (ic  <=  0x7F ) or  (0xCC  <=  ic  <=  0xD3 ) or  (0xE0  <=  ic  <=  0xFF ):
189-         return  _unpack_integer (code , fp )
176+         return  _unpack_integer (ic ,  code , fp )
190177    if  ic  <=  0xC9 :
191178        if  ic  <=  0xC3 :
192179            if  ic  <=  0x8F :
193-                 return  _unpack_map (code , fp , options )
180+                 return  _unpack_map (ic ,  code , fp , options )
194181            if  ic  <=  0x9F :
195-                 return  _unpack_array (code , fp , options )
182+                 return  _unpack_array (ic ,  code , fp , options )
196183            if  ic  <=  0xBF :
197-                 return  _unpack_string (code , fp , options )
184+                 return  _unpack_string (ic ,  code , fp , options )
198185            if  ic  ==  0xC1 :
199186                raise  ReservedCodeException ("got 0xc1" )
200187            return  (None , 0 , False , True )[ic  -  0xC0 ]
201188        if  ic  <=  0xC6 :
202-             return  _unpack_binary (code , fp )
203-         return  _unpack_ext (code , fp , options )
189+             return  _unpack_binary (ic ,  code , fp )
190+         return  _unpack_ext (ic ,  code , fp , options )
204191    if  ic  <=  0xCB :
205-         return  _unpack_float (code , fp )
192+         return  _unpack_float (ic ,  code , fp )
206193    if  ic  <=  0xD8 :
207-         return  _unpack_ext (code , fp , options )
194+         return  _unpack_ext (ic ,  code , fp , options )
208195    if  ic  <=  0xDB :
209-         return  _unpack_string (code , fp , options )
196+         return  _unpack_string (ic ,  code , fp , options )
210197    if  ic  <=  0xDD :
211-         return  _unpack_array (code , fp , options )
212-     return  _unpack_map (code , fp , options )
198+         return  _unpack_array (ic ,  code , fp , options )
199+     return  _unpack_map (ic ,  code , fp , options )
213200
214201
215202# API 
0 commit comments