public bool TryDeclareProcedure(ProcedureDeclaration declaration, out ProcedureInfo procedure) { if (TryGetProcedure(declaration.Identifier.Text, out procedure)) { return(false); } var p = new ProcedureInfo(); p.Declaration = declaration; p.Index = declaration.Index == null ? ( short )Procedures.Count : ( short )declaration.Index.Value; Debug.Assert(Procedures.All(x => x.Value.Index != p.Index), "Same procedure index used by multiple procedures"); Procedures[declaration.Identifier.Text] = procedure = p; return(true); }
public bool TryGetProcedure(string name, out ProcedureInfo procedure) { if (!Procedures.TryGetValue(name, out procedure)) { if (Parent == null) { return(false); } if (!Parent.TryGetProcedure(name, out procedure)) { return(false); } } return(true); }
public bool TryDeclareProcedure(ProcedureDeclaration declaration, Procedure compiled, out ProcedureInfo procedure) { if (!TryDeclareProcedure(declaration, out procedure)) { return(false); } procedure.Compiled = compiled; procedure.OriginalCompiled = compiled.Clone(); return(true); }