valueTable tvalues = sRef_getValueTable (tref);
DPRINTF (("Metastate transfer: from %s", exprNode_unparse (fexp)));
-
+
DPRINTF (("Metastate transfer: %s => %s",
sRef_unparseFull (fref),
sRef_unparseFull (tref)));
{
llassert (metaStateInfo_isDefined (minfo));
- if (stateValue_isError (fval) || stateValue_isError (tval))
+ if (stateValue_isError (fval))
{
;
}
+ else if (stateValue_isError (tval))
+ {
+ if (sRef_isLocalVar (tref) && transferType == TT_DOASSIGN)
+ {
+ /* Local assignments just replace state. */
+ stateValue_updateValueLoc (tval, stateValue_getValue (fval), loc);
+ DPRINTF (("Update: %s", stateValue_unparse (tval)));
+ }
+ else if (transferType == TT_FCNRETURN)
+ {
+ ; /* Returning from an unannotated function */
+ }
+ else
+ {
+ DPRINTF (("Transfer to error: %s / %s", sRef_unparseFull (tref),
+ transferType_unparse (transferType)));
+ }
+ }
else
{
DPRINTF (("Check: %s / %s / %s / %s", fkey,
/* Local assignments just replace state. */
DPRINTF (("No transfer error assigning to local: %s", msg));
stateValue_updateValueLoc (tval, stateValue_getValue (fval), loc);
+ DPRINTF (("Update: %s", stateValue_unparse (tval)));
}
else
{