Perl / perl5

🐪 The Perl programming language
https://dev.perl.org/perl5/
Other
1.98k stars 560 forks source link

[PATCH] rmv context from Perl_croak_no_modify and Perl_croak_xs_usage #12550

Closed p5pRT closed 12 years ago

p5pRT commented 12 years ago

Migrated from rt.perl.org#115690 (status was 'resolved')

Searchable as RT115690$

p5pRT commented 12 years ago

From @bulk88

Created by @bulk88

See attached patch. I didn't do a full make test on this so test this locally please before applying.

Perl Info ``` Flags: category=core severity=low Site configuration information for perl 5.17.6: Configured by Owner at Sun Nov 11 01:15:15 2012. Summary of my perl5 (revision 5 version 17 subversion 6 patch blead 2012-11-11.00:36:20 df7075a87da4c0a53dcce62713d9defecef39a46 v5.17.5-211-gdf7075a) configuration: Snapshot of: df7075a87da4c0a53dcce62713d9defecef39a46 Platform: osname=MSWin32, osvers=5.1, archname=MSWin32-x86-multi-thread uname='' config_args='undef' hint=recommended, useposix=true, d_sigaction=undef useithreads=define, usemultiplicity=define useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef use64bitint=undef, use64bitall=undef, uselongdouble=undef usemymalloc=n, bincompat5005=undef Compiler: cc='cl', ccflags ='-nologo -GF -W3 -MD -Zi -DNDEBUG -O1 -G7 -GL -arch:SSE2 -DWIN32 -D_CONSOLE -DNO_STRICT -DPERL_TEXTMODE_SCRIPTS -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -DUSE_PERLIO -D_USE_32BIT_TIME_T', optimize='-MD -Zi -DNDEBUG -O1 -G7 -GL -arch:SSE2', cppflags='-DWIN32' ccversion='13.10.6030', gccversion='', gccosandvers='' intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234 d_longlong=undef, longlongsize=8, d_longdbl=define, longdblsize=8 ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='__int64', lseeksize=8 alignbytes=8, prototype=define Linker and Libraries: ld='link', ldflags ='-nologo -nodefaultlib -debug -opt:ref,icf -ltcg -libpath:"c:\perl517\lib\CORE" -machine:x86' libpth="C:\Program Files\Microsoft Visual Studio .NET 2003\VC7\lib" libs=oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib netapi32.lib uuid.lib ws2_32.lib mpr.lib winmm.lib version.lib odbc32.lib odbccp32.lib comctl32.lib msvcrt.lib perllibs=oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib netapi32.lib uuid.lib ws2_32.lib mpr.lib winmm.lib version.lib odbc32.lib odbccp32.lib comctl32.lib msvcrt.lib libc=msvcrt.lib, so=dll, useshrplib=true, libperl=perl517.lib gnulibc_version='' Dynamic Linking: dlsrc=dl_win32.xs, dlext=dll, d_dlsymun=undef, ccdlflags=' ' cccdlflags=' ', lddlflags='-dll -nologo -nodefaultlib -debug -opt:ref,icf -ltcg -libpath:"c:\perl517\lib\CORE" -machine:x86' Locally applied patches: @INC for perl 5.17.6: C:/perl517/site/lib C:/perl517/lib . Environment for perl 5.17.6: HOME (unset) LANG (unset) LANGUAGE (unset) LD_LIBRARY_PATH (unset) LOGDIR (unset) PATH=C:\perl517\bin;C:\Program Files\Microsoft Visual Studio .NET 2003\Common7\IDE;C:\Program Files\Microsoft Visual Studio .NET 2003\VC7\BIN;C:\Program Files\Microsoft Visual Studio .NET 2003\Common7\Tools;C:\Program Files\Microsoft Visual Studio .NET 2003\Common7\Tools\bin\prerelease;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\system32\wbem; PERL_BADLANG (unset) SHELL (unset) ```
p5pRT commented 12 years ago

From @bulk88

0001-rmv-context-from-Perl_croak_no_modify-and-Perl_croak.patch ```diff From 731210ad47e371c376e3c71352a0d30ef908635c Mon Sep 17 00:00:00 2001 From: Daniel Dragan Date: Mon, 12 Nov 2012 00:04:00 -0500 Subject: [PATCH] rmv context from Perl_croak_no_modify and Perl_croak_xs_usage Remove the context/pTHX from Perl_croak_no_modify and Perl_croak_xs_usage. For croak_no_modify, it now has no parameters (and always has been no return), and on some compilers will now be optimized to a conditional jump. For Perl_croak_xs_usage one push asm opcode is removed at the caller. For both funcs, their footprint in their callers (which probably are hot code) is smaller, which means a tiny bit more room in the cache. My text section went from 0xC1A2F to 0xC198F after apply this. Also see http://www.nntp.perl.org/group/perl.perl5.porters/2012/11/msg195233.html . --- av.c | 14 +++++++------- doop.c | 2 +- embed.fnc | 4 ++-- embed.h | 4 ++-- ext/Tie-Hash-NamedCapture/NamedCapture.pm | 2 +- ext/Tie-Hash-NamedCapture/NamedCapture.xs | 2 +- mg.c | 4 ++-- pod/perldelta.pod | 10 ++++++++++ pp.c | 8 ++++---- pp_hot.c | 6 +++--- pp_sort.c | 2 +- pp_sys.c | 2 +- proto.h | 8 ++++---- regcomp.c | 4 ++-- sv.c | 12 ++++++------ universal.c | 8 ++++---- util.c | 4 ++-- 17 files changed, 53 insertions(+), 43 deletions(-) diff --git a/av.c b/av.c index fe6cd9b..6d2b949 100644 --- a/av.c +++ b/av.c @@ -345,7 +345,7 @@ Perl_av_store(pTHX_ register AV *av, I32 key, SV *val) } if (SvREADONLY(av) && key >= AvFILL(av)) - Perl_croak_no_modify(aTHX); + Perl_croak_no_modify(); if (!AvREAL(av) && AvREIFY(av)) av_reify(av); @@ -463,7 +463,7 @@ Perl_av_clear(pTHX_ register AV *av) #endif if (SvREADONLY(av)) - Perl_croak_no_modify(aTHX); + Perl_croak_no_modify(); /* Give any tie a chance to cleanup first */ if (SvRMAGICAL(av)) { @@ -579,7 +579,7 @@ Perl_av_push(pTHX_ register AV *av, SV *val) assert(SvTYPE(av) == SVt_PVAV); if (SvREADONLY(av)) - Perl_croak_no_modify(aTHX); + Perl_croak_no_modify(); if ((mg = SvTIED_mg((const SV *)av, PERL_MAGIC_tied))) { Perl_magic_methcall(aTHX_ MUTABLE_SV(av), mg, "PUSH", G_DISCARD, 1, @@ -611,7 +611,7 @@ Perl_av_pop(pTHX_ register AV *av) assert(SvTYPE(av) == SVt_PVAV); if (SvREADONLY(av)) - Perl_croak_no_modify(aTHX); + Perl_croak_no_modify(); if ((mg = SvTIED_mg((const SV *)av, PERL_MAGIC_tied))) { retval = Perl_magic_methcall(aTHX_ MUTABLE_SV(av), mg, "POP", 0, 0); if (retval) @@ -672,7 +672,7 @@ Perl_av_unshift(pTHX_ register AV *av, register I32 num) assert(SvTYPE(av) == SVt_PVAV); if (SvREADONLY(av)) - Perl_croak_no_modify(aTHX); + Perl_croak_no_modify(); if ((mg = SvTIED_mg((const SV *)av, PERL_MAGIC_tied))) { Perl_magic_methcall(aTHX_ MUTABLE_SV(av), mg, "UNSHIFT", @@ -737,7 +737,7 @@ Perl_av_shift(pTHX_ register AV *av) assert(SvTYPE(av) == SVt_PVAV); if (SvREADONLY(av)) - Perl_croak_no_modify(aTHX); + Perl_croak_no_modify(); if ((mg = SvTIED_mg((const SV *)av, PERL_MAGIC_tied))) { retval = Perl_magic_methcall(aTHX_ MUTABLE_SV(av), mg, "SHIFT", 0, 0); if (retval) @@ -853,7 +853,7 @@ Perl_av_delete(pTHX_ AV *av, I32 key, I32 flags) assert(SvTYPE(av) == SVt_PVAV); if (SvREADONLY(av)) - Perl_croak_no_modify(aTHX); + Perl_croak_no_modify(); if (SvRMAGICAL(av)) { const MAGIC * const tied_magic diff --git a/doop.c b/doop.c index f64ebb0..87bd180 100644 --- a/doop.c +++ b/doop.c @@ -633,7 +633,7 @@ Perl_do_trans(pTHX_ SV *sv) if (SvREADONLY(sv) && !(PL_op->op_private & OPpTRANS_IDENTICAL)) { if (!SvIsCOW(sv)) - Perl_croak_no_modify(aTHX); + Perl_croak_no_modify(); } (void)SvPV_const(sv, len); if (!len) diff --git a/embed.fnc b/embed.fnc index 806711a..4e82366 100644 --- a/embed.fnc +++ b/embed.fnc @@ -246,8 +246,8 @@ Aprd |void |croak_sv |NN SV *baseex : croak()'s first parm can be NULL. Otherwise, mod_perl breaks. Afprd |void |croak |NULLOK const char* pat|... Aprd |void |vcroak |NULLOK const char* pat|NULLOK va_list* args -Aprd |void |croak_no_modify -Aprd |void |croak_xs_usage |NN const CV *const cv \ +Anprd |void |croak_no_modify +Anprd |void |croak_xs_usage |NN const CV *const cv \ |NN const char *const params #if defined(WIN32) norx |void |win32_croak_not_implemented|NN const char * fname diff --git a/embed.h b/embed.h index 32987bd..3c08d83 100644 --- a/embed.h +++ b/embed.h @@ -77,9 +77,9 @@ #define croak Perl_croak #endif #define croak_memory_wrap S_croak_memory_wrap -#define croak_no_modify() Perl_croak_no_modify(aTHX) +#define croak_no_modify Perl_croak_no_modify #define croak_sv(a) Perl_croak_sv(aTHX_ a) -#define croak_xs_usage(a,b) Perl_croak_xs_usage(aTHX_ a,b) +#define croak_xs_usage Perl_croak_xs_usage #define custom_op_desc(a) Perl_custom_op_desc(aTHX_ a) #define custom_op_name(a) Perl_custom_op_name(aTHX_ a) #define cv_clone(a) Perl_cv_clone(aTHX_ a) diff --git a/ext/Tie-Hash-NamedCapture/NamedCapture.pm b/ext/Tie-Hash-NamedCapture/NamedCapture.pm index 932e440..9702666 100644 --- a/ext/Tie-Hash-NamedCapture/NamedCapture.pm +++ b/ext/Tie-Hash-NamedCapture/NamedCapture.pm @@ -1,7 +1,7 @@ use strict; package Tie::Hash::NamedCapture; -our $VERSION = "0.08"; +our $VERSION = "0.09"; require XSLoader; XSLoader::load(); # This returns true, which makes require happy. diff --git a/ext/Tie-Hash-NamedCapture/NamedCapture.xs b/ext/Tie-Hash-NamedCapture/NamedCapture.xs index 58b7da7..04cc463 100644 --- a/ext/Tie-Hash-NamedCapture/NamedCapture.xs +++ b/ext/Tie-Hash-NamedCapture/NamedCapture.xs @@ -84,7 +84,7 @@ FETCH(...) if (!rx || !SvROK(ST(0))) { if (ix & UNDEF_FATAL) - Perl_croak_no_modify(aTHX); + Perl_croak_no_modify(); else XSRETURN_UNDEF; } diff --git a/mg.c b/mg.c index 0cb6052..761bf73 100644 --- a/mg.c +++ b/mg.c @@ -682,7 +682,7 @@ Perl_magic_regdatum_set(pTHX_ SV *sv, MAGIC *mg) PERL_ARGS_ASSERT_MAGIC_REGDATUM_SET; PERL_UNUSED_ARG(sv); PERL_UNUSED_ARG(mg); - Perl_croak_no_modify(aTHX); + Perl_croak_no_modify(); NORETURN_FUNCTION_END; } @@ -2477,7 +2477,7 @@ Perl_magic_set(pTHX_ SV *sv, MAGIC *mg) */ croakparen: if (!PL_localizing) { - Perl_croak_no_modify(aTHX); + Perl_croak_no_modify(); } } break; diff --git a/pod/perldelta.pod b/pod/perldelta.pod index 0af6b40..0941df7 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -111,6 +111,10 @@ L has been upgraded from version 1.98 to 1.99_51. L has been upgraded from version 1.16 to 1.17. +=item * + +L has been upgraded from version 0.08 to 0.09. + =back =head2 Removed Modules and Pragmata @@ -313,6 +317,12 @@ well. =item * +The private Perl_croak_no_modify has had its context parameter removed. It is +now has a void prototype. Users of the public API croak_no_modify remain +unaffected. + +=item * + XXX =back diff --git a/pp.c b/pp.c index a402672..67eaae3 100644 --- a/pp.c +++ b/pp.c @@ -230,7 +230,7 @@ S_rv2gv(pTHX_ SV *sv, const bool vivify_sv, const bool strict, if (vivify_sv && sv != &PL_sv_undef) { GV *gv; if (SvREADONLY(sv)) - Perl_croak_no_modify(aTHX); + Perl_croak_no_modify(); if (cUNOP->op_targ) { SV * const namesv = PAD_SV(cUNOP->op_targ); gv = MUTABLE_GV(newSV(0)); @@ -776,7 +776,7 @@ S_do_chomp(pTHX_ SV *retval, SV *sv, bool chomping) sv_force_normal_flags(sv, 0); } else - Perl_croak_no_modify(aTHX); + Perl_croak_no_modify(); } if (PL_encoding) { @@ -1039,7 +1039,7 @@ PP(pp_postinc) const bool inc = PL_op->op_type == OP_POSTINC || PL_op->op_type == OP_I_POSTINC; if (SvTYPE(TOPs) >= SVt_PVAV || (isGV_with_GP(TOPs) && !SvFAKE(TOPs))) - Perl_croak_no_modify(aTHX); + Perl_croak_no_modify(); if (SvROK(TOPs)) TARG = sv_newmortal(); sv_setsv(TARG, TOPs); @@ -5080,7 +5080,7 @@ PP(pp_push) SPAGAIN; } else { - if (SvREADONLY(ary) && MARK < SP) Perl_croak_no_modify(aTHX); + if (SvREADONLY(ary) && MARK < SP) Perl_croak_no_modify(); PL_delaymagic = DM_DELAY; for (++MARK; MARK <= SP; MARK++) { SV *sv; diff --git a/pp_hot.c b/pp_hot.c index 212fe5f..1df3bcb 100644 --- a/pp_hot.c +++ b/pp_hot.c @@ -369,7 +369,7 @@ PP(pp_preinc) const bool inc = PL_op->op_type == OP_PREINC || PL_op->op_type == OP_I_PREINC; if (SvTYPE(TOPs) >= SVt_PVAV || (isGV_with_GP(TOPs) && !SvFAKE(TOPs))) - Perl_croak_no_modify(aTHX); + Perl_croak_no_modify(); if (!SvREADONLY(TOPs) && !SvGMAGICAL(TOPs) && SvIOK_notUV(TOPs) && !SvNOK(TOPs) && !SvPOK(TOPs) && SvIVX(TOPs) != (inc ? IV_MAX : IV_MIN)) { @@ -2105,7 +2105,7 @@ PP(pp_subst) || ( ((SvTYPE(TARG) == SVt_PVGV && isGV_with_GP(TARG)) || SvTYPE(TARG) > SVt_PVLV) && !(SvTYPE(TARG) == SVt_PVGV && SvFAKE(TARG))))) - Perl_croak_no_modify(aTHX); + Perl_croak_no_modify(); PUTBACK; s = SvPV_nomg(TARG, len); @@ -2890,7 +2890,7 @@ Perl_vivify_ref(pTHX_ SV *sv, U32 to_what) SvGETMAGIC(sv); if (!SvOK(sv)) { if (SvREADONLY(sv)) - Perl_croak_no_modify(aTHX); + Perl_croak_no_modify(); prepare_SV_for_RV(sv); switch (to_what) { case OPpDEREF_SV: diff --git a/pp_sort.c b/pp_sort.c index 30595f0..eae2098 100644 --- a/pp_sort.c +++ b/pp_sort.c @@ -1586,7 +1586,7 @@ PP(pp_sort) } else { if (SvREADONLY(av)) - Perl_croak_no_modify(aTHX); + Perl_croak_no_modify(); else SvREADONLY_on(av); p1 = p2 = AvARRAY(av); diff --git a/pp_sys.c b/pp_sys.c index 57679eb..938aafe 100644 --- a/pp_sys.c +++ b/pp_sys.c @@ -1100,7 +1100,7 @@ PP(pp_sselect) if (SvIsCOW(sv)) sv_force_normal_flags(sv, 0); if (SvREADONLY(sv) && !(SvPOK(sv) && SvCUR(sv) == 0)) - Perl_croak_no_modify(aTHX); + Perl_croak_no_modify(); } if (!SvPOK(sv)) { if (!SvPOKp(sv)) diff --git a/proto.h b/proto.h index e42d6bc..400ce69 100644 --- a/proto.h +++ b/proto.h @@ -643,7 +643,7 @@ PERL_CALLCONV_NO_RET void Perl_croak(pTHX_ const char* pat, ...) PERL_STATIC_NO_RET void S_croak_memory_wrap(void) __attribute__noreturn__; -PERL_CALLCONV_NO_RET void Perl_croak_no_modify(pTHX) +PERL_CALLCONV_NO_RET void Perl_croak_no_modify(void) __attribute__noreturn__; PERL_CALLCONV_NO_RET void Perl_croak_sv(pTHX_ SV *baseex) @@ -652,10 +652,10 @@ PERL_CALLCONV_NO_RET void Perl_croak_sv(pTHX_ SV *baseex) #define PERL_ARGS_ASSERT_CROAK_SV \ assert(baseex) -PERL_CALLCONV_NO_RET void Perl_croak_xs_usage(pTHX_ const CV *const cv, const char *const params) +PERL_CALLCONV_NO_RET void Perl_croak_xs_usage(const CV *const cv, const char *const params) __attribute__noreturn__ - __attribute__nonnull__(pTHX_1) - __attribute__nonnull__(pTHX_2); + __attribute__nonnull__(1) + __attribute__nonnull__(2); #define PERL_ARGS_ASSERT_CROAK_XS_USAGE \ assert(cv); assert(params) diff --git a/regcomp.c b/regcomp.c index 740bc94..e2fc052 100644 --- a/regcomp.c +++ b/regcomp.c @@ -6475,7 +6475,7 @@ Perl_reg_named_buff(pTHX_ REGEXP * const rx, SV * const key, SV * const value, if (flags & RXapif_FETCH) { return reg_named_buff_fetch(rx, key, flags); } else if (flags & (RXapif_STORE | RXapif_DELETE | RXapif_CLEAR)) { - Perl_croak_no_modify(aTHX); + Perl_croak_no_modify(); return NULL; } else if (flags & RXapif_EXISTS) { return reg_named_buff_exists(rx, key, flags) @@ -6797,7 +6797,7 @@ Perl_reg_numbered_buff_store(pTHX_ REGEXP * const rx, const I32 paren, PERL_UNUSED_ARG(value); if (!PL_localizing) - Perl_croak_no_modify(aTHX); + Perl_croak_no_modify(); } I32 diff --git a/sv.c b/sv.c index 360de04..e42e0dd 100644 --- a/sv.c +++ b/sv.c @@ -4785,7 +4785,7 @@ Perl_sv_force_normal_flags(pTHX_ register SV *const sv, const U32 flags) } } else if (IN_PERL_RUNTIME) - Perl_croak_no_modify(aTHX); + Perl_croak_no_modify(); } #else if (SvREADONLY(sv)) { @@ -4807,7 +4807,7 @@ Perl_sv_force_normal_flags(pTHX_ register SV *const sv, const U32 flags) unshare_hek(SvSHARED_HEK_FROM_PV(pvx)); } else if (IN_PERL_RUNTIME) - Perl_croak_no_modify(aTHX); + Perl_croak_no_modify(); } #endif if (SvROK(sv)) @@ -5320,7 +5320,7 @@ Perl_sv_magic(pTHX_ register SV *const sv, SV *const obj, const int how, && !PERL_MAGIC_TYPE_READONLY_ACCEPTABLE(how) ) { - Perl_croak_no_modify(aTHX); + Perl_croak_no_modify(); } } if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) { @@ -7954,7 +7954,7 @@ Perl_sv_inc_nomg(pTHX_ register SV *const sv) sv_force_normal_flags(sv, 0); if (SvREADONLY(sv)) { if (IN_PERL_RUNTIME) - Perl_croak_no_modify(aTHX); + Perl_croak_no_modify(); } if (SvROK(sv)) { IV i; @@ -8136,7 +8136,7 @@ Perl_sv_dec_nomg(pTHX_ register SV *const sv) sv_force_normal_flags(sv, 0); if (SvREADONLY(sv)) { if (IN_PERL_RUNTIME) - Perl_croak_no_modify(aTHX); + Perl_croak_no_modify(); } if (SvROK(sv)) { IV i; @@ -9495,7 +9495,7 @@ Perl_sv_bless(pTHX_ SV *const sv, HV *const stash) tmpRef = SvRV(sv); if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY)) { if (SvREADONLY(tmpRef) && !SvIsCOW(tmpRef)) - Perl_croak_no_modify(aTHX); + Perl_croak_no_modify(); if (SvOBJECT(tmpRef)) { if (SvTYPE(tmpRef) != SVt_PVIO) --PL_sv_objcount; diff --git a/universal.c b/universal.c index 055d8ab..8cc6e63 100644 --- a/universal.c +++ b/universal.c @@ -298,7 +298,7 @@ C. Hence if C is C<&ouch::awk>, it would call C as: */ void -Perl_croak_xs_usage(pTHX_ const CV *const cv, const char *const params) +Perl_croak_xs_usage(const CV *const cv, const char *const params) { const GV *const gv = CvGV(cv); @@ -308,16 +308,16 @@ Perl_croak_xs_usage(pTHX_ const CV *const cv, const char *const params) const HV *const stash = GvSTASH(gv); if (HvNAME_get(stash)) - Perl_croak(aTHX_ "Usage: %"HEKf"::%"HEKf"(%s)", + Perl_croak_nocontext("Usage: %"HEKf"::%"HEKf"(%s)", HEKfARG(HvNAME_HEK(stash)), HEKfARG(GvNAME_HEK(gv)), params); else - Perl_croak(aTHX_ "Usage: %"HEKf"(%s)", + Perl_croak_nocontext("Usage: %"HEKf"(%s)", HEKfARG(GvNAME_HEK(gv)), params); } else { /* Pants. I don't think that it should be possible to get here. */ - Perl_croak(aTHX_ "Usage: CODE(0x%"UVxf")(%s)", PTR2UV(cv), params); + Perl_croak_nocontext("Usage: CODE(0x%"UVxf")(%s)", PTR2UV(cv), params); } } diff --git a/util.c b/util.c index bbb3b0f..283da46 100644 --- a/util.c +++ b/util.c @@ -1617,9 +1617,9 @@ paths reduces CPU cache pressure. */ void -Perl_croak_no_modify(pTHX) +Perl_croak_no_modify() { - Perl_croak(aTHX_ "%s", PL_no_modify); + Perl_croak_nocontext( "%s", PL_no_modify); } /* -- 1.7.9.msysgit.0 ```
p5pRT commented 12 years ago

From @cpansprout

On Sun Nov 11 21​:12​:23 2012\, bulk88 wrote​:

This is a bug report for perl from bulk88@​hotmail.com\, generated with the help of perlbug 1.39 running under perl 5.17.6.

----------------------------------------------------------------- [Please describe your issue here]

See attached patch. I didn't do a full make test on this so test this locally please before applying.

Thank you. Applied as cb077ed.

--

Father Chrysostomos

p5pRT commented 12 years ago

The RT System itself - Status changed from 'new' to 'open'

p5pRT commented 12 years ago

@cpansprout - Status changed from 'open' to 'resolved'