From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 27859 invoked from network); 28 Jul 2008 12:46:57 -0000 X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.2.5 Received: from news.dotsrc.org (HELO a.mx.sunsite.dk) (130.225.247.88) by ns1.primenet.com.au with SMTP; 28 Jul 2008 12:46:57 -0000 Received-SPF: none (ns1.primenet.com.au: domain at sunsite.dk does not designate permitted sender hosts) Received: (qmail 66686 invoked from network); 28 Jul 2008 12:46:54 -0000 Received: from sunsite.dk (130.225.247.90) by a.mx.sunsite.dk with SMTP; 28 Jul 2008 12:46:54 -0000 Received: (qmail 18878 invoked by alias); 28 Jul 2008 12:46:51 -0000 Mailing-List: contact zsh-workers-help@sunsite.dk; run by ezmlm Precedence: bulk X-No-Archive: yes X-Seq: 25344 Received: (qmail 18862 invoked from network); 28 Jul 2008 12:46:50 -0000 Received: from bifrost.dotsrc.org (130.225.254.106) by sunsite.dk with SMTP; 28 Jul 2008 12:46:50 -0000 Received: from qb-out-0506.google.com (qb-out-0506.google.com [72.14.204.237]) by bifrost.dotsrc.org (Postfix) with ESMTP id 04E4B80561C7 for ; Mon, 28 Jul 2008 14:46:45 +0200 (CEST) Received: by qb-out-0506.google.com with SMTP id a16so502430qbd.37 for ; Mon, 28 Jul 2008 05:46:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:message-id:date:from:to :subject:in-reply-to:mime-version:content-type:references; bh=ob9y1SQyfZJHRZjPNCoKNVTvjlsPtLiI/omW0IWQQ08=; b=QnhrFWbjsRTk3gEa64gNBImZXLme+dNFquE+E0iYsbG6chBbwujUz0SXf5SdY3maWM 8tbpw/zmt1rTj+lt8L7cZ5/s4lKJ3JIjFwKZgoXi0NBYZK6hCzGfUp64LeZnL7fK7nkd G+2DQ5KtWU3s+LMIuMi6KJC17gHVLaLDUKG8k= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:to:subject:in-reply-to:mime-version :content-type:references; b=wsIlWgTOKJXRhgDZ1hOPaR2n6gQ22soJmx4CinaL0FvFDutY1pYJxnaaFs9D2LTWhI Za+RzvbP2mF8/uZDI2LvB/o0nvPRolyRzRCR6WbhJqt8JvH2MBomZMdu46rWBaHtxSP3 ODAocVBjLLnkgZYF7pY8sLVGAvJf+k/dui1kc= Received: by 10.115.49.11 with SMTP id b11mr4815030wak.117.1217249203895; Mon, 28 Jul 2008 05:46:43 -0700 (PDT) Received: by 10.114.159.2 with HTTP; Mon, 28 Jul 2008 05:46:43 -0700 (PDT) Message-ID: <6cd6de210807280546k14a1a59fo40cb6ed968b1227b@mail.gmail.com> Date: Mon, 28 Jul 2008 08:46:43 -0400 From: "Rocky Bernstein" To: zsh-workers@sunsite.dk Subject: Re: Getting source file and line number of a function. In-Reply-To: <200807280834.m6S8YEVo026326@news01.csr.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_16593_18368965.1217249203891" References: <6cd6de210807261806r7ff184fdtcc7859cca0a98aef@mail.gmail.com> <200807280834.m6S8YEVo026326@news01.csr.com> X-Virus-Scanned: ClamAV 0.92.1/7864/Mon Jul 28 13:50:42 2008 on bifrost X-Virus-Status: Clean ------=_Part_16593_18368965.1217249203891 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline Patch should be added. It's not the only way to do this and it changes the functrace (which could easily be addressed, so there might be some discussion. Comments about how the patch works are below. For the little that I've tried, it seems to work. Of course there are other line number weirdnesses I haven't worked out yet. One thing more easily addressed is the fact that sourcing a file doesn't show in functrace and I think it should. I think sourcing is in fact like a function call. In fact one can write "source" as a function which does a read/eval of the file name. In looking at the code in surrounding the patch one question I have is how the strings allocated for funcstack->name and funcstack->caller get freed? This is relevant if one extends source to do the same thing. Thanks. On Mon, Jul 28, 2008 at 4:34 AM, Peter Stephenson wrote: > "Rocky Bernstein" wrote: >> I see that zsh has now has array variables functrace and >> funcstack. Functrace stack gives a function name and a line offset >> from the function. But for many things involving location reporting, >> it would more be desirable to have a filename and absolute line >> location. >> >> Alternatively, if there were a way to get the filename and line number >> of the beginning of a given function, one can do some arithmetic to >> get the absolute position. >> >> Is there currently a way to get this information. Should I try at >> submitting a patch? > > It would be useful to have information referred to the autoload file, > and I've wondered about how to do it, but I don't think it's trivial > with the current way line numbers work. We would probably need to add > an extra internal variable for file line numbers, and present another > variable (or array, if in the funcstack style) to users to distinguish > the two. This is more or less the approach I tried. There is a variable called scriptname which I think is a little misleading. It is the name of the file when not in a function but gets set to a function name when that is run. So I added a variable called scriptfilename which mirrors scriptname but doesn't get changed when a function is run. When functions are defined, I save the current file, scriptfilename, and line number, lineno, in the shfunc structure. As for the C funcstack list, rather than remove any of the existing information, I added two more fields for the filename and absolute line number. Right now I changed the functrace routine in Src/Modules/parameter.c to use these new fields rather than the old ones. If one wants the function name rather than the file name, one can always use funcstack which has that. So right now you can't easily get the line number relative to the beginning of the function, although it's there. bash can show the new information, file name and starting line number using declare -F *fn* (Actually, shopt extdebug also has to be set.) It might be helpful to add that, and this would be one way to get the old function offset information. Another way would be to turn functrace into a builtin function and pass (an optional?) parameter indicating what flavor of information you want. Or a 3rd routine/variable could be used. > > -- > Peter Stephenson Software Engineer > CSR PLC, Churchill House, Cambridge Business Park, Cowley Road > Cambridge, CB4 0WZ, UK Tel: +44 (0)1223 692070 > ------=_Part_16593_18368965.1217249203891 Content-Type: text/x-diff; name=functrace-patch.diff Content-Transfer-Encoding: base64 X-Attachment-Id: f_fj71ieon0 Content-Disposition: attachment; filename=functrace-patch.diff SW5kZXg6IFNyYy9leGVjLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2c3Jvb3QvenNoL3pzaC9T cmMvZXhlYy5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEzNApkaWZmIC11IC1yMS4xMzQgZXhl Yy5jCi0tLSBTcmMvZXhlYy5jCTE3IEp1bCAyMDA4IDExOjI3OjU3IC0wMDAwCTEuMTM0CisrKyBT cmMvZXhlYy5jCTI4IEp1bCAyMDA4IDAxOjQ4OjQwIC0wMDAwCkBAIC0zOTEzLDYgKzM5MTMsOCBA QAogCXNoZiA9IChTaGZ1bmMpIHphbGxvYyhzaXplb2YoKnNoZikpOwogCXNoZi0+ZnVuY2RlZiA9 IHByb2c7CiAJc2hmLT5ub2RlLmZsYWdzID0gMDsKKwlzaGYtPmZpbGVuYW1lID0genRyZHVwKHNj cmlwdGZpbGVuYW1lKTsKKwlzaGYtPmxpbmVubyA9IGxpbmVubzsKIAogCWlmICghbmFtZXMpIHsK IAkgICAgLyoKQEAgLTQxMjMsNiArNDEyNSw3IEBACiAjaWZkZWYgTUFYX0ZVTkNUSU9OX0RFUFRI CiAgICAgc3RhdGljIGludCBmdW5jZGVwdGg7CiAjZW5kaWYKKyAgICBTaGZ1bmMgc2hmOwogCiAg ICAgcHVzaGhlYXAoKTsKIApAQCAtNDE5Myw3ICs0MTk2LDE1IEBACiAgICAgZnN0YWNrLmxpbmVu byA9IGxpbmVubzsKICAgICBmc3RhY2sucHJldiA9IGZ1bmNzdGFjazsKICAgICBmdW5jc3RhY2sg PSAmZnN0YWNrOwotCisgICAgaWYgKG9hcmd2MCAmJiAoc2hmID0gKFNoZnVuYykgc2hmdW5jdGFi LT5nZXRub2RlKHNoZnVuY3RhYiwgb2FyZ3YwKSkpIHsKKyAgICAgICAgZnN0YWNrLmZsaW5lbm8g PSBzaGYtPmxpbmVubyArIGxpbmVubzsKKwlmc3RhY2suZmlsZW5hbWUgPSBkdXBzdHJpbmcoc2hm LT5maWxlbmFtZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZnN0YWNrLmZsaW5lbm8gPSBsaW5l bm87CisJZnN0YWNrLmZpbGVuYW1lID0gZHVwc3RyaW5nKGZzdGFjay5jYWxsZXIpOworICAgIH0K KyAgICAKKyAgICAKICAgICBpZiAocHJvZy0+ZmxhZ3MgJiBFRl9SVU4pIHsKIAlTaGZ1bmMgc2hm OwogCkluZGV4OiBTcmMvaW5pdC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnNyb290L3pzaC96 c2gvU3JjL2luaXQuYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS44NgpkaWZmIC11IC1yMS44NiBp bml0LmMKLS0tIFNyYy9pbml0LmMJMTcgSnVsIDIwMDggMTE6Mjc6NTcgLTAwMDAJMS44NgorKysg U3JjL2luaXQuYwkyOCBKdWwgMjAwOCAwMTo0ODo0MSAtMDAwMApAQCAtMzM0LDYgKzMzNCw3IEBA CiAJICAgIH0KIAkgICAgb3B0c1tJTlRFUkFDVElWRV0gJj0gMTsKIAkgICAgYXJnemVybyA9ICph cmd2OworCSAgICBzY3JpcHRmaWxlbmFtZSA9IGFyZ3plcm87CiAJICAgIGFyZ3YrKzsKIAl9CiAJ d2hpbGUgKCphcmd2KQpAQCAtMTA5Niw4ICsxMDk3LDIwIEBACiAgICAgbG9vcHMgID0gMDsKICAg ICBkb3NldG9wdChTSElOU1RESU4sIDAsIDEpOwogICAgIHNjcmlwdG5hbWUgPSBzOworICAgIHNj cmlwdGZpbGVuYW1lID0gczsKIAogICAgIHNvdXJjZWxldmVsKys7CisgICAgLyogeyAqLworICAg IC8qICAgc3RydWN0IGZ1bmNzdGFjayBmc3RhY2s7ICovCisgICAgLyogICBmc3RhY2submFtZSA9 IGR1cHN0cmluZygic291cmNlIik7ICovCisgICAgLyogICBmc3RhY2suY2FsbGVyID0gZHVwc3Ry aW5nKHNjcmlwdGZpbGVuYW1lKTsgKi8KKyAgICAvKiAgIGZzdGFjay5mbGluZW5vID0gb2xkbGlu ZW5vOyAqLworICAgIC8qICAgZnN0YWNrLmxpbmVubyA9IG9sZGxpbmVubzsgKi8KKyAgICAvKiAg IGZzdGFjay5maWxlbmFtZSA9IE5VTEw7ICovCisgICAgLyogICBmc3RhY2sucHJldiA9IGZ1bmNz dGFjazsgKi8KKyAgICAvKiAgIGZ1bmNzdGFjayA9ICZmc3RhY2s7ICovCisgICAgLyogfSAqLwor ICAgIAogICAgIGlmIChwcm9nKSB7CiAJcHVzaGhlYXAoKTsKIAllcnJmbGFnID0gMDsKQEAgLTEx MDUsNiArMTExOCw3IEBACiAJcG9waGVhcCgpOwogICAgIH0gZWxzZQogCWxvb3AoMCwgMCk7CQkg ICAgIC8qIGxvb3AgdGhyb3VnaCB0aGUgZmlsZSB0byBiZSBzb3VyY2VkICAqLworICAgIC8qIGZ1 bmNzdGFjayA9IGZ1bmNzdGFjay0+cHJldjsgKi8KICAgICBzb3VyY2VsZXZlbC0tOwogCiAgICAg LyogcmVzdG9yZSB0aGUgY3VycmVudCBzaGVsbCBzdGF0ZSAqLwpJbmRleDogU3JjL3V0aWxzLmMK PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQpSQ1MgZmlsZTogL2N2c3Jvb3QvenNoL3pzaC9TcmMvdXRpbHMuYyx2CnJldHJp ZXZpbmcgcmV2aXNpb24gMS4xOTcKZGlmZiAtdSAtcjEuMTk3IHV0aWxzLmMKLS0tIFNyYy91dGls cy5jCTE3IEp1bCAyMDA4IDExOjI3OjU3IC0wMDAwCTEuMTk3CisrKyBTcmMvdXRpbHMuYwkyOCBK dWwgMjAwOCAwMTo0ODo0MiAtMDAwMApAQCAtMzMsNyArMzMsOCBAQAogLyogbmFtZSBvZiBzY3Jp cHQgYmVpbmcgc291cmNlZCAqLwogCiAvKiovCi1tb2RfZXhwb3J0IGNoYXIgKnNjcmlwdG5hbWU7 Cittb2RfZXhwb3J0IGNoYXIgKnNjcmlwdG5hbWU7ICAgICAvKiBpcyBzb21ldGltZXMgYSBmdW5j dGlvbiBuYW1lICovCittb2RfZXhwb3J0IGNoYXIgKnNjcmlwdGZpbGVuYW1lOwogCiAjaWZkZWYg TVVMVElCWVRFX1NVUFBPUlQKIHN0cnVjdCB3aWRlY2hhcl9hcnJheSB7CkluZGV4OiBTcmMvenNo LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2c3Jvb3QvenNoL3pzaC9TcmMvenNoLmgsdgpyZXRy aWV2aW5nIHJldmlzaW9uIDEuMTM4CmRpZmYgLXUgLXIxLjEzOCB6c2guaAotLS0gU3JjL3pzaC5o CTEyIEp1biAyMDA4IDEzOjQ1OjA2IC0wMDAwCTEuMTM4CisrKyBTcmMvenNoLmgJMjggSnVsIDIw MDggMDE6NDg6NDMgLTAwMDAKQEAgLTEwNTksNiArMTA1OSw4IEBACiAKIHN0cnVjdCBzaGZ1bmMg ewogICAgIHN0cnVjdCBoYXNobm9kZSBub2RlOworICAgIGNoYXIgKmZpbGVuYW1lOyAgICAgICAg ICAgICAvKiBOYW1lIG9mIGZpbGUgbG9jYXRlZCBpbiAqLworICAgIGludCBsaW5lbm87CQkJLyog bGluZSBudW1iZXIgaW4gYWJvdmUgZmlsZSAqLwogICAgIEVwcm9nIGZ1bmNkZWY7CQkvKiBmdW5j dGlvbiBkZWZpbml0aW9uICAgICovCiB9OwogCkBAIC0xMDc3LDggKzEwNzksMTAgQEAKIHN0cnVj dCBmdW5jc3RhY2sgewogICAgIEZ1bmNzdGFjayBwcmV2OwkJLyogcHJldmlvdXMgaW4gc3RhY2sg Ki8KICAgICBjaGFyICpuYW1lOwkJCS8qIG5hbWUgb2YgZnVuY3Rpb24gY2FsbGVkICovCisgICAg Y2hhciAqZmlsZW5hbWU7CQkvKiBmaWxlIGZ1bmN0aW9uIHJlc2lkZXMgaW4gKi8KICAgICBjaGFy ICpjYWxsZXI7CQkvKiBuYW1lIG9mIGNhbGxlciAqLwotICAgIGludCBsaW5lbm87CQkJLyogbGlu ZSBudW1iZXIgaW4gZmlsZSAqLworICAgIGludCBmbGluZW5vOwkJLyogbGluZSBudW1iZXIgaW4g ZmlsZSAqLworICAgIGludCBsaW5lbm87CQkJLyogbGluZSBvZmZzZXQgZnJvbSBiZWdpbm5pbmcg b2YgZnVuY3Rpb24gKi8KIH07CiAKIC8qIG5vZGUgaW4gbGlzdCBvZiBmdW5jdGlvbiBjYWxsIHdy YXBwZXJzICovCmN2cyBkaWZmOiBEaWZmaW5nIFNyYy9CdWlsdGlucwpjdnMgZGlmZjogRGlmZmlu ZyBTcmMvTW9kdWxlcwpJbmRleDogU3JjL01vZHVsZXMvcGFyYW1ldGVyLmMKPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS Q1MgZmlsZTogL2N2c3Jvb3QvenNoL3pzaC9TcmMvTW9kdWxlcy9wYXJhbWV0ZXIuYyx2CnJldHJp ZXZpbmcgcmV2aXNpb24gMS40NQpkaWZmIC11IC1yMS40NSBwYXJhbWV0ZXIuYwotLS0gU3JjL01v ZHVsZXMvcGFyYW1ldGVyLmMJNSBTZXAgMjAwNyAxNjoxNjoxNyAtMDAwMAkxLjQ1CisrKyBTcmMv TW9kdWxlcy9wYXJhbWV0ZXIuYwkyOCBKdWwgMjAwOCAwMTo0ODo0NiAtMDAwMApAQCAtNTI4LDgg KzUyOCw4IEBACiAgICAgZm9yIChmID0gZnVuY3N0YWNrLCBwID0gcmV0OyBmOyBmID0gZi0+cHJl diwgcCsrKSB7CiAJY2hhciAqY29sb25wYWlyOwogCi0JY29sb25wYWlyID0gemhhbGxvYyhzdHJs ZW4oZi0+Y2FsbGVyKSArIChmLT5saW5lbm8gPiA5OTk5ID8gMjQgOiA2KSk7Ci0Jc3ByaW50Zihj b2xvbnBhaXIsICIlczolZCIsIGYtPmNhbGxlciwgZi0+bGluZW5vKTsKKwljb2xvbnBhaXIgPSB6 aGFsbG9jKHN0cmxlbihmLT5maWxlbmFtZSkgKyAoZi0+ZmxpbmVubyA+IDk5OTkgPyAyNCA6IDYp KTsKKwlzcHJpbnRmKGNvbG9ucGFpciwgIiVzOiVkIiwgZi0+ZmlsZW5hbWUsIGYtPmZsaW5lbm8p OwogCiAJKnAgPSBjb2xvbnBhaXI7CiAgICAgfQo= ------=_Part_16593_18368965.1217249203891--