Annotation of 42BSD/ucb/pascal/pdx/tree/tr_equal.c, revision 1.1.1.1

1.1       root        1: /* Copyright (c) 1982 Regents of the University of California */
                      2: 
                      3: static char sccsid[] = "@(#)tr_equal.c 1.1 1/18/82";
                      4: 
                      5: /*
                      6:  * A recursive tree search routine to test if two trees
                      7:  * are structurally equivalent.
                      8:  */
                      9: 
                     10: #include "defs.h"
                     11: #include "tree.h"
                     12: #include "tree.rep"
                     13: 
                     14: BOOLEAN tr_equal(t1, t2)
                     15: register NODE *t1;
                     16: register NODE *t2;
                     17: {
                     18:        if (t1 == NIL && t2 == NIL) {
                     19:                return(TRUE);
                     20:        }
                     21:        if (t1 == NIL || t2 == NIL) {
                     22:                return(FALSE);
                     23:        }
                     24:        if (t1->op != t2->op || degree(t1->op) != degree(t2->op)) {
                     25:                return(FALSE);
                     26:        }
                     27:        switch(degree(t1->op)) {
                     28:                case LEAF:
                     29:                        switch(t1->op) {
                     30:                                case O_NAME:
                     31:                                        return(t1->nameval == t2->nameval);
                     32: 
                     33:                                case O_QNAME:
                     34:                                        if (!tr_equal(t1->right, t2->right)) {
                     35:                                                return(FALSE);
                     36:                                        }
                     37:                                        return(tr_equal(t1->left, t2->left));
                     38: 
                     39:                                case O_LCON:
                     40:                                        return(t1->lconval == t2->lconval);
                     41: 
                     42:                                case O_FCON:
                     43:                                        return(t1->fconval == t2->fconval);
                     44: 
                     45:                                case O_SCON:
                     46:                                        return(t1->sconval == t2->sconval);
                     47: 
                     48:                                default:
                     49:                                        panic("tr_equal: leaf %d\n", t1->op);
                     50:                        }
                     51:                        /*NOTREACHED*/
                     52: 
                     53:                case BINARY:
                     54:                        if (!tr_equal(t1->right, t2->right)) {
                     55:                                return(FALSE);
                     56:                        }
                     57:                        /* else fall through */
                     58:                case UNARY:
                     59:                        return(tr_equal(t1->left, t2->left));
                     60: 
                     61:                default:
                     62:                        panic("tr_equal: bad degree for op %d\n", t1->op);
                     63:        }
                     64:        /*NOTREACHED*/
                     65: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.