This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
toke.c, S_intuit_method: Minor parsing speedup for 'maybe_method $foo'
authorBrian Fraser <fraserbn@gmail.com>
Sat, 9 Mar 2013 19:17:04 +0000 (16:17 -0300)
committerKarl Williamson <public@khwilliamson.com>
Mon, 20 May 2013 14:59:04 +0000 (08:59 -0600)
This commit moves a scan_word() closer to when it's actually used,
which provides a minor speedup for things like 'new $foo' or
'is $foo, $bar'.

toke.c

diff --git a/toke.c b/toke.c
index aace601..fc3f188 100644 (file)
--- a/toke.c
+++ b/toke.c
@@ -3986,11 +3986,6 @@ S_intuit_method(pTHX_ char *start, GV *gv, CV *cv)
                        return 0;
                }
     }
-    s = scan_word(s, tmpbuf, sizeof tmpbuf, TRUE, &len);
-    /* start is the beginning of the possible filehandle/object,
-     * and s is the end of it
-     * tmpbuf is a copy of it
-     */
 
     if (*start == '$') {
        if (cv || PL_last_lop_op == OP_PRINT || PL_last_lop_op == OP_SAY ||
@@ -4007,6 +4002,13 @@ S_intuit_method(pTHX_ char *start, GV *gv, CV *cv)
        PL_expect = XREF;
        return *s == '(' ? FUNCMETH : METHOD;
     }
+
+    s = scan_word(s, tmpbuf, sizeof tmpbuf, TRUE, &len);
+    /* start is the beginning of the possible filehandle/object,
+     * and s is the end of it
+     * tmpbuf is a copy of it (but with single quotes as double colons)
+     */
+
     if (!keyword(tmpbuf, len, 0)) {
        if (len > 2 && tmpbuf[len - 2] == ':' && tmpbuf[len - 1] == ':') {
            len -= 2;