jtag: avoid using interp global variable

Adds 'interp' field to jtag_tap_event_action structure to avoid
using the global variable of same name.
This commit is contained in:
Zachary T Welch 2009-11-29 18:08:13 -08:00
parent be65f497f5
commit e1ee270265
2 changed files with 13 additions and 6 deletions

View File

@ -209,9 +209,14 @@ enum jtag_event {
struct jtag_tap_event_action struct jtag_tap_event_action
{ {
enum jtag_event event; /// The event for which this action will be triggered.
Jim_Obj* body; enum jtag_event event;
struct jtag_tap_event_action* next; /// The interpreter to use for evaluating the @c body.
Jim_Interp *interp;
/// Contains a script to 'eval' when the @c event is triggered.
Jim_Obj *body;
// next action in linked list
struct jtag_tap_event_action *next;
}; };
/** /**

View File

@ -341,8 +341,9 @@ static int jtag_tap_configure_event(Jim_GetOptInfo *goi, struct jtag_tap * tap)
if (!found) if (!found)
jteap = calloc(1, sizeof(*jteap)); jteap = calloc(1, sizeof(*jteap));
else if (NULL != jteap->body) else if (NULL != jteap->body)
Jim_DecrRefCount(interp, jteap->body); Jim_DecrRefCount(goi->interp, jteap->body);
jteap->interp = goi->interp;
jteap->event = n->value; jteap->event = n->value;
Jim_Obj *o; Jim_Obj *o;
@ -359,6 +360,7 @@ static int jtag_tap_configure_event(Jim_GetOptInfo *goi, struct jtag_tap * tap)
} }
else if (found) else if (found)
{ {
jteap->interp = goi->interp;
Jim_SetResult(goi->interp, Jim_SetResult(goi->interp,
Jim_DuplicateObj(goi->interp, jteap->body)); Jim_DuplicateObj(goi->interp, jteap->body));
} }
@ -616,9 +618,9 @@ static void jtag_tap_handle_event(struct jtag_tap *tap, enum jtag_event e)
tap->dotted_name, e, nvp->name, tap->dotted_name, e, nvp->name,
Jim_GetString(jteap->body, NULL)); Jim_GetString(jteap->body, NULL));
if (Jim_EvalObj(interp, jteap->body) != JIM_OK) if (Jim_EvalObj(jteap->interp, jteap->body) != JIM_OK)
{ {
Jim_PrintErrorMessage(interp); Jim_PrintErrorMessage(jteap->interp);
continue; continue;
} }