BSD 4_4 release
[unix-history] / usr / src / usr.bin / pascal / src / stat.c
index c53f246..337e579 100644 (file)
@@ -1,15 +1,46 @@
-/* Copyright (c) 1979 Regents of the University of California */
+/*-
+ * Copyright (c) 1980, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *     This product includes software developed by the University of
+ *     California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
 
 #ifndef lint
 
 #ifndef lint
-static char sccsid[] = "@(#)stat.c 2.1 %G%";
-#endif
+static char sccsid[] = "@(#)stat.c     8.1 (Berkeley) 6/6/93";
+#endif /* not lint */
 
 #include "whoami.h"
 #include "0.h"
 #include "tree.h"
 #include "objfmt.h"
 #ifdef PC
 
 #include "whoami.h"
 #include "0.h"
 #include "tree.h"
 #include "objfmt.h"
 #ifdef PC
-#   include "pcops.h"
+#   include <pcc.h>
 #   include "pc.h"
 #endif PC
 #include "tmps.h"
 #   include "pc.h"
 #endif PC
 #include "tmps.h"
@@ -177,9 +208,9 @@ inccnt( counter )
            (void) put(2, O_COUNT, counter );
 #      endif OBJ
 #      ifdef PC
            (void) put(2, O_COUNT, counter );
 #      endif OBJ
 #      ifdef PC
-           putRV( PCPCOUNT , 0 , counter * sizeof (long) , NGLOBAL , P2INT );
-           putleaf( P2ICON , 1 , 0 , P2INT , (char *) 0 );
-           putop( P2ASG P2PLUS , P2INT );
+           putRV( PCPCOUNT , 0 , counter * sizeof (long) , NGLOBAL , PCCT_INT );
+           putleaf( PCC_ICON , 1 , 0 , PCCT_INT , (char *) 0 );
+           putop( PCCOM_ASG PCC_PLUS , PCCT_INT );
            putdot( filename , line );
 #      endif PC
     }
            putdot( filename , line );
 #      endif PC
     }
@@ -206,14 +237,14 @@ putline()
            }
            if ( opt( 'p' ) ) {
                if ( opt('t') ) {
            }
            if ( opt( 'p' ) ) {
                if ( opt('t') ) {
-                   putleaf( P2ICON , 0 , 0 , ADDTYPE( P2FTN | P2INT , P2PTR )
+                   putleaf( PCC_ICON , 0 , 0 , PCCM_ADDTYPE( PCCTM_FTN | PCCT_INT , PCCTM_PTR )
                            , "_LINO" );
                            , "_LINO" );
-                   putop( P2UNARY P2CALL , P2INT );
+                   putop( PCCOM_UNARY PCC_CALL , PCCT_INT );
                    putdot( filename , line );
                } else {
                    putdot( filename , line );
                } else {
-                   putRV( STMTCOUNT , 0 , 0 , NGLOBAL , P2INT );
-                   putleaf( P2ICON , 1 , 0 , P2INT , (char *) 0 );
-                   putop( P2ASG P2PLUS , P2INT );
+                   putRV( STMTCOUNT , 0 , 0 , NGLOBAL , PCCT_INT );
+                   putleaf( PCC_ICON , 1 , 0 , PCCT_INT , (char *) 0 );
+                   putop( PCCOM_ASG PCC_PLUS , PCCT_INT );
                    putdot( filename , line );
                }
            }
                    putdot( filename , line );
                }
            }
@@ -240,6 +271,8 @@ withop(s)
 
        putline();
        swl = withlist;
 
        putline();
        swl = withlist;
+       for (p = s->var_list; p != TR_NIL; p = p->list_node.next) {
+               tempnlp = tmpalloc((long) (sizeof(int *)), nl+TPTR, REGOK);
                    /*
                     *  no one uses the allocated temporary namelist entry,
                     *  since we have to use it before we know its type;
                    /*
                     *  no one uses the allocated temporary namelist entry,
                     *  since we have to use it before we know its type;
@@ -250,7 +283,7 @@ withop(s)
 #              endif OBJ
 #              ifdef PC
                    putRV( (char *) 0 , cbn , tempnlp -> value[ NL_OFFS ] ,
 #              endif OBJ
 #              ifdef PC
                    putRV( (char *) 0 , cbn , tempnlp -> value[ NL_OFFS ] ,
-                           tempnlp -> extra_flags , P2PTR|P2STRTY );
+                           tempnlp -> extra_flags , PCCTM_PTR|PCCT_STRTY );
 #              endif PC
                r = lvalue(p->list_node.list, MOD , LREQ );
                if (r == NLNIL)
 #              endif PC
                r = lvalue(p->list_node.list, MOD , LREQ );
                if (r == NLNIL)
@@ -269,7 +302,7 @@ withop(s)
                    (void) put(1, PTR_AS);
 #              endif OBJ
 #              ifdef PC
                    (void) put(1, PTR_AS);
 #              endif OBJ
 #              ifdef PC
-                   putop( P2ASSIGN , P2PTR|P2STRTY );
+                   putop( PCC_ASSIGN , PCCTM_PTR|PCCT_STRTY );
                    putdot( filename , line );
 #              endif PC
        }
                    putdot( filename , line );
 #              endif PC
        }
@@ -477,20 +510,20 @@ asgnop1(r, p)
                    case TSCAL:
                            postcheck(p, p1);
                            sconv(p2type(p1), p2type(p));
                    case TSCAL:
                            postcheck(p, p1);
                            sconv(p2type(p1), p2type(p));
-                           putop( P2ASSIGN , p2type( p ) );
+                           putop( PCC_ASSIGN , p2type( p ) );
                            putdot( filename , line );
                            break;
                    case TPTR:
                            putdot( filename , line );
                            break;
                    case TPTR:
-                           putop( P2ASSIGN , p2type( p ) );
+                           putop( PCC_ASSIGN , p2type( p ) );
                            putdot( filename , line );
                            break;
                    case TDOUBLE:
                            sconv(p2type(p1), p2type(p));
                            putdot( filename , line );
                            break;
                    case TDOUBLE:
                            sconv(p2type(p1), p2type(p));
-                           putop( P2ASSIGN , p2type( p ) );
+                           putop( PCC_ASSIGN , p2type( p ) );
                            putdot( filename , line );
                            break;
                    default:
                            putdot( filename , line );
                            break;
                    default:
-                           putstrop(P2STASG, ADDTYPE(p2type(p), P2PTR),
+                           putstrop(PCC_STASG, PCCM_ADDTYPE(p2type(p), PCCTM_PTR),
                                        (int) lwidth(p), align(p));
                            putdot( filename , line );
                            break;
                                        (int) lwidth(p), align(p));
                            putdot( filename , line );
                            break;
@@ -514,14 +547,14 @@ pcasgconf(r, p)
 
        if (r == (ASG_NODE *) TR_NIL || p == NLNIL)
                return NLNIL;
 
        if (r == (ASG_NODE *) TR_NIL || p == NLNIL)
                return NLNIL;
-       putleaf( P2ICON , 0 , 0 , ADDTYPE( P2FTN | P2INT , P2PTR) , "_blkcpy" );
+       putleaf( PCC_ICON , 0 , 0 , PCCM_ADDTYPE( PCCTM_FTN | PCCT_INT , PCCTM_PTR) , "_blkcpy" );
        p1 = rvalue( r->rhs_expr , p , LREQ );
        if (p1 == NLNIL)
                return NLNIL;
        p = lvalue( r->lhs_var , MOD|ASGN|NOUSE , LREQ );
        if (p == NLNIL)
                return NLNIL;
        p1 = rvalue( r->rhs_expr , p , LREQ );
        if (p1 == NLNIL)
                return NLNIL;
        p = lvalue( r->lhs_var , MOD|ASGN|NOUSE , LREQ );
        if (p == NLNIL)
                return NLNIL;
-       putop(P2LISTOP, P2INT);
+       putop(PCC_CM, PCCT_INT);
                /* upper bound */
        p1 = p->chain->nptr[1];
        putRV(p1->symbol, (p1->nl_block & 037), p1->value[0],
                /* upper bound */
        p1 = p->chain->nptr[1];
        putRV(p1->symbol, (p1->nl_block & 037), p1->value[0],
@@ -530,17 +563,17 @@ pcasgconf(r, p)
        p1 = p->chain->nptr[0];
        putRV(p1->symbol, (p1->nl_block & 037), p1->value[0],
            p1->extra_flags, p2type( p1 ) );
        p1 = p->chain->nptr[0];
        putRV(p1->symbol, (p1->nl_block & 037), p1->value[0],
            p1->extra_flags, p2type( p1 ) );
-       putop( P2MINUS, P2INT );
+       putop( PCC_MINUS, PCCT_INT );
                /* add one */
                /* add one */
-       putleaf(P2ICON, 1, 0, P2INT, 0);
-       putop( P2PLUS, P2INT );
+       putleaf(PCC_ICON, 1, 0, PCCT_INT, 0);
+       putop( PCC_PLUS, PCCT_INT );
                /* and multiply by the width */
        p1 = p->chain->nptr[2];
        putRV(p1->symbol, (p1->nl_block & 037), p1->value[0],
            p1->extra_flags, p2type( p1 ) );
                /* and multiply by the width */
        p1 = p->chain->nptr[2];
        putRV(p1->symbol, (p1->nl_block & 037), p1->value[0],
            p1->extra_flags, p2type( p1 ) );
-       putop( P2MUL , P2INT );
-       putop(P2LISTOP, P2INT);
-       putop(P2CALL, P2INT);
+       putop( PCC_MUL , PCCT_INT );
+       putop(PCC_CM, PCCT_INT);
+       putop(PCC_CALL, PCCT_INT);
        putdot( filename , line);
        return p;
 }
        putdot( filename , line);
        return p;
 }
@@ -580,8 +613,8 @@ ifop(if_n)
 #      endif OBJ
 #      ifdef PC
            l1 = (int) getlab();
 #      endif OBJ
 #      ifdef PC
            l1 = (int) getlab();
-           putleaf( P2ICON , l1 , 0 , P2INT , (char *) 0 );
-           putop( P2CBRANCH , P2INT );
+           putleaf( PCC_ICON , l1 , 0 , PCCT_INT , (char *) 0 );
+           putop( PCC_CBRANCH , PCCT_INT );
            putdot( filename , line );
 #      endif PC
        putcnt();
            putdot( filename , line );
 #      endif PC
        putcnt();
@@ -644,8 +677,8 @@ whilop(w_node)
            (void) put(2, O_IF, l2);
 #      endif OBJ
 #      ifdef PC
            (void) put(2, O_IF, l2);
 #      endif OBJ
 #      ifdef PC
-           putleaf( P2ICON , (int) l2 , 0 , P2INT , (char *) 0 );
-           putop( P2CBRANCH , P2INT );
+           putleaf( PCC_ICON , (int) l2 , 0 , PCCT_INT , (char *) 0 );
+           putop( PCC_CBRANCH , PCCT_INT );
            putdot( filename , line );
 #      endif PC
        putcnt();
            putdot( filename , line );
 #      endif PC
        putcnt();
@@ -687,8 +720,8 @@ repop(r)
            (void) put(2, O_IF, l);
 #      endif OBJ
 #      ifdef PC
            (void) put(2, O_IF, l);
 #      endif OBJ
 #      ifdef PC
-           putleaf( P2ICON , l , 0 , P2INT , (char *) 0 );
-           putop( P2CBRANCH , P2INT );
+           putleaf( PCC_ICON , l , 0 , PCCT_INT , (char *) 0 );
+           putop( PCC_CBRANCH , PCCT_INT );
            putdot( filename , line );
 #      endif PC
        if (goc != gocnt)
            putdot( filename , line );
 #      endif PC
        if (goc != gocnt)