Revision: 1237
Author: tim.bunce
Date: Wed May 26 15:05:36 2010
Log: Added explicit NYTP_FIDf_IS_EVAL flag.
Use filename_is_eval() where appropriate.
Added fid flags to 'has unknown invoking fid' warning.
http://code.google.com/p/perl-devel-nytprof/source/detail?r=1237
Modified:
/trunk/NYTProf.xs
=======================================
--- /trunk/NYTProf.xs Wed May 26 06:16:12 2010
+++ /trunk/NYTProf.xs Wed May 26 15:05:36 2010
@@ -130,6 +130,7 @@
#define NYTP_FIDf_SAVE_SRC 0x0020 /* src will be saved by profiler,
if NYTP_FIDf_HAS_SRC also set */
#define NYTP_FIDf_IS_ALIAS 0x0040 /* fid is clone of the 'parent'
fid it was autosplit from */
#define NYTP_FIDf_IS_FAKE 0x0080 /* eg dummy caller of a string
eval that doesn't have a filename */
+#define NYTP_FIDf_IS_EVAL 0x0100 /* is an eval */
/* indices to elements of the file info array */
#define NYTP_FIDi_FILENAME 0
@@ -716,14 +717,19 @@
if (!sv)
sv = sv_newmortal();
sv_setpv(sv,"");
+ if (fid_flags & NYTP_FIDf_IS_EVAL) sv_catpv(sv, "eval,");
+ if (fid_flags & NYTP_FIDf_IS_FAKE) sv_catpv(sv, "fake,");
+ if (fid_flags & NYTP_FIDf_IS_AUTOSPLIT) sv_catpv(sv, "autosplit,");
+ if (fid_flags & NYTP_FIDf_IS_ALIAS) sv_catpv(sv, "alias,");
if (fid_flags & NYTP_FIDf_IS_PMC) sv_catpv(sv, "pmc,");
if (fid_flags & NYTP_FIDf_VIA_STMT) sv_catpv(sv, "viastmt,");
if (fid_flags & NYTP_FIDf_VIA_SUB) sv_catpv(sv, "viasub,");
- if (fid_flags & NYTP_FIDf_IS_AUTOSPLIT) sv_catpv(sv, "autosplit,");
if (fid_flags & NYTP_FIDf_HAS_SRC) sv_catpv(sv, "hassrc,");
if (fid_flags & NYTP_FIDf_SAVE_SRC) sv_catpv(sv, "savesrc,");
- if (fid_flags & NYTP_FIDf_IS_ALIAS) sv_catpv(sv, "alias,");
- if (fid_flags & NYTP_FIDf_IS_FAKE) sv_catpv(sv, "fake,");
+ if (SvOK(sv)) {
+ SvCUR_set(sv, SvCUR(sv)-1); /* trim trailing comma */
+ *SvEND(sv) = '\0';
+ }
return sv;
}
@@ -852,16 +858,17 @@
}
++start; /* move past [ */
/* recurse */
- found->eval_fid = get_file_id(aTHX_ start, end - start,
created_via);
+ found->eval_fid = get_file_id(aTHX_ start, end - start,
+ NYTP_FIDf_IS_EVAL | created_via);
found->eval_line_num = atoi(end+1);
}
- else if (strnEQ(file_name, "(eval ", 6)) {
+ else if (filename_is_eval(file_name, file_name_len)) {
/* strange eval that doesn't have a filename associated */
/* seen in mod_perl, possibly from eval_sv(sv) api call */
/* also when nameevals=0 option is in effect */
char eval_file[] = "/unknown-eval-invoker";
found->eval_fid = get_file_id(aTHX_ eval_file,
sizeof(eval_file) - 1,
- NYTP_FIDf_IS_FAKE | created_via
+ NYTP_FIDf_IS_EVAL | NYTP_FIDf_IS_FAKE | created_via
);
found->eval_line_num = 1;
}
@@ -3808,8 +3815,9 @@
/* this eval fid refers to the fid that contained the eval */
SV *eval_fi = *av_fetch(state->fid_fileinfo_av, eval_file_num, 1);
if (!SvROK(eval_fi)) { /* should never happen */
- logwarn("Eval '%s' (fid %d) has unknown invoking fid %d\n",
- SvPV_nolen(filename_sv), file_num, eval_file_num);
+ SV *fid_flags_sv = fmt_fid_flags(aTHX_ fid_flags, NULL);
+ logwarn("Eval '%s' (fid %d, flags:%s) has unknown invoking
fid %d\n",
+ SvPV_nolen(filename_sv), file_num,
SvPV_nolen(fid_flags_sv), eval_file_num);
/* so make it look like a real file instead of an eval */
av_store(av, NYTP_FIDi_EVAL_FI, &PL_sv_undef);
eval_file_num = 0;
@@ -4779,6 +4787,7 @@
{"NYTP_FIDf_SAVE_SRC", NYTP_FIDf_SAVE_SRC},
{"NYTP_FIDf_IS_ALIAS", NYTP_FIDf_IS_ALIAS},
{"NYTP_FIDf_IS_FAKE", NYTP_FIDf_IS_FAKE},
+ {"NYTP_FIDf_IS_EVAL", NYTP_FIDf_IS_EVAL},
/* NYTP_FIDi_* */
{"NYTP_FIDi_FILENAME", NYTP_FIDi_FILENAME},
{"NYTP_FIDi_EVAL_FID", NYTP_FIDi_EVAL_FID},
--
You've received this message because you are subscribed to
the Devel::NYTProf Development User group.
Group hosted at: http://groups.google.com/group/develnytprof-dev
Project hosted at: http://perl-devel-nytprof.googlecode.com
CPAN distribution: http://search.cpan.org/dist/Devel-NYTProf
To post, email: [email protected]
To unsubscribe, email: [email protected]