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