Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(850)

Side by Side Diff: pylib/gyp/simple_copy.py

Issue 1454433002: Python 3 compatibility Base URL: https://chromium.googlesource.com/external/gyp.git@master
Patch Set: Rebase with master (4ec6c4e3a94bd04a6da2858163d40b2429b8aad1) Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 # Copyright 2014 Google Inc. All rights reserved. 1 # Copyright 2014 Google Inc. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 """A clone of the default copy.deepcopy that doesn't handle cyclic 5 """A clone of the default copy.deepcopy that doesn't handle cyclic
6 structures or complex types except for dicts and lists. This is 6 structures or complex types except for dicts and lists. This is
7 because gyp copies so large structure that small copy overhead ends up 7 because gyp copies so large structure that small copy overhead ends up
8 taking seconds in a project the size of Chromium.""" 8 taking seconds in a project the size of Chromium."""
9 9
10 class Error(Exception): 10 class Error(Exception):
(...skipping 10 matching lines...) Expand all
21 return _deepcopy_dispatch[type(x)](x) 21 return _deepcopy_dispatch[type(x)](x)
22 except KeyError: 22 except KeyError:
23 raise Error('Unsupported type %s for deepcopy. Use copy.deepcopy ' + 23 raise Error('Unsupported type %s for deepcopy. Use copy.deepcopy ' +
24 'or expand simple_copy support.' % type(x)) 24 'or expand simple_copy support.' % type(x))
25 25
26 _deepcopy_dispatch = d = {} 26 _deepcopy_dispatch = d = {}
27 27
28 def _deepcopy_atomic(x): 28 def _deepcopy_atomic(x):
29 return x 29 return x
30 30
31 for x in (type(None), int, long, float, 31 try:
32 bool, str, unicode, type): 32 _string_types = (str, unicode)
33 # There's no unicode in python3
34 except NameError:
35 _string_types = (str, )
36
37 try:
38 _integer_types = (int, long)
39 # There's no long in python3
40 except NameError:
41 _integer_types = (int, )
42
43 for x in (type(None), float, bool, type) + _integer_types + _string_types:
33 d[x] = _deepcopy_atomic 44 d[x] = _deepcopy_atomic
34 45
35 def _deepcopy_list(x): 46 def _deepcopy_list(x):
36 return [deepcopy(a) for a in x] 47 return [deepcopy(a) for a in x]
37 d[list] = _deepcopy_list 48 d[list] = _deepcopy_list
38 49
39 def _deepcopy_dict(x): 50 def _deepcopy_dict(x):
40 y = {} 51 y = {}
41 for key, value in x.iteritems(): 52 for key, value in x.items():
42 y[deepcopy(key)] = deepcopy(value) 53 y[deepcopy(key)] = deepcopy(value)
43 return y 54 return y
44 d[dict] = _deepcopy_dict 55 d[dict] = _deepcopy_dict
45 56
46 del d 57 del d
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698