public MalType Get(MalSymbol key) { if (DictHasSymbol(key)) { return(_dict[key]); } if (_outer != null) { return(_outer.Get(key)); } return(null); }
public MalType Apply(MalSymbol firstItem, MalList <MalType> restItems) { if (FuncsHasSymbol(firstItem)) { return(_funcs[firstItem](restItems)); } if (_outer != null) { return(_outer.Apply(firstItem, restItems)); } return(null); }
internal MalType GetSymbol(MalSymbol symbol) { if (DictHasSymbol(symbol)) { return(_dict[symbol]); } if (FuncsHasSymbol(symbol)) { return(symbol); } if (_outer != null && _outer.HasSymbol(symbol)) { return(_outer.GetSymbol(symbol)); } throw new SymbolNotFoundException("attempted to Environment with invalid symbol", null); }
internal bool FuncsHasSymbol(MalSymbol symbol) { return(_funcs.ContainsKey(symbol)); }
internal bool DictHasSymbol(MalSymbol symbol) { return(_dict.ContainsKey(symbol)); }
internal bool HasSymbol(MalSymbol symbol) { return(DictHasSymbol(symbol) || FuncsHasSymbol(symbol) || (_outer != null && _outer.HasSymbol(symbol))); }
public MalType Set(MalSymbol key, MalType value) { _dict[key] = value; return(value); }