1.1 --- a/micropython/common.py Mon Oct 31 19:09:47 2011 +0100
1.2 +++ b/micropython/common.py Mon Oct 31 20:40:40 2011 +0100
1.3 @@ -62,6 +62,14 @@
1.4 def __nonzero__(self):
1.5 return self.objects != {}
1.6
1.7 + # List methods.
1.8 +
1.9 + def __add__(self, other):
1.10 + obj = ObjectSet(self)
1.11 + for key in other:
1.12 + obj.add(key)
1.13 + return obj
1.14 +
1.15 # Set membership and comparisons.
1.16
1.17 def __hash__(self):
1.18 @@ -131,7 +139,7 @@
1.19 if value is None:
1.20 new_dict[key] = None
1.21 else:
1.22 - new_dict[key] = set([value])
1.23 + new_dict[key] = ObjectSet([value])
1.24 return new_dict
1.25
1.26 def merge_mapping_dicts(dicts):
1.27 @@ -148,11 +156,20 @@
1.28
1.29 for old_dict in dicts:
1.30 for key, value in old_dict.items():
1.31 - if value is not None:
1.32 - if not new_dict.has_key(key):
1.33 + if not new_dict.has_key(key):
1.34 + if value is not None:
1.35 new_dict[key] = ObjectSet(value)
1.36 else:
1.37 + new_dict[key] = None
1.38 + elif new_dict[key] is not None:
1.39 + if value is not None:
1.40 new_dict[key].update(value)
1.41 + else:
1.42 + new_dict[key].add(value)
1.43 + else:
1.44 + if value is not None:
1.45 + objset = new_dict[key] = ObjectSet(value)
1.46 + objset.add(None)
1.47
1.48 def combine_mapping_dicts(d1, d2):
1.49
1.50 @@ -186,14 +203,17 @@
1.51 in 'd1' will not be added to 'd1'.
1.52 """
1.53
1.54 - d2_keys = d2.keys()
1.55 + if d2 is not None:
1.56 + d2_keys = d2.keys()
1.57
1.58 - for key in d2_keys:
1.59 - if not d1.has_key(key):
1.60 - if not only_d1_keys:
1.61 - combined[key] = d2[key]
1.62 - else:
1.63 - combined[key] = combine_op(d1[key], d2[key])
1.64 + for key in d2_keys:
1.65 + if not d1.has_key(key):
1.66 + if not only_d1_keys:
1.67 + combined[key] = d2[key]
1.68 + else:
1.69 + combined[key] = combine_op(d1[key], d2[key])
1.70 + else:
1.71 + d2_keys = ()
1.72
1.73 for key in d1.keys():
1.74 if key not in d2_keys:
1.75 @@ -212,11 +232,11 @@
1.76 if l2 is None:
1.77 return None
1.78 else:
1.79 - return l2
1.80 + return l2 + [None]
1.81 elif l2 is None:
1.82 - return l1
1.83 + return l1 + [None]
1.84
1.85 - combined = set([])
1.86 + combined = ObjectSet()
1.87 for i1 in l1:
1.88 for i2 in l2:
1.89 combined.add(i1.merge(i2))
1.90 @@ -292,6 +312,7 @@
1.91 all_objtypes = set()
1.92
1.93 for attrnames in usage:
1.94 + attrnames = attrnames or ()
1.95 objtypes = objtable.all_possible_objects_plus_status(attrnames)
1.96 if not objtypes:
1.97 print "Warning: usage in %r for %r finds no object supporting all attributes %r" % (