builtins.py 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767
  1. """This module trys to support builtin types and functions."""
  2. import inspect
  3. import rope.base.evaluate
  4. from rope.base import pynames, pyobjects, arguments, utils, ast
  5. class BuiltinModule(pyobjects.AbstractModule):
  6. def __init__(self, name, pycore=None, initial={}):
  7. super(BuiltinModule, self).__init__()
  8. self.name = name
  9. self.pycore = pycore
  10. self.initial = initial
  11. parent = None
  12. def get_attributes(self):
  13. return self.attributes
  14. def get_doc(self):
  15. if self.module:
  16. return self.module.__doc__
  17. def get_name(self):
  18. return self.name.split('.')[-1]
  19. @property
  20. @utils.saveit
  21. def attributes(self):
  22. result = _object_attributes(self.module, self)
  23. result.update(self.initial)
  24. if self.pycore is not None:
  25. submodules = self.pycore._builtin_submodules(self.name)
  26. for name, module in submodules.iteritems():
  27. result[name] = rope.base.builtins.BuiltinName(module)
  28. return result
  29. @property
  30. @utils.saveit
  31. def module(self):
  32. try:
  33. result = __import__(self.name)
  34. for token in self.name.split('.')[1:]:
  35. result = getattr(result, token, None)
  36. return result
  37. except ImportError:
  38. return
  39. class _BuiltinElement(object):
  40. def __init__(self, builtin, parent=None):
  41. self.builtin = builtin
  42. self._parent = parent
  43. def get_doc(self):
  44. if self.builtin:
  45. return getattr(self.builtin, '__doc__', None)
  46. def get_name(self):
  47. if self.builtin:
  48. return getattr(self.builtin, '__name__', None)
  49. @property
  50. def parent(self):
  51. if self._parent is None:
  52. return builtins
  53. return self._parent
  54. class BuiltinClass(_BuiltinElement, pyobjects.AbstractClass):
  55. def __init__(self, builtin, attributes, parent=None):
  56. _BuiltinElement.__init__(self, builtin, parent)
  57. pyobjects.AbstractClass.__init__(self)
  58. self.initial = attributes
  59. @utils.saveit
  60. def get_attributes(self):
  61. result = _object_attributes(self.builtin, self)
  62. result.update(self.initial)
  63. return result
  64. class BuiltinFunction(_BuiltinElement, pyobjects.AbstractFunction):
  65. def __init__(self, returned=None, function=None, builtin=None,
  66. argnames=[], parent=None):
  67. _BuiltinElement.__init__(self, builtin, parent)
  68. pyobjects.AbstractFunction.__init__(self)
  69. self.argnames = argnames
  70. self.returned = returned
  71. self.function = function
  72. def get_returned_object(self, args):
  73. if self.function is not None:
  74. return self.function(_CallContext(self.argnames, args))
  75. else:
  76. return self.returned
  77. def get_param_names(self, special_args=True):
  78. return self.argnames
  79. class BuiltinUnknown(_BuiltinElement, pyobjects.PyObject):
  80. def __init__(self, builtin):
  81. super(BuiltinUnknown, self).__init__(pyobjects.get_unknown())
  82. self.builtin = builtin
  83. self.type = pyobjects.get_unknown()
  84. def get_name(self):
  85. return getattr(type(self.builtin), '__name__', None)
  86. @utils.saveit
  87. def get_attributes(self):
  88. return _object_attributes(self.builtin, self)
  89. def _object_attributes(obj, parent):
  90. attributes = {}
  91. for name in dir(obj):
  92. if name == 'None':
  93. continue
  94. try:
  95. child = getattr(obj, name)
  96. except AttributeError:
  97. # descriptors are allowed to raise AttributeError
  98. # even if they are in dir()
  99. continue
  100. pyobject = None
  101. if inspect.isclass(child):
  102. pyobject = BuiltinClass(child, {}, parent=parent)
  103. elif inspect.isroutine(child):
  104. pyobject = BuiltinFunction(builtin=child, parent=parent)
  105. else:
  106. pyobject = BuiltinUnknown(builtin=child)
  107. attributes[name] = BuiltinName(pyobject)
  108. return attributes
  109. def _create_builtin_type_getter(cls):
  110. def _get_builtin(*args):
  111. if not hasattr(cls, '_generated'):
  112. cls._generated = {}
  113. if args not in cls._generated:
  114. cls._generated[args] = cls(*args)
  115. return cls._generated[args]
  116. return _get_builtin
  117. def _create_builtin_getter(cls):
  118. type_getter = _create_builtin_type_getter(cls)
  119. def _get_builtin(*args):
  120. return pyobjects.PyObject(type_getter(*args))
  121. return _get_builtin
  122. class _CallContext(object):
  123. def __init__(self, argnames, args):
  124. self.argnames = argnames
  125. self.args = args
  126. def _get_scope_and_pyname(self, pyname):
  127. if pyname is not None and isinstance(pyname, pynames.AssignedName):
  128. pymodule, lineno = pyname.get_definition_location()
  129. if pymodule is None:
  130. return None, None
  131. if lineno is None:
  132. lineno = 1
  133. scope = pymodule.get_scope().get_inner_scope_for_line(lineno)
  134. name = None
  135. while name is None and scope is not None:
  136. for current in scope.get_names():
  137. if scope[current] is pyname:
  138. name = current
  139. break
  140. else:
  141. scope = scope.parent
  142. return scope, name
  143. return None, None
  144. def get_argument(self, name):
  145. if self.args:
  146. args = self.args.get_arguments(self.argnames)
  147. return args[self.argnames.index(name)]
  148. def get_pyname(self, name):
  149. if self.args:
  150. args = self.args.get_pynames(self.argnames)
  151. if name in self.argnames:
  152. return args[self.argnames.index(name)]
  153. def get_arguments(self, argnames):
  154. if self.args:
  155. return self.args.get_arguments(argnames)
  156. def get_pynames(self, argnames):
  157. if self.args:
  158. return self.args.get_pynames(argnames)
  159. def get_per_name(self):
  160. if self.args is None:
  161. return None
  162. pyname = self.args.get_instance_pyname()
  163. scope, name = self._get_scope_and_pyname(pyname)
  164. if name is not None:
  165. pymodule = pyname.get_definition_location()[0]
  166. return pymodule.pycore.object_info.get_per_name(scope, name)
  167. return None
  168. def save_per_name(self, value):
  169. if self.args is None:
  170. return None
  171. pyname = self.args.get_instance_pyname()
  172. scope, name = self._get_scope_and_pyname(pyname)
  173. if name is not None:
  174. pymodule = pyname.get_definition_location()[0]
  175. pymodule.pycore.object_info.save_per_name(scope, name, value)
  176. class _AttributeCollector(object):
  177. def __init__(self, type):
  178. self.attributes = {}
  179. self.type = type
  180. def __call__(self, name, returned=None, function=None,
  181. argnames=['self'], check_existence=True):
  182. try:
  183. builtin = getattr(self.type, name)
  184. except AttributeError:
  185. if check_existence:
  186. raise
  187. builtin=None
  188. self.attributes[name] = BuiltinName(
  189. BuiltinFunction(returned=returned, function=function,
  190. argnames=argnames, builtin=builtin))
  191. def __setitem__(self, name, value):
  192. self.attributes[name] = value
  193. class List(BuiltinClass):
  194. def __init__(self, holding=None):
  195. self.holding = holding
  196. collector = _AttributeCollector(list)
  197. collector('__iter__', function=self._iterator_get)
  198. collector('__new__', function=self._new_list)
  199. # Adding methods
  200. collector('append', function=self._list_add, argnames=['self', 'value'])
  201. collector('__setitem__', function=self._list_add,
  202. argnames=['self', 'index', 'value'])
  203. collector('insert', function=self._list_add,
  204. argnames=['self', 'index', 'value'])
  205. collector('extend', function=self._self_set,
  206. argnames=['self', 'iterable'])
  207. # Getting methods
  208. collector('__getitem__', function=self._list_get)
  209. collector('pop', function=self._list_get)
  210. collector('__getslice__', function=self._self_get)
  211. super(List, self).__init__(list, collector.attributes)
  212. def _new_list(self, args):
  213. return _create_builtin(args, get_list)
  214. def _list_add(self, context):
  215. if self.holding is not None:
  216. return
  217. holding = context.get_argument('value')
  218. if holding is not None and holding != pyobjects.get_unknown():
  219. context.save_per_name(holding)
  220. def _self_set(self, context):
  221. if self.holding is not None:
  222. return
  223. iterable = context.get_pyname('iterable')
  224. holding = _infer_sequence_for_pyname(iterable)
  225. if holding is not None and holding != pyobjects.get_unknown():
  226. context.save_per_name(holding)
  227. def _list_get(self, context):
  228. if self.holding is not None:
  229. return self.holding
  230. return context.get_per_name()
  231. def _iterator_get(self, context):
  232. return get_iterator(self._list_get(context))
  233. def _self_get(self, context):
  234. return get_list(self._list_get(context))
  235. get_list = _create_builtin_getter(List)
  236. get_list_type = _create_builtin_type_getter(List)
  237. class Dict(BuiltinClass):
  238. def __init__(self, keys=None, values=None):
  239. self.keys = keys
  240. self.values = values
  241. item = get_tuple(self.keys, self.values)
  242. collector = _AttributeCollector(dict)
  243. collector('__new__', function=self._new_dict)
  244. collector('__setitem__', function=self._dict_add)
  245. collector('popitem', function=self._item_get)
  246. collector('pop', function=self._value_get)
  247. collector('get', function=self._key_get)
  248. collector('keys', function=self._key_list)
  249. collector('values', function=self._value_list)
  250. collector('items', function=self._item_list)
  251. collector('copy', function=self._self_get)
  252. collector('__getitem__', function=self._value_get)
  253. collector('__iter__', function=self._key_iter)
  254. collector('update', function=self._self_set)
  255. super(Dict, self).__init__(dict, collector.attributes)
  256. def _new_dict(self, args):
  257. def do_create(holding=None):
  258. if holding is None:
  259. return get_dict()
  260. type = holding.get_type()
  261. if isinstance(type, Tuple) and len(type.get_holding_objects()) == 2:
  262. return get_dict(*type.get_holding_objects())
  263. return _create_builtin(args, do_create)
  264. def _dict_add(self, context):
  265. if self.keys is not None:
  266. return
  267. key, value = context.get_arguments(['self', 'key', 'value'])[1:]
  268. if key is not None and key != pyobjects.get_unknown():
  269. context.save_per_name(get_tuple(key, value))
  270. def _item_get(self, context):
  271. if self.keys is not None:
  272. return get_tuple(self.keys, self.values)
  273. item = context.get_per_name()
  274. if item is None or not isinstance(item.get_type(), Tuple):
  275. return get_tuple(self.keys, self.values)
  276. return item
  277. def _value_get(self, context):
  278. item = self._item_get(context).get_type()
  279. return item.get_holding_objects()[1]
  280. def _key_get(self, context):
  281. item = self._item_get(context).get_type()
  282. return item.get_holding_objects()[0]
  283. def _value_list(self, context):
  284. return get_list(self._value_get(context))
  285. def _key_list(self, context):
  286. return get_list(self._key_get(context))
  287. def _item_list(self, context):
  288. return get_list(self._item_get(context))
  289. def _value_iter(self, context):
  290. return get_iterator(self._value_get(context))
  291. def _key_iter(self, context):
  292. return get_iterator(self._key_get(context))
  293. def _item_iter(self, context):
  294. return get_iterator(self._item_get(context))
  295. def _self_get(self, context):
  296. item = self._item_get(context).get_type()
  297. key, value = item.get_holding_objects()[:2]
  298. return get_dict(key, value)
  299. def _self_set(self, context):
  300. if self.keys is not None:
  301. return
  302. new_dict = context.get_pynames(['self', 'd'])[1]
  303. if new_dict and isinstance(new_dict.get_object().get_type(), Dict):
  304. args = arguments.ObjectArguments([new_dict])
  305. items = new_dict.get_object()['popitem'].\
  306. get_object().get_returned_object(args)
  307. context.save_per_name(items)
  308. else:
  309. holding = _infer_sequence_for_pyname(new_dict)
  310. if holding is not None and isinstance(holding.get_type(), Tuple):
  311. context.save_per_name(holding)
  312. get_dict = _create_builtin_getter(Dict)
  313. get_dict_type = _create_builtin_type_getter(Dict)
  314. class Tuple(BuiltinClass):
  315. def __init__(self, *objects):
  316. self.objects = objects
  317. first = None
  318. if objects:
  319. first = objects[0]
  320. attributes = {
  321. '__getitem__': BuiltinName(BuiltinFunction(first)),
  322. '__getslice__': BuiltinName(BuiltinFunction(pyobjects.PyObject(self))),
  323. '__new__': BuiltinName(BuiltinFunction(function=self._new_tuple)),
  324. '__iter__': BuiltinName(BuiltinFunction(get_iterator(first)))}
  325. super(Tuple, self).__init__(tuple, attributes)
  326. def get_holding_objects(self):
  327. return self.objects
  328. def _new_tuple(self, args):
  329. return _create_builtin(args, get_tuple)
  330. get_tuple = _create_builtin_getter(Tuple)
  331. get_tuple_type = _create_builtin_type_getter(Tuple)
  332. class Set(BuiltinClass):
  333. def __init__(self, holding=None):
  334. self.holding = holding
  335. collector = _AttributeCollector(set)
  336. collector('__new__', function=self._new_set)
  337. self_methods = ['copy', 'difference', 'intersection',
  338. 'symmetric_difference', 'union']
  339. for method in self_methods:
  340. collector(method, function=self._self_get)
  341. collector('add', function=self._set_add)
  342. collector('update', function=self._self_set)
  343. collector('update', function=self._self_set)
  344. collector('symmetric_difference_update', function=self._self_set)
  345. collector('difference_update', function=self._self_set)
  346. collector('pop', function=self._set_get)
  347. collector('__iter__', function=self._iterator_get)
  348. super(Set, self).__init__(set, collector.attributes)
  349. def _new_set(self, args):
  350. return _create_builtin(args, get_set)
  351. def _set_add(self, context):
  352. if self.holding is not None:
  353. return
  354. holding = context.get_arguments(['self', 'value'])[1]
  355. if holding is not None and holding != pyobjects.get_unknown():
  356. context.save_per_name(holding)
  357. def _self_set(self, context):
  358. if self.holding is not None:
  359. return
  360. iterable = context.get_pyname('iterable')
  361. holding = _infer_sequence_for_pyname(iterable)
  362. if holding is not None and holding != pyobjects.get_unknown():
  363. context.save_per_name(holding)
  364. def _set_get(self, context):
  365. if self.holding is not None:
  366. return self.holding
  367. return context.get_per_name()
  368. def _iterator_get(self, context):
  369. return get_iterator(self._set_get(context))
  370. def _self_get(self, context):
  371. return get_list(self._set_get(context))
  372. get_set = _create_builtin_getter(Set)
  373. get_set_type = _create_builtin_type_getter(Set)
  374. class Str(BuiltinClass):
  375. def __init__(self):
  376. self_object = pyobjects.PyObject(self)
  377. collector = _AttributeCollector(str)
  378. collector('__iter__', get_iterator(self_object), check_existence=False)
  379. self_methods = ['__getitem__', '__getslice__', 'capitalize', 'center',
  380. 'decode', 'encode', 'expandtabs', 'join', 'ljust',
  381. 'lower', 'lstrip', 'replace', 'rjust', 'rstrip', 'strip',
  382. 'swapcase', 'title', 'translate', 'upper', 'zfill']
  383. for method in self_methods:
  384. collector(method, self_object)
  385. for method in ['rsplit', 'split', 'splitlines']:
  386. collector(method, get_list(self_object))
  387. super(Str, self).__init__(str, collector.attributes)
  388. def get_doc(self):
  389. return str.__doc__
  390. get_str = _create_builtin_getter(Str)
  391. get_str_type = _create_builtin_type_getter(Str)
  392. class BuiltinName(pynames.PyName):
  393. def __init__(self, pyobject):
  394. self.pyobject = pyobject
  395. def get_object(self):
  396. return self.pyobject
  397. def get_definition_location(self):
  398. return (None, None)
  399. class Iterator(pyobjects.AbstractClass):
  400. def __init__(self, holding=None):
  401. super(Iterator, self).__init__()
  402. self.holding = holding
  403. self.attributes = {
  404. 'next': BuiltinName(BuiltinFunction(self.holding)),
  405. '__iter__': BuiltinName(BuiltinFunction(self))}
  406. def get_attributes(self):
  407. return self.attributes
  408. def get_returned_object(self, args):
  409. return self.holding
  410. get_iterator = _create_builtin_getter(Iterator)
  411. class Generator(pyobjects.AbstractClass):
  412. def __init__(self, holding=None):
  413. super(Generator, self).__init__()
  414. self.holding = holding
  415. self.attributes = {
  416. 'next': BuiltinName(BuiltinFunction(self.holding)),
  417. '__iter__': BuiltinName(BuiltinFunction(get_iterator(self.holding))),
  418. 'close': BuiltinName(BuiltinFunction()),
  419. 'send': BuiltinName(BuiltinFunction()),
  420. 'throw': BuiltinName(BuiltinFunction())}
  421. def get_attributes(self):
  422. return self.attributes
  423. def get_returned_object(self, args):
  424. return self.holding
  425. get_generator = _create_builtin_getter(Generator)
  426. class File(BuiltinClass):
  427. def __init__(self):
  428. self_object = pyobjects.PyObject(self)
  429. str_object = get_str()
  430. str_list = get_list(get_str())
  431. attributes = {}
  432. def add(name, returned=None, function=None):
  433. builtin = getattr(file, name, None)
  434. attributes[name] = BuiltinName(
  435. BuiltinFunction(returned=returned, function=function,
  436. builtin=builtin))
  437. add('__iter__', get_iterator(str_object))
  438. for method in ['next', 'read', 'readline', 'readlines']:
  439. add(method, str_list)
  440. for method in ['close', 'flush', 'lineno', 'isatty', 'seek', 'tell',
  441. 'truncate', 'write', 'writelines']:
  442. add(method)
  443. super(File, self).__init__(file, attributes)
  444. get_file = _create_builtin_getter(File)
  445. get_file_type = _create_builtin_type_getter(File)
  446. class Property(BuiltinClass):
  447. def __init__(self, fget=None, fset=None, fdel=None, fdoc=None):
  448. self._fget = fget
  449. self._fdoc = fdoc
  450. attributes = {
  451. 'fget': BuiltinName(BuiltinFunction()),
  452. 'fset': BuiltinName(pynames.UnboundName()),
  453. 'fdel': BuiltinName(pynames.UnboundName()),
  454. '__new__': BuiltinName(BuiltinFunction(function=_property_function))}
  455. super(Property, self).__init__(property, attributes)
  456. def get_property_object(self, args):
  457. if isinstance(self._fget, pyobjects.AbstractFunction):
  458. return self._fget.get_returned_object(args)
  459. def _property_function(args):
  460. parameters = args.get_arguments(['fget', 'fset', 'fdel', 'fdoc'])
  461. return pyobjects.PyObject(Property(parameters[0]))
  462. class Lambda(pyobjects.AbstractFunction):
  463. def __init__(self, node, scope):
  464. super(Lambda, self).__init__()
  465. self.node = node
  466. self.arguments = node.args
  467. self.scope = scope
  468. def get_returned_object(self, args):
  469. result = rope.base.evaluate.eval_node(self.scope, self.node.body)
  470. if result is not None:
  471. return result.get_object()
  472. else:
  473. return pyobjects.get_unknown()
  474. def get_module(self):
  475. return self.parent.get_module()
  476. def get_scope(self):
  477. return self.scope
  478. def get_kind(self):
  479. return 'lambda'
  480. def get_ast(self):
  481. return self.node
  482. def get_attributes(self):
  483. return {}
  484. def get_name(self):
  485. return 'lambda'
  486. def get_param_names(self, special_args=True):
  487. result = [node.id for node in self.arguments.args
  488. if isinstance(node, ast.Name)]
  489. if self.arguments.vararg:
  490. result.append('*' + self.arguments.vararg)
  491. if self.arguments.kwarg:
  492. result.append('**' + self.arguments.kwarg)
  493. return result
  494. @property
  495. def parent(self):
  496. return self.scope.pyobject
  497. class BuiltinObject(BuiltinClass):
  498. def __init__(self):
  499. super(BuiltinObject, self).__init__(object, {})
  500. class BuiltinType(BuiltinClass):
  501. def __init__(self):
  502. super(BuiltinType, self).__init__(type, {})
  503. def _infer_sequence_for_pyname(pyname):
  504. if pyname is None:
  505. return None
  506. seq = pyname.get_object()
  507. args = arguments.ObjectArguments([pyname])
  508. if '__iter__' in seq:
  509. obj = seq['__iter__'].get_object()
  510. if not isinstance(obj, pyobjects.AbstractFunction):
  511. return None
  512. iter = obj.get_returned_object(args)
  513. if iter is not None and 'next' in iter:
  514. holding = iter['next'].get_object().\
  515. get_returned_object(args)
  516. return holding
  517. def _create_builtin(args, creator):
  518. passed = args.get_pynames(['sequence'])[0]
  519. if passed is None:
  520. holding = None
  521. else:
  522. holding = _infer_sequence_for_pyname(passed)
  523. if holding is not None:
  524. return creator(holding)
  525. else:
  526. return creator()
  527. def _range_function(args):
  528. return get_list()
  529. def _reversed_function(args):
  530. return _create_builtin(args, get_iterator)
  531. def _sorted_function(args):
  532. return _create_builtin(args, get_list)
  533. def _super_function(args):
  534. passed_class, passed_self = args.get_arguments(['type', 'self'])
  535. if passed_self is None:
  536. return passed_class
  537. else:
  538. #pyclass = passed_self.get_type()
  539. pyclass = passed_class
  540. if isinstance(pyclass, pyobjects.AbstractClass):
  541. supers = pyclass.get_superclasses()
  542. if supers:
  543. return pyobjects.PyObject(supers[0])
  544. return passed_self
  545. def _zip_function(args):
  546. args = args.get_pynames(['sequence'])
  547. objects = []
  548. for seq in args:
  549. if seq is None:
  550. holding = None
  551. else:
  552. holding = _infer_sequence_for_pyname(seq)
  553. objects.append(holding)
  554. tuple = get_tuple(*objects)
  555. return get_list(tuple)
  556. def _enumerate_function(args):
  557. passed = args.get_pynames(['sequence'])[0]
  558. if passed is None:
  559. holding = None
  560. else:
  561. holding = _infer_sequence_for_pyname(passed)
  562. tuple = get_tuple(None, holding)
  563. return get_iterator(tuple)
  564. def _iter_function(args):
  565. passed = args.get_pynames(['sequence'])[0]
  566. if passed is None:
  567. holding = None
  568. else:
  569. holding = _infer_sequence_for_pyname(passed)
  570. return get_iterator(holding)
  571. def _input_function(args):
  572. return get_str()
  573. _initial_builtins = {
  574. 'list': BuiltinName(get_list_type()),
  575. 'dict': BuiltinName(get_dict_type()),
  576. 'tuple': BuiltinName(get_tuple_type()),
  577. 'set': BuiltinName(get_set_type()),
  578. 'str': BuiltinName(get_str_type()),
  579. 'file': BuiltinName(get_file_type()),
  580. 'open': BuiltinName(get_file_type()),
  581. 'unicode': BuiltinName(get_str_type()),
  582. 'range': BuiltinName(BuiltinFunction(function=_range_function, builtin=range)),
  583. 'reversed': BuiltinName(BuiltinFunction(function=_reversed_function, builtin=reversed)),
  584. 'sorted': BuiltinName(BuiltinFunction(function=_sorted_function, builtin=sorted)),
  585. 'super': BuiltinName(BuiltinFunction(function=_super_function, builtin=super)),
  586. 'property': BuiltinName(BuiltinFunction(function=_property_function, builtin=property)),
  587. 'zip': BuiltinName(BuiltinFunction(function=_zip_function, builtin=zip)),
  588. 'enumerate': BuiltinName(BuiltinFunction(function=_enumerate_function, builtin=enumerate)),
  589. 'object': BuiltinName(BuiltinObject()),
  590. 'type': BuiltinName(BuiltinType()),
  591. 'iter': BuiltinName(BuiltinFunction(function=_iter_function, builtin=iter)),
  592. 'raw_input': BuiltinName(BuiltinFunction(function=_input_function, builtin=raw_input)),
  593. }
  594. builtins = BuiltinModule('__builtin__', initial=_initial_builtins)