Hej
Jag tror att jag hittat en bugg i cirkulära attribut, men det skulle kunna vara vi som gjort fel istället.
De inblandade noderna är:
· En FIdUseExp
· En FIdUse (barn till FIdUseExp)
· En FVariable (resultatet av myFV() på FIdUse-noden)
· En FIntegerLitExp (barn till FVariable)
Alla de inblandade noderna har is$Final = false.
Problemet uppstår i attributet isCircular() (ovidkommande detaljer borttagna):
syn lazy boolean FExp.isCircular() circular [true] = false;
eq FIdUseExp.isCircular() = getFIdUse().isCircular();
syn boolean FIdUse.isCircular() = myFV().isCircular();
syn lazy boolean FVariable.isCircular() = getBindingExp().isCircular(); // (getBindingExp() -> FIntegerLitExp i detta fall)
(FIntegerLitExp använder defenition från FExp.)
Vi hamnar sen i (från call stack, de övre anropar de undre genom sin isCircular_compute()):
FIdUseExp.isCircular():
...
if(isFinal && num == state().boundariesCrossed) {
isCircular_computed = true;
state.LAST_CYCLE = true;
> isCircular_compute();
state.LAST_CYCLE = false;
}
...
FIdUseExp.isCircular():
...
if(state.IN_CIRCLE) {
interruptedCircle = true;
state.IN_CIRCLE = false;
state.pushEvalStack();
}
> boolean isCircular_value = isCircular_compute();
...
FVariable.isCircular():
...
do {
isCircular_visited = state.CIRCLE_INDEX;
state.CHANGE = false;
> boolean new_isCircular_value = isCircular_compute();
if (new_isCircular_value!=isCircular_value)
state.CHANGE = true;
isCircular_value = new_isCircular_value;
state.CIRCLE_INDEX++;
} while (state.CHANGE);
...
FIntegerLitExp.isCircular():
...
if (state.LAST_CYCLE) {
isCircular_computed = true;
return isCircular_compute();
}
...
När den kommer in i FIntegerLitExp.isCircular() är isCircular_initialized = false (vilket verkar konstigt), och isCircular_value sätts därför till true. Sen sätts isCircular_computed till true, men isCircular_value sätts inte till resultatet av isCircular_compute(). Därmed blir det fel svar.
Jesper
Jesper MATTSSON, MSc
Software Developer & IT Administrator
Phone direct: +46 73 324 5909
Email: jesper.mattsson_at_modelon.com<mailto:jesper.mattsson_at_modelon.com>
[cid:image001.png_at_01CCB4FA.68D4C520]
________________________________
Modelon AB
Ideon Science Park
SE-223 70 Lund, Sweden
Phone: +46 46 286 2200
Fax: +46 46 286 2201
Web:
http://www.modelon.com<
http://www.modelon.com/>
Received on Wed Dec 07 2011 - 16:34:27 CET