AddSym:
PUBLIC PROC[symName:
ROPE, addIfNew:
BOOL ←
TRUE]
RETURNS[symbol: Symbol] = {
found: BOOL;
val: RefTab.Val;
symb: ATOM ← Atom.MakeAtom[symName];
[found, val] ← RefTab.Fetch[symbolTable, symb];
IF found THEN symbol ← NARROW[val];
IF found OR ~addIfNew THEN RETURN[symbol];
symbol ← NEW[SymbolRec ← [atm: symb, name: symName]];
[] ← RefTab.Store[symbolTable, symb, symbol]; -- add to table
};
SearchSymbolTable:
PUBLIC PROC[proc: MDUtils.SearchTableProc] = {
LookAt: RefTab.EachPairAction = {
sym: Symbol ← NARROW[val];
quit ← proc[sym];
};
[] ← RefTab.Pairs[symbolTable, LookAt];
};