# HG changeset patch # User Paul Boddie # Date 1339346288 -7200 # Node ID 907900242a338a6480bc569dfc18e5378b441b33 # Parent 2c40bf10e284f504fdf71708338a2265788597ed Changed scope conflicts to accumulate scopes as branches are merged. diff -r 2c40bf10e284 -r 907900242a33 micropython/data.py --- a/micropython/data.py Sun Jun 10 18:33:50 2012 +0200 +++ b/micropython/data.py Sun Jun 10 18:38:08 2012 +0200 @@ -871,8 +871,19 @@ if scope: if not new_scope_usage.has_key(name): new_scope_usage[name] = scope - elif new_scope_usage[name] != scope: - new_scope_usage[name] = ScopeConflict(scope, new_scope_usage[name]) + else: + new_scope = new_scope_usage[name] + if new_scope != scope: + if isinstance(new_scope, ScopeConflict): + if isinstance(scope, ScopeConflict): + scopes = scope.scopes.union(new_scope.scopes) + else: + scopes = new_scope.scopes.union(set([scope])) + elif isinstance(scope, ScopeConflict): + scopes = scope.scopes.union(set([new_scope])) + else: + scopes = set([scope, new_scope]) + new_scope_usage[name] = ScopeConflict(scopes) self.scope_usage[-1] = new_scope_usage @@ -930,8 +941,8 @@ if scope_usage.has_key(name): found_scope = scope_usage[name] if isinstance(found_scope, ScopeConflict): - raise InspectError("Scope conflict for %r: defined as both %s and %s." % ( - name, found_scope.old_scope, found_scope.new_scope)) + raise InspectError("Scope conflict for %r: defined as %s." % ( + name, ", ".join(found_scope.scopes))) scope_usage[name] = scope @@ -996,9 +1007,8 @@ sources of names. """ - def __init__(self, old_scope, new_scope): - self.old_scope = old_scope - self.new_scope = new_scope + def __init__(self, scopes): + self.scopes = scopes class NullBranch: