1: /*
2: * Copyright (c) 1980 Regents of the University of California.
3: * All rights reserved. The Berkeley software License Agreement
4: * specifies the terms and conditions for redistribution.
5: */
6:
7: #ifndef lint
8: static char sccsid[] = "@(#)lookup.c 5.1 (Berkeley) 6/5/85";
9: #endif not lint
10:
11: #include "whoami.h"
12: #include "0.h"
13:
14: struct nl *disptab[077+1];
15:
16: /*
17: * Lookup is called to
18: * find a symbol in the
19: * block structure symbol
20: * table and returns a pointer to
21: * its namelist entry.
22: */
23: struct nl *
24: lookup(s)
25: register char *s;
26: {
27: register struct nl *p;
28: register struct udinfo;
29:
30: if (s == NIL) {
31: nocascade();
32: return (NLNIL);
33: }
34: p = lookup1(s);
35: if (p == NLNIL) {
36: derror("%s is undefined", s);
37: return (NLNIL);
38: }
39: if (p->class == FVAR) {
40: p = p->chain;
41: bn--;
42: }
43: return (p);
44: }
45:
46: #ifndef PI0
47: int flagwas;
48: #endif
49: /*
50: * Lookup1 is an internal lookup.
51: * It is not an error to call lookup1
52: * if the symbol is not defined. Also
53: * lookup1 will return FVARs while
54: * lookup never will, thus asgnop
55: * calls it when it thinks you are
56: * assigning to the function variable.
57: */
58:
59: struct nl *
60: lookup1(s)
61: register char *s;
62: {
63: register struct nl *p;
64: #ifndef PI0
65: register struct nl *q;
66: #endif
67: register int i;
68:
69: if (s == NIL)
70: return (NLNIL);
71: bn = cbn;
72: #ifndef PI0
73: /*
74: * We first check the field names
75: * of the currently active with
76: * statements (expensive since they
77: * are not hashed).
78: */
79: for (p = withlist; p != NLNIL; p = p->nl_next) {
80: q = p->type;
81: if (q == NLNIL)
82: continue;
83: if (reclook(q, s) != NIL)
84: /*
85: * Return the WITHPTR, lvalue understands.
86: */
87: return (p);
88: }
89: #endif
90: /*
91: * Symbol table is a 64 way hash
92: * on the low bits of the character
93: * pointer value. (Simple, but effective)
94: */
95: i = (int) s & 077;
96: for (p = disptab[i]; p != NLNIL; p = p->nl_next)
97: if (p->symbol == s && p->class != FIELD && p->class != BADUSE) {
98: bn = (p->nl_block & 037);
99: #ifndef PI0
100: flagwas = p->nl_flags;
101: p->nl_flags |= NUSED;
102: #endif
103: return (p);
104: }
105: return (NLNIL);
106: }
107:
108: #ifndef PI01
109: nlfund(sp)
110: char *sp;
111: {
112: register struct nl *p;
113: register int i;
114:
115: i = (int) sp & 077;
116: for (p = disptab[i]; p != NLNIL; p = p->nl_next)
117: if (p->symbol == sp && (p->nl_block & 037) == 0)
118: return (nloff(p));
119: return (0);
120: }
121: #endif
Defined functions
lookup
defined in line
23; used 21 times
Defined variables
sccsid
defined in line
8;
never used