On Sun, Dec 09, 2001 at 03:32:49AM -0500, Eric S. Raymond wrote:
>
> The bug queue is empty.
I tried it for the first time today, and I definitely like
the CML2 tools better than CML1. I came across two issues
today, though. The attached patch appears to fix them
for me.
Both issues happen when running with 'Unsuppress' on.
1) If you set a tri-state dependent to 'm' while the
bool ancestor is 'n,' then it sets the ancestor to
'm.' This is not a valid value for the bool
ancestor!
2) If a dependent is set to a non-'n' value, while
the ancestor is 'n,' it sets the ancestor to
non-'n'. If you then set another dependent to
non-'n,' and then set the first dependent to
'n' again, the ancestor moves back to 'n', even
though this is not a valid configuration!
for instance:
SYM1 = n { SYM2 =n SYM3=n }
Set SYM2='y', Sym3='y', SYM2='n', and
at the end, SYM1 will be 'n' while SYM3 is 'y'!
I didn't test it too thoroughly, but the specific
cases I was looking at (on the AGP, DRM page)
were fixed after these changes.
--- cml2-1.9.6/cmlsystem.py Sun Dec 9 08:27:31 2001
+++ cml333/cmlsystem.py Mon Dec 10 09:06:34 2001
@@ -210,6 +210,15 @@
if listhead:
while listhead:
listhead.symbol.bindingstack.remove(listhead)
+ # if this binding was in the ancestor list of the symbol whose
+ # bindings are being removed, it may be that another dependent
+ # has been activated since, and we should move the binding to
+ # that symbol instead.
+ if listhead.symbol in symbol.ancestors:
+ for dependent in listhead.symbol.dependents:
+ if not cml.evaluate(dependent) == cml.n:
+ self.__bindsymbol(listhead.symbol, listhead.value,
+dependent)
+ break
listhead = listhead.link
del context[symbol]
if symbol.menu.type == "choices":
@@ -593,7 +602,9 @@
if dependvalue > ancvalue:
if dependent.type == anctype or not self.trits_enabled:
self.__set_symbol_internal(ancestor, dependvalue,dependent)
- elif dependent.type == "trit":
+ elif anctype == "bool":
+ self.__set_symbol_internal(ancestor, cml.y,dependent)
+ elif ancvalue == cml.n:
self.__set_symbol_internal(ancestor, dependvalue,dependent)
# Recurse upwards, first through ancestors...
for upper in ancestor.ancestors: