@@ -556,6 +556,10 @@ void MCB_parsewatches(MCExecContext& ctxt, MCStringRef p_input)
556556 uindex_t t_input_length;
557557
558558 t_input_length = MCStringGetLength (p_input);
559+
560+ if (t_input_length == 0 )
561+ return ;
562+
559563 bool t_found;
560564 t_found = true ;
561565
@@ -594,16 +598,12 @@ void MCB_parsewatches(MCExecContext& ctxt, MCStringRef p_input)
594598 if (t_success)
595599 t_success = MCStringDivideAtChar (*t_hname_tail, ' ,' , kMCCompareExact , &t_vname, &t_express);
596600
597- // AL-2015-07-31: [[ Bug 15822 ]] Don't abort parsing if a given line is not correctly formatted
598- bool t_valid_watch;
599- t_valid_watch = t_success;
600-
601- MCObjectPtr t_object;
602- // SN-2014-09-18: [[ Bug 13453 ]] With an empty string (no watchedVariables anymore), TryToResolveObject fails
603- if (t_valid_watch)
604- t_valid_watch = MCInterfaceTryToResolveObject (ctxt, *t_obj, t_object);
601+ MCObjectPtr t_object;
602+ bool t_resolved_object;
603+ if (t_success)
604+ t_resolved_object = MCInterfaceTryToResolveObject (ctxt, *t_obj, t_object);
605605
606- if (t_valid_watch )
606+ if (t_success )
607607 {
608608 // OK-2010-01-14: [[Bug 6506]] - Allow globals in watchedVariables
609609 // If the object and handler are empty we assume its a global, otherwise
@@ -617,7 +617,11 @@ void MCB_parsewatches(MCExecContext& ctxt, MCStringRef p_input)
617617 if (t_new_watches != nil)
618618 {
619619 MCwatchedvars = t_new_watches;
620- MCwatchedvars[MCnwatchedvars] . object = t_object . object;
620+ if (t_resolved_object)
621+ MCwatchedvars[MCnwatchedvars] . object = t_object . object;
622+ else
623+ MCwatchedvars[MCnwatchedvars] . object = nil;
624+
621625 if (MCStringGetLength (*t_hname) != 0 )
622626 /* UNCHECKED */ MCNameCreate (*t_hname, MCwatchedvars[MCnwatchedvars] . handlername);
623627 else
@@ -645,37 +649,38 @@ bool MCB_unparsewatches(MCStringRef &r_watches)
645649 {
646650 for (uint32_t i = 0 ; i < MCnwatchedvars ; i++)
647651 {
648- // OK-2010-01-14: [[Bug 6506]] - WatchedVariables support for globals
649- if (MCwatchedvars[i] . object != NULL )
652+ MCAutoListRef t_watched_var;
653+ t_success = MCListCreateMutable (' ,' , &t_watched_var);
654+
655+ if (t_success)
650656 {
651- MCAutoListRef t_watched_var;
652- t_success = MCListCreateMutable (' ,' , &t_watched_var);
653-
654- if (t_success)
657+ if (MCwatchedvars[i] . object != NULL )
655658 {
656659 MCAutoValueRef t_var_id;
657660 t_success = MCwatchedvars[i] . object -> names (P_LONG_ID, &t_var_id) &&
658- MCListAppend (*t_watched_var, *t_var_id);
659- }
660-
661- if (t_success)
662- {
663- if (MCwatchedvars[i] . handlername == NULL )
664- t_success = MCListAppend (*t_watched_var, kMCEmptyString );
665- else
666- t_success = MCListAppend (*t_watched_var, MCwatchedvars[i].handlername );
661+ MCListAppend (*t_watched_var, *t_var_id);
667662 }
668-
669- if (t_success)
670- t_success = MCListAppend (*t_watched_var, MCwatchedvars[i].varname );
663+ else
664+ t_success = MCListAppend (*t_watched_var, kMCEmptyString );
665+ }
666+
667+ if (t_success)
668+ {
669+ if (MCwatchedvars[i] . handlername == NULL )
670+ t_success = MCListAppend (*t_watched_var, kMCEmptyString );
671+ else
672+ t_success = MCListAppend (*t_watched_var, MCwatchedvars[i].handlername );
673+ }
674+
675+ if (t_success)
676+ t_success = MCListAppend (*t_watched_var, MCwatchedvars[i].varname );
671677
672- // SN-2014-09-18: [[ Bug 13453 ]] A watched variable's expression is never nil
673- if (t_success)
674- t_success = MCListAppend (*t_watched_var, MCwatchedvars[i].expression );
678+ // SN-2014-09-18: [[ Bug 13453 ]] A watched variable's expression is never nil
679+ if (t_success)
680+ t_success = MCListAppend (*t_watched_var, MCwatchedvars[i].expression );
675681
676- if (t_success)
677- t_success = MCListAppend (*t_watches_list, *t_watched_var);
678- }
682+ if (t_success)
683+ t_success = MCListAppend (*t_watches_list, *t_watched_var);
679684 }
680685 }
681686
0 commit comments