summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorZachary T Welch <zw@superlucidity.net>2009-11-29 18:08:13 -0800
committerZachary T Welch <zw@superlucidity.net>2009-11-30 16:29:34 -0800
commite1ee27026569a94e58648d9825dc000dd53130d1 (patch)
tree84003780d56d4e8cde303b6dfbfe249538c4127e /src
parentbe65f497f5f50d6d037295d5f466db5314f99de1 (diff)
downloadopenocd+libswd-e1ee27026569a94e58648d9825dc000dd53130d1.tar.gz
openocd+libswd-e1ee27026569a94e58648d9825dc000dd53130d1.tar.bz2
openocd+libswd-e1ee27026569a94e58648d9825dc000dd53130d1.tar.xz
openocd+libswd-e1ee27026569a94e58648d9825dc000dd53130d1.zip
jtag: avoid using interp global variable
Adds 'interp' field to jtag_tap_event_action structure to avoid using the global variable of same name.
Diffstat (limited to 'src')
-rw-r--r--src/jtag/jtag.h11
-rw-r--r--src/jtag/tcl.c8
2 files changed, 13 insertions, 6 deletions
diff --git a/src/jtag/jtag.h b/src/jtag/jtag.h
index d4fafa3b..ee967752 100644
--- a/src/jtag/jtag.h
+++ b/src/jtag/jtag.h
@@ -209,9 +209,14 @@ enum jtag_event {
struct jtag_tap_event_action
{
- enum jtag_event event;
- Jim_Obj* body;
- struct jtag_tap_event_action* next;
+ /// The event for which this action will be triggered.
+ enum jtag_event event;
+ /// 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;
};
/**
diff --git a/src/jtag/tcl.c b/src/jtag/tcl.c
index 7ec7fa40..68bb21e4 100644
--- a/src/jtag/tcl.c
+++ b/src/jtag/tcl.c
@@ -341,8 +341,9 @@ static int jtag_tap_configure_event(Jim_GetOptInfo *goi, struct jtag_tap * tap)
if (!found)
jteap = calloc(1, sizeof(*jteap));
else if (NULL != jteap->body)
- Jim_DecrRefCount(interp, jteap->body);
+ Jim_DecrRefCount(goi->interp, jteap->body);
+ jteap->interp = goi->interp;
jteap->event = n->value;
Jim_Obj *o;
@@ -359,6 +360,7 @@ static int jtag_tap_configure_event(Jim_GetOptInfo *goi, struct jtag_tap * tap)
}
else if (found)
{
+ jteap->interp = goi->interp;
Jim_SetResult(goi->interp,
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,
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;
}