-- JunoLookupImpl.mesa
-- August 31, 1983 4:03 pm
-- Last Edited by: Gnelson, December 10, 1983 5:35 pm

DIRECTORY JunoSyntax, JunoLookup, ParseWindow; 

JunoLookupImpl: PROGRAM 
  IMPORTS JunoSyntax 
  EXPORTS JunoLookup = 

{OPEN JS: JunoSyntax;

GetFunDef: PUBLIC PROC [name: JS.FunName, defs: REF] 
  RETURNS [JS.FunDef] = 
  {l: LIST OF ParseWindow.NodeContent ← NARROW[defs, ParseWindow.Handle].content;
   WHILE l # NIL AND (l.first.tree = NIL OR NOT(IsFunDefOf[name, l.first.tree]))
     DO l ← l.rest ENDLOOP;
   IF l = NIL THEN RETURN [NIL] ELSE RETURN [l.first.tree]};

GetPredDef: PUBLIC PROC [name: JS.PredName, defs: REF] 
  RETURNS [JS.PredDef] = 
  {l: LIST OF ParseWindow.NodeContent ← NARROW[defs, ParseWindow.Handle].content;
   WHILE l # NIL AND (l.first.tree = NIL OR NOT(IsPredDefOf[name, l.first.tree]))
     DO l ← l.rest ENDLOOP;
   IF l = NIL THEN RETURN [NIL] ELSE RETURN [l.first.tree]};

GetProcDef: PUBLIC PROC[name: JS.ProcName, defs: REF] 
  RETURNS [JS.ProcDef] = 
  {l: LIST OF ParseWindow.NodeContent ← NARROW[defs, ParseWindow.Handle].content;
   WHILE l # NIL AND (l.first.tree = NIL OR NOT(IsProcDefOf[name, l.first.tree]))
     DO l ← l.rest ENDLOOP;
   IF l = NIL THEN RETURN [NIL] ELSE RETURN [l.first.tree]};

IsFunDefOf: PROC[name: JS.FunName, tree: REF] 
  RETURNS [BOOLEAN] =
  {RETURN [JS.IsFunDef[tree] AND name = JS.FunOfFunDef[tree]]};

IsPredDefOf: PROC[name: JS.FunName, tree: REF] 
  RETURNS [BOOLEAN] =
  {RETURN [JS.IsPredDef[tree] AND name = JS.PredOfPredDef[tree]]};

IsProcDefOf: PROC[name: JS.FunName, tree: REF] 
  RETURNS [BOOLEAN] =
  {RETURN [JS.IsProcDef[tree] AND name = JS.ProcOfProcDef[tree]]};

}.