Skip to content
Permalink
Newer
Older
100644 796 lines (681 sloc) 22.3 KB
Sep 5, 2014
1
;(function($B){
2
3
eval($B.InjectBuiltins())
str
Feb 10, 2018
6
str_hash = _b_.str.__hash__,
Sep 5, 2014
8
9
// dictionary
10
function $DictClass($keys,$values){
11
this.iter = null
Feb 11, 2018
12
this.__class__ = dict
13
dict.clear(this)
Feb 9, 2015
14
Feb 11, 2018
15
var setitem=dict.__setitem__
16
var i=$keys.length
17
while(i--) setitem($keys[i], $values[i])
Feb 11, 2018
20
var dict = {
Feb 11, 2018
21
__class__: _b_.type,
Feb 11, 2018
22
__module__: "builtins",
Feb 11, 2018
23
__mro__: [object],
Sep 5, 2014
24
__name__ : 'dict',
Feb 11, 2018
25
$is_class: true,
26
$native: true
Sep 5, 2014
27
}
28
29
var $key_iterator = function(d) {
30
this.d = d
31
this.current = 0
32
this.iter = new $item_generator(d)
33
}
34
$key_iterator.prototype.length = function(){return this.iter.items.length}
35
$key_iterator.prototype.next = function(){return this.iter.next()[0]}
36
37
var $value_iterator = function(d) {
38
this.d = d
39
this.current = 0
40
this.iter = new $item_generator(d)
41
}
42
$value_iterator.prototype.length = function(){return this.iter.items.length}
43
$value_iterator.prototype.next = function(){return this.iter.next()[1]}
44
45
var $item_generator = function(d) {
47
this.i = 0
49
if(d.$jsobj){
50
this.items = []
52
if(attr.charAt(0)!='$'){
53
val = d.$jsobj[attr];
54
if(val === undefined){val = _b_.NotImplemented}
55
else if(val === null){val = $N}
56
this.items.push([attr, val])
62
var items=[]
65
items[pos++]=[parseFloat(k), d.$numeric_dict[k]]
68
for (var k in d.$string_dict) {items[pos++]=[k, d.$string_dict[k]]}
70
for (var k in d.$object_dict) {items[pos++] = d.$object_dict[k]}
71
72
this.items=items
Feb 9, 2015
74
75
$item_generator.prototype.next = function() {
76
if (this.i < this.items.length) {
77
return this.items[this.i++]
79
throw _b_.StopIteration.$factory("StopIteration")
80
}
81
$item_generator.prototype.as_list = function() {
82
return this.items
83
}
84
85
var $item_iterator = function(d) {
86
this.d = d
87
this.current = 0
88
this.iter = new $item_generator(d)
89
}
90
$item_iterator.prototype.length = function() {return this.iter.items.length }
Feb 11, 2018
91
$item_iterator.prototype.next = function() { return _b_.tuple.$factory(this.iter.next()) }
92
93
var $copy_dict = function(left, right) {
94
var _l=new $item_generator(right).as_list(),
Feb 11, 2018
95
si=dict.__setitem__,
97
while(i--) si(left, _l[i][0], _l[i][1])
100
function toSet(items){
101
// Build a set from the iteration on items
102
var res = []
103
while(true){
104
try{res.push(items.next())}
105
catch(err){break}
106
}
Feb 11, 2018
107
return _b_.set.$factory(res)
108
}
109
110
var $iterator_wrapper = function(items,klass){
111
var res = {
112
__class__:klass,
113
__eq__:function(other){
114
// compare set of items to other
115
return $B.rich_comp("__eq__", toSet(items), other)
117
__iter__:function(){items.iter.i=0; return res},
118
__len__:function(){return items.length()},
119
__next__:function(){
120
return items.next()
121
},
122
__repr__:function(){
123
var s = []
124
for(var i=0, len=items.length(); i<len; i++){
125
s.push(_b_.repr(items.next()))
126
}
127
return klass.__name__+'(['+ s.join(',') + '])'
128
},
129
}
130
res.__str__ = res.toString = res.__repr__
131
return res
132
}
133
Feb 11, 2018
134
dict.__bool__ = function () {
Nov 21, 2015
135
var $=$B.args('__bool__',1,{self:null},['self'],arguments,{},null,null)
Feb 11, 2018
136
return dict.__len__($.self) > 0
Feb 11, 2018
139
dict.__contains__ = function(){
Nov 21, 2015
140
141
var $ = $B.args('__contains__', 2, {self:null, item:null},
142
['self', 'item'], arguments, {}, null, null),
143
self=$.self, item=$.item
Nov 21, 2015
144
Sep 5, 2014
145
if(self.$jsobj) return self.$jsobj[item]!==undefined
Nov 21, 2015
146
147
switch(typeof item) {
148
case 'string':
149
return self.$string_dict[item] !==undefined
150
case 'number':
151
return self.$numeric_dict[item] !==undefined
153
item = item.__class__ === $B.$factory ? item.$dict : item // XXX old style
155
var _key=hash(item)
156
if (self.$str_hash[_key]!==undefined &&
157
$B.rich_comp("__eq__", item, self.$str_hash[_key])){return true}
158
if (self.$numeric_dict[_key]!==undefined &&
159
$B.rich_comp("__eq__", item, _key)){return true}
160
if (self.$object_dict[_key] !== undefined) {
Nov 21, 2015
161
// If the key is an object, its hash must be in the dict keys but the
162
// key itself must compare equal to the key associated with the hash
163
// For instance :
164
//
165
// class X:
166
// def __hash__(self): return hash('u')
167
//
Nov 21, 2015
168
// a = {'u': 'a', X(): 'b'}
169
// assert set(a.values())=={'a', 'b'}
170
// assert not X() in a
171
return $B.rich_comp("__eq__", item, self.$object_dict[_key][0])
172
}
173
return false
Sep 5, 2014
174
}
175
Feb 11, 2018
176
dict.__delitem__ = function(){
Nov 21, 2015
177
178
var $ = $B.args('__eq__', 2, {self:null, arg:null},
179
['self', 'arg'], arguments, {}, null, null),
180
self=$.self, arg=$.arg
181
182
if(self.$jsobj){
183
if(self.$jsobj[arg]===undefined){throw KeyError.$factory(arg)}
184
delete self.$jsobj[arg]
187
switch(typeof arg) {
188
case 'string':
str
Feb 10, 2018
189
if (self.$string_dict[arg] === undefined) throw KeyError.$factory(_b_.str.$factory(arg))
190
delete self.$string_dict[arg]
191
delete self.$str_hash[str_hash(arg)]
str
Feb 10, 2018
194
if (self.$numeric_dict[arg] === undefined) throw KeyError.$factory(_b_.str.$factory(arg))
198
// go with defaults
200
var _key=hash(arg)
202
if (self.$object_dict[_key] !== undefined) {
Nov 21, 2015
203
delete self.$object_dict[_key]
205
206
if(self.$jsobj) delete self.$jsobj[arg]
Sep 5, 2014
208
}
209
Feb 11, 2018
210
dict.__eq__ = function(){
Nov 21, 2015
211
var $ = $B.args('__eq__', 2, {self:null, other:null},
212
['self', 'other'], arguments, {}, null, null),
213
self=$.self, other=$.other
214
215
if(!isinstance(other,dict)) return false
217
if(self.$jsobj){self=jsobj2dict(self.$jsobj)}
218
if(other.$jsobj){other=jsobj2dict(other.$jsobj)}
Feb 11, 2018
220
if (dict.__len__(self) != dict.__len__(other)){return false}
Nov 21, 2015
222
if((self.$numeric_dict.length!=other.$numeric_dict.length) ||
223
(self.$string_dict.length!=other.$string_dict.length) ||
224
(self.$object_dict.length!=other.$object_dict.length)){
225
return false
Nov 21, 2015
227
for(var k in self.$numeric_dict){
228
if(!$B.rich_comp("__eq__", other.$numeric_dict[k], self.$numeric_dict[k])){
Nov 21, 2015
229
return false
230
}
231
}
232
for(var k in self.$string_dict){
233
if(!$B.rich_comp("__eq__", other.$string_dict[k], self.$string_dict[k])){
Nov 21, 2015
234
return false
235
}
236
}
237
for(var k in self.$object_dict){
238
if(!$B.rich_comp("__eq__", other.$object_dict[k][1], self.$object_dict[k][1])){
Nov 21, 2015
239
return false
240
}
241
}
Nov 21, 2015
244
Sep 5, 2014
245
}
246
Feb 11, 2018
247
dict.__getitem__ = function(){
Nov 21, 2015
248
var $ = $B.args('__getitem__', 2, {self:null, arg:null},
249
['self', 'arg'], arguments, {}, null, null),
250
self=$.self, arg=$.arg
251
252
if(self.$jsobj){
str
Feb 10, 2018
253
if(!self.$jsobj.hasOwnProperty(arg)) throw _b_.KeyError.$factory(str.$factory(arg))
254
else if(self.$jsobj[arg]===undefined) return _b_.NotImplemented
255
else if(self.$jsobj[arg]===null){return $N}
256
return self.$jsobj[arg]
257
}
258
259
260
switch(typeof arg) {
261
case 'string':
262
if (self.$string_dict[arg] !== undefined) return self.$string_dict[arg]
263
break
264
case 'number':
265
if (self.$numeric_dict[arg] !== undefined) return self.$numeric_dict[arg]
268
// since the key is more complex use 'default' method of getting item
269
270
arg = arg.__class__ === $B.$factory ? arg.$dict : arg
271
var _key = _b_.hash(arg),
272
_eq = function(other){return $B.rich_comp('__eq__', arg, other)}
274
var sk = self.$str_hash[_key]
275
if (sk!==undefined && _eq(sk)){
276
return self.$string_dict[sk]
277
}
278
if (self.$numeric_dict[_key]!==undefined && _eq(_key)){
279
return self.$numeric_dict[_key]
283
var obj_ref = self.$object_dict[_key]
284
if(obj_ref!==undefined){
285
// An object with the same hash is already stored
286
// Lookup should fail if equality raises an exception
287
_eq(self.$object_dict[_key][0])
Nov 21, 2015
288
return self.$object_dict[_key][1]
Feb 11, 2018
290
if(self.__class__!==dict){
292
var missing_method = getattr(self.__class__, '__missing__')
293
return missing_method(self, arg)
294
}catch(err){}
295
}
str
Feb 10, 2018
296
throw KeyError.$factory(_b_.str.$factory(arg))
Sep 5, 2014
297
}
298
Feb 11, 2018
299
dict.__hash__ = None
Sep 5, 2014
300
Feb 11, 2018
301
dict.__init__ = function(self){
302
var args = [], pos=0
303
for(var i=1;i<arguments.length;i++){args[pos++]=arguments[i]}
305
switch(args.length) {
306
case 0:
307
return
308
case 1:
Sep 5, 2014
309
var obj = args[0]
310
if(Array.isArray(obj)){
311
var i = obj.length
Feb 11, 2018
312
var si = dict.__setitem__
313
while(i-->0) si(self, obj[i-1][0], obj[i-1][1])
315
}else if(obj.$nat===undefined && isinstance(obj,dict)){
Sep 5, 2014
318
}
Sep 5, 2014
320
if(obj.__class__===$B.JSObject.$dict){
321
// convert a JSObject into a Python dictionary
323
// Attribute $jsobj is used to update the original JS object
324
// when the dictionary is modified
Sep 5, 2014
327
}
330
var $ns=$B.args('dict',0,{},[],args,{},'args','kw')
Sep 5, 2014
331
var args = $ns['args']
332
var kw = $ns['kw']
Sep 5, 2014
335
if(isinstance(args[0],dict)){
Sep 5, 2014
338
}
Sep 5, 2014
340
// format dict([(k1,v1),(k2,v2)...])
342
if(Array.isArray(args[0])){
343
var src = args[0]
Feb 11, 2018
345
var si=dict.__setitem__
346
while(i-->0) si(self, src[i-1][0], src[i-1][1])
348
var iterable = $B.$iter(args[0]),
349
ce = $B.current_exception
350
while(1){
351
try{
352
var elt = next(iterable)
353
var key = getattr(elt,'__getitem__')(0)
354
var value = getattr(elt,'__getitem__')(1)
Feb 11, 2018
355
dict.__setitem__(self, key, value)
357
if(err.__name__==='StopIteration'){
358
$B.current_exception = ce
359
break
360
}
Sep 5, 2014
363
}
364
}
Feb 11, 2018
366
if(dict.__len__(kw) > 0) $copy_dict(self, kw)
Sep 5, 2014
368
}
369
370
var $dict_iterator = $B.$iterator_class('dict iterator')
Feb 11, 2018
371
dict.__iter__ = function(self) {
372
return dict.keys(self)
Sep 5, 2014
373
}
374
Feb 11, 2018
375
dict.__len__ = function(self) {
376
var _count=0
378
if(self.$jsobj){
379
for(var attr in self.$jsobj){if(attr.charAt(0)!='$'){_count++}}
380
return _count
381
}
383
for (var k in self.$numeric_dict) _count++
384
for (var k in self.$string_dict) _count++
385
for (var k in self.$object_dict) _count+= self.$object_dict[k].length
387
return _count
Sep 5, 2014
389
Feb 11, 2018
390
dict.__ne__ = function(self,other){return !dict.__eq__(self,other)}
Sep 5, 2014
391
Feb 11, 2018
392
dict.__new__ = function(cls){
393
if(cls===undefined){throw _b_.TypeError.$factory('int.__new__(): not enough arguments')}
394
return {
395
__class__:cls.$factory ? cls : cls.$dict,
396
$numeric_dict : {},
397
$object_dict : {},
398
$string_dict : {},
399
$str_hash: {}
400
}
401
}
402
Feb 11, 2018
403
dict.__next__ = function(self){
405
self.$iter = new $item_generator(self)
406
}
407
try {
408
return self.$iter.next()
409
} catch (err) {
410
if (err.__name__ !== "StopIteration") { throw err }
Sep 5, 2014
411
}
412
}
413
Feb 11, 2018
414
dict.__repr__ = function(self){
Sep 5, 2014
415
if(self===undefined) return "<class 'dict'>"
416
if(self.$jsobj){ // wrapper around Javascript object
Feb 11, 2018
417
return dict.__repr__(jsobj2dict(self.$jsobj))
419
var res=[],
420
pos=0,
421
items = new $item_generator(self).as_list()
422
for (var i=0; i < items.length; i++) {
423
var itm = items[i]
424
if((!self.$jsobj && itm[1]===self) ||
425
(self.$jsobj && itm[1]===self.$jsobj)){
426
res[pos++]=repr(itm[0])+': {...}'
428
try{
429
res[pos++]=repr(itm[0])+': '+repr(itm[1])
430
}catch(err){
431
res[pos++]=repr(itm[0])+': <unprintable object>'
432
}
433
}
Sep 5, 2014
434
}
435
return '{'+ res.join(', ') +'}'
Sep 5, 2014
436
}
437
Feb 11, 2018
438
dict.__setitem__ = function(self,key,value){
Nov 21, 2015
440
var $ = $B.args('__setitem__', 3, {self:null, key:null, value:null},
441
['self', 'key', 'value'], arguments, {}, null, null),
442
self=$.self, key=$.key, value=$.value
443
Feb 11, 2018
445
if(self.$jsobj.__class__===_b_.type){
446
self.$jsobj[key] = $B.pyobj2jsobj(value)
447
if(key=="__init__" || key=="__new__"){
448
// If class attribute __init__ or __new__ are reset,
449
// the factory function has to change
450
self.$jsobj.$factory = $B.$instance_creator(self.$jsobj)
451
}
452
}else{
453
self.$jsobj[key]=$B.pyobj2jsobj(value)
454
}
455
return $N
458
switch(typeof key) {
459
case 'string':
460
self.$string_dict[key]=value
461
self.$str_hash[str_hash(key)]=key
463
case 'number':
464
self.$numeric_dict[key]=value
468
// if we got here the key is more complex, use default method
470
key = key.__class__ === $B.$factory ? key.$dict : key
471
var _key=hash(key)
472
var _eq=function(other){return $B.rich_comp("__eq__", key, other)};
474
if(self.$numeric_dict[_key]!==undefined && _eq(_key)){
475
self.$numeric_dict[_key] = value
477
}
478
var sk = self.$str_hash[_key]
479
if(sk!==undefined && _eq(sk)){
480
self.$string_dict[sk] = value
482
}
483
484
var obj_ref = self.$object_dict[_key]
485
if(obj_ref!==undefined){
486
// An object with the same hash is already stored
487
// Lookup should fail if equality raises an exception
488
_eq(self.$object_dict[_key][0])
489
}
490
self.$object_dict[_key] = [key, value]
Sep 5, 2014
492
}
493
Feb 11, 2018
494
dict.__str__ = dict.__repr__
Sep 5, 2014
495
496
// add "reflected" methods
Feb 11, 2018
497
$B.make_rmethods(dict)
Sep 5, 2014
498
Feb 11, 2018
499
dict.clear = function(){
Sep 5, 2014
500
// Remove all items from the dictionary.
501
var $ = $B.args('clear',1,{self:null},['self'],arguments,{},null,null),
502
self = $.self
504
self.$numeric_dict={}
505
self.$string_dict={}
506
self.$str_hash={}
507
self.$object_dict={}
509
if(self.$jsobj){
510
for(var attr in self.$jsobj){
511
if(attr.charAt(0) !== '$' && attr !== "__class__"){
512
delete self.$jsobj[attr]
513
}
514
}
515
}
Sep 5, 2014
517
}
518
Feb 11, 2018
519
dict.copy = function(self){
Sep 5, 2014
520
// Return a shallow copy of the dictionary
521
var $ = $B.args('copy',1,{self:null},['self'],arguments,{},null,null),
522
self = $.self,
Feb 11, 2018
523
res = _b_.dict.$factory()
Sep 5, 2014
525
return res
526
}
527
Feb 11, 2018
528
dict.fromkeys = function(){
Nov 21, 2015
529
530
var $ = $B.args('fromkeys', 3, {cls:null, keys:null, value:null},
531
['cls', 'keys', 'value'], arguments, {value:_b_.None}, null, null),
Nov 21, 2015
532
keys=$.keys, value=$.value
Sep 5, 2014
534
// class method
535
var klass = $.cls,
537
keys_iter = $B.$iter(keys),
538
ce = $B.current_exception
Sep 5, 2014
540
while(1){
541
try{
542
var key = _b_.next(keys_iter)
Feb 11, 2018
543
if(klass===dict){dict.__setitem__(res, key, value)}
544
else{_b_.getattr(res, "__setitem__")(key,value)}
Sep 5, 2014
545
}catch(err){
546
if($B.is_exc(err,[_b_.StopIteration])){
Sep 5, 2014
548
return res
549
}
550
throw err
551
}
552
}
553
}
Feb 11, 2018
554
dict.fromkeys.$type = 'classmethod'
Sep 5, 2014
555
Feb 11, 2018
556
dict.get = function(){
557
var $ = $B.args('get', 3, {self:null, key:null, _default:null},
558
['self', 'key', '_default'], arguments, {_default:$N}, null, null)
Feb 11, 2018
560
try{return dict.__getitem__($.self, $.key)}
561
catch(err){
562
if(_b_.isinstance(err, _b_.KeyError)){return $._default}
563
else{throw err}
564
}
565
}
566
567
var $dict_itemsDict = $B.$iterator_class('dict_items')
568
Feb 11, 2018
569
dict.items = function(self){
570
if (arguments.length > 1) {
571
var _len=arguments.length - 1
572
var _msg="items() takes no arguments ("+_len+" given)"
573
throw _b_.TypeError.$factory(_msg)
574
}
575
return $iterator_wrapper(new $item_iterator(self), $dict_itemsDict)
576
}
577
Nov 21, 2015
578
var $dict_keysDict = $B.$iterator_class('dict_keys')
579
Feb 11, 2018
580
dict.keys = function(self){
Nov 21, 2015
581
if (arguments.length > 1) {
582
var _len=arguments.length - 1
583
var _msg="keys() takes no arguments ("+_len+" given)"
584
throw _b_.TypeError.$factory(_msg)
Nov 21, 2015
585
}
586
return $iterator_wrapper(new $key_iterator(self),$dict_keysDict)
587
}
588
Feb 11, 2018
589
dict.pop = function(){
Nov 21, 2015
590
591
var $ = $B.args('pop', 3, {self:null, key: null, _default:null},
592
['self', 'key', '_default'], arguments, {_default:$N}, null, null),
593
self=$.self, key=$.key, _default=$._default
594
Sep 5, 2014
595
try{
Feb 11, 2018
596
var res = dict.__getitem__(self,key)
597
dict.__delitem__(self,key)
Sep 5, 2014
598
return res
599
}catch(err){
600
if(err.__name__==='KeyError'){
601
if(_default!==undefined) return _default
602
throw err
603
}
604
throw err
605
}
606
}
607
Feb 11, 2018
608
dict.popitem = function(self){
610
try{
611
var itm = new $item_iterator(self).next()
Feb 11, 2018
612
dict.__delitem__(self,itm[0])
Feb 11, 2018
613
return _b_.tuple.$factory(itm)
614
}catch(err) {
615
if (err.__name__ == "StopIteration") {
617
throw KeyError.$factory("'popitem(): dictionary is empty'")
Sep 5, 2014
620
}
621
Feb 11, 2018
622
dict.setdefault = function(){
Nov 21, 2015
623
624
var $ = $B.args('setdefault', 3, {self:null, key: null, _default:null},
625
['self', 'key', '_default'], arguments, {_default:$N}, null, null),
Nov 21, 2015
626
self=$.self, key=$.key, _default=$._default
627
Feb 11, 2018
628
try{return dict.__getitem__(self,key)}
Sep 5, 2014
629
catch(err){
630
if(_default===undefined) _default=$N
Feb 11, 2018
631
dict.__setitem__(self,key,_default)
Sep 5, 2014
632
return _default
633
}
634
}
635
Feb 11, 2018
636
dict.update = function(self){
Nov 21, 2015
637
638
var $ = $B.args('update',1,{'self':null},['self'],arguments,{},'args','kw'),
639
self=$.self, args=$.args, kw=$.kw
640
if(args.length>0) {
641
var o=args[0]
642
if (isinstance(o,dict)){
643
if(o.$jsobj){o = jsobj2dict(o);}
644
$copy_dict(self, o)
645
} else if (hasattr(o, '__getitem__') && hasattr(o, 'keys')) {
Feb 11, 2018
646
var _keys=_b_.list.$factory(getattr(o, 'keys')())
Feb 11, 2018
647
var si=dict.__setitem__
648
var i=_keys.length
649
while(i--) {
650
//for (var i=0; i < _keys.length; i++) {
651
var _value = getattr(o, '__getitem__')(_keys[i])
652
si(self, _keys[i], _value)
Sep 5, 2014
655
}
Sep 5, 2014
658
}
659
Nov 21, 2015
660
var $dict_valuesDict = $B.$iterator_class('dict_values')
661
Feb 11, 2018
662
dict.values = function(self){
Nov 21, 2015
663
if (arguments.length > 1) {
664
var _len=arguments.length - 1
665
var _msg="values() takes no arguments ("+_len+" given)"
666
throw _b_.TypeError.$factory(_msg)
Nov 21, 2015
667
}
668
return $iterator_wrapper(new $value_iterator(self), $dict_valuesDict)
669
}
670
Feb 11, 2018
671
dict.$factory = function(args, second){
Feb 11, 2018
673
var res = {__class__:dict,
674
$numeric_dict : {},
675
$object_dict : {},
676
$string_dict : {},
680
if(args===undefined){return res}
682
if(second===undefined){
683
if(Array.isArray(args)){
684
// Form "dict([[key1, value1], [key2,value2], ...])"
685
var i = -1, stop = args.length-1
Feb 11, 2018
686
var si = dict.__setitem__
687
while(i++<stop){
688
var item=args[i]
689
switch(typeof item[0]) {
690
case 'string':
691
res.$string_dict[item[0]]=item[1]
692
res.$str_hash[str_hash(item[0])]=item[0]
693
break;
694
case 'number':
695
res.$numeric_dict[item[0]]=item[1]
696
break
697
default:
698
si(res, item[0], item[1])
699
break
700
}
701
}
702
return res
703
}else if(args.$nat=='kw'){
704
// Form dict(k1=v1, k2=v2...)
705
var kw = args['kw']
706
for(var attr in kw){
707
switch(typeof attr) {
708
case 'string':
709
res.$string_dict[attr]=kw[attr]
710
res.$str_hash[str_hash(attr)]=attr
711
break;
712
case 'number':
713
res.$numeric_dict[attr]=kw[attr]
714
break
715
default:
716
si(res, attr, kw[attr])
717
break
718
}
721
}else if(args.$jsobj){
722
res.$jsobj = {}
723
for(var attr in args.$jsobj){res.$jsobj[attr] = args.$jsobj[attr]}
724
return res
Sep 5, 2014
728
// apply __init__ with arguments of dict()
729
var _args = [res], pos=1
730
for(var i=0, _len_i = arguments.length; i < _len_i;i++){_args[pos++]=arguments[i]}
Feb 11, 2018
731
dict.__init__.apply(null,_args)
Sep 5, 2014
732
return res
733
}
Sep 5, 2014
735
_b_.dict = dict
Feb 11, 2018
737
$B.set_func_names(dict, "builtins")
739
// following are used for faster access elsewhere
740
$B.$dict_iterator = function(d) { return new $item_generator(d) }
Feb 11, 2018
741
$B.$dict_length = dict.__len__
742
$B.$dict_getitem = dict.__getitem__
743
$B.$dict_get = dict.get
744
$B.$dict_set = dict.__setitem__
745
$B.$dict_contains = dict.__contains__
746
$B.$dict_items = function(d) { return new $item_generator(d).as_list() }
747
$B.$copy_dict = $copy_dict // copy from right to left
Feb 11, 2018
748
$B.$dict_get_copy = dict.copy // return a shallow copy
751
// Class for attribute __dict__ of classes
752
var mappingproxyDict = {
Feb 11, 2018
753
__class__ : _b_.type,
754
__name__ : "mappingproxy"
755
}
756
mappingproxyDict.__mro__ = [object]
757
758
mappingproxyDict.__setitem__ = function(){
759
throw _b_.TypeError.$factory("'mappingproxy' object does not support item assignment")
763
function mappingproxy(obj){
764
var res = obj_dict(obj)
765
res.__class__ = mappingproxyDict
766
return res
767
}
768
mappingproxy.__class__ = $B.$factory
769
mappingproxy.$dict = mappingproxyDict
770
mappingproxyDict.$factory = mappingproxy
771
$B.mappingproxy = mappingproxy
772
Feb 11, 2018
774
var d = dict.$factory()
775
for(var attr in x){
776
if(attr.charAt(0)!='$' && attr!=='__class__'){
777
if(x[attr].$jsobj===x){
778
d.$string_dict[attr] = d
779
}else{
780
d.$string_dict[attr] = x[attr]
781
}
786
$B.obj_dict = function(obj){
787
var klass = $B.get_class(obj)
788
if(klass !==undefined && klass.$native){
789
throw _b_.AttributeError.$factory(klass.__name__+
790
" has no attribute '__dict__'")}
Feb 11, 2018
791
var res = dict.$factory()
792
res.$jsobj = obj
793
return res
794
}
795
Sep 5, 2014
796
})(__BRYTHON__)