Change 11541 by jhi@alpha on 2001/08/01 22:38:31

        Subject: Pluggable optimizer
        From: Simon Cozens <[EMAIL PROTECTED]>
        Date: Wed, 1 Aug 2001 13:57:02 -0700
        Message-ID: <[EMAIL PROTECTED]>

Affected files ...

... //depot/perl/embedvar.h#116 edit
... //depot/perl/op.c#418 edit
... //depot/perl/perl.c#350 edit
... //depot/perl/perl.h#371 edit
... //depot/perl/perlapi.h#39 edit
... //depot/perl/sv.c#447 edit
... //depot/perl/thrdvar.h#45 edit
... //depot/perl/util.c#290 edit

Differences ...

==== //depot/perl/embedvar.h#116 (text+w) ====
Index: perl/embedvar.h
--- perl/embedvar.h.~1~ Wed Aug  1 16:45:06 2001
+++ perl/embedvar.h     Wed Aug  1 16:45:06 2001
@@ -73,6 +73,7 @@
 #define PL_ofs_sv              (vTHX->Tofs_sv)
 #define PL_op                  (vTHX->Top)
 #define PL_opsave              (vTHX->Topsave)
+#define PL_peepp               (vTHX->Tpeepp)
 #define PL_protect             (vTHX->Tprotect)
 #define PL_reg_call_cc         (vTHX->Treg_call_cc)
 #define PL_reg_curpm           (vTHX->Treg_curpm)
@@ -788,6 +789,7 @@
 #define PL_ofs_sv              (aTHXo->interp.Tofs_sv)
 #define PL_op                  (aTHXo->interp.Top)
 #define PL_opsave              (aTHXo->interp.Topsave)
+#define PL_peepp               (aTHXo->interp.Tpeepp)
 #define PL_protect             (aTHXo->interp.Tprotect)
 #define PL_reg_call_cc         (aTHXo->interp.Treg_call_cc)
 #define PL_reg_curpm           (aTHXo->interp.Treg_curpm)
@@ -1492,6 +1494,7 @@
 #define PL_ofs_sv              (aTHX->Tofs_sv)
 #define PL_op                  (aTHX->Top)
 #define PL_opsave              (aTHX->Topsave)
+#define PL_peepp               (aTHX->Tpeepp)
 #define PL_protect             (aTHX->Tprotect)
 #define PL_reg_call_cc         (aTHX->Treg_call_cc)
 #define PL_reg_curpm           (aTHX->Treg_curpm)
@@ -1629,6 +1632,7 @@
 #define PL_Tofs_sv             PL_ofs_sv
 #define PL_Top                 PL_op
 #define PL_Topsave             PL_opsave
+#define PL_Tpeepp              PL_peepp
 #define PL_Tprotect            PL_protect
 #define PL_Treg_call_cc                PL_reg_call_cc
 #define PL_Treg_curpm          PL_reg_curpm

==== //depot/perl/op.c#418 (text) ====
Index: perl/op.c
--- perl/op.c.~1~       Wed Aug  1 16:45:06 2001
+++ perl/op.c   Wed Aug  1 16:45:06 2001
@@ -20,6 +20,8 @@
 #include "perl.h"
 #include "keywords.h"
 
+#define CALL_PEEP(o) CALL_FPTR(PL_peepp)(o)
+
 /* #define PL_OP_SLAB_ALLOC */
 
 #ifdef PL_OP_SLAB_ALLOC
@@ -2174,7 +2176,7 @@
        PL_eval_root->op_private |= OPpREFCOUNTED;
        OpREFCNT_set(PL_eval_root, 1);
        PL_eval_root->op_next = 0;
-       peep(PL_eval_start);
+       CALL_PEEP(PL_eval_start);
     }
     else {
        if (!o)
@@ -2185,7 +2187,7 @@
        PL_main_root->op_private |= OPpREFCOUNTED;
        OpREFCNT_set(PL_main_root, 1);
        PL_main_root->op_next = 0;
-       peep(PL_main_start);
+       CALL_PEEP(PL_main_start);
        PL_compcv = 0;
 
        /* Register with debugger */
@@ -2369,7 +2371,7 @@
 
     PL_op = curop = LINKLIST(o);
     o->op_next = 0;
-    peep(curop);
+    CALL_PEEP(curop);
     pp_pushmark();
     CALLRUNOPS(aTHX);
     PL_op = curop;
@@ -4829,7 +4831,7 @@
     OpREFCNT_set(CvROOT(cv), 1);
     CvSTART(cv) = LINKLIST(CvROOT(cv));
     CvROOT(cv)->op_next = 0;
-    peep(CvSTART(cv));
+    CALL_PEEP(CvSTART(cv));
 
     /* now that optimizer has done its work, adjust pad values */
     if (CvCLONE(cv)) {
@@ -5170,7 +5172,7 @@
     OpREFCNT_set(CvROOT(cv), 1);
     CvSTART(cv) = LINKLIST(CvROOT(cv));
     CvROOT(cv)->op_next = 0;
-    peep(CvSTART(cv));
+    CALL_PEEP(CvSTART(cv));
     op_free(o);
     PL_copline = NOLINE;
     LEAVE_SCOPE(floor);
@@ -6343,7 +6345,7 @@
                    kid->op_next = 0;           /* just disconnect the leave */
                k = kLISTOP->op_first;
            }
-           peep(k);
+           CALL_PEEP(k);
 
            kid = firstkid;
            if (o->op_type == OP_SORT) {
@@ -6881,7 +6883,7 @@
            o->op_seq = PL_op_seqmax++;
            while (cLOGOP->op_other->op_type == OP_NULL)
                cLOGOP->op_other = cLOGOP->op_other->op_next;
-           peep(cLOGOP->op_other);
+           peep(cLOGOP->op_other); /* Recursive calls are not replaced by fptr calls 
+*/
            break;
 
        case OP_ENTERLOOP:

==== //depot/perl/perl.c#350 (text) ====
Index: perl/perl.c
--- perl/perl.c.~1~     Wed Aug  1 16:45:06 2001
+++ perl/perl.c Wed Aug  1 16:45:06 2001
@@ -3782,6 +3782,7 @@
     (void) find_threadsv("@"); /* Ensure $@ is initialised early */
 
     PL_maxscream = -1;
+    PL_peepp = MEMBER_TO_FPTR(Perl_peep);
     PL_regcompp = MEMBER_TO_FPTR(Perl_pregcomp);
     PL_regexecp = MEMBER_TO_FPTR(Perl_regexec_flags);
     PL_regint_start = MEMBER_TO_FPTR(Perl_re_intuit_start);

==== //depot/perl/perl.h#371 (text) ====
Index: perl/perl.h
--- perl/perl.h.~1~     Wed Aug  1 16:45:06 2001
+++ perl/perl.h Wed Aug  1 16:45:06 2001
@@ -3019,6 +3019,7 @@
 #define RsRECORD(sv)  (SvROK(sv) && (SvIV(SvRV(sv)) > 0))
 
 /* Enable variables which are pointers to functions */
+typedef void (CPERLscope(*peep_t))(pTHX_ OP* o);
 typedef regexp*(CPERLscope(*regcomp_t)) (pTHX_ char* exp, char* xend, PMOP* pm);
 typedef I32 (CPERLscope(*regexec_t)) (pTHX_ regexp* prog, char* stringarg,
                                      char* strend, char* strbeg, I32 minend,

==== //depot/perl/perlapi.h#39 (text+w) ====
Index: perl/perlapi.h
--- perl/perlapi.h.~1~  Wed Aug  1 16:45:06 2001
+++ perl/perlapi.h      Wed Aug  1 16:45:06 2001
@@ -728,6 +728,8 @@
 #define PL_op                  (*Perl_Top_ptr(aTHXo))
 #undef  PL_opsave
 #define PL_opsave              (*Perl_Topsave_ptr(aTHXo))
+#undef  PL_peepp
+#define PL_peepp               (*Perl_Tpeepp_ptr(aTHXo))
 #undef  PL_protect
 #define PL_protect             (*Perl_Tprotect_ptr(aTHXo))
 #undef  PL_reg_call_cc

==== //depot/perl/sv.c#447 (text) ====
Index: perl/sv.c
--- perl/sv.c.~1~       Wed Aug  1 16:45:06 2001
+++ perl/sv.c   Wed Aug  1 16:45:06 2001
@@ -10268,6 +10268,9 @@
     PL_reginterp_cnt   = 0;
     PL_reg_starttry    = 0;
 
+    /* Pluggable optimizer */
+    PL_peepp           = proto_perl->Tpeepp;
+
     if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
         ptr_table_free(PL_ptr_table);
         PL_ptr_table = NULL;

==== //depot/perl/thrdvar.h#45 (text) ====
Index: perl/thrdvar.h
--- perl/thrdvar.h.~1~  Wed Aug  1 16:45:06 2001
+++ perl/thrdvar.h      Wed Aug  1 16:45:06 2001
@@ -211,6 +211,8 @@
 PERLVARI(Treg_poscache, char *, Nullch)        /* cache of pos of WHILEM */
 PERLVAR(Treg_poscache_size, STRLEN)    /* size of pos cache of WHILEM */
 
+PERLVARI(Tpeepp,       peep_t, MEMBER_TO_FPTR(Perl_peep))
+                                       /* Pointer to peephole optimizer */
 PERLVARI(Tregcompp,    regcomp_t, MEMBER_TO_FPTR(Perl_pregcomp))
                                        /* Pointer to REx compiler */
 PERLVARI(Tregexecp,    regexec_t, MEMBER_TO_FPTR(Perl_regexec_flags))

==== //depot/perl/util.c#290 (text) ====
Index: perl/util.c
--- perl/util.c.~1~     Wed Aug  1 16:45:06 2001
+++ perl/util.c Wed Aug  1 16:45:06 2001
@@ -3037,6 +3037,8 @@
     PL_reg_start_tmpl = 0;
     PL_reg_poscache = Nullch;
 
+    PL_peepp = MEMBER_TO_FPTR(Perl_peep);
+
     /* parent thread's data needs to be locked while we make copy */
     MUTEX_LOCK(&t->mutex);
 
End of Patch.

Reply via email to