From 43e4250a611bbded7aab070226e8d756638cd569 Mon Sep 17 00:00:00 2001 From: Father Chrysostomos Date: Mon, 28 Oct 2013 16:14:35 -0700 Subject: [perl #119799] Set breakpoints without *DB::dbline MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The elements of the %{"_<..."} hashes (where ‘...’ is the filename), whose keys are line numbers, are used to set breakpoints on the given lines. The corresponding @{"_<..."} array contains the actual lines of source code. %{"_<..."} actually acts on the array of lines that @DB::dbline is aliased to. The assumption is that *DB::dbline = *{"_<..."} will have taken place first. Hence, all %{"_<..."} hashes are the same, when it comes to writing to keys. It is more useful for each %{"_<..."} hash to set breakpoints on its corresponding file’s lines regardless of whether @DB::dbline has been aliased, so that is what this commit does. Each hash’s mg_obj pointer in its dbfile magic now points to the array, and magic_setdbline uses it instead of PL_DBline. --- mg.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'mg.c') diff --git a/mg.c b/mg.c index f88428a925..83aafa4016 100644 --- a/mg.c +++ b/mg.c @@ -1974,7 +1974,8 @@ Perl_magic_setdbline(pTHX_ SV *sv, MAGIC *mg) /* Use sv_2iv instead of SvIV() as the former generates smaller code, and setting/clearing debugger breakpoints is not a hot path. */ - svp = av_fetch(GvAV(PL_DBline), sv_2iv(MUTABLE_SV((mg)->mg_ptr)), FALSE); + svp = av_fetch(MUTABLE_AV(mg->mg_obj), + sv_2iv(MUTABLE_SV((mg)->mg_ptr)), FALSE); if (svp && SvIOKp(*svp)) { OP * const o = INT2PTR(OP*,SvIVX(*svp)); -- cgit v1.2.1